On 8/17/20 12:03 PM, Bin Meng wrote: > Per the SD spec, Standard Capacity SD Memory Card (SDSC) supports > capacity up to and including 2 GiB. > > Fixes: 2d7adea4fe ("hw/sd: Support SDHC size cards") > Signed-off-by: Bin Meng <bin.m...@windriver.com>
Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > > Changes in v2: > - fix SDSC size check in sd_set_csd() too > > hw/sd/sd.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/hw/sd/sd.c b/hw/sd/sd.c > index 3226404..254d713 100644 > --- a/hw/sd/sd.c > +++ b/hw/sd/sd.c > @@ -50,6 +50,8 @@ > > //#define DEBUG_SD 1 > > +#define SDSC_MAX_CAPACITY (2 * GiB) > + > typedef enum { > sd_r0 = 0, /* no response */ > sd_r1, /* normal response command */ > @@ -313,7 +315,7 @@ static void sd_ocr_powerup(void *opaque) > /* card power-up OK */ > sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_POWER_UP, 1); > > - if (sd->size > 1 * GiB) { > + if (sd->size > SDSC_MAX_CAPACITY) { > sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_CAPACITY, 1); > } > } > @@ -385,7 +387,7 @@ static void sd_set_csd(SDState *sd, uint64_t size) > uint32_t sectsize = (1 << (SECTOR_SHIFT + 1)) - 1; > uint32_t wpsize = (1 << (WPGROUP_SHIFT + 1)) - 1; > > - if (size <= 1 * GiB) { /* Standard Capacity SD */ > + if (size <= SDSC_MAX_CAPACITY) { /* Standard Capacity SD */ > sd->csd[0] = 0x00; /* CSD structure */ > sd->csd[1] = 0x26; /* Data read access-time-1 */ > sd->csd[2] = 0x00; /* Data read access-time-2 */ >