hw/sd.c: Add missing state change for SD_STATUS, SEND_NUM_WR_BLOCKS
The SD_STATUS and SEND_NUM_WR_BLOCKS commands are supposed to cause the card to send data back to the host. However sd.c was missing the state change to sd_sendingdata_state for these commands, with the effect that the Linux driver would either hang indefinitely waiting for nonexistent data (pl181) or read zeroes and provoke a qemu warning message (omap). Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
5db8378a77
commit
fb1ba03ab0
2
hw/sd.c
2
hw/sd.c
@ -1168,6 +1168,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd,
|
|||||||
case 13: /* ACMD13: SD_STATUS */
|
case 13: /* ACMD13: SD_STATUS */
|
||||||
switch (sd->state) {
|
switch (sd->state) {
|
||||||
case sd_transfer_state:
|
case sd_transfer_state:
|
||||||
|
sd->state = sd_sendingdata_state;
|
||||||
sd->data_start = 0;
|
sd->data_start = 0;
|
||||||
sd->data_offset = 0;
|
sd->data_offset = 0;
|
||||||
return sd_r1;
|
return sd_r1;
|
||||||
@ -1182,6 +1183,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd,
|
|||||||
case sd_transfer_state:
|
case sd_transfer_state:
|
||||||
*(uint32_t *) sd->data = sd->blk_written;
|
*(uint32_t *) sd->data = sd->blk_written;
|
||||||
|
|
||||||
|
sd->state = sd_sendingdata_state;
|
||||||
sd->data_start = 0;
|
sd->data_start = 0;
|
||||||
sd->data_offset = 0;
|
sd->data_offset = 0;
|
||||||
return sd_r1;
|
return sd_r1;
|
||||||
|
Loading…
Reference in New Issue
Block a user