[PATCH v1] i3c: master: svc: Update actual read length

Frank Li Frank.li at nxp.com
Tue Apr 1 08:00:49 PDT 2025


On Tue, Apr 01, 2025 at 02:34:06PM +0800, Stanley Chu wrote:
> From: Stanley Chu <yschu at nuvoton.com>
>
> Some drivers, such as mctp-i3c.c, reuse the i3c_priv_xfer.len as

In include/linux/i3c/device.h define API as

/**
 * struct i3c_priv_xfer - I3C SDR private transfer
 ...
 * @len: transfer length in bytes of the transfer
 * @actual_len: actual length in bytes are transferred by the controller
 ...
 */
struct i3c_priv_xfer {
...
        u16 len;
        u16 actual_len;
...
};

You should fix mctp-i3c.c or need change API defination firstly.

Frank

> the actual read len. Therefore, the controller driver should also
> update the i3c_priv_xfer.len after the read transfer is completed.
>
> Signed-off-by: Stanley Chu <yschu at nuvoton.com>
> ---
>  drivers/i3c/master/svc-i3c-master.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
> index 85e16de208d3..dd520f5d4c9f 100644
> --- a/drivers/i3c/master/svc-i3c-master.c
> +++ b/drivers/i3c/master/svc-i3c-master.c
> @@ -1470,9 +1470,16 @@ static void svc_i3c_master_start_xfer_locked(struct svc_i3c_master *master)
>  					  cmd->len, &cmd->actual_len,
>  					  cmd->continued);
>  		/* cmd->xfer is NULL if I2C or CCC transfer */
> -		if (cmd->xfer)
> +		if (cmd->xfer) {
>  			cmd->xfer->actual_len = cmd->actual_len;
>
> +			/*
> +			 * Some i3c drivers reuse i3c_priv_xfer.len as
> +			 * the actual read length.
> +			 */
> +			cmd->xfer->len = cmd->actual_len;
> +		}
> +
>  		if (ret)
>  			break;
>  	}
> --
> 2.34.1
>



More information about the linux-i3c mailing list