]> Pileus Git - ~andy/linux/commitdiff
Merge tag 'for-usb-next-2013-12-20' of git://git.kernel.org/pub/scm/linux/kernel...
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 21 Dec 2013 23:58:40 +0000 (15:58 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 21 Dec 2013 23:58:40 +0000 (15:58 -0800)
Sarah writes:

xhci: Cleanups, non-urgent fixes for 3.14.

Happy Holidays, Greg!

Here's four patches to be queued to usb-next for 3.14.

One adds a module parameter to the xHCI driver to allow users to enable
xHCI quirks without recompiling their kernel, which you've already said
is fine.  The second patch is a bug fix for new usbtest code that's only
in usb-next.  The third patch is simple cleanup.

The last patch is a non-urgent bug fix for xHCI platform devices.  The
bug has been in the code since 3.9.  You've been asking me to hold off
on non-urgent bug fixes after -rc4/-rc5, so it can go into usb-next, and
be backported to stable once 3.14 is out.

These have all been tested over the past week.  I did run across one
oops, but it turned out to be a bug in 3.12, and therefore not related
to any of these patches.

Please queue these for usb-next and 3.14.

Thanks,
Sarah Sharp

drivers/usb/host/xhci-ring.c
drivers/usb/host/xhci.c
drivers/usb/misc/usbtest.c

index c06df38b57b093e203d0c33a46672334555df2e3..09b2b551be72b2ed63d673339e779dcef638c0c4 100644 (file)
@@ -156,8 +156,6 @@ static void next_trb(struct xhci_hcd *xhci,
  */
 static void inc_deq(struct xhci_hcd *xhci, struct xhci_ring *ring)
 {
-       unsigned long long addr;
-
        ring->deq_updates++;
 
        /*
@@ -186,8 +184,6 @@ static void inc_deq(struct xhci_hcd *xhci, struct xhci_ring *ring)
                        ring->dequeue++;
                }
        } while (last_trb(xhci, ring, ring->deq_seg, ring->dequeue));
-
-       addr = (unsigned long long) xhci_trb_virt_to_dma(ring->deq_seg, ring->dequeue);
 }
 
 /*
@@ -212,7 +208,6 @@ static void inc_enq(struct xhci_hcd *xhci, struct xhci_ring *ring,
 {
        u32 chain;
        union xhci_trb *next;
-       unsigned long long addr;
 
        chain = le32_to_cpu(ring->enqueue->generic.field[3]) & TRB_CHAIN;
        /* If this is not event ring, there is one less usable TRB */
@@ -264,7 +259,6 @@ static void inc_enq(struct xhci_hcd *xhci, struct xhci_ring *ring,
                ring->enqueue = ring->enq_seg->trbs;
                next = ring->enqueue;
        }
-       addr = (unsigned long long) xhci_trb_virt_to_dma(ring->enq_seg, ring->enqueue);
 }
 
 /*
index d68ec1aa473d952e4cc67d0e92db78a6ab412be3..f8ffc512faf14dc391b04de10ea5532ef13eb174 100644 (file)
@@ -40,6 +40,10 @@ static int link_quirk;
 module_param(link_quirk, int, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(link_quirk, "Don't clear the chain bit on a link TRB");
 
+static unsigned int quirks;
+module_param(quirks, uint, S_IRUGO);
+MODULE_PARM_DESC(quirks, "Bit flags for quirks to be enabled as default");
+
 /* TODO: copied from ehci-hcd.c - can this be refactored? */
 /*
  * xhci_handshake - spin reading hc until handshake completes or fails
@@ -321,6 +325,9 @@ static void xhci_cleanup_msix(struct xhci_hcd *xhci)
        struct usb_hcd *hcd = xhci_to_hcd(xhci);
        struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
 
+       if (xhci->quirks & XHCI_PLAT)
+               return;
+
        xhci_free_irq(xhci);
 
        if (xhci->msix_entries) {
@@ -4770,6 +4777,8 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
        xhci->hcc_params = readl(&xhci->cap_regs->hcc_params);
        xhci_print_registers(xhci);
 
+       xhci->quirks = quirks;
+
        get_quirks(dev, xhci);
 
        /* In xhci controllers which follow xhci 1.0 spec gives a spurious
index 0317f10823ddd8bf06f1d56c74725f26c6c588cd..f6568b5e9b06e47b96916f93421e26ddd2fb97a3 100644 (file)
@@ -1232,7 +1232,7 @@ test_ctrl_queue(struct usbtest_dev *dev, struct usbtest_param *param)
                                len = le16_to_cpu(udev->bos->desc->wTotalLength);
                        else
                                len = sizeof(struct usb_bos_descriptor);
-                       if (udev->speed != USB_SPEED_SUPER)
+                       if (le16_to_cpu(udev->descriptor.bcdUSB) < 0x0201)
                                expected = -EPIPE;
                        break;
                default: