All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <f4bug@amsat.org>
To: Bin Meng <bmeng.cn@gmail.com>,
	qemu-block@nongnu.org, qemu-devel@nongnu.org
Cc: Bin Meng <bin.meng@windriver.com>
Subject: Re: [PATCH v2 6/8] hw/sd: sd: Actually perform the erase operation
Date: Fri, 19 Feb 2021 23:28:43 +0100	[thread overview]
Message-ID: <1afba402-8a95-db72-6529-0ac40d20b073@amsat.org> (raw)
In-Reply-To: <20210216150225.27996-7-bmeng.cn@gmail.com>

On 2/16/21 4:02 PM, Bin Meng wrote:
> From: Bin Meng <bin.meng@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.meng@windriver.com>
> 
> ---
> 
> Changes in v2:
> - honor the write protection bits for SDSC cards
> 
>  hw/sd/sd.c | 22 ++++++++++++++--------
>  1 file changed, 14 insertions(+), 8 deletions(-)
> 
> diff --git a/hw/sd/sd.c b/hw/sd/sd.c
> index f1f98bdec3..b386f16fcb 100644
> --- a/hw/sd/sd.c
> +++ b/hw/sd/sd.c
> @@ -766,6 +766,9 @@ static void sd_erase(SDState *sd)
>      uint64_t erase_start = sd->erase_start;
>      uint64_t erase_end = sd->erase_end;
>      bool sdsc = true;
> +    uint64_t wpnum;
> +    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
> @@ -794,17 +797,20 @@ static void sd_erase(SDState *sd)
>      sd->erase_end = INVALID_ADDRESS;
>      sd->csd[14] |= 0x40;
>  
> -    /* Only SDSC cards support write protect groups */
> -    if (sdsc) {
> -        erase_start = sd_addr_to_wpnum(erase_start);
> -        erase_end = sd_addr_to_wpnum(erase_end);
> -
> -        for (i = erase_start; i <= erase_end; i++) {
> -            assert(i < sd->wpgrps_size);
> -            if (test_bit(i, sd->wp_groups)) {
> +    memset(sd->data, 0xff, erase_len);
> +    erase_addr = erase_start;
> +    for (i = 0; i <= (erase_end - erase_start) / erase_len; i++) {
> +        if (sdsc) {
> +            /* Only SDSC cards support write protect groups */
> +            wpnum = sd_addr_to_wpnum(erase_addr);
> +            assert(wpnum < sd->wpgrps_size);
> +            if (test_bit(wpnum, sd->wp_groups)) {
>                  sd->card_status |= WP_ERASE_SKIP;
> +                continue;

So if a group is protected, you skip it but don't increase erase_addr.
If G#4 is protected and G#5 isn't, when you check G#5 you end erasing
G#4.

>              }
>          }
> +        BLK_WRITE_BLOCK(erase_addr, erase_len);
> +        erase_addr += erase_len;
>      }
>  }
>  
> 


  reply	other threads:[~2021-02-19 22:29 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-16 15:02 [PATCH v2 0/8] hw/sd: sd: Erase operation and other fixes Bin Meng
2021-02-16 15:02 ` [PATCH v2 1/8] hw/sd: sd: Fix address check in sd_erase() Bin Meng
2021-02-16 15:02 ` [PATCH v2 2/8] hw/sd: sd: Only SDSC cards support CMD28/29/30 Bin Meng
2021-02-16 15:32   ` Philippe Mathieu-Daudé
2021-02-16 15:02 ` [PATCH v2 3/8] hw/sd: sd: Fix CMD30 response type Bin Meng
2021-02-19 22:14   ` Philippe Mathieu-Daudé
2021-02-16 15:02 ` [PATCH v2 4/8] hw/sd: sd: Move the sd_block_{read, write} and macros ahead Bin Meng
2021-02-16 15:02 ` [PATCH v2 5/8] hw/sd: sd: Skip write protect groups check in sd_erase() for high capacity cards Bin Meng
2021-02-19 22:30   ` Philippe Mathieu-Daudé
2021-02-16 15:02 ` [PATCH v2 6/8] hw/sd: sd: Actually perform the erase operation Bin Meng
2021-02-19 22:28   ` Philippe Mathieu-Daudé [this message]
2021-02-20  2:41     ` Bin Meng
2021-02-16 15:02 ` [PATCH v2 7/8] hw/sd: sd: Skip write protect groups check in CMD24/25 for high capacity cards Bin Meng
2021-02-19 22:22   ` Philippe Mathieu-Daudé
2021-02-16 15:02 ` [PATCH v2 8/8] hw/sd: sd: Bypass the RCA check for CMD13 in SPI mode Bin Meng
2021-02-16 15:23   ` Philippe Mathieu-Daudé
2021-02-19 22:34 ` [PATCH v2 0/8] hw/sd: sd: Erase operation and other fixes Philippe Mathieu-Daudé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1afba402-8a95-db72-6529-0ac40d20b073@amsat.org \
    --to=f4bug@amsat.org \
    --cc=bin.meng@windriver.com \
    --cc=bmeng.cn@gmail.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.