diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-12-21 18:58:40 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-12-21 18:58:40 -0500 |
| commit | e2a3a64855f2f906e0ba9056a3a57aeb73b1a968 (patch) | |
| tree | 832a6ae44f43740b1e4626b93d28d3b84e58a2ea | |
| parent | 1fc671b3be8f671482871d9a0b577b6d96914e8e (diff) | |
| parent | 9005355af23856c55a5538c9024355785424821b (diff) | |
Merge tag 'for-usb-next-2013-12-20' of git://git.kernel.org/pub/scm/linux/kernel/git/sarah/xhci into usb-next
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
| -rw-r--r-- | drivers/usb/host/xhci-ring.c | 6 | ||||
| -rw-r--r-- | drivers/usb/host/xhci.c | 9 | ||||
| -rw-r--r-- | drivers/usb/misc/usbtest.c | 2 |
3 files changed, 10 insertions, 7 deletions
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index c06df38b57b0..09b2b551be72 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c | |||
| @@ -156,8 +156,6 @@ static void next_trb(struct xhci_hcd *xhci, | |||
| 156 | */ | 156 | */ |
| 157 | static void inc_deq(struct xhci_hcd *xhci, struct xhci_ring *ring) | 157 | static void inc_deq(struct xhci_hcd *xhci, struct xhci_ring *ring) |
| 158 | { | 158 | { |
| 159 | unsigned long long addr; | ||
| 160 | |||
| 161 | ring->deq_updates++; | 159 | ring->deq_updates++; |
| 162 | 160 | ||
| 163 | /* | 161 | /* |
| @@ -186,8 +184,6 @@ static void inc_deq(struct xhci_hcd *xhci, struct xhci_ring *ring) | |||
| 186 | ring->dequeue++; | 184 | ring->dequeue++; |
| 187 | } | 185 | } |
| 188 | } while (last_trb(xhci, ring, ring->deq_seg, ring->dequeue)); | 186 | } while (last_trb(xhci, ring, ring->deq_seg, ring->dequeue)); |
| 189 | |||
| 190 | addr = (unsigned long long) xhci_trb_virt_to_dma(ring->deq_seg, ring->dequeue); | ||
| 191 | } | 187 | } |
| 192 | 188 | ||
| 193 | /* | 189 | /* |
| @@ -212,7 +208,6 @@ static void inc_enq(struct xhci_hcd *xhci, struct xhci_ring *ring, | |||
| 212 | { | 208 | { |
| 213 | u32 chain; | 209 | u32 chain; |
| 214 | union xhci_trb *next; | 210 | union xhci_trb *next; |
| 215 | unsigned long long addr; | ||
| 216 | 211 | ||
| 217 | chain = le32_to_cpu(ring->enqueue->generic.field[3]) & TRB_CHAIN; | 212 | chain = le32_to_cpu(ring->enqueue->generic.field[3]) & TRB_CHAIN; |
| 218 | /* If this is not event ring, there is one less usable TRB */ | 213 | /* 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, | |||
| 264 | ring->enqueue = ring->enq_seg->trbs; | 259 | ring->enqueue = ring->enq_seg->trbs; |
| 265 | next = ring->enqueue; | 260 | next = ring->enqueue; |
| 266 | } | 261 | } |
| 267 | addr = (unsigned long long) xhci_trb_virt_to_dma(ring->enq_seg, ring->enqueue); | ||
| 268 | } | 262 | } |
| 269 | 263 | ||
| 270 | /* | 264 | /* |
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index d68ec1aa473d..f8ffc512faf1 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
| @@ -40,6 +40,10 @@ static int link_quirk; | |||
| 40 | module_param(link_quirk, int, S_IRUGO | S_IWUSR); | 40 | module_param(link_quirk, int, S_IRUGO | S_IWUSR); |
| 41 | MODULE_PARM_DESC(link_quirk, "Don't clear the chain bit on a link TRB"); | 41 | MODULE_PARM_DESC(link_quirk, "Don't clear the chain bit on a link TRB"); |
| 42 | 42 | ||
| 43 | static unsigned int quirks; | ||
| 44 | module_param(quirks, uint, S_IRUGO); | ||
| 45 | MODULE_PARM_DESC(quirks, "Bit flags for quirks to be enabled as default"); | ||
| 46 | |||
| 43 | /* TODO: copied from ehci-hcd.c - can this be refactored? */ | 47 | /* TODO: copied from ehci-hcd.c - can this be refactored? */ |
| 44 | /* | 48 | /* |
| 45 | * xhci_handshake - spin reading hc until handshake completes or fails | 49 | * xhci_handshake - spin reading hc until handshake completes or fails |
| @@ -321,6 +325,9 @@ static void xhci_cleanup_msix(struct xhci_hcd *xhci) | |||
| 321 | struct usb_hcd *hcd = xhci_to_hcd(xhci); | 325 | struct usb_hcd *hcd = xhci_to_hcd(xhci); |
| 322 | struct pci_dev *pdev = to_pci_dev(hcd->self.controller); | 326 | struct pci_dev *pdev = to_pci_dev(hcd->self.controller); |
| 323 | 327 | ||
| 328 | if (xhci->quirks & XHCI_PLAT) | ||
| 329 | return; | ||
| 330 | |||
| 324 | xhci_free_irq(xhci); | 331 | xhci_free_irq(xhci); |
| 325 | 332 | ||
| 326 | if (xhci->msix_entries) { | 333 | if (xhci->msix_entries) { |
| @@ -4770,6 +4777,8 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) | |||
| 4770 | xhci->hcc_params = readl(&xhci->cap_regs->hcc_params); | 4777 | xhci->hcc_params = readl(&xhci->cap_regs->hcc_params); |
| 4771 | xhci_print_registers(xhci); | 4778 | xhci_print_registers(xhci); |
| 4772 | 4779 | ||
| 4780 | xhci->quirks = quirks; | ||
| 4781 | |||
| 4773 | get_quirks(dev, xhci); | 4782 | get_quirks(dev, xhci); |
| 4774 | 4783 | ||
| 4775 | /* In xhci controllers which follow xhci 1.0 spec gives a spurious | 4784 | /* In xhci controllers which follow xhci 1.0 spec gives a spurious |
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c index 0317f10823dd..f6568b5e9b06 100644 --- a/drivers/usb/misc/usbtest.c +++ b/drivers/usb/misc/usbtest.c | |||
| @@ -1232,7 +1232,7 @@ test_ctrl_queue(struct usbtest_dev *dev, struct usbtest_param *param) | |||
| 1232 | len = le16_to_cpu(udev->bos->desc->wTotalLength); | 1232 | len = le16_to_cpu(udev->bos->desc->wTotalLength); |
| 1233 | else | 1233 | else |
| 1234 | len = sizeof(struct usb_bos_descriptor); | 1234 | len = sizeof(struct usb_bos_descriptor); |
| 1235 | if (udev->speed != USB_SPEED_SUPER) | 1235 | if (le16_to_cpu(udev->descriptor.bcdUSB) < 0x0201) |
| 1236 | expected = -EPIPE; | 1236 | expected = -EPIPE; |
| 1237 | break; | 1237 | break; |
| 1238 | default: | 1238 | default: |
