aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ehci-pci.c
diff options
context:
space:
mode:
authorHuang Rui <ray.huang@amd.com>2013-10-03 11:37:12 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-10-03 18:44:50 -0400
commit3ad145b62a15c86150dd0cc229a39a3120d462f9 (patch)
tree2b0a5f63b7dd1cf5269dde34406861ebd5e8526c /drivers/usb/host/ehci-pci.c
parentcccd3a258eef7a8451e25b7bf55503973de4e9f5 (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.c24
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: