Message ID | 20250317051951.3065011-3-yschu@nuvoton.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Some fixes for Silvaco I3C controller driver | expand |
On Mon, Mar 17, 2025 at 01:19:50PM +0800, Stanley Chu wrote: > From: Stanley Chu <yschu@nuvoton.com> > > 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. > > Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver") Cc stable? > Signed-off-by: Stanley Chu <yschu@nuvoton.com> strange, why this issue exists for so long time. Maybe we just use first byte of IBI data. Reviewed-by: Frank Li <Frank.Li@nxp.com> > --- > drivers/i3c/master/svc-i3c-master.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c > index a72ba5a7edd4..57b9dec6b5a8 100644 > --- a/drivers/i3c/master/svc-i3c-master.c > +++ b/drivers/i3c/master/svc-i3c-master.c > @@ -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; > } > -- > 2.34.1 >
diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index a72ba5a7edd4..57b9dec6b5a8 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -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; }