diff mbox series

[08/10] mmc-utils: Enable/Disable write protect

Message ID 20250407082833.108616-9-avri.altman@sandisk.com
State New
Headers show
Series mmc-utils: Secure Write Protect Mode Enhancements | expand

Commit Message

Avri Altman April 7, 2025, 8:28 a.m. UTC
From: Avri Altman <avri.altman@wdc.com>

In secure write protected mode, the updatability of USER_WP[171],
BOOT_WP[173], TMP_WRITE_PROTECT[12] and PERM_WRITE_PROTECT[13] are
controlled by SECURE_WP_MASK bit in the SECURE _WP_MODE_CONFIG of the
Authenticated Device Configuration Area.

Setting it, enables updating WP related EXT_CSD and CSD fields, and
clearing it vice versa.

Access to the Authenticated Device Configuration Area is regulated via
Authenticated Device Configuration Write Request.

Signed-off-by: Avri Altman <avri.altman@wdc.com>
---
 mmc.c      | 20 ++++++++++++++++++++
 mmc_cmds.c | 14 ++++++++++++++
 mmc_cmds.h |  2 ++
 3 files changed, 36 insertions(+)
diff mbox series

Patch

diff --git a/mmc.c b/mmc.c
index 0cffa5b..578b00c 100644
--- a/mmc.c
+++ b/mmc.c
@@ -220,6 +220,26 @@  static struct Command commands[] = {
 		  "    mmc rpmb secure-wp-mode-off /dev/block/mmcblk0 /dev/mmcblk0rpmb -",
 	  NULL
 	},
+	{ do_rpmb_sec_wp_mode_set, 3,
+	  "rpmb secure-wp-disable", "<dev> <rpmb device> <key file>\n"
+		  "Enabling updating WP related EXT_CSD and CSD fields.\n"
+		  "Applicable only if secure wp mode is enabled.\n"
+		  "You can specify '-' instead of key\n"
+		  "Example:\n"
+		  "    echo -n AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH | \\\n"
+		  "    mmc rpmb secure-wp-disable /dev/block/mmcblk0 /dev/mmcblk0rpmb -",
+	  NULL
+	},
+	{ do_rpmb_sec_wp_mode_clear, 3,
+	  "rpmb secure-wp-enable", "<dev> <rpmb device> <key file>\n"
+		  "Disabling updating WP related EXT_CSD and CSD fields.\n"
+		  "Applicable only if secure wp mode is enabled.\n"
+		  "You can specify '-' instead of key\n"
+		  "Example:\n"
+		  "    echo -n AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH | \\\n"
+		  "    mmc rpmb secure-wp-enable /dev/block/mmcblk0 /dev/mmcblk0rpmb -",
+	  NULL
+	},
 	{ do_cache_en, -1,
 	  "cache enable", "<device>\n"
 		"Enable the eMMC cache feature on <device>.\n"
diff --git a/mmc_cmds.c b/mmc_cmds.c
index 07bd9ad..2ef4252 100644
--- a/mmc_cmds.c
+++ b/mmc_cmds.c
@@ -2602,6 +2602,20 @@  int do_rpmb_sec_wp_disable(int nargs, char **argv)
 	return rpmb_auth_write(nargs, argv, 1, 0, usage);
 }
 
+int do_rpmb_sec_wp_mode_set(int nargs, char **argv)
+{
+	char *usage = "Usage: mmc rpmb secure-wp-disable </path/to/mmcblkx> </path/to/mmcblkXrpmb> </path/to/key>\n";
+
+	return rpmb_auth_write(nargs, argv, 2, 1, usage);
+}
+
+int do_rpmb_sec_wp_mode_clear(int nargs, char **argv)
+{
+	char *usage = "Usage: mmc rpmb secure-wp-enable </path/to/mmcblkx> </path/to/mmcblkXrpmb> </path/to/key>\n";
+
+	return rpmb_auth_write(nargs, argv, 2, 0, usage);
+}
+
 int do_rpmb_write_block(int nargs, char **argv)
 {
 	int ret, dev_fd, data_fd;
diff --git a/mmc_cmds.h b/mmc_cmds.h
index 873d9b2..61fe337 100644
--- a/mmc_cmds.h
+++ b/mmc_cmds.h
@@ -41,6 +41,8 @@  int do_rpmb_read_block(int nargs, char **argv);
 int do_rpmb_write_block(int nargs, char **argv);
 int do_rpmb_sec_wp_enable(int nargs, char **argv);
 int do_rpmb_sec_wp_disable(int nargs, char **argv);
+int do_rpmb_sec_wp_mode_set(int nargs, char **argv);
+int do_rpmb_sec_wp_mode_clear(int nargs, char **argv);
 int do_cache_en(int nargs, char **argv);
 int do_cache_dis(int nargs, char **argv);
 int do_ffu(int nargs, char **argv);