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; > }