* [PATCH] PCI: Disable MSI for ULi M1575 EHCI controller
@ 2026-09-30 19:10 Imre Kaloz
2026-10-01 18:18 ` Andy Shevchenko
2026-10-01 18:43 ` Bjorn Helgaas
0 siblings, 2 replies; 3+ messages in thread
From: Imre Kaloz @ 2026-09-30 19:10 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, linux-usb, Greg Kroah-Hartman, stable, Andy Shevchenko
With MSI, the ULi M1575 EHCI controller (10b9:5239) intermittently stops
executing its asynchronous schedule. Control transfers time out ("device
not accepting address", "device descriptor read/64"), the port is handed
to the companion OHCI controller and the device ends up at full speed. On
a configured hub the stall shows up as hub descriptor and status read
failures. Only re-initializing the controller recovers it.
On a Sun Ultra 45, 65 of 800 controller initializations stalled with MSI
and none of 200 with INTx. Each initialization is an unbind and bind of
ehci-pci on the EHCI function, with MSI or INTx selected through its
msi_bus attribute; with this quirk, 0 of 100 cycles of the same loop
stalled. The stall reproduces on a kernel that already contains
commit 0b60557230ad ("usb: ehci: Prevent missed ehci interrupts with
edge-triggered MSI").
The OHCI functions (10b9:5237) keep MSI. They showed no stall, and the
hub enumerated through them on MSI during the EHCI failures, so only the
EHCI function is quirked.
The illumos EHCI driver also disables MSI on this chip, in
ehci_register_intrs_and_init_mutex() in
usr/src/uts/common/io/usb/hcd/ehci/ehci_util.c.
Until USB HCDs started trying MSI first in v5.9, the controller always
used INTx. Disable MSI so it uses INTx again on this chipset.
Fixes: 306c54d0edb6 ("usb: hcd: Try MSI interrupts on PCI devices")
Cc: stable@vger.kernel.org
Signed-off-by: Imre Kaloz <kaloz@kernel.org>
---
Notes:
lspci -nnv of the EHCI function on the Ultra 45, taken with this quirk
active, so MSI shows Enable-:
0000:05:1c.3 USB controller [0c03]: ULi Electronics Inc. USB 2.0 Controller [10b9:5239] (rev 01) (prog-if 20 [EHCI])
Subsystem: ULi Electronics Inc. Device [10b9:5238]
Device tree node: /sys/firmware/devicetree/base/pci@1e,600000/pci@0/pci@1/pci@0/usb@1c,3
Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 00000006
Memory at 00206000 (32-bit, non-prefetchable) [size=8K]
Capabilities: [50] Power Management version 2
Capabilities: [58] Debug port: BAR=1 offset=0090
Capabilities: [78] MSI: Enable- Count=1/1 Maskable- 64bit-
Kernel driver in use: ehci-pci
Kernel modules: ehci_pci
drivers/pci/quirks.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index de9bbccda21f..9fb530a08fda 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -1941,6 +1941,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4388, quirk_no_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4389, quirk_no_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x438a, quirk_no_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x438b, quirk_no_msi);
+/* ULi M1575 EHCI (10b9:5239): MSI stalls the async schedule */
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x5239, quirk_no_msi);
static void quirk_pcie_mch(struct pci_dev *pdev)
{
base-commit: fe2ec83746e501645709761605c2464a44fd2929
--
2.47.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] PCI: Disable MSI for ULi M1575 EHCI controller
2026-09-30 19:10 [PATCH] PCI: Disable MSI for ULi M1575 EHCI controller Imre Kaloz
@ 2026-10-01 18:18 ` Andy Shevchenko
2026-10-01 18:43 ` Bjorn Helgaas
1 sibling, 0 replies; 3+ messages in thread
From: Andy Shevchenko @ 2026-10-01 18:18 UTC (permalink / raw)
To: Imre Kaloz
Cc: Bjorn Helgaas, linux-pci, linux-usb, Greg Kroah-Hartman, stable
On Wed, Sep 30, 2026 at 09:10:58PM +0200, Imre Kaloz wrote:
> With MSI, the ULi M1575 EHCI controller (10b9:5239) intermittently stops
> executing its asynchronous schedule. Control transfers time out ("device
> not accepting address", "device descriptor read/64"), the port is handed
> to the companion OHCI controller and the device ends up at full speed. On
> a configured hub the stall shows up as hub descriptor and status read
> failures. Only re-initializing the controller recovers it.
>
> On a Sun Ultra 45, 65 of 800 controller initializations stalled with MSI
> and none of 200 with INTx. Each initialization is an unbind and bind of
> ehci-pci on the EHCI function, with MSI or INTx selected through its
> msi_bus attribute; with this quirk, 0 of 100 cycles of the same loop
> stalled. The stall reproduces on a kernel that already contains
> commit 0b60557230ad ("usb: ehci: Prevent missed ehci interrupts with
> edge-triggered MSI").
>
> The OHCI functions (10b9:5237) keep MSI. They showed no stall, and the
> hub enumerated through them on MSI during the EHCI failures, so only the
> EHCI function is quirked.
>
> The illumos EHCI driver also disables MSI on this chip, in
> ehci_register_intrs_and_init_mutex() in
> usr/src/uts/common/io/usb/hcd/ehci/ehci_util.c.
>
> Until USB HCDs started trying MSI first in v5.9, the controller always
> used INTx. Disable MSI so it uses INTx again on this chipset.
Since it's tested on real HW, the quirk makes sense.
Thanks for report and the fix!
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] PCI: Disable MSI for ULi M1575 EHCI controller
2026-09-30 19:10 [PATCH] PCI: Disable MSI for ULi M1575 EHCI controller Imre Kaloz
2026-10-01 18:18 ` Andy Shevchenko
@ 2026-10-01 18:43 ` Bjorn Helgaas
1 sibling, 0 replies; 3+ messages in thread
From: Bjorn Helgaas @ 2026-10-01 18:43 UTC (permalink / raw)
To: Imre Kaloz
Cc: Bjorn Helgaas, linux-pci, linux-usb, Greg Kroah-Hartman, stable,
Andy Shevchenko
On Wed, Sep 30, 2026 at 09:10:58PM +0200, Imre Kaloz wrote:
> With MSI, the ULi M1575 EHCI controller (10b9:5239) intermittently stops
> executing its asynchronous schedule. Control transfers time out ("device
> not accepting address", "device descriptor read/64"), the port is handed
> to the companion OHCI controller and the device ends up at full speed. On
> a configured hub the stall shows up as hub descriptor and status read
> failures. Only re-initializing the controller recovers it.
>
> On a Sun Ultra 45, 65 of 800 controller initializations stalled with MSI
> and none of 200 with INTx. Each initialization is an unbind and bind of
> ehci-pci on the EHCI function, with MSI or INTx selected through its
> msi_bus attribute; with this quirk, 0 of 100 cycles of the same loop
> stalled. The stall reproduces on a kernel that already contains
> commit 0b60557230ad ("usb: ehci: Prevent missed ehci interrupts with
> edge-triggered MSI").
>
> The OHCI functions (10b9:5237) keep MSI. They showed no stall, and the
> hub enumerated through them on MSI during the EHCI failures, so only the
> EHCI function is quirked.
>
> The illumos EHCI driver also disables MSI on this chip, in
> ehci_register_intrs_and_init_mutex() in
> usr/src/uts/common/io/usb/hcd/ehci/ehci_util.c.
>
> Until USB HCDs started trying MSI first in v5.9, the controller always
> used INTx. Disable MSI so it uses INTx again on this chipset.
>
> Fixes: 306c54d0edb6 ("usb: hcd: Try MSI interrupts on PCI devices")
> Cc: stable@vger.kernel.org
> Signed-off-by: Imre Kaloz <kaloz@kernel.org>
Applied to pci/misc for v7.4, thanks!
> ---
>
> Notes:
> lspci -nnv of the EHCI function on the Ultra 45, taken with this quirk
> active, so MSI shows Enable-:
>
> 0000:05:1c.3 USB controller [0c03]: ULi Electronics Inc. USB 2.0 Controller [10b9:5239] (rev 01) (prog-if 20 [EHCI])
> Subsystem: ULi Electronics Inc. Device [10b9:5238]
> Device tree node: /sys/firmware/devicetree/base/pci@1e,600000/pci@0/pci@1/pci@0/usb@1c,3
> Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 00000006
> Memory at 00206000 (32-bit, non-prefetchable) [size=8K]
> Capabilities: [50] Power Management version 2
> Capabilities: [58] Debug port: BAR=1 offset=0090
> Capabilities: [78] MSI: Enable- Count=1/1 Maskable- 64bit-
> Kernel driver in use: ehci-pci
> Kernel modules: ehci_pci
>
> drivers/pci/quirks.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index de9bbccda21f..9fb530a08fda 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -1941,6 +1941,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4388, quirk_no_msi);
> DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4389, quirk_no_msi);
> DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x438a, quirk_no_msi);
> DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x438b, quirk_no_msi);
> +/* ULi M1575 EHCI (10b9:5239): MSI stalls the async schedule */
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x5239, quirk_no_msi);
>
> static void quirk_pcie_mch(struct pci_dev *pdev)
> {
>
> base-commit: fe2ec83746e501645709761605c2464a44fd2929
> --
> 2.47.3
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-01 18:43 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-30 19:10 [PATCH] PCI: Disable MSI for ULi M1575 EHCI controller Imre Kaloz
2026-10-01 18:18 ` Andy Shevchenko
2026-10-01 18:43 ` Bjorn Helgaas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox