Thanks Philippe,

I would test this and get back.

Regards,
Sai Pavan

> -----Original Message-----
> From: Philippe Mathieu-Daudé <[email protected]> On
> Behalf Of Philippe Mathieu-Daudé
> Sent: Saturday, August 15, 2020 1:29 PM
> To: Bin Meng <[email protected]>; Alistair Francis
> <[email protected]>; Bastian Koppelmann <[email protected]
> paderborn.de>; Palmer Dabbelt <[email protected]>; Sagar
> Karandikar <[email protected]>; [email protected]; qemu-
> [email protected]; Sai Pavan Boddu <[email protected]>
> Cc: Bin Meng <[email protected]>; [email protected]
> Subject: Re: [PATCH 07/18] hw/sd: sd: Fix incorrect populated function switch
> status data structure
> 
> +Sai Pavan
> 
> On 8/14/20 6:40 PM, Bin Meng wrote:
> > From: Bin Meng <[email protected]>
> >
> > At present the function switch status data structure bit [399:376] are
> > wrongly pupulated. These 3 bytes encode function switch status for the
> > 6 function groups, with 4 bits per group, starting from function group
> > 6 at bit 399, then followed by function group 5 at bit 395, and so on.
> >
> > However the codes mistakenly fills in the function group 1 status at
> > bit 399. This fixes the code logic.
> >
> 
> Fixes: a1bb27b1e9 ("SD card emulation (initial implementation)")
> 
> > Signed-off-by: Bin Meng <[email protected]>
> > ---
> >
> >  hw/sd/sd.c | 6 +++++-
> >  1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/hw/sd/sd.c b/hw/sd/sd.c
> > index fad9cf1..51f5900 100644
> > --- a/hw/sd/sd.c
> > +++ b/hw/sd/sd.c
> > @@ -806,11 +806,15 @@ static void sd_function_switch(SDState *sd,
> uint32_t arg)
> >      sd->data[11] = 0x43;
> >      sd->data[12] = 0x80;   /* Supported group 1 functions */
> >      sd->data[13] = 0x03;
> > +
> > +    sd->data[14] = 0;
> > +    sd->data[15] = 0;
> > +    sd->data[16] = 0;
> 
> Pointless zero initialization.
> 
> Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
> 
> I'll wait until next week in case Sai Pavan wants to test this patch (I don't 
> have
> access to the Xilinx images anymore) then I'll queue this via my sd-next tree.
> 
> Regards,
> 
> Phil.
> 
> >      for (i = 0; i < 6; i ++) {
> >          new_func = (arg >> (i * 4)) & 0x0f;
> >          if (mode && new_func != 0x0f)
> >              sd->function_group[i] = new_func;
> > -        sd->data[14 + (i >> 1)] = new_func << ((i * 4) & 4);
> > +        sd->data[16 - (i >> 1)] |= new_func << ((i % 2) * 4);
> >      }
> >      memset(&sd->data[17], 0, 47);
> >      stw_be_p(sd->data + 64, sd_crc16(sd->data, 64));
> >

Reply via email to