• Sarah Sharp's avatar
    xhci-plat: Don't enable legacy PCI interrupts. · 52fb6125
    Sarah Sharp authored
    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 00eed9c8 "USB: xhci:
    correctly enable interrupts".
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Reported-by: default avatarYu Y Wang <yu.y.wang@intel.com>
    Tested-by: default avatarYu Y Wang <yu.y.wang@intel.com>
    Reviewed-by: default avatarFelipe Balbi <balbi@ti.com>
    Cc: stable@vger.kernel.org
    52fb6125
xhci.c 149 KB