The following commit has been merged in the linux branch: commit d93a8f829fe1d2f3002f2c6ddb553d12db420412 Author: Linus Torvalds torvalds@linux-foundation.org Date: Sun Oct 11 15:57:57 2009 -0700
Revert "USB: Work around BIOS bugs by quiescing USB controllers earlier"
This reverts commit db8be50c4307dac2b37305fc59c8dc0f978d09ea, as per
http://bugzilla.kernel.org/show_bug.cgi?id=14374 http://marc.info/?l=linux-kernel&m=125446885705223&w=4
We simply can't do the USB handoff at FIXUP_HEADER time, since it will often require us to have valid IO mappings etc. But that in turn requires a whole different approach, not this trivial one-liner.
Maybe we could teach all the USB quirk handoff handlers to only do the quirk if the device has all its registers set up (since if it isn't initialized, it's unlikely to be active), but regardless that will need a whole lot more code than just saying "let's do it really early".
The proper fix is almost certainly to just leave the legacy IOMMU mappings active until after all devices have been initialized.
Reported-by: Nick Piggin npiggin@suse.de Cc: David Woodhouse David.Woodhouse@intel.com Cc: Greg Kroah-Hartman gregkh@suse.de Signed-off-by: Linus Torvalds torvalds@linux-foundation.org
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c index 23cf3bd..83b5f9c 100644 --- a/drivers/usb/host/pci-quirks.c +++ b/drivers/usb/host/pci-quirks.c @@ -475,4 +475,4 @@ static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev) else if (pdev->class == PCI_CLASS_SERIAL_USB_XHCI) quirk_usb_handoff_xhci(pdev); } -DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff); +DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff);