On 3/1/2026 7:26 PM, Jamin Lin wrote:
> The GETMRL handling logic extracted MSB/LSB bytes from
> s->cfg.buf_size using a mask-and-shift expression:
> 
>   (buf_size & (0xff00 >> (offset * 8))) >>
>   (8 - (offset * 8))
> 
> While functionally correct, the expression is difficult to read
> and obscures the intent, which is simply to return a 16-bit value
> in MSB-first order.
> 
> Replace the mask/shift formula with explicit MSB/LSB extraction:
> 
>   offset == 0 -> buf_size >> 8
>   offset == 1 -> buf_size & 0xff
> 
> This makes the code clearer and easier to review without altering
> behavior or data ordering.
> 
> No functional change.
> 
> Signed-off-by: Jamin Lin <[email protected]>
> ---
>  hw/i3c/mock-i3c-target.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/i3c/mock-i3c-target.c b/hw/i3c/mock-i3c-target.c
> index 5c913ee49b..845c173427 100644
> --- a/hw/i3c/mock-i3c-target.c
> +++ b/hw/i3c/mock-i3c-target.c
> @@ -145,9 +145,12 @@ static int mock_i3c_target_handle_ccc_read(I3CTarget 
> *i3c, uint8_t *data,
>              if (s->ccc_byte_offset >= 2) {
>                  break;
>              }
> -            data[s->ccc_byte_offset] = (s->cfg.buf_size &
> -                                        (0xff00 >> (s->ccc_byte_offset * 
> 8))) >>
> -                                        (8 - (s->ccc_byte_offset * 8));
> +            if (s->ccc_byte_offset == 0) {
> +                data[s->ccc_byte_offset] = (uint8_t)(s->cfg.buf_size >> 8);
> +            } else {
> +                data[s->ccc_byte_offset] = (uint8_t)s->cfg.buf_size;
> +            }
> +
>              s->ccc_byte_offset++;
>              *num_read = num_to_read;
>          }

Looks way more readable

Reviewed-by: Jithu Joseph <[email protected]>


Thanks
Jithu

Reply via email to