2021-04-08 07:08:35

by liulongfang

[permalink] [raw]
Subject: [PATCH] USB:ehci:fix ehci hardware problem

When rebooting the EHCI driver, ehci_shutdown() will be called.
if the sbrn flag is 0, ehci_shutdown() will return directly.

Our EHCI hardware does not define the SBRN register, which cause
its value to default to 0. The sbrn flag being 0 will cause the
EHCI interrupt signal to not be turned off after reboot. An interrupt
that is not closed will cause an exception to the device sharing
the interrupt.

Currently, our hardware has this problem. We hope to solve this
problem by skipping reading the sbrn register value. On the next
generation of hardware, we will define this SBRN register in accordance
with the controller standard.

Signed-off-by: Longfang Liu <[email protected]>
---
drivers/usb/host/ehci-pci.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
index 3c3820a..5dc6821 100644
--- a/drivers/usb/host/ehci-pci.c
+++ b/drivers/usb/host/ehci-pci.c
@@ -291,6 +291,8 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
if (pdev->vendor == PCI_VENDOR_ID_STMICRO
&& pdev->device == PCI_DEVICE_ID_STMICRO_USB_HOST)
; /* ConneXT has no sbrn register */
+ else if (pdev->vendor == PCI_VENDOR_ID_HUAWEI)
+ ; /* sbrn register is undefined */
else
pci_read_config_byte(pdev, 0x60, &ehci->sbrn);

--
2.8.1


2021-04-08 07:21:23

by liulongfang

[permalink] [raw]
Subject: Re: [PATCH] USB:ehci:fix ehci hardware problem

On 2021/4/8 15:03, Longfang Liu wrote:
> When rebooting the EHCI driver, ehci_shutdown() will be called.
> if the sbrn flag is 0, ehci_shutdown() will return directly.
>
> Our EHCI hardware does not define the SBRN register, which cause
> its value to default to 0. The sbrn flag being 0 will cause the
> EHCI interrupt signal to not be turned off after reboot. An interrupt
> that is not closed will cause an exception to the device sharing
> the interrupt.
>
> Currently, our hardware has this problem. We hope to solve this
> problem by skipping reading the sbrn register value. On the next
> generation of hardware, we will define this SBRN register in accordance
> with the controller standard.
>
> Signed-off-by: Longfang Liu <[email protected]>
> ---
> drivers/usb/host/ehci-pci.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
> index 3c3820a..5dc6821 100644
> --- a/drivers/usb/host/ehci-pci.c
> +++ b/drivers/usb/host/ehci-pci.c
> @@ -291,6 +291,8 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
> if (pdev->vendor == PCI_VENDOR_ID_STMICRO
> && pdev->device == PCI_DEVICE_ID_STMICRO_USB_HOST)
> ; /* ConneXT has no sbrn register */
> + else if (pdev->vendor == PCI_VENDOR_ID_HUAWEI)
> + ; /* sbrn register is undefined */
> else
> pci_read_config_byte(pdev, 0x60, &ehci->sbrn);
>
>
Sorry, please ignore this patch, I will resend it.
Thanks.
Longfang.