[PATCH] cmd: mmc: Allow using partition name in mmc erase command

Tomas Paukrt tomaspaukrt at email.cz
Sun Sep 1 15:59:12 CEST 2024


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;
 
+	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);
+	} 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"
 	"mmc rescan [mode]\n"
 	"mmc part - lists available partition on current mmc device\n"
 	"mmc dev [dev] [part] [mode] - show or set current mmc device [partition] and set mode\n"
diff --git a/doc/usage/cmd/mmc.rst b/doc/usage/cmd/mmc.rst
index 5a64400..b919b75 100644
--- a/doc/usage/cmd/mmc.rst
+++ b/doc/usage/cmd/mmc.rst
@@ -14,7 +14,7 @@ Synopsis
     mmc info
     mmc read addr blk# cnt
     mmc write addr blk# cnt
-    mmc erase blk# cnt
+    mmc erase blk# cnt | partname
     mmc rescan [mode]
     mmc part
     mmc dev [dev] [part] [mode]
@@ -50,6 +50,8 @@ The 'mmc erase' command erases *cnt* blocks on the MMC device starting at block
         start block offset
     cnt
         block count
+    partname
+        partition name
 
 The 'mmc rescan' command scans the available MMC device.
 
-- 
2.7.4
 


More information about the U-Boot mailing list