]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 17 May 2021 08:12:13 +0000 (10:12 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 17 May 2021 08:12:13 +0000 (10:12 +0200)
added patches:
usb-core-hub-fix-race-condition-about-trsmrcy-of-resume.patch
usb-dwc2-fix-gadget-dma-unmap-direction.patch
usb-xhci-increase-timeout-for-hc-halt.patch

queue-4.4/series
queue-4.4/usb-core-hub-fix-race-condition-about-trsmrcy-of-resume.patch [new file with mode: 0644]
queue-4.4/usb-dwc2-fix-gadget-dma-unmap-direction.patch [new file with mode: 0644]
queue-4.4/usb-xhci-increase-timeout-for-hc-halt.patch [new file with mode: 0644]

index fc4208a3590234d4479175408d458b48415edb22..017141e48e53ac3511f6cff6cc9ecd8cf4d38555 100644 (file)
@@ -163,3 +163,6 @@ arc-entry-fix-off-by-one-error-in-syscall-number-validation.patch
 powerpc-64s-fix-crashes-when-toggling-entry-flush-barrier.patch
 squashfs-fix-divide-error-in-calculate_skip.patch
 usb-fotg210-hcd-fix-an-error-message.patch
+usb-xhci-increase-timeout-for-hc-halt.patch
+usb-dwc2-fix-gadget-dma-unmap-direction.patch
+usb-core-hub-fix-race-condition-about-trsmrcy-of-resume.patch
diff --git a/queue-4.4/usb-core-hub-fix-race-condition-about-trsmrcy-of-resume.patch b/queue-4.4/usb-core-hub-fix-race-condition-about-trsmrcy-of-resume.patch
new file mode 100644 (file)
index 0000000..7029c8e
--- /dev/null
@@ -0,0 +1,45 @@
+From 975f94c7d6c306b833628baa9aec3f79db1eb3a1 Mon Sep 17 00:00:00 2001
+From: Chunfeng Yun <chunfeng.yun@mediatek.com>
+Date: Wed, 12 May 2021 10:07:38 +0800
+Subject: usb: core: hub: fix race condition about TRSMRCY of resume
+
+From: Chunfeng Yun <chunfeng.yun@mediatek.com>
+
+commit 975f94c7d6c306b833628baa9aec3f79db1eb3a1 upstream.
+
+This may happen if the port becomes resume status exactly
+when usb_port_resume() gets port status, it still need provide
+a TRSMCRY time before access the device.
+
+CC: <stable@vger.kernel.org>
+Reported-by: Tianping Fang <tianping.fang@mediatek.com>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
+Link: https://lore.kernel.org/r/20210512020738.52961-1-chunfeng.yun@mediatek.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/core/hub.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/core/hub.c
++++ b/drivers/usb/core/hub.c
+@@ -3430,9 +3430,6 @@ int usb_port_resume(struct usb_device *u
+                * sequence.
+                */
+               status = hub_port_status(hub, port1, &portstatus, &portchange);
+-
+-              /* TRSMRCY = 10 msec */
+-              msleep(10);
+       }
+  SuspendCleared:
+@@ -3447,6 +3444,9 @@ int usb_port_resume(struct usb_device *u
+                               usb_clear_port_feature(hub->hdev, port1,
+                                               USB_PORT_FEAT_C_SUSPEND);
+               }
++
++              /* TRSMRCY = 10 msec */
++              msleep(10);
+       }
+       if (udev->persist_enabled && hub_is_superspeed(hub->hdev))
diff --git a/queue-4.4/usb-dwc2-fix-gadget-dma-unmap-direction.patch b/queue-4.4/usb-dwc2-fix-gadget-dma-unmap-direction.patch
new file mode 100644 (file)
index 0000000..22e1d80
--- /dev/null
@@ -0,0 +1,67 @@
+From 75a41ce46bae6cbe7d3bb2584eb844291d642874 Mon Sep 17 00:00:00 2001
+From: Phil Elwell <phil@raspberrypi.com>
+Date: Thu, 6 May 2021 12:22:00 +0100
+Subject: usb: dwc2: Fix gadget DMA unmap direction
+
+From: Phil Elwell <phil@raspberrypi.com>
+
+commit 75a41ce46bae6cbe7d3bb2584eb844291d642874 upstream.
+
+The dwc2 gadget support maps and unmaps DMA buffers as necessary. When
+mapping and unmapping it uses the direction of the endpoint to select
+the direction of the DMA transfer, but this fails for Control OUT
+transfers because the unmap occurs after the endpoint direction has
+been reversed for the status phase.
+
+A possible solution would be to unmap the buffer before the direction
+is changed, but a safer, less invasive fix is to remember the buffer
+direction independently of the endpoint direction.
+
+Fixes: fe0b94abcdf6 ("usb: dwc2: gadget: manage ep0 state in software")
+Acked-by: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Phil Elwell <phil@raspberrypi.com>
+Link: https://lore.kernel.org/r/20210506112200.2893922-1-phil@raspberrypi.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/dwc2/core.h   |    2 ++
+ drivers/usb/dwc2/gadget.c |    3 ++-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/dwc2/core.h
++++ b/drivers/usb/dwc2/core.h
+@@ -144,6 +144,7 @@ struct dwc2_hsotg_req;
+  * @lock: State lock to protect contents of endpoint.
+  * @dir_in: Set to true if this endpoint is of the IN direction, which
+  *          means that it is sending data to the Host.
++ * @map_dir: Set to the value of dir_in when the DMA buffer is mapped.
+  * @index: The index for the endpoint registers.
+  * @mc: Multi Count - number of transactions per microframe
+  * @interval - Interval for periodic endpoints
+@@ -185,6 +186,7 @@ struct dwc2_hsotg_ep {
+       unsigned short          fifo_index;
+       unsigned char           dir_in;
++      unsigned char           map_dir;
+       unsigned char           index;
+       unsigned char           mc;
+       u16                     interval;
+--- a/drivers/usb/dwc2/gadget.c
++++ b/drivers/usb/dwc2/gadget.c
+@@ -289,7 +289,7 @@ static void dwc2_hsotg_unmap_dma(struct
+       if (hs_req->req.length == 0)
+               return;
+-      usb_gadget_unmap_request(&hsotg->gadget, req, hs_ep->dir_in);
++      usb_gadget_unmap_request(&hsotg->gadget, req, hs_ep->map_dir);
+ }
+ /**
+@@ -707,6 +707,7 @@ static int dwc2_hsotg_map_dma(struct dwc
+       if (hs_req->req.length == 0)
+               return 0;
++      hs_ep->map_dir = hs_ep->dir_in;
+       ret = usb_gadget_map_request(&hsotg->gadget, req, hs_ep->dir_in);
+       if (ret)
+               goto dma_error;
diff --git a/queue-4.4/usb-xhci-increase-timeout-for-hc-halt.patch b/queue-4.4/usb-xhci-increase-timeout-for-hc-halt.patch
new file mode 100644 (file)
index 0000000..ed04cd3
--- /dev/null
@@ -0,0 +1,38 @@
+From ca09b1bea63ab83f4cca3a2ae8bc4f597ec28851 Mon Sep 17 00:00:00 2001
+From: Maximilian Luz <luzmaximilian@gmail.com>
+Date: Wed, 12 May 2021 11:08:15 +0300
+Subject: usb: xhci: Increase timeout for HC halt
+
+From: Maximilian Luz <luzmaximilian@gmail.com>
+
+commit ca09b1bea63ab83f4cca3a2ae8bc4f597ec28851 upstream.
+
+On some devices (specifically the SC8180x based Surface Pro X with
+QCOM04A6) HC halt / xhci_halt() times out during boot. Manually binding
+the xhci-hcd driver at some point later does not exhibit this behavior.
+To work around this, double XHCI_MAX_HALT_USEC, which also resolves this
+issue.
+
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
+Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
+Link: https://lore.kernel.org/r/20210512080816.866037-5-mathias.nyman@linux.intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/host/xhci-ext-caps.h |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/host/xhci-ext-caps.h
++++ b/drivers/usb/host/xhci-ext-caps.h
+@@ -19,8 +19,9 @@
+  * along with this program; if not, write to the Free Software Foundation,
+  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+  */
+-/* Up to 16 ms to halt an HC */
+-#define XHCI_MAX_HALT_USEC    (16*1000)
++
++/* HC should halt within 16 ms, but use 32 ms as some hosts take longer */
++#define XHCI_MAX_HALT_USEC    (32 * 1000)
+ /* HC not running - set to 1 when run/stop bit is cleared. */
+ #define XHCI_STS_HALT         (1<<0)