diff options
| author | Peter Chen <peter.chen@nxp.com> | 2017-05-17 11:32:02 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-05-18 09:19:41 -0400 |
| commit | 6a29beef9d1b16c762e469d77e28c3de3f5c3dbb (patch) | |
| tree | 4b2f2bfa6240cd2bcf1f2d69ff14a04aee80c987 /include/linux/usb | |
| parent | 7480d912d549f414e0ce39331870899e89a5598c (diff) | |
usb: host: xhci-ring: don't need to clear interrupt pending for MSI enabled hcd
According to xHCI spec Figure 30: Interrupt Throttle Flow Diagram
If PCI Message Signaled Interrupts (MSI or MSI-X) are enabled,
then the assertion of the Interrupt Pending (IP) flag in Figure 30
generates a PCI Dword write. The IP flag is automatically cleared
by the completion of the PCI write.
the MSI enabled HCs don't need to clear interrupt pending bit, but
hcd->irq = 0 doesn't equal to MSI enabled HCD. At some Dual-role
controller software designs, it sets hcd->irq as 0 to avoid HCD
requesting interrupt, and they want to decide when to call usb_hcd_irq
by software.
Signed-off-by: Peter Chen <peter.chen@nxp.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/linux/usb')
| -rw-r--r-- | include/linux/usb/hcd.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h index a469999a106d..50398b69ca44 100644 --- a/include/linux/usb/hcd.h +++ b/include/linux/usb/hcd.h | |||
| @@ -148,6 +148,7 @@ struct usb_hcd { | |||
| 148 | unsigned rh_registered:1;/* is root hub registered? */ | 148 | unsigned rh_registered:1;/* is root hub registered? */ |
| 149 | unsigned rh_pollable:1; /* may we poll the root hub? */ | 149 | unsigned rh_pollable:1; /* may we poll the root hub? */ |
| 150 | unsigned msix_enabled:1; /* driver has MSI-X enabled? */ | 150 | unsigned msix_enabled:1; /* driver has MSI-X enabled? */ |
| 151 | unsigned msi_enabled:1; /* driver has MSI enabled? */ | ||
| 151 | unsigned remove_phy:1; /* auto-remove USB phy */ | 152 | unsigned remove_phy:1; /* auto-remove USB phy */ |
| 152 | 153 | ||
| 153 | /* The next flag is a stopgap, to be removed when all the HCDs | 154 | /* The next flag is a stopgap, to be removed when all the HCDs |
