From: Bin Meng <bin.m...@windriver.com> At present the sd_erase() does not erase the requested range of card data to 0xFFs. Let's make the erase operation actually happen.
Signed-off-by: Bin Meng <bin.m...@windriver.com> --- hw/sd/sd.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 1886d4b30b..8c397d4ad7 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -765,6 +765,8 @@ static void sd_erase(SDState *sd) int i; uint64_t erase_start = sd->erase_start; uint64_t erase_end = sd->erase_end; + uint64_t erase_addr; + int erase_len = 1 << HWBLOCK_SHIFT; trace_sdcard_erase(sd->erase_start, sd->erase_end); if (sd->erase_start == INVALID_ADDRESS @@ -788,6 +790,13 @@ static void sd_erase(SDState *sd) return; } + memset(sd->data, 0xff, erase_len); + erase_addr = erase_start; + for (i = 0; i < (erase_end - erase_start) / erase_len + 1; i++) { + BLK_WRITE_BLOCK(erase_addr, erase_len); + erase_addr += erase_len; + } + erase_start = sd_addr_to_wpnum(erase_start); erase_end = sd_addr_to_wpnum(erase_end); sd->erase_start = INVALID_ADDRESS; -- 2.25.1