> Date: Fri, 19 Nov 2021 21:36:55 +0100
> From: Christopher Zimmermann <chr...@openbsd.org>
> 
> It is about MSI. After disabling MSI interrupts are delivered, albeit 
> the performance seems to be a bit poor (reading at a constant 8 MB/s on 
> a WD Red disk).
> 
> Here's the dmesg with patched kernel - notice the intx instead msi:
> ahci0 at pci1 dev 0 function 0 "JMicron JMB58x AHCI" rev 0x00: intx, AHCI 
> 1.3.1
> 
> Should I commit this quirk? Or might this break something on other 
> platforms?

Before we do this, we should establish whether this is a rkpcie(4)
problem or if that PCI device really has an issue with MSIs.

Is it possible for you to stick this card into another machine to
check whether MSIs fail there as well?

> Index: ahci_pci.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/ahci_pci.c,v
> retrieving revision 1.15
> diff -u -p -r1.15 ahci_pci.c
> --- ahci_pci.c        3 Aug 2018 22:18:13 -0000       1.15
> +++ ahci_pci.c        19 Nov 2021 20:28:16 -0000
> @@ -78,6 +78,8 @@ int                 ahci_intel_attach(struct ahci_soft
>                           struct pci_attach_args *);
>   int                 ahci_samsung_attach(struct ahci_softc *,
>                           struct pci_attach_args *);
> +int                  ahci_jmicron_attach(struct ahci_softc *,
> +                         struct pci_attach_args *);
>   
>   static const struct ahci_device ahci_devices[] = {
>       { PCI_VENDOR_AMD,       PCI_PRODUCT_AMD_HUDSON2_SATA_1,
> @@ -154,6 +156,9 @@ static const struct ahci_device ahci_dev
>       { PCI_VENDOR_SAMSUNG2,  PCI_PRODUCT_SAMSUNG2_SM951_AHCI,
>           NULL,               ahci_samsung_attach },
>   
> +     { PCI_VENDOR_JMICRON,   PCI_PRODUCT_JMICRON_JMB58x,
> +         NULL,               ahci_jmicron_attach },
> +
>       { PCI_VENDOR_VIATECH,   PCI_PRODUCT_VIATECH_VT8251_SATA,
>         ahci_no_match,        ahci_vt8251_attach }
>   };
> @@ -286,6 +291,18 @@ ahci_samsung_attach(struct ahci_softc *s
>        * as the XP941 SSD controller.
>        * https://bugzilla.kernel.org/show_bug.cgi?id=60731
>        * https://bugzilla.kernel.org/show_bug.cgi?id=89171
> +      */
> +     sc->sc_flags |= AHCI_F_NO_MSI;
> +
> +     return (0);
> +}
> +
> +int
> +ahci_jmicron_attach(struct ahci_softc *sc, struct pci_attach_args *pa)
> +{
> +     /*
> +      * Disable MSI on JMicron controller as it times out on at least
> +      * rkpcie(4)
>        */
>       sc->sc_flags |= AHCI_F_NO_MSI;
>   
> Index: pcidevs
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/pcidevs,v
> retrieving revision 1.1981
> diff -u -p -r1.1981 pcidevs
> --- pcidevs   31 Oct 2021 14:41:00 -0000      1.1981
> +++ pcidevs   19 Nov 2021 20:28:19 -0000
> @@ -6560,6 +6560,7 @@ product JMICRON JMB363          0x2363  JMB363 ID
>   product JMICRON JMB365              0x2365  JMB365 IDE/SATA
>   product JMICRON JMB366              0x2366  JMB366 IDE/SATA
>   product JMICRON JMB368              0x2368  JMB368 IDE
> +product JMICRON JMB58x               0x0585  JMB58x AHCI
>   product JMICRON FIREWIRE    0x2380  FireWire
>   product JMICRON SD          0x2381  SD Host Controller
>   product JMICRON SDMMC               0x2382  SD/MMC
> Index: pcidevs.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/pcidevs.h,v
> retrieving revision 1.1975
> diff -u -p -r1.1975 pcidevs.h
> --- pcidevs.h 31 Oct 2021 14:41:53 -0000      1.1975
> +++ pcidevs.h 19 Nov 2021 20:28:22 -0000
> @@ -6565,6 +6565,7 @@
>   #define     PCI_PRODUCT_JMICRON_JMB365      0x2365          /* JMB365 
> IDE/SATA */
>   #define     PCI_PRODUCT_JMICRON_JMB366      0x2366          /* JMB366 
> IDE/SATA */
>   #define     PCI_PRODUCT_JMICRON_JMB368      0x2368          /* JMB368 IDE */
> +#define      PCI_PRODUCT_JMICRON_JMB58x      0x0585          /* JMB58x AHCI 
> */
>   #define     PCI_PRODUCT_JMICRON_FIREWIRE    0x2380          /* FireWire */
>   #define     PCI_PRODUCT_JMICRON_SD  0x2381          /* SD Host Controller */
>   #define     PCI_PRODUCT_JMICRON_SDMMC       0x2382          /* SD/MMC */
> Index: pcidevs_data.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/pcidevs_data.h,v
> retrieving revision 1.1970
> diff -u -p -r1.1970 pcidevs_data.h
> --- pcidevs_data.h    31 Oct 2021 14:41:53 -0000      1.1970
> +++ pcidevs_data.h    19 Nov 2021 20:28:25 -0000
> @@ -23584,6 +23584,10 @@ static const struct pci_known_product pc
>           "JMB368 IDE",
>       },
>       {
> +         PCI_VENDOR_JMICRON, PCI_PRODUCT_JMICRON_JMB58x,
> +         "JMB58x AHCI",
> +     },
> +     {
>           PCI_VENDOR_JMICRON, PCI_PRODUCT_JMICRON_FIREWIRE,
>           "FireWire",
>       },
> 

Reply via email to