Re: [PATCH] soundwire: cadence: Don't overwrite msg->buf during write commands
From: Pierre-Louis Bossart
Date: Fri Sep 16 2022 - 07:05:05 EST
On 9/16/22 12:35, Richard Fitzgerald wrote:
> The buf passed in struct sdw_msg must only be written for a READ,
> in that case the RDATA part of the response is the data value of the
> register.
>
> For a write command there is no RDATA, and buf should be assumed to
> be const and unmodifable. The original caller should not expect its data
> buffer to be corrupted by an sdw_nwrite().
>
> Signed-off-by: Richard Fitzgerald <rf@xxxxxxxxxxxxxxxxxxxxx>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>
> ---
> drivers/soundwire/cadence_master.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c
> index be9cd47f31ec..3ef472049980 100644
> --- a/drivers/soundwire/cadence_master.c
> +++ b/drivers/soundwire/cadence_master.c
> @@ -544,9 +544,12 @@ cdns_fill_msg_resp(struct sdw_cdns *cdns,
> return SDW_CMD_IGNORED;
> }
>
> - /* fill response */
> - for (i = 0; i < count; i++)
> - msg->buf[i + offset] = FIELD_GET(CDNS_MCP_RESP_RDATA, cdns->response_buf[i]);
> + if (msg->flags == SDW_MSG_FLAG_READ) {
> + /* fill response */
> + for (i = 0; i < count; i++)
> + msg->buf[i + offset] = FIELD_GET(CDNS_MCP_RESP_RDATA,
> + cdns->response_buf[i]);
> + }
>
> return SDW_CMD_OK;
> }