On Sun, Jul 08, 2018 at 12:15:39PM -0700, Thomas Frohwein wrote:
> Hi,
> 
> It appears that HD Audio from AMD's generation Ryzen can't handle MSI.
> This leads to the bug that I reported here:
> 
> https://marc.info/?l=openbsd-bugs&m=151648196215922&w=2
> 
> Disabling MSI resolves the problem on my current system which is a Raven
> Ridge APU. I don't have the Summit Ridge hardware anymore to test that
> it is also resolved there, but the line is included in the diff
> (PCI_PRODUCT_AMD_AMD64_17_HDA). It seems likely that this diff will also
> fix HD Audio on Summit Ridge. However, testing would be welcome by
> anyone who has a first-gen Ryzen.
> 
> I was slightly confused by the fact that so far it seems I've been the
> only one who reported this. Even searching online for such an issue in
> other OS didn't yield anything. However, the issue was there between 2
> different Ryzen CPUs, 3 different motherboards, and at least 2 separate
> OpenBSD -current installations. And it was never there on any
> Intel-based setup, with otherwise same hardware and OpenBSD install.
> While there have been several reports of people using Ryzen with
> OpenBSD, they may not have used audio (that's my explanation for this
> at the moment).
> 
> This diff was collaborative work with brynet@.
> 
> ok?

Does following the HUDSON2_HDA case and enabling pcie snooping
instead change anything?

> 
> Index: azalia.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/azalia.c,v
> retrieving revision 1.244
> diff -u -p -r1.244 azalia.c
> --- azalia.c  22 Apr 2018 10:02:13 -0000      1.244
> +++ azalia.c  7 Jul 2018 18:26:20 -0000
> @@ -517,6 +517,15 @@ azalia_pci_attach(struct device *parent,
>               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");
> 

Reply via email to