|
@@ -1150,3 +1150,23 @@ static void quirk_usb_early_handoff(struct pci_dev *pdev)
|
|
|
}
|
|
|
DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
|
|
|
PCI_CLASS_SERIAL_USB, 8, quirk_usb_early_handoff);
|
|
|
+
|
|
|
+bool usb_xhci_needs_pci_reset(struct pci_dev *pdev)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * Our dear uPD72020{1,2} friend only partially resets when
|
|
|
+ * asked to via the XHCI interface, and may end up doing DMA
|
|
|
+ * at the wrong addresses, as it keeps the top 32bit of some
|
|
|
+ * addresses from its previous programming under obscure
|
|
|
+ * circumstances.
|
|
|
+ * Give it a good wack at probe time. Unfortunately, this
|
|
|
+ * needs to happen before we've had a chance to discover any
|
|
|
+ * quirk, or the system will be in a rather bad state.
|
|
|
+ */
|
|
|
+ if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
|
|
|
+ (pdev->device == 0x0014 || pdev->device == 0x0015))
|
|
|
+ return true;
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(usb_xhci_needs_pci_reset);
|