summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLongfang Liu <liulongfang@huawei.com>2021-04-09 16:48:01 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-08-15 13:05:04 +0200
commit6b862aa345f04b33e44c606abc9698eef42f62e5 (patch)
treeac0603003f18a427fa538b38d107014dcc2c37ec
parent4c07e70141eebd3db64297515a427deea4822957 (diff)
downloadlinux-stable-6b862aa345f04b33e44c606abc9698eef42f62e5.tar.gz
linux-stable-6b862aa345f04b33e44c606abc9698eef42f62e5.tar.bz2
linux-stable-6b862aa345f04b33e44c606abc9698eef42f62e5.zip
USB:ehci:fix Kunpeng920 ehci hardware problem
commit 26b75952ca0b8b4b3050adb9582c8e2f44d49687 upstream. Kunpeng920's EHCI controller does not have SBRN register. Reading the SBRN register when the controller driver is initialized will get 0. When rebooting the EHCI driver, ehci_shutdown() will be called. if the sbrn flag is 0, ehci_shutdown() will return directly. The sbrn flag being 0 will cause the EHCI interrupt signal to not be turned off after reboot. this interrupt that is not closed will cause an exception to the device sharing the interrupt. Therefore, the EHCI controller of Kunpeng920 needs to skip the read operation of the SBRN register. Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Longfang Liu <liulongfang@huawei.com> Link: https://lore.kernel.org/r/1617958081-17999-1-git-send-email-liulongfang@huawei.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/host/ehci-pci.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
index fcfad5c298a9..56e6fd0f0482 100644
--- a/drivers/usb/host/ehci-pci.c
+++ b/drivers/usb/host/ehci-pci.c
@@ -298,6 +298,9 @@ 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
+ && pdev->device == 0xa239)
+ ; /* HUAWEI Kunpeng920 USB EHCI has no sbrn register */
else
pci_read_config_byte(pdev, 0x60, &ehci->sbrn);