|
@@ -173,6 +173,7 @@ int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|
|
struct hc_driver *driver;
|
|
|
struct usb_hcd *hcd;
|
|
|
int retval;
|
|
|
+ int hcd_irq = 0;
|
|
|
|
|
|
if (usb_disabled())
|
|
|
return -ENODEV;
|
|
@@ -187,15 +188,19 @@ int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|
|
return -ENODEV;
|
|
|
dev->current_state = PCI_D0;
|
|
|
|
|
|
- /* The xHCI driver supports MSI and MSI-X,
|
|
|
- * so don't fail if the BIOS doesn't provide a legacy IRQ.
|
|
|
+ /*
|
|
|
+ * The xHCI driver has its own irq management
|
|
|
+ * make sure irq setup is not touched for xhci in generic hcd code
|
|
|
*/
|
|
|
- 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));
|
|
|
- retval = -ENODEV;
|
|
|
- goto disable_pci;
|
|
|
+ if ((driver->flags & HCD_MASK) != HCD_USB3) {
|
|
|
+ if (!dev->irq) {
|
|
|
+ dev_err(&dev->dev,
|
|
|
+ "Found HC with no IRQ. Check BIOS/PCI %s setup!\n",
|
|
|
+ pci_name(dev));
|
|
|
+ retval = -ENODEV;
|
|
|
+ goto disable_pci;
|
|
|
+ }
|
|
|
+ hcd_irq = dev->irq;
|
|
|
}
|
|
|
|
|
|
hcd = usb_create_hcd(driver, &dev->dev, pci_name(dev));
|
|
@@ -245,7 +250,7 @@ int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|
|
|
|
|
pci_set_master(dev);
|
|
|
|
|
|
- retval = usb_add_hcd(hcd, dev->irq, IRQF_SHARED);
|
|
|
+ retval = usb_add_hcd(hcd, hcd_irq, IRQF_SHARED);
|
|
|
if (retval != 0)
|
|
|
goto unmap_registers;
|
|
|
set_hs_companion(dev, hcd);
|