]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jan 2015 13:41:01 +0000 (21:41 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jan 2015 13:41:01 +0000 (21:41 +0800)
added patches:
xhci-add-broken-streams-quirk-for-fresco-logic-fl1000g-xhci-controllers.patch
xhci-check-if-slot-is-already-in-default-state-before-moving-it-there.patch

queue-3.18/series
queue-3.18/xhci-add-broken-streams-quirk-for-fresco-logic-fl1000g-xhci-controllers.patch [new file with mode: 0644]
queue-3.18/xhci-check-if-slot-is-already-in-default-state-before-moving-it-there.patch [new file with mode: 0644]

index 959b6fa5761bfcd820a454320570f1392033bd0b..44f164915829434efd85c40ff165dd04e885226b 100644 (file)
@@ -52,3 +52,5 @@ arc-move-peripherals-to-match-model-to-fpga.patch
 cxl-change-contexts_lock-to-a-mutex-to-fix-sleep-while-atomic-bug.patch
 cxl-add-timeout-to-process-element-commands.patch
 cxl-unmap-mmio-regions-when-detaching-a-context.patch
+xhci-check-if-slot-is-already-in-default-state-before-moving-it-there.patch
+xhci-add-broken-streams-quirk-for-fresco-logic-fl1000g-xhci-controllers.patch
diff --git a/queue-3.18/xhci-add-broken-streams-quirk-for-fresco-logic-fl1000g-xhci-controllers.patch b/queue-3.18/xhci-add-broken-streams-quirk-for-fresco-logic-fl1000g-xhci-controllers.patch
new file mode 100644 (file)
index 0000000..bc4a4d0
--- /dev/null
@@ -0,0 +1,44 @@
+From 7f5c4d631aed243ca89c6673427954210b1628ec Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Fri, 5 Dec 2014 11:11:28 +0100
+Subject: xhci: Add broken-streams quirk for Fresco Logic FL1000G xhci controllers
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+commit 7f5c4d631aed243ca89c6673427954210b1628ec upstream.
+
+Streams do not work reliabe on Fresco Logic FL1000G xhci controllers,
+trying to use them results in errors like this:
+
+21:37:33 kernel: xhci_hcd 0000:04:00.0: ERROR Transfer event for disabled endpoint or incorrect stream ring
+21:37:33 kernel: xhci_hcd 0000:04:00.0: @00000000368b3570 9067b000 00000000 05000000 01078001
+21:37:33 kernel: xhci_hcd 0000:04:00.0: ERROR Transfer event for disabled endpoint or incorrect stream ring
+21:37:33 kernel: xhci_hcd 0000:04:00.0: @00000000368b3580 9067b400 00000000 05000000 01038001
+
+As always I've ordered a pci-e addon card with a Fresco Logic controller for
+myself to see if I can come up with a better fix then the big hammer, in
+the mean time this will make uas devices work again (in usb-storage mode)
+for FL1000G users.
+
+Reported-by: Marcin ZajÄ…czkowski <mszpak@wp.pl>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/xhci-pci.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/host/xhci-pci.c
++++ b/drivers/usb/host/xhci-pci.c
+@@ -82,6 +82,8 @@ static void xhci_pci_quirks(struct devic
+                               "must be suspended extra slowly",
+                               pdev->revision);
+               }
++              if (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK)
++                      xhci->quirks |= XHCI_BROKEN_STREAMS;
+               /* Fresco Logic confirms: all revisions of this chip do not
+                * support MSI, even though some of them claim to in their PCI
+                * capabilities.
diff --git a/queue-3.18/xhci-check-if-slot-is-already-in-default-state-before-moving-it-there.patch b/queue-3.18/xhci-check-if-slot-is-already-in-default-state-before-moving-it-there.patch
new file mode 100644 (file)
index 0000000..0305687
--- /dev/null
@@ -0,0 +1,56 @@
+From f161ead70fa6a62e432dff6e9dab8e3cfbeabea6 Mon Sep 17 00:00:00 2001
+From: Mathias Nyman <mathias.nyman@linux.intel.com>
+Date: Fri, 9 Jan 2015 17:18:28 +0200
+Subject: xhci: Check if slot is already in default state before moving it there
+
+From: Mathias Nyman <mathias.nyman@linux.intel.com>
+
+commit f161ead70fa6a62e432dff6e9dab8e3cfbeabea6 upstream.
+
+Solves xhci error cases with debug messages:
+xhci_hcd 0000:00:14.0: Setup ERROR: setup context command for slot 1.
+usb 1-6: hub failed to enable device, error -22
+
+xhci will give a context state error if we try to set a slot in default
+state to the same default state with a special address device command.
+
+Turns out this happends in several cases:
+- retry reading the device rescriptor in hub_port_init()
+- usb_reset_device() is called for a slot in default state
+- in resume path, usb_port_resume() calls hub_port_init()
+
+The default state is usually reached from most states with a reset device
+command without any context state errors, but using the address device
+command with BSA bit set (block set address) only works from the enabled
+state and will otherwise cause context error.
+
+solve this by checking if we are already in the default state before issuing
+a address device BSA=1 command.
+
+Fixes: 48fc7dbd52c0 ("usb: xhci: change enumeration scheme to 'new scheme'")
+Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/xhci.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/usb/host/xhci.c
++++ b/drivers/usb/host/xhci.c
+@@ -3803,6 +3803,15 @@ static int xhci_setup_device(struct usb_
+               return -EINVAL;
+       }
++      if (setup == SETUP_CONTEXT_ONLY) {
++              slot_ctx = xhci_get_slot_ctx(xhci, virt_dev->out_ctx);
++              if (GET_SLOT_STATE(le32_to_cpu(slot_ctx->dev_state)) ==
++                  SLOT_STATE_DEFAULT) {
++                      xhci_dbg(xhci, "Slot already in default state\n");
++                      return 0;
++              }
++      }
++
+       command = xhci_alloc_command(xhci, false, false, GFP_KERNEL);
+       if (!command)
+               return -ENOMEM;