summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthfr <thfr@cvs.openbsd.org>2019-04-02 20:24:33 +0000
committerthfr <thfr@cvs.openbsd.org>2019-04-02 20:24:33 +0000
commit02350c053e7d3eb3e3b55d8c4faab4c22a4f2415 (patch)
treef5d4f51b1bc81b1acf28137613f8c83a68557f38
parent2c08315ccbabb07f75a15229acc1fd68b8e1384e (diff)
disable MSI for AMD Summit Ridge/Raven Ridge HD Audio as workaround for audio stopping after varying amounts of time. ok brynet@, deraadt@
-rw-r--r--sys/dev/pci/azalia.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/dev/pci/azalia.c b/sys/dev/pci/azalia.c
index 011a4a4247c..a42ad9fc638 100644
--- a/sys/dev/pci/azalia.c
+++ b/sys/dev/pci/azalia.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: azalia.c,v 1.245 2019/03/24 14:37:43 jcs Exp $ */
+/* $OpenBSD: azalia.c,v 1.246 2019/04/02 20:24:32 thfr Exp $ */
/* $NetBSD: azalia.c,v 1.20 2006/05/07 08:31:44 kent Exp $ */
/*-
@@ -517,6 +517,15 @@ azalia_pci_attach(struct device *parent, struct device *self, void *aux)
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) {
+ switch (PCI_PRODUCT(sc->pciid)) {
+ case PCI_PRODUCT_AMD_AMD64_17_HDA:
+ case PCI_PRODUCT_AMD_RAVENRIDGE_HDA:
+ pa->pa_flags &= ~PCI_FLAGS_MSI_ENABLED;
+ }
+ }
+
/* interrupt */
if (pci_intr_map_msi(pa, &ih) && pci_intr_map(pa, &ih)) {
printf(": can't map interrupt\n");