[PATCH] cmd: mmc: allow 'mmc rst-function' to show the current value
Rasmus Villemoes
ravi at prevas.dk
Mon Apr 13 10:13:22 CEST 2026
Extend the 'mmc rst-function' subcommand so that lacking a value to
set, it simply prints the current value, and its interpretation.
Signed-off-by: Rasmus Villemoes <ravi at prevas.dk>
---
cmd/mmc.c | 36 +++++++++++++++++++++++++++---------
doc/usage/cmd/mmc.rst | 4 ++--
2 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/cmd/mmc.c b/cmd/mmc.c
index 81b1ca4ad84..f217dfdacaa 100644
--- a/cmd/mmc.c
+++ b/cmd/mmc.c
@@ -1012,16 +1012,10 @@ static int do_mmc_rst_func(struct cmd_tbl *cmdtp, int flag,
* The only valid values are 0x0, 0x1 and 0x2 and writing
* a value of 0x1 or 0x2 sets the value permanently.
*/
- if (argc != 3)
+ if (argc < 2 || argc > 3)
return CMD_RET_USAGE;
dev = dectoul(argv[1], NULL);
- enable = dectoul(argv[2], NULL);
-
- if (enable > 2) {
- puts("Invalid RST_n_ENABLE value\n");
- return CMD_RET_USAGE;
- }
mmc = init_mmc_device(dev, false);
if (!mmc)
@@ -1032,6 +1026,30 @@ static int do_mmc_rst_func(struct cmd_tbl *cmdtp, int flag,
return CMD_RET_FAILURE;
}
+ if (argc == 2) {
+ ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
+ ret = mmc_send_ext_csd(mmc, ext_csd);
+ if (ret)
+ return CMD_RET_FAILURE;
+
+ printf("RST_n_FUNCTION: 0x%x ", ext_csd[EXT_CSD_RST_N_FUNCTION]);
+ switch (ext_csd[EXT_CSD_RST_N_FUNCTION]) {
+ case 0x0: puts("(temporarily disabled)\n"); break;
+ case 0x1: puts("(permanently enabled)\n"); break;
+ case 0x2: puts("(permanently disabled)\n"); break;
+ default: puts("(unknown)\n");
+ }
+
+ return CMD_RET_SUCCESS;
+ }
+
+ enable = dectoul(argv[2], NULL);
+
+ if (enable > 2) {
+ puts("Invalid RST_n_ENABLE value\n");
+ return CMD_RET_USAGE;
+ }
+
ret = mmc_set_rst_n_function(mmc, enable);
if (ret != 0)
return CMD_RET_FAILURE;
@@ -1344,8 +1362,8 @@ U_BOOT_CMD(
"mmc partconf <dev> [[varname] | [<boot_ack> <boot_partition> <partition_access>]]\n"
" - Show or change the bits of the PARTITION_CONFIG field of the specified device\n"
" If showing the bits, optionally store the boot_partition field into varname\n"
- "mmc rst-function <dev> <value>\n"
- " - Change the RST_n_FUNCTION field of the specified device\n"
+ "mmc rst-function <dev> [<value>]\n"
+ " - Show or change the RST_n_FUNCTION field of the specified device\n"
" WARNING: This is a write-once field and 0 / 1 / 2 are the only valid values.\n"
#endif
#if CONFIG_IS_ENABLED(CMD_MMC_RPMB)
diff --git a/doc/usage/cmd/mmc.rst b/doc/usage/cmd/mmc.rst
index 55391fda24c..c6ab334b3d4 100644
--- a/doc/usage/cmd/mmc.rst
+++ b/doc/usage/cmd/mmc.rst
@@ -24,7 +24,7 @@ Synopsis
mmc bootbus <dev> <boot_bus_width> <reset_boot_bus_width> <boot_mode>
mmc bootpart-resize <dev> <dev part size MB> <RPMB part size MB>
mmc partconf <dev> [[varname] | [<boot_ack> <boot_partition> <partition_access>]]
- mmc rst-function <dev> <value>
+ mmc rst-function <dev> [<value>]
mmc reg read <reg> <offset> [env]
Description
@@ -178,7 +178,7 @@ The 'mmc bootpart-resize' command changes sizes of boot and RPMB partitions.
RPMB part size MB
target size of RPMB partition
-The 'mmc rst-function' command changes the RST_n_FUNCTION field.
+The 'mmc rst-function' command shows or changes the RST_n_FUNCTION field.
**WARNING** : This is a write-once field. (*Refer to eMMC specification*)
value
--
2.53.0
More information about the U-Boot
mailing list