diff options
author | Huang Rui <ray.huang@amd.com> | 2013-10-03 11:37:12 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-10-03 18:44:50 -0400 |
commit | 3ad145b62a15c86150dd0cc229a39a3120d462f9 (patch) | |
tree | 2b0a5f63b7dd1cf5269dde34406861ebd5e8526c /drivers/usb/host/ehci-pci.c | |
parent | cccd3a258eef7a8451e25b7bf55503973de4e9f5 (diff) |
usb: ehci: use amd_chipset_type to filter for usb subsystem hang bug
Commit "usb: pci-quirks: refactor AMD quirk to abstract AMD chipset types"
introduced a new AMD chipset type to filter AMD platforms with different
chipsets.
According to a recent thread [1], this patch updates USB subsystem hang
symptom quirk which is observed on AMD all SB600 and SB700 revision
0x3a/0x3b. And make it use the new chipset type to represent.
[1] http://marc.info/?l=linux-usb&m=138012321616452&w=2
Signed-off-by: Huang Rui <ray.huang@amd.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/ehci-pci.c')
-rw-r--r-- | drivers/usb/host/ehci-pci.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 854c2ec7b699..3e86bf4371b3 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c | |||
@@ -58,8 +58,6 @@ static int ehci_pci_setup(struct usb_hcd *hcd) | |||
58 | { | 58 | { |
59 | struct ehci_hcd *ehci = hcd_to_ehci(hcd); | 59 | struct ehci_hcd *ehci = hcd_to_ehci(hcd); |
60 | struct pci_dev *pdev = to_pci_dev(hcd->self.controller); | 60 | struct pci_dev *pdev = to_pci_dev(hcd->self.controller); |
61 | struct pci_dev *p_smbus; | ||
62 | u8 rev; | ||
63 | u32 temp; | 61 | u32 temp; |
64 | int retval; | 62 | int retval; |
65 | 63 | ||
@@ -175,22 +173,12 @@ static int ehci_pci_setup(struct usb_hcd *hcd) | |||
175 | /* SB600 and old version of SB700 have a bug in EHCI controller, | 173 | /* SB600 and old version of SB700 have a bug in EHCI controller, |
176 | * which causes usb devices lose response in some cases. | 174 | * which causes usb devices lose response in some cases. |
177 | */ | 175 | */ |
178 | if ((pdev->device == 0x4386) || (pdev->device == 0x4396)) { | 176 | if ((pdev->device == 0x4386 || pdev->device == 0x4396) && |
179 | p_smbus = pci_get_device(PCI_VENDOR_ID_ATI, | 177 | usb_amd_hang_symptom_quirk()) { |
180 | PCI_DEVICE_ID_ATI_SBX00_SMBUS, | 178 | u8 tmp; |
181 | NULL); | 179 | ehci_info(ehci, "applying AMD SB600/SB700 USB freeze workaround\n"); |
182 | if (!p_smbus) | 180 | pci_read_config_byte(pdev, 0x53, &tmp); |
183 | break; | 181 | pci_write_config_byte(pdev, 0x53, tmp | (1<<3)); |
184 | rev = p_smbus->revision; | ||
185 | if ((pdev->device == 0x4386) || (rev == 0x3a) | ||
186 | || (rev == 0x3b)) { | ||
187 | u8 tmp; | ||
188 | ehci_info(ehci, "applying AMD SB600/SB700 USB " | ||
189 | "freeze workaround\n"); | ||
190 | pci_read_config_byte(pdev, 0x53, &tmp); | ||
191 | pci_write_config_byte(pdev, 0x53, tmp | (1<<3)); | ||
192 | } | ||
193 | pci_dev_put(p_smbus); | ||
194 | } | 182 | } |
195 | break; | 183 | break; |
196 | case PCI_VENDOR_ID_NETMOS: | 184 | case PCI_VENDOR_ID_NETMOS: |