Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

i3c: mipi-i3c-hci: Add missing TID field to no-op command descriptor

The internal control command descriptor used for no-op commands includes a
Transaction ID (TID) field, but the no-op command constructed in
hci_dma_dequeue_xfer() omitted it. As a result, the hardware receives a
no-op descriptor without the expected TID.

This bug has gone unnoticed because the TID is currently not validated in
the no-op completion path, but the descriptor format requires it to be
present.

Add the missing TID field when generating a no-op descriptor so that its
layout matches the defined command structure.

Fixes: 9ad9a52cce282 ("i3c/master: introduce the mipi-i3c-hci driver")
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20260306072451.11131-10-adrian.hunter@intel.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

authored by

Adrian Hunter and committed by
Alexandre Belloni
ec3cfd83 b795e68b

+2 -1
+1
drivers/i3c/master/mipi-i3c-hci/cmd.h
··· 17 17 #define CMD_0_TOC W0_BIT_(31) 18 18 #define CMD_0_ROC W0_BIT_(30) 19 19 #define CMD_0_ATTR W0_MASK(2, 0) 20 + #define CMD_0_TID W0_MASK(6, 3) 20 21 21 22 /* 22 23 * Response Descriptor Structure
+1 -1
drivers/i3c/master/mipi-i3c-hci/dma.c
··· 582 582 u32 *ring_data = rh->xfer + rh->xfer_struct_sz * idx; 583 583 584 584 /* store no-op cmd descriptor */ 585 - *ring_data++ = FIELD_PREP(CMD_0_ATTR, 0x7); 585 + *ring_data++ = FIELD_PREP(CMD_0_ATTR, 0x7) | FIELD_PREP(CMD_0_TID, xfer->cmd_tid); 586 586 *ring_data++ = 0; 587 587 if (hci->cmd == &mipi_i3c_hci_cmd_v2) { 588 588 *ring_data++ = 0;