[PATCH 07/12] i3c: mipi-i3c-hci: Add missing TID field to no-op command descriptor

Frank Li Frank.li at nxp.com
Fri Feb 27 08:27:40 PST 2026


On Fri, Feb 27, 2026 at 04:11:44PM +0200, Adrian Hunter wrote:
> 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 at vger.kernel.org
> Signed-off-by: Adrian Hunter <adrian.hunter at intel.com>
> ---

Reviewed-by: Frank Li <Frank.Li at nxp.com>
>  drivers/i3c/master/mipi-i3c-hci/cmd.h | 1 +
>  drivers/i3c/master/mipi-i3c-hci/dma.c | 2 +-
>  2 files changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/cmd.h b/drivers/i3c/master/mipi-i3c-hci/cmd.h
> index 1d6dd2c5d01a..b1bf87daa651 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/cmd.h
> +++ b/drivers/i3c/master/mipi-i3c-hci/cmd.h
> @@ -17,6 +17,7 @@
>  #define CMD_0_TOC			W0_BIT_(31)
>  #define CMD_0_ROC			W0_BIT_(30)
>  #define CMD_0_ATTR			W0_MASK(2, 0)
> +#define CMD_0_TID			W0_MASK(6, 3)
>
>  /*
>   * Response Descriptor Structure
> diff --git a/drivers/i3c/master/mipi-i3c-hci/dma.c b/drivers/i3c/master/mipi-i3c-hci/dma.c
> index dff96b84479e..a11d0743fb80 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/dma.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/dma.c
> @@ -586,7 +586,7 @@ static bool hci_dma_dequeue_xfer(struct i3c_hci *hci,
>  			u32 *ring_data = rh->xfer + rh->xfer_struct_sz * idx;
>
>  			/* store no-op cmd descriptor */
> -			*ring_data++ = FIELD_PREP(CMD_0_ATTR, 0x7);
> +			*ring_data++ = FIELD_PREP(CMD_0_ATTR, 0x7) | FIELD_PREP(CMD_0_TID, xfer->cmd_tid);
>  			*ring_data++ = 0;
>  			if (hci->cmd == &mipi_i3c_hci_cmd_v2) {
>  				*ring_data++ = 0;
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c



More information about the linux-i3c mailing list