diff options
author | Iwona Winiarska <iwona.winiarska@intel.com> | 2021-12-19 21:51:41 +0300 |
---|---|---|
committer | Iwona Winiarska <iwona.winiarska@intel.com> | 2022-01-10 14:56:05 +0300 |
commit | 2797f889860a4bb2cd9fb19b74b5828477eaadb9 (patch) | |
tree | f14988692031666d28c76629280ab1722cbc16a8 /drivers/i3c | |
parent | b80993fda7a468bbcafddd16a1c67c86ddb10baa (diff) | |
download | linux-2797f889860a4bb2cd9fb19b74b5828477eaadb9.tar.xz |
i3c: dw: master: Fix IBI reading
dw_i3c_master_read_fifo() uses readsl() that allows to read all requested
data and writes it to the given buffer.
Calling it in a loop may cause the data to be overwritten.
Signed-off-by: Iwona Winiarska <iwona.winiarska@intel.com>
Diffstat (limited to 'drivers/i3c')
-rw-r--r-- | drivers/i3c/master/dw-i3c-master.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/i3c/master/dw-i3c-master.c b/drivers/i3c/master/dw-i3c-master.c index 282fa292dc6e..f883256665a6 100644 --- a/drivers/i3c/master/dw-i3c-master.c +++ b/drivers/i3c/master/dw-i3c-master.c @@ -1467,7 +1467,6 @@ static void dw_i3c_master_sir_handler(struct dw_i3c_master *master, struct i3c_ibi_slot *slot; struct i3c_dev_desc *dev; u8 *buf; - int i; dev = dw_get_i3c_dev_by_addr(master, addr); if (!dev) { @@ -1486,8 +1485,7 @@ static void dw_i3c_master_sir_handler(struct dw_i3c_master *master, memcpy(buf, &ibi_status, sizeof(ibi_status)); buf += sizeof(ibi_status); - for (i = 0; i < (!(length % 4) ? (length / 4) : (length / 4 + 1)); i++) - dw_i3c_master_read_ibi_fifo(master, buf, length); + dw_i3c_master_read_ibi_fifo(master, buf, length); slot->len = length + sizeof(ibi_status); |