drivers/usb/host/pci-quirks.c | 4 ++++ include/linux/pci_ids.h | 1 + 2 files changed, 5 insertions(+)
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@vger.kernel.org
Signed-off-by: Baoqi Zhang <zhangbaoqi@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
drivers/usb/host/pci-quirks.c | 4 ++++
include/linux/pci_ids.h | 1 +
2 files changed, 5 insertions(+)
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index 1f9c1b1435d8..7e3151400a5e 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -958,6 +958,10 @@ 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);
+ if (pdev->vendor == PCI_VENDOR_ID_LOONGSON &&
+ pdev->device == PCI_DEVICE_ID_LOONGSON_EHCI)
+ hcc_params &= ~(0xffL << 8);
+
offset = (hcc_params >> 8) & 0xff;
while (offset && --count) {
pci_read_config_dword(pdev, offset, &cap);
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index de5deb1a0118..74a84834d9eb 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -162,6 +162,7 @@
#define PCI_VENDOR_ID_LOONGSON 0x0014
+#define PCI_DEVICE_ID_LOONGSON_EHCI 0x7a14
#define PCI_DEVICE_ID_LOONGSON_HDA 0x7a07
#define PCI_DEVICE_ID_LOONGSON_HDMI 0x7a37
--
2.47.1
On Fri, Jan 31, 2025 at 06:06:51PM +0800, Huacai Chen wrote:
> 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@vger.kernel.org
> Signed-off-by: Baoqi Zhang <zhangbaoqi@loongson.cn>
> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
> ---
> drivers/usb/host/pci-quirks.c | 4 ++++
> include/linux/pci_ids.h | 1 +
> 2 files changed, 5 insertions(+)
>
> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> index 1f9c1b1435d8..7e3151400a5e 100644
> --- a/drivers/usb/host/pci-quirks.c
> +++ b/drivers/usb/host/pci-quirks.c
> @@ -958,6 +958,10 @@ 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);
> + if (pdev->vendor == PCI_VENDOR_ID_LOONGSON &&
> + pdev->device == PCI_DEVICE_ID_LOONGSON_EHCI)
> + hcc_params &= ~(0xffL << 8);
Can you please add a comment before this "if" statement explaining why
it is necessary?
Alan Stern
> +
> offset = (hcc_params >> 8) & 0xff;
> while (offset && --count) {
> pci_read_config_dword(pdev, offset, &cap);
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index de5deb1a0118..74a84834d9eb 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -162,6 +162,7 @@
>
> #define PCI_VENDOR_ID_LOONGSON 0x0014
>
> +#define PCI_DEVICE_ID_LOONGSON_EHCI 0x7a14
> #define PCI_DEVICE_ID_LOONGSON_HDA 0x7a07
> #define PCI_DEVICE_ID_LOONGSON_HDMI 0x7a37
>
> --
> 2.47.1
>
Hi, Alan,
On Fri, Jan 31, 2025 at 11:18 PM Alan Stern <stern@rowland.harvard.edu> wrote:
>
> On Fri, Jan 31, 2025 at 06:06:51PM +0800, Huacai Chen wrote:
> > 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@vger.kernel.org
> > Signed-off-by: Baoqi Zhang <zhangbaoqi@loongson.cn>
> > Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
> > ---
> > drivers/usb/host/pci-quirks.c | 4 ++++
> > include/linux/pci_ids.h | 1 +
> > 2 files changed, 5 insertions(+)
> >
> > diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> > index 1f9c1b1435d8..7e3151400a5e 100644
> > --- a/drivers/usb/host/pci-quirks.c
> > +++ b/drivers/usb/host/pci-quirks.c
> > @@ -958,6 +958,10 @@ 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);
> > + if (pdev->vendor == PCI_VENDOR_ID_LOONGSON &&
> > + pdev->device == PCI_DEVICE_ID_LOONGSON_EHCI)
> > + hcc_params &= ~(0xffL << 8);
>
> Can you please add a comment before this "if" statement explaining why
> it is necessary?
OK, will do in next version.
Huacai
>
> Alan Stern
>
> > +
> > offset = (hcc_params >> 8) & 0xff;
> > while (offset && --count) {
> > pci_read_config_dword(pdev, offset, &cap);
> > diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> > index de5deb1a0118..74a84834d9eb 100644
> > --- a/include/linux/pci_ids.h
> > +++ b/include/linux/pci_ids.h
> > @@ -162,6 +162,7 @@
> >
> > #define PCI_VENDOR_ID_LOONGSON 0x0014
> >
> > +#define PCI_DEVICE_ID_LOONGSON_EHCI 0x7a14
> > #define PCI_DEVICE_ID_LOONGSON_HDA 0x7a07
> > #define PCI_DEVICE_ID_LOONGSON_HDMI 0x7a37
> >
> > --
> > 2.47.1
> >
On Fri, Jan 31, 2025 at 06:06:51PM +0800, Huacai Chen wrote:
> 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@vger.kernel.org
> Signed-off-by: Baoqi Zhang <zhangbaoqi@loongson.cn>
> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
> ---
> drivers/usb/host/pci-quirks.c | 4 ++++
> include/linux/pci_ids.h | 1 +
> 2 files changed, 5 insertions(+)
>
> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> index 1f9c1b1435d8..7e3151400a5e 100644
> --- a/drivers/usb/host/pci-quirks.c
> +++ b/drivers/usb/host/pci-quirks.c
> @@ -958,6 +958,10 @@ 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);
> + if (pdev->vendor == PCI_VENDOR_ID_LOONGSON &&
> + pdev->device == PCI_DEVICE_ID_LOONGSON_EHCI)
> + hcc_params &= ~(0xffL << 8);
> +
> offset = (hcc_params >> 8) & 0xff;
> while (offset && --count) {
> pci_read_config_dword(pdev, offset, &cap);
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index de5deb1a0118..74a84834d9eb 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -162,6 +162,7 @@
>
> #define PCI_VENDOR_ID_LOONGSON 0x0014
>
> +#define PCI_DEVICE_ID_LOONGSON_EHCI 0x7a14
If you read the top of this file, does this patch meet the requirement
to add this entry here to this file?
thanks,
greg k-h
Hi, Greg,
On Fri, Jan 31, 2025 at 6:48 PM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> On Fri, Jan 31, 2025 at 06:06:51PM +0800, Huacai Chen wrote:
> > 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@vger.kernel.org
> > Signed-off-by: Baoqi Zhang <zhangbaoqi@loongson.cn>
> > Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
> > ---
> > drivers/usb/host/pci-quirks.c | 4 ++++
> > include/linux/pci_ids.h | 1 +
> > 2 files changed, 5 insertions(+)
> >
> > diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> > index 1f9c1b1435d8..7e3151400a5e 100644
> > --- a/drivers/usb/host/pci-quirks.c
> > +++ b/drivers/usb/host/pci-quirks.c
> > @@ -958,6 +958,10 @@ 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);
> > + if (pdev->vendor == PCI_VENDOR_ID_LOONGSON &&
> > + pdev->device == PCI_DEVICE_ID_LOONGSON_EHCI)
> > + hcc_params &= ~(0xffL << 8);
> > +
> > offset = (hcc_params >> 8) & 0xff;
> > while (offset && --count) {
> > pci_read_config_dword(pdev, offset, &cap);
> > diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> > index de5deb1a0118..74a84834d9eb 100644
> > --- a/include/linux/pci_ids.h
> > +++ b/include/linux/pci_ids.h
> > @@ -162,6 +162,7 @@
> >
> > #define PCI_VENDOR_ID_LOONGSON 0x0014
> >
> > +#define PCI_DEVICE_ID_LOONGSON_EHCI 0x7a14
>
> If you read the top of this file, does this patch meet the requirement
> to add this entry here to this file?
Emmm, the device id is also used in
drivers/pci/controller/pci-loongson.c, but uses another code style so
it is not suitable to share the definition. Maybe the best solution is
use 0x7a14 directly.
Huacai
>
> thanks,
>
> greg k-h
© 2016 - 2026 Red Hat, Inc.