diff options
-rw-r--r-- | drivers/usb/host/pci-quirks.c | 20 | ||||
-rw-r--r-- | drivers/usb/host/pci-quirks.h | 1 | ||||
-rw-r--r-- | drivers/usb/host/xhci-pci.c | 7 |
3 files changed, 0 insertions, 28 deletions
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c index 67ad4bb6919a..3625a5c1a41b 100644 --- a/drivers/usb/host/pci-quirks.c +++ b/drivers/usb/host/pci-quirks.c | |||
@@ -1268,23 +1268,3 @@ static void quirk_usb_early_handoff(struct pci_dev *pdev) | |||
1268 | } | 1268 | } |
1269 | DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID, | 1269 | DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID, |
1270 | PCI_CLASS_SERIAL_USB, 8, quirk_usb_early_handoff); | 1270 | PCI_CLASS_SERIAL_USB, 8, quirk_usb_early_handoff); |
1271 | |||
1272 | bool usb_xhci_needs_pci_reset(struct pci_dev *pdev) | ||
1273 | { | ||
1274 | /* | ||
1275 | * Our dear uPD72020{1,2} friend only partially resets when | ||
1276 | * asked to via the XHCI interface, and may end up doing DMA | ||
1277 | * at the wrong addresses, as it keeps the top 32bit of some | ||
1278 | * addresses from its previous programming under obscure | ||
1279 | * circumstances. | ||
1280 | * Give it a good wack at probe time. Unfortunately, this | ||
1281 | * needs to happen before we've had a chance to discover any | ||
1282 | * quirk, or the system will be in a rather bad state. | ||
1283 | */ | ||
1284 | if (pdev->vendor == PCI_VENDOR_ID_RENESAS && | ||
1285 | (pdev->device == 0x0014 || pdev->device == 0x0015)) | ||
1286 | return true; | ||
1287 | |||
1288 | return false; | ||
1289 | } | ||
1290 | EXPORT_SYMBOL_GPL(usb_xhci_needs_pci_reset); | ||
diff --git a/drivers/usb/host/pci-quirks.h b/drivers/usb/host/pci-quirks.h index 4ca0d9b7e463..63c633077d9e 100644 --- a/drivers/usb/host/pci-quirks.h +++ b/drivers/usb/host/pci-quirks.h | |||
@@ -16,7 +16,6 @@ void usb_asmedia_modifyflowcontrol(struct pci_dev *pdev); | |||
16 | void usb_enable_intel_xhci_ports(struct pci_dev *xhci_pdev); | 16 | void usb_enable_intel_xhci_ports(struct pci_dev *xhci_pdev); |
17 | void usb_disable_xhci_ports(struct pci_dev *xhci_pdev); | 17 | void usb_disable_xhci_ports(struct pci_dev *xhci_pdev); |
18 | void sb800_prefetch(struct device *dev, int on); | 18 | void sb800_prefetch(struct device *dev, int on); |
19 | bool usb_xhci_needs_pci_reset(struct pci_dev *pdev); | ||
20 | bool usb_amd_pt_check_port(struct device *device, int port); | 19 | bool usb_amd_pt_check_port(struct device *device, int port); |
21 | #else | 20 | #else |
22 | struct pci_dev; | 21 | struct pci_dev; |
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index e0a0a12871e2..6372edf339d9 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c | |||
@@ -288,13 +288,6 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
288 | 288 | ||
289 | driver = (struct hc_driver *)id->driver_data; | 289 | driver = (struct hc_driver *)id->driver_data; |
290 | 290 | ||
291 | /* For some HW implementation, a XHCI reset is just not enough... */ | ||
292 | if (usb_xhci_needs_pci_reset(dev)) { | ||
293 | dev_info(&dev->dev, "Resetting\n"); | ||
294 | if (pci_reset_function_locked(dev)) | ||
295 | dev_warn(&dev->dev, "Reset failed"); | ||
296 | } | ||
297 | |||
298 | /* Prevent runtime suspending between USB-2 and USB-3 initialization */ | 291 | /* Prevent runtime suspending between USB-2 and USB-3 initialization */ |
299 | pm_runtime_get_noresume(&dev->dev); | 292 | pm_runtime_get_noresume(&dev->dev); |
300 | 293 | ||