summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/host/pci-quirks.c20
-rw-r--r--drivers/usb/host/pci-quirks.h1
-rw-r--r--drivers/usb/host/xhci-pci.c7
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}
1269DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID, 1269DECLARE_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
1272bool 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}
1290EXPORT_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);
16void usb_enable_intel_xhci_ports(struct pci_dev *xhci_pdev); 16void usb_enable_intel_xhci_ports(struct pci_dev *xhci_pdev);
17void usb_disable_xhci_ports(struct pci_dev *xhci_pdev); 17void usb_disable_xhci_ports(struct pci_dev *xhci_pdev);
18void sb800_prefetch(struct device *dev, int on); 18void sb800_prefetch(struct device *dev, int on);
19bool usb_xhci_needs_pci_reset(struct pci_dev *pdev);
20bool usb_amd_pt_check_port(struct device *device, int port); 19bool usb_amd_pt_check_port(struct device *device, int port);
21#else 20#else
22struct pci_dev; 21struct 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