forked from Minki/linux
xHCI bug fixes for 3.7
Hi Greg, Here's three small bug fixes for 3.7. They fix a NULL pointer deference and lost USB device unplug events, as well as making sure the xHCI driver doesn't prevent system suspend. Sarah Sharp -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJQYi9+AAoJEBMGWMLi1Gc5jpsP+wRBwSppET1Sp55TIui0kQ8+ AFwDmzpSGknys/TpATtE/qNEeNhwwo5+J9lviQxo8iOfyObtNsbn6vR4n6Le9iFR BAyROW4jftr+k9N+PL3j+Ne3AYE/ZKtmFpPSPHjexSxY23oiGzQ/CRsaNtZ38HnY ot37Zpwett3aDYb3uDrqN4moMRz34trA0CDIO7EkpqI1OcdenTrDHRzmJ4Qvw9Hy 7kzFAXggH4Xl2NqSgQqzZwL6Kw7uOxpdbM9IVHgPVjz+yjc0JLMnHe9MVC8oKUe6 1K0QREe3VdaIiWS/kNlLGcyCwvSIhvOCXKbZlDWs14rET0Orf+VfSpxe4V75ym60 L9aBbxsqLhqRJtOKaOFbVaTakDpq4bhp5EziWOxPx7w1p+zDUOfXrbCyEiZNBqmt tjjxVDpcbGg3Op9JrpeHWs71QFlg1dvxFaw6E9riF8zOLqk3T1ogt9TuZeOIEPZ+ a8NsrYCFgDEBRGklp1beneHSwvwtWhMZ9AGqsiQ+wlZ7Xo9BR2iH1lsKT7mrky9y 9SpzmlitZ9RsNxOKxP57YAdDvLLHEmKuW4nyqT/Lq2IoRpP9wCYOLBHgWhRha8iM zBMW65lEBJjBbekpECyJk9Phu+Kd4wjVFVBquZ19vaErjrVir5B74Ntak0v61qd/ O1Ts3XNlXBZ9nsd49i58 =DjUV -----END PGP SIGNATURE----- Merge tag 'for-usb-next-2012-09-25' of git://git.kernel.org/pub/scm/linux/kernel/git/sarah/xhci into usb-next xHCI bug fixes for 3.7 Hi Greg, Here's three small bug fixes for 3.7. They fix a NULL pointer deference and lost USB device unplug events, as well as making sure the xHCI driver doesn't prevent system suspend. Sarah Sharp
This commit is contained in:
commit
655db79805
@ -103,6 +103,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
||||
* PPT chipsets.
|
||||
*/
|
||||
xhci->quirks |= XHCI_SPURIOUS_REBOOT;
|
||||
xhci->quirks |= XHCI_AVOID_BEI;
|
||||
}
|
||||
if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
|
||||
pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
|
||||
|
@ -3672,7 +3672,9 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
|
||||
} else {
|
||||
td->last_trb = ep_ring->enqueue;
|
||||
field |= TRB_IOC;
|
||||
if (xhci->hci_version == 0x100) {
|
||||
if (xhci->hci_version == 0x100 &&
|
||||
!(xhci->quirks &
|
||||
XHCI_AVOID_BEI)) {
|
||||
/* Set BEI bit except for the last td */
|
||||
if (i < num_tds - 1)
|
||||
field |= TRB_BEI;
|
||||
|
@ -471,6 +471,8 @@ static bool compliance_mode_recovery_timer_quirk_check(void)
|
||||
|
||||
dmi_product_name = dmi_get_system_info(DMI_PRODUCT_NAME);
|
||||
dmi_sys_vendor = dmi_get_system_info(DMI_SYS_VENDOR);
|
||||
if (!dmi_product_name || !dmi_sys_vendor)
|
||||
return false;
|
||||
|
||||
if (!(strstr(dmi_sys_vendor, "Hewlett-Packard")))
|
||||
return false;
|
||||
@ -888,7 +890,7 @@ int xhci_suspend(struct xhci_hcd *xhci)
|
||||
command &= ~CMD_RUN;
|
||||
xhci_writel(xhci, command, &xhci->op_regs->command);
|
||||
if (handshake(xhci, &xhci->op_regs->status,
|
||||
STS_HALT, STS_HALT, 100*100)) {
|
||||
STS_HALT, STS_HALT, XHCI_MAX_HALT_USEC)) {
|
||||
xhci_warn(xhci, "WARN: xHC CMD_RUN timeout\n");
|
||||
spin_unlock_irq(&xhci->lock);
|
||||
return -ETIMEDOUT;
|
||||
|
@ -1511,6 +1511,7 @@ struct xhci_hcd {
|
||||
#define XHCI_INTEL_HOST (1 << 12)
|
||||
#define XHCI_SPURIOUS_REBOOT (1 << 13)
|
||||
#define XHCI_COMP_MODE_QUIRK (1 << 14)
|
||||
#define XHCI_AVOID_BEI (1 << 15)
|
||||
unsigned int num_active_eps;
|
||||
unsigned int limit_active_eps;
|
||||
/* There are two roothubs to keep track of bus suspend info for */
|
||||
|
Loading…
Reference in New Issue
Block a user