Hi Jithu Joseph

> Subject: Re: [PATCH v7 18/22] hw/i3c: Add Mock target
> 
> 
> Apologies for chiming in this late ... I only got a chance to test this last 
> week
> This really is a minor comment ... can be addressed subsequently
> 
> On 2/24/2026 6:12 PM, Jamin Lin wrote:
> > Adds a simple i3c device to be used for testing in lieu of a real
> > device.
> >
> > The mock target supports the following features:
> > - A buffer that users can read and write to.
> > - CCC support for commonly used CCCs when probing devices on an I3C bus.
> > - IBI sending upon receiving a user-defined byte.
> >
> > Signed-off-by: Joe Komlodi <[email protected]>
> > Reviewed-by: Titus Rwantare <[email protected]>
> > Reviewed-by: Patrick Venture <[email protected]>
> > Reviewed-by: Jamin Lin <[email protected]>
> > Signed-off-by: Jamin Lin <[email protected]>
> > ---
> >  include/hw/i3c/mock-i3c-target.h |  52 ++++++
> >  hw/i3c/mock-i3c-target.c         | 298
> +++++++++++++++++++++++++++++++
> >  hw/i3c/Kconfig                   |  10 ++
> >  hw/i3c/meson.build               |   1 +
> >  hw/i3c/trace-events              |  10 ++
> >  5 files changed, 371 insertions(+)
> >  create mode 100644 include/hw/i3c/mock-i3c-target.h  create mode
> > 100644 hw/i3c/mock-i3c-target.c
> >
> > diff --git a/include/hw/i3c/mock-i3c-target.h
> > b/include/hw/i3c/mock-i3c-target.h
> > new file mode 100644
> 
> ...
> 
> > +static int mock_i3c_target_tx(I3CTarget *i3c, const uint8_t *data,
> > +                              uint32_t num_to_send, uint32_t
> > +*num_sent) {
> > +    MockI3cTargetState *s = MOCK_I3C_TARGET(i3c);
> > +    int ret;
> > +    uint32_t to_write;
> > +
> > +    if (s->cfg.ibi_magic && num_to_send == 1 && s->cfg.ibi_magic ==
> *data) {
> > +        mock_i3c_target_ibi_timer_start(s);
> > +        return 0;
> > +    }
> > +
> > +    /* Bounds check. */
> > +    if (num_to_send + s->p_buf > s->cfg.buf_size) {
> > +        to_write = s->cfg.buf_size - s->p_buf;
> > +        ret = -1;
> > +    } else {
> > +        to_write = num_to_send;
> > +        ret = 0;
> > +    }
> > +    for (uint32_t i = 0; i < to_write; i++) {
> > +        trace_mock_i3c_target_tx(data[i]);
> > +        s->buf[s->p_buf] = data[i];
> > +        s->p_buf++;
> > +    }
> 
> 
> num_sent is never updated prior to return, so the traces (from caller 
> i3c_send)
> looked a bit confusing
> 
> <snip>
> mock_i3c_target_tx I3C mock target write 0x12
> i3c_send I3C send 0/1 bytes, ack=1   ---------------------> instead of 1/1 
> bytes
> mock_i3c_target_tx I3C mock target write 0x34 i3c_send I3C send 0/1 bytes,
> ack=1 </snip>
> 
> Something like below is needed
> + *num_sent = to_write
> (might also needed in the ibi magic path above)
> 
> 
> > +    return ret;
> > +}
> > +
> 

Thanks for your review and suggestion.
I send v1 here, 
https://patchwork.kernel.org/project/qemu-devel/list/?series=1059757 and ready 
for review.

Thanks,
Jamin

> Thanks
> Jithu

Reply via email to