]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
USB: pci-quirks: Fix HCCPARAMS register error for LS7A EHCI
authorHuacai Chen <chenhuacai@loongson.cn>
Sun, 2 Feb 2025 12:49:35 +0000 (20:49 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Feb 2025 13:01:30 +0000 (14:01 +0100)
commit e71f7f42e3c874ac3314b8f250e8416a706165af upstream.

LS7A EHCI controller doesn't have extended capabilities, so the EECP
(EHCI Extended Capabilities Pointer) field of HCCPARAMS register should
be 0x0, but it reads as 0xa0 now. This is a hardware flaw and will be
fixed in future, now just clear the EECP field to avoid error messages
on boot:

......
[    0.581675] pci 0000:00:04.1: EHCI: unrecognized capability ff
[    0.581699] pci 0000:00:04.1: EHCI: unrecognized capability ff
[    0.581716] pci 0000:00:04.1: EHCI: unrecognized capability ff
[    0.581851] pci 0000:00:04.1: EHCI: unrecognized capability ff
......
[    0.581916] pci 0000:00:05.1: EHCI: unrecognized capability ff
[    0.581951] pci 0000:00:05.1: EHCI: unrecognized capability ff
[    0.582704] pci 0000:00:05.1: EHCI: unrecognized capability ff
[    0.582799] pci 0000:00:05.1: EHCI: unrecognized capability ff
......

Cc: stable <stable@kernel.org>
Signed-off-by: Baoqi Zhang <zhangbaoqi@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Link: https://lore.kernel.org/r/20250202124935.480500-1-chenhuacai@loongson.cn
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/pci-quirks.c

index 1f9c1b1435d862895b3c3bee40760d4ceccf0a3e..0404489c2f6a9cd40faa46da151b1f65d0319c80 100644 (file)
@@ -958,6 +958,15 @@ static void quirk_usb_disable_ehci(struct pci_dev *pdev)
         * booting from USB disk or using a usb keyboard
         */
        hcc_params = readl(base + EHCI_HCC_PARAMS);
+
+       /* LS7A EHCI controller doesn't have extended capabilities, the
+        * EECP (EHCI Extended Capabilities Pointer) field of HCCPARAMS
+        * register should be 0x0 but it reads as 0xa0.  So clear it to
+        * avoid error messages on boot.
+        */
+       if (pdev->vendor == PCI_VENDOR_ID_LOONGSON && pdev->device == 0x7a14)
+               hcc_params &= ~(0xffL << 8);
+
        offset = (hcc_params >> 8) & 0xff;
        while (offset && --count) {
                pci_read_config_dword(pdev, offset, &cap);