summaryrefslogtreecommitdiff
path: root/drivers/i3c
diff options
context:
space:
mode:
authorIwona Winiarska <iwona.winiarska@intel.com>2021-12-19 21:51:41 +0300
committerIwona Winiarska <iwona.winiarska@intel.com>2022-01-10 14:56:05 +0300
commit2797f889860a4bb2cd9fb19b74b5828477eaadb9 (patch)
treef14988692031666d28c76629280ab1722cbc16a8 /drivers/i3c
parentb80993fda7a468bbcafddd16a1c67c86ddb10baa (diff)
downloadlinux-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.c4
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);