]> www.infradead.org Git - users/hch/misc.git/commitdiff
i3c: master: svc: Use readsb helper for reading MDB
authorStanley Chu <yschu@nuvoton.com>
Tue, 18 Mar 2025 05:36:05 +0000 (13:36 +0800)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Tue, 18 Mar 2025 16:14:35 +0000 (17:14 +0100)
The target can send the MDB byte followed by additional data bytes.
The readl on MRDATAB reads one actual byte, but the readsl advances
the destination pointer by 4 bytes. This causes the subsequent payload
to be copied to wrong position in the destination buffer.

Cc: stable@kernel.org
Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
Signed-off-by: Stanley Chu <yschu@nuvoton.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/r/20250318053606.3087121-3-yschu@nuvoton.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/i3c/master/svc-i3c-master.c

index a72ba5a7edd4b6aa1c48f4744a2424606ceed3da..57b9dec6b5a8909d8d11bcc572bc684e5624a190 100644 (file)
@@ -425,7 +425,7 @@ static int svc_i3c_master_handle_ibi(struct svc_i3c_master *master,
               slot->len < SVC_I3C_FIFO_SIZE) {
                mdatactrl = readl(master->regs + SVC_I3C_MDATACTRL);
                count = SVC_I3C_MDATACTRL_RXCOUNT(mdatactrl);
-               readsl(master->regs + SVC_I3C_MRDATAB, buf, count);
+               readsb(master->regs + SVC_I3C_MRDATAB, buf, count);
                slot->len += count;
                buf += count;
        }