Hi Greg, I'll be sending an updated patch shortly. I figured this one would fail, since some refactoring went into 3.1.
Sarah Sharp On Thu, Feb 23, 2012 at 09:33:06AM -0800, [email protected] wrote: > > The patch below does not apply to the 3.0-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <[email protected]>. > > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > From 68d07f64b8a11a852d48d1b05b724c3e20c0d94b Mon Sep 17 00:00:00 2001 > From: Sarah Sharp <[email protected]> > Date: Mon, 13 Feb 2012 16:25:57 -0800 > Subject: [PATCH] USB: Don't fail USB3 probe on missing legacy PCI IRQ. > > Intel has a PCI USB xhci host controller on a new platform. It doesn't > have a line IRQ definition in BIOS. The Linux driver refuses to > initialize this controller, but Windows works well because it only depends > on MSI. > > Actually, Linux also can work for MSI. This patch avoids the line IRQ > checking for USB3 HCDs in usb core PCI probe. It allows the xHCI driver > to try to enable MSI or MSI-X first. It will fail the probe if MSI > enabling failed and there's no legacy PCI IRQ. > > This patch should be backported to kernels as old as 2.6.32. > > Signed-off-by: Alex Shi <[email protected]> > Signed-off-by: Sarah Sharp <[email protected]> > Cc: [email protected] > > diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c > index d136b8f..81e2c0d 100644 > --- a/drivers/usb/core/hcd-pci.c > +++ b/drivers/usb/core/hcd-pci.c > @@ -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)); > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c > index eb19cba..e128232 100644 > --- a/drivers/usb/core/hcd.c > +++ b/drivers/usb/core/hcd.c > @@ -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; > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c > index 6bbe3c3..c939f5f 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -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); > -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
