Message ID | 20210216150225.27996-3-bmeng.cn@gmail.com |
---|---|
State | New |
Headers | show |
Series | hw/sd: sd: Erase operation and other fixes | expand |
On 2/16/21 4:02 PM, Bin Meng wrote: > From: Bin Meng <bin.meng@windriver.com> > > Per the "Physical Layer Specification Version 8.00", table 4-26 > (SD mode) and table 7-3 (SPI mode) command descriptions, the > following commands: > > - CMD28 (SET_WRITE_PROT) > - CMD29 (CLR_WRITE_PROT) > - CMD30 (SEND_WRITE_PROT) > > are only supported by SDSC cards. > > Signed-off-by: Bin Meng <bin.meng@windriver.com> > > --- > > Changes in v2: > - new patch: sd: Only SDSC cards support CMD28/29/30 > > hw/sd/sd.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
diff --git a/hw/sd/sd.c b/hw/sd/sd.c index a6a0b3dcc6..273bae0a9a 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -1284,6 +1284,10 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, SDRequest req) /* Write protection (Class 6) */ case 28: /* CMD28: SET_WRITE_PROT */ + if (sd->size > SDSC_MAX_CAPACITY) { + return sd_illegal; + } + switch (sd->state) { case sd_transfer_state: if (addr >= sd->size) { @@ -1303,6 +1307,10 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, SDRequest req) break; case 29: /* CMD29: CLR_WRITE_PROT */ + if (sd->size > SDSC_MAX_CAPACITY) { + return sd_illegal; + } + switch (sd->state) { case sd_transfer_state: if (addr >= sd->size) { @@ -1322,6 +1330,10 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, SDRequest req) break; case 30: /* CMD30: SEND_WRITE_PROT */ + if (sd->size > SDSC_MAX_CAPACITY) { + return sd_illegal; + } + switch (sd->state) { case sd_transfer_state: sd->state = sd_sendingdata_state;