mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-27 06:18:13 +00:00
ebbeb55561
Also add script used to generate patches and SRC_URI Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> Signed-off-by: Denys Dmytriyenko <denys@ti.com>
82 lines
2.4 KiB
Diff
82 lines
2.4 KiB
Diff
From 88294d7967eb85c2dde19473346a74fc1b324e09 Mon Sep 17 00:00:00 2001
|
|
From: Felipe Balbi <balbi@ti.com>
|
|
Date: Mon, 2 Jan 2012 13:35:41 +0200
|
|
Subject: [PATCH 43/49] usb: ch9: fix up MaxStreams helper
|
|
|
|
commit 18b7ede5f7ee2092aedcb578d3ac30bd5d4fc23c upstream.
|
|
|
|
[ removed the dwc3 portion of the patch as it didn't apply to
|
|
older kernels - gregkh]
|
|
|
|
According to USB 3.0 Specification Table 9-22, if
|
|
bmAttributes [4:0] are set to zero, it means "no
|
|
streams supported", but the way this helper was
|
|
defined on Linux, we will *always* have one stream
|
|
which might cause several problems.
|
|
|
|
For example on DWC3, we would tell the controller
|
|
endpoint has streams enabled and yet start transfers
|
|
with Stream ID set to 0, which would goof up the host
|
|
side.
|
|
|
|
While doing that, convert the macro to an inline
|
|
function due to the different checks we now need.
|
|
|
|
Signed-off-by: Felipe Balbi <balbi@ti.com>
|
|
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
---
|
|
drivers/usb/host/xhci.c | 3 +--
|
|
include/linux/usb/ch9.h | 20 +++++++++++++++++++-
|
|
2 files changed, 20 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
|
|
index 36f9dd8..b33f059 100644
|
|
--- a/drivers/usb/host/xhci.c
|
|
+++ b/drivers/usb/host/xhci.c
|
|
@@ -2797,8 +2797,7 @@ static int xhci_calculate_streams_and_bitmask(struct xhci_hcd *xhci,
|
|
if (ret < 0)
|
|
return ret;
|
|
|
|
- max_streams = USB_SS_MAX_STREAMS(
|
|
- eps[i]->ss_ep_comp.bmAttributes);
|
|
+ max_streams = usb_ss_max_streams(&eps[i]->ss_ep_comp);
|
|
if (max_streams < (*num_streams - 1)) {
|
|
xhci_dbg(xhci, "Ep 0x%x only supports %u stream IDs.\n",
|
|
eps[i]->desc.bEndpointAddress,
|
|
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
|
|
index d5da6c6..61b2905 100644
|
|
--- a/include/linux/usb/ch9.h
|
|
+++ b/include/linux/usb/ch9.h
|
|
@@ -605,8 +605,26 @@ struct usb_ss_ep_comp_descriptor {
|
|
} __attribute__ ((packed));
|
|
|
|
#define USB_DT_SS_EP_COMP_SIZE 6
|
|
+
|
|
/* Bits 4:0 of bmAttributes if this is a bulk endpoint */
|
|
-#define USB_SS_MAX_STREAMS(p) (1 << ((p) & 0x1f))
|
|
+static inline int
|
|
+usb_ss_max_streams(const struct usb_ss_ep_comp_descriptor *comp)
|
|
+{
|
|
+ int max_streams;
|
|
+
|
|
+ if (!comp)
|
|
+ return 0;
|
|
+
|
|
+ max_streams = comp->bmAttributes & 0x1f;
|
|
+
|
|
+ if (!max_streams)
|
|
+ return 0;
|
|
+
|
|
+ max_streams = 1 << max_streams;
|
|
+
|
|
+ return max_streams;
|
|
+}
|
|
+
|
|
/* Bits 1:0 of bmAttributes if this is an isoc endpoint */
|
|
#define USB_SS_MULT(p) (1 + ((p) & 0x3))
|
|
|
|
--
|
|
1.7.9.4
|
|
|