On 9 May 2018 at 07:01, Philippe Mathieu-Daudé <f4...@amsat.org> wrote: > Per the Physical Layer Simplified Spec. "4.3.10.4 Switch Function Status": > > The block length is predefined to 512 bits > > and "4.10.2 SD Status": > > The SD Status contains status bits that are related to the SD Memory Card > proprietary features and may be used for future application-specific usage. > The size of the SD Status is one data block of 512 bit. The content of this > register is transmitted to the Host over the DAT bus along with a 16-bit > CRC. > > Thus the 16-bit CRC goes at offset 64. > > Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > hw/sd/sd.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/sd/sd.c b/hw/sd/sd.c > index 5fb4787671..24aaf0c767 100644 > --- a/hw/sd/sd.c > +++ b/hw/sd/sd.c > @@ -791,7 +791,7 @@ static void sd_function_switch(SDState *sd, uint32_t arg) > sd->data[14 + (i >> 1)] = new_func << ((i * 4) & 4); > } > memset(&sd->data[17], 0, 47); > - stw_be_p(sd->data + 65, sd_crc16(sd->data, 64)); > + stw_be_p(sd->data + 64, sd_crc16(sd->data, 64)); > } > > static inline bool sd_wp_addr(SDState *sd, uint64_t addr) > --
Oops, yes, off-by-one error that's been present forever (it was there before we did the conversion to stw_be_p()). Applied this one to target-arm.next. thanks -- PMM