xhci: Fix incorrect stream context type macro
authorMathias Nyman <mathias.nyman@linux.intel.com>
Wed, 16 Oct 2024 13:59:57 +0000 (16:59 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Oct 2024 06:45:36 +0000 (08:45 +0200)
The stream contex type (SCT) bitfield is used both in the stream context
data structure,  and in the 'Set TR Dequeue pointer' command TRB.
In both cases it uses bits 3:1

The SCT_FOR_TRB(p) macro used to set the stream context type (SCT) field
for the 'Set TR Dequeue pointer' command TRB incorrectly shifts the value
1 bit left before masking the three bits.

Fix this by first masking and rshifting, just like the similar
SCT_FOR_CTX(p) macro does

This issue has not been visibile as the lost bit 3 is only used with
secondary stream arrays (SSA). Xhci driver currently only supports using
a primary stream array with Linear stream addressing.

Fixes: 95241dbdf828 ("xhci: Set SCT field for Set TR dequeue on streams")
Cc: stable@vger.kernel.org
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20241016140000.783905-2-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci.h

index 620502d..f0fb696 100644 (file)
@@ -1001,7 +1001,7 @@ enum xhci_setup_dev {
 /* Set TR Dequeue Pointer command TRB fields, 6.4.3.9 */
 #define TRB_TO_STREAM_ID(p)            ((((p) & (0xffff << 16)) >> 16))
 #define STREAM_ID_FOR_TRB(p)           ((((p)) & 0xffff) << 16)
-#define SCT_FOR_TRB(p)                 (((p) << 1) & 0x7)
+#define SCT_FOR_TRB(p)                 (((p) & 0x7) << 1)
 
 /* Link TRB specific fields */
 #define TRB_TC                 (1<<1)