--- a/dev/pci/azalia.c +++ b/dev/pci/azalia.c @@ -492,7 +492,7 @@ azalia_t *sc; struct pci_attach_args *pa; pcireg_t v; - uint8_t reg; + // uint8_t reg; pci_intr_handle_t ih; const char *interrupt_str; @@ -518,12 +518,18 @@ azalia_configure_pci(sc); - /* disable MSI, use INTx instead */ - if (PCI_VENDOR(sc->pciid) == PCI_VENDOR_INTEL) { - reg = azalia_pci_read(sc->pc, sc->tag, ICH_PCI_MMC); - reg &= ~(ICH_PCI_MMC_ME); - azalia_pci_write(sc->pc, sc->tag, ICH_PCI_MMC, reg); - } + // This was added in CVS rev 1.168 because certain devices do not + // support MSIs. For reasons that are not clear yet, this breaks + // when using the platform_drv on x86 with MSI support and IOMMU + // enabled. All hw we tested seems to work fine when it is removed, + // even older kernels, e.g. OKL4, that use legacy IRQs, + // + // /* disable MSI, use INTx instead */ + // if (PCI_VENDOR(sc->pciid) == PCI_VENDOR_INTEL) { + // reg = azalia_pci_read(sc->pc, sc->tag, ICH_PCI_MMC); + // reg &= ~(ICH_PCI_MMC_ME); + // azalia_pci_write(sc->pc, sc->tag, ICH_PCI_MMC, reg); + // } /* disable MSI for AMD Summit Ridge/Raven Ridge HD Audio */ if (PCI_VENDOR(sc->pciid) == PCI_VENDOR_AMD) { @@ -3973,6 +3979,10 @@ azalia_set_blksz(void *v, int mode, struct audio_params *p, struct audio_params *r, unsigned int blksz) { + // XXX using mult leads to a blksz of 416 in case of a + // requested blksz of 441 which in return results in distored + // playback. +#if 0 int mult; /* must be multiple of 128 bytes */ @@ -3981,6 +3991,7 @@ blksz -= blksz % mult; if (blksz == 0) blksz = mult; +#endif return blksz; }