| From 97ef0faf575e03b352553f92c9430cb4c0431436 Mon Sep 17 00:00:00 2001 |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Date: Thu, 8 Mar 2018 17:17:14 +0200 |
| Subject: xhci: fix endpoint context tracer output |
| |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| |
| commit 97ef0faf575e03b352553f92c9430cb4c0431436 upstream. |
| |
| Fix incorrent values showed for max Primary stream and |
| Linear stream array (LSA) values in the endpoint context |
| decoder. |
| |
| Fixes: 19a7d0d65c4a ("usb: host: xhci: add Slot and EP Context tracers") |
| Cc: <stable@vger.kernel.org> # v4.12+ |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/host/xhci.h | 22 ++++++++++++---------- |
| 1 file changed, 12 insertions(+), 10 deletions(-) |
| |
| --- a/drivers/usb/host/xhci.h |
| +++ b/drivers/usb/host/xhci.h |
| @@ -728,11 +728,12 @@ struct xhci_ep_ctx { |
| /* bits 10:14 are Max Primary Streams */ |
| /* bit 15 is Linear Stream Array */ |
| /* Interval - period between requests to an endpoint - 125u increments. */ |
| -#define EP_INTERVAL(p) (((p) & 0xff) << 16) |
| -#define EP_INTERVAL_TO_UFRAMES(p) (1 << (((p) >> 16) & 0xff)) |
| -#define CTX_TO_EP_INTERVAL(p) (((p) >> 16) & 0xff) |
| -#define EP_MAXPSTREAMS_MASK (0x1f << 10) |
| -#define EP_MAXPSTREAMS(p) (((p) << 10) & EP_MAXPSTREAMS_MASK) |
| +#define EP_INTERVAL(p) (((p) & 0xff) << 16) |
| +#define EP_INTERVAL_TO_UFRAMES(p) (1 << (((p) >> 16) & 0xff)) |
| +#define CTX_TO_EP_INTERVAL(p) (((p) >> 16) & 0xff) |
| +#define EP_MAXPSTREAMS_MASK (0x1f << 10) |
| +#define EP_MAXPSTREAMS(p) (((p) << 10) & EP_MAXPSTREAMS_MASK) |
| +#define CTX_TO_EP_MAXPSTREAMS(p) (((p) & EP_MAXPSTREAMS_MASK) >> 10) |
| /* Endpoint is set up with a Linear Stream Array (vs. Secondary Stream Array) */ |
| #define EP_HAS_LSA (1 << 15) |
| /* hosts with LEC=1 use bits 31:24 as ESIT high bits. */ |
| @@ -2540,21 +2541,22 @@ static inline const char *xhci_decode_ep |
| u8 burst; |
| u8 cerr; |
| u8 mult; |
| - u8 lsa; |
| - u8 hid; |
| + |
| + bool lsa; |
| + bool hid; |
| |
| esit = CTX_TO_MAX_ESIT_PAYLOAD_HI(info) << 16 | |
| CTX_TO_MAX_ESIT_PAYLOAD(tx_info); |
| |
| ep_state = info & EP_STATE_MASK; |
| - max_pstr = info & EP_MAXPSTREAMS_MASK; |
| + max_pstr = CTX_TO_EP_MAXPSTREAMS(info); |
| interval = CTX_TO_EP_INTERVAL(info); |
| mult = CTX_TO_EP_MULT(info) + 1; |
| - lsa = info & EP_HAS_LSA; |
| + lsa = !!(info & EP_HAS_LSA); |
| |
| cerr = (info2 & (3 << 1)) >> 1; |
| ep_type = CTX_TO_EP_TYPE(info2); |
| - hid = info2 & (1 << 7); |
| + hid = !!(info2 & (1 << 7)); |
| burst = CTX_TO_MAX_BURST(info2); |
| maxp = MAX_PACKET_DECODED(info2); |
| |