[PATCH] cmd: mmc: Allow using partition name in mmc erase command
Quentin Schulz
quentin.schulz at cherry.de
Mon Sep 2 12:30:51 CEST 2024
Hi Tomas,
On 9/1/24 3:59 PM, Tomas Paukrt wrote:
> The mmc erase command currently requires blk# and cnt parameters
> which can be obtained using the part command if the entire partition
> needs to be deleted.
>
> Simplify the use of the mmc erase command by allowing the partition
> name to be specified directly.
>
> Signed-off-by: Tomas Paukrt <tomaspaukrt at email.cz>
> ---
> cmd/mmc.c | 21 ++++++++++++++-------
> doc/usage/cmd/mmc.rst | 4 +++-
> 2 files changed, 17 insertions(+), 8 deletions(-)
>
> diff --git a/cmd/mmc.c b/cmd/mmc.c
> index 7244a90..ba2f506 100644
> --- a/cmd/mmc.c
> +++ b/cmd/mmc.c
> @@ -472,18 +472,25 @@ static int do_mmc_erase(struct cmd_tbl *cmdtp, int flag,
> int argc, char *const argv[])
> {
> struct mmc *mmc;
> + struct disk_partition info;
> u32 blk, cnt, n;
>
> - if (argc != 3)
> - return CMD_RET_USAGE;
> -
> - blk = hextoul(argv[1], NULL);
> - cnt = hextoul(argv[2], NULL);
> -
> mmc = init_mmc_device(curr_device, false);
> if (!mmc)
> return CMD_RET_FAILURE;
>
I assume we do not want to to init the mmc device if we know the command
is wrong (based on the number of arguments)?
So keep the first if condition, but check also if it's different from 2 ?
> + if (argc == 2) {
> + if (part_get_info_by_name(mmc_get_blk_desc(mmc), argv[1], &info) < 0)
> + return CMD_RET_FAILURE;
> + blk = info.start;
> + cnt = info.size & ~(mmc->erase_grp_size - 1);
Is this basically a way to round down info.size to a multiple of
erase_grp_size? If I read that correctly, please add a comment to make
this explicit.
I'm not too familiar with MMC, but do all MMCs have the same block size
by standard? I know it's 512B for eMMC, but don't know for other MMCs.
The same question for the disk partition? The fact that there's a
blksize member in struct disk_partition seems to indicate the opposite.
I'm wondering if we shouldn't be using mmc_berase() instead?
> + } else if (argc == 3) {
> + blk = hextoul(argv[1], NULL);
> + cnt = hextoul(argv[2], NULL);
> + } else {
> + return CMD_RET_USAGE;
> + }
> +
> printf("\nMMC erase: dev # %d, block # %d, count %d ... ",
> curr_device, blk, cnt);
>
> @@ -1270,7 +1277,7 @@ U_BOOT_CMD(
> #if CONFIG_IS_ENABLED(CMD_MMC_SWRITE)
> "mmc swrite addr blk#\n"
> #endif
> - "mmc erase blk# cnt\n"
> + "mmc erase blk# cnt | partname\n"
It's not entirely clear to me if "partname" replaces "blk# cnt" or just
"cnt" by just reading this line.
Maybe have another line:
mmc erase partname
or is there a better way to show this I don't know about?
Cheers,
Quentin
More information about the U-Boot
mailing list