xHCI bug fix for broken BIOS on some Intel systems.
Happy Valentine's Day! Your present is a working xHCI driver under some Intel systems with buggy BIOSes that don't provide a legacy PCI IRQ line for the USB 3.0 host. Please queue for 3.3 and stable to share the love! -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJPOrWQAAoJEBMGWMLi1Gc5uq8P/3OksCO22my9HHTzRy0bJWpZ mCZAFJI/SjujJYR0CFMr8eNLgCx1vkN7PSWqtPs2zTFJhHI6WnOGvFBNXAVSLPAF XJT0rUYUCyFVsvY9rdOPlqeJpWqu9cLkp8jGc3VN364ZEMWtNKOFMe0v2R4A3S4q E7hUAMGV6zg0+Gl2ktDdenXIRFwWAKtmFGUqhntWY7H7c4GnrhqC1JgycVm6ef73 tAhG1H3q2fE+8DYz4ntaT3eIzTz58z+8gdsf1cHqiUd34LgIonLm1/haI64fMskG J0FtUR6Ao8elYNV2f4Jd5bfGypwk7j2+EzunPqOW69+wL71/GNY4M8mq/0sqIsTC bNMeZQx31RlfBbyCfnGB31Xvm6+taECBRX6zA3RFU+6QOwOhp4e8r4Bk+N1WfnXN 7qNAb3olwSvIAzaWLwAFDxOHgGVCoX9tPwol3C1g/C1Rnp4QS4LexFFD3MsuZ/4K hGkeL95dH2O+ndQXGmLQ1hzOMmE/YWqNdC/QI8FNJAyGRNDaragY5MSaAht37xCL 7PGMoHZS7HLUTVqNPSV2IcGcvAkMuN+dthGBny4jizU/2hrkVzodfM09vE6qjKUJ G2okmz1KMRt4h/Uy62FByCfNESvhLbpHiHjWm+PaX5q2ywgYOqzbjG++28ETHBVw KaBHDep2IA9JJzbaDSJ7 =R2z/ -----END PGP SIGNATURE----- Merge tag 'for-usb-linus-2012-02-14' of git://git.kernel.org/pub/scm/linux/kernel/git/sarah/xhci into usb-linus xHCI bug fix for broken BIOS on some Intel systems. Happy Valentine's Day! Your present is a working xHCI driver under some Intel systems with buggy BIOSes that don't provide a legacy PCI IRQ line for the USB 3.0 host. Please queue for 3.3 and stable to share the love!
This commit is contained in:
Коммит
887aa58e48
|
@ -187,7 +187,10 @@ int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|||
return -ENODEV;
|
||||
dev->current_state = PCI_D0;
|
||||
|
||||
if (!dev->irq) {
|
||||
/* The xHCI driver supports MSI and MSI-X,
|
||||
* so don't fail if the BIOS doesn't provide a legacy IRQ.
|
||||
*/
|
||||
if (!dev->irq && (driver->flags & HCD_MASK) != HCD_USB3) {
|
||||
dev_err(&dev->dev,
|
||||
"Found HC with no IRQ. Check BIOS/PCI %s setup!\n",
|
||||
pci_name(dev));
|
||||
|
|
|
@ -2447,8 +2447,10 @@ int usb_add_hcd(struct usb_hcd *hcd,
|
|||
&& device_can_wakeup(&hcd->self.root_hub->dev))
|
||||
dev_dbg(hcd->self.controller, "supports USB remote wakeup\n");
|
||||
|
||||
/* enable irqs just before we start the controller */
|
||||
if (usb_hcd_is_primary_hcd(hcd)) {
|
||||
/* enable irqs just before we start the controller,
|
||||
* if the BIOS provides legacy PCI irqs.
|
||||
*/
|
||||
if (usb_hcd_is_primary_hcd(hcd) && irqnum) {
|
||||
retval = usb_hcd_request_irqs(hcd, irqnum, irqflags);
|
||||
if (retval)
|
||||
goto err_request_irq;
|
||||
|
|
|
@ -352,6 +352,11 @@ static int xhci_try_enable_msi(struct usb_hcd *hcd)
|
|||
/* hcd->irq is -1, we have MSI */
|
||||
return 0;
|
||||
|
||||
if (!pdev->irq) {
|
||||
xhci_err(xhci, "No msi-x/msi found and no IRQ in BIOS\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* fall back to legacy interrupt*/
|
||||
ret = request_irq(pdev->irq, &usb_hcd_irq, IRQF_SHARED,
|
||||
hcd->irq_descr, hcd);
|
||||
|
|
Загрузка…
Ссылка в новой задаче