]> git.baikalelectronics.ru Git - kernel.git/commit
xhci-plat: Don't enable legacy PCI interrupts.
authorSarah Sharp <sarah.a.sharp@linux.intel.com>
Thu, 8 Aug 2013 17:08:34 +0000 (10:08 -0700)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Thu, 15 Aug 2013 17:52:36 +0000 (10:52 -0700)
commit32579010e149d3637c7bc70ebae9c930e1c32e61
treea6c4e34d0eb794ed397ed0dcfc1787f3f72019f2
parent3f0d07b0e26c3fb4ac5a26ec7bc6319b39888bb2
xhci-plat: Don't enable legacy PCI interrupts.

The xHCI platform driver calls into usb_add_hcd to register the irq for
its platform device.  It does not want the xHCI generic driver to
register an interrupt for it at all.  The original code did that by
setting the XHCI_BROKEN_MSI quirk, which tells the xHCI driver to not
enable MSI or MSI-X for a PCI host.

Unfortunately, if CONFIG_PCI is enabled, and CONFIG_USB_DW3 is enabled,
the xHCI generic driver will attempt to register a legacy PCI interrupt
for the xHCI platform device in xhci_try_enable_msi().  This will result
in a bogus irq being registered, since the underlying device is a
platform_device, not a pci_device, and thus the pci_device->irq pointer
will be bogus.

Add a new quirk, XHCI_PLAT, so that the xHCI generic driver can
distinguish between a PCI device that can't handle MSI or MSI-X, and a
platform device that should not have its interrupts touched at all.
This quirk may be useful in the future, in case other corner cases like
this arise.

This patch should be backported to kernels as old as 3.9, that
contain the commit fd58ff61a3313ba41640445690ac1b18b9b6867f "USB: xhci:
correctly enable interrupts".

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Reported-by: Yu Y Wang <yu.y.wang@intel.com>
Tested-by: Yu Y Wang <yu.y.wang@intel.com>
Reviewed-by: Felipe Balbi <balbi@ti.com>
Cc: stable@vger.kernel.org
drivers/usb/host/xhci-plat.c
drivers/usb/host/xhci.c
drivers/usb/host/xhci.h