Skip to contentSkip to conversation

fix bugs in write_reliability and enh_area set commands + more extcsd parsing

PATCH In review James Nuss 2 participants 12 messages Oct 9, 2018 – Oct 10, 2018 MMC, SD and SDIO

lore
Share & tools
lore

James Nuss

author
#0 lore raw

cover fix bugs in write_reliability and enh_area set commands + more extcsd parsing

[PATCH 1-3] just introduce further parsing and human-readable output of eMMC 5.0+ fields in the extcsd:
mmc-utils: interpret OPTIMAL_*_SIZE fields in extcsd
mmc-utils: treat FIRMWARE_VERSION as binary field instead of string
mmc-utils: interpret DEVICE_VERSION when printing extcsd

[PATCH 4-5] are critical bug fixes for the current version. This addresses concerns previously raised in threads wrt write-reliability setting:
https://www.spinics.net/lists/linux-mmc/msg41952.html
https://www.spinics.net/lists/linux-mmc/msg43171.html

[PATCH 6] is a critical bug fix for the current version to allow setting of enhanced and extended attributes on multiple partitions.

[PATCH 7] is a version up-rev:
mmc-utils: update version number to 0.2

James Nuss (7):
mmc-utils: interpret OPTIMAL_*_SIZE fields in extcsd
mmc-utils: treat FIRMWARE_VERSION as binary field instead of string
mmc-utils: interpret DEVICE_VERSION when printing extcsd
mmc-utils: Introduce write_reliability set_register command
mmc-utils: remove write_reliability set command
mmc-utils: discrete commands for enhanced and extended attribute
mmc-utils: update version number to 0.2

 mmc.c      |  52 ++++++++++---
 mmc.h      |  14 +++-
 mmc_cmds.c | 243 ++++++++++++++++++++++++++++++++++++++++++++-----------------
 mmc_cmds.h |   6 +-
 4 files changed, 235 insertions(+), 80 deletions(-)
Signature · 12 lines
2.7.4


-- 
This message is intended exclusively for the individual or entity to which 
it is addressed. This communication may contain information that is 
proprietary, privileged, confidential or otherwise legally exempt from 
disclosure. If you are not the named addressee, or have been inadvertently 
and erroneously referenced in the address line, you are not authorized to 
read, print, retain, copy or disseminate this message or any part of it. If 
you have received this message in error, please notify the sender 
immediately by e-mail and delete all copies of the message.
author
#1 lore raw

PATCH 1/7 mmc-utils: interpret OPTIMAL_*_SIZE fields in extcsd

eMMC 5.0 introduced OPTIMAL_READ_SIZE, OPTIMAL_WRITE_SIZE and OPTIMAL TRIM_UNIT_SIZE fields in the extcsd

Interpret these fields when reading out the extcsd with human-readable results

---
 mmc.h      |  3 +++
 mmc_cmds.c | 18 ++++++++++++++++++
 2 files changed, 21 insertions(+)
mmc.h +3 -0
index 285c1f1..5d8a7e3 100644
@@ -56,6 +56,9 @@
 #define EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B 	269	/* RO */
 #define EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A 	268	/* RO */
 #define EXT_CSD_PRE_EOL_INFO		267	/* RO */
+#define EXT_CSD_OPTIMAL_READ_SIZE	266	/* RO */
+#define EXT_CSD_OPTIMAL_WRITE_SIZE	265	/* RO */
+#define EXT_CSD_OPTIMAL_TRIM_UNIT_SIZE	264	/* RO */
 #define EXT_CSD_FIRMWARE_VERSION	254	/* RO */
 #define EXT_CSD_CACHE_SIZE_3		252
 #define EXT_CSD_CACHE_SIZE_2		251
mmc_cmds.c +18 -0
index 44623fe..97ea111 100644
@@ -1766,6 +1766,24 @@ int do_read_extcsd(int nargs, char **argv)
 			ext_csd[EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B]);
 		printf("eMMC Pre EOL information [EXT_CSD_PRE_EOL_INFO]: 0x%02x\n",
 			ext_csd[EXT_CSD_PRE_EOL_INFO]);
+
+		reg = ext_csd[EXT_CSD_OPTIMAL_READ_SIZE];
+		printf("Minimum optimal read unit size (for the device) "
+			"[OPTIMAL_READ_SIZE]: 0x%02x\n", reg);
+		printf(" i.e. %lu KiB\n", reg * 4UL);
+
+		reg = ext_csd[EXT_CSD_OPTIMAL_WRITE_SIZE];
+		printf("Minimum optimal write unit size (for the device) "
+			"[OPTIMAL_WRITE_SIZE]: 0x%02x\n", reg);
+		printf(" i.e. %lu KiB\n", reg * 4UL);
+
+		reg = ext_csd[EXT_CSD_OPTIMAL_TRIM_UNIT_SIZE];
+		printf("Minimum optimal trim unit size (for the device) "
+			"[OPTIMAL_TRIM_UNIT_SIZE]: 0x%02x\n", reg);
+		if (reg == 0 || reg > 21)
+			printf("error: invalid OPTIMAL_TRIM_UNIT_SIZE\n");
+		else
+			printf(" i.e. %lu KiB\n", (1UL << (reg - 1)) * 4);
 	}
 
 	if (ext_csd_rev >= 8) {
Signature · 12 lines
2.7.4


-- 
This message is intended exclusively for the individual or entity to which 
it is addressed. This communication may contain information that is 
proprietary, privileged, confidential or otherwise legally exempt from 
disclosure. If you are not the named addressee, or have been inadvertently 
and erroneously referenced in the address line, you are not authorized to 
read, print, retain, copy or disseminate this message or any part of it. If 
you have received this message in error, please notify the sender 
immediately by e-mail and delete all copies of the message.
Reviewed-by on v1 1/7
#2 lore raw

RE: [PATCH 1/7] mmc-utils: interpret OPTIMAL_*_SIZE fields in extcsd

Looks fine.

Thanks,
Avri

Quoted 8 lines

eMMC 5.0 introduced OPTIMAL_READ_SIZE, OPTIMAL_WRITE_SIZE and OPTIMAL
TRIM_UNIT_SIZE fields in the extcsd

Interpret these fields when reading out the extcsd with human-readable results

author
#3 lore raw

PATCH 2/7 mmc-utils: treat FIRMWARE_VERSION as binary field instead of string

In reply to James Nuss

The FIRMWARE_VERSION field is 8-bytes in size and contains non-printable characters.

Treat this field as binary and print individual byte values in hex

---
 mmc.h      |  9 ++++++++-
 mmc_cmds.c | 11 +++++++++--
 2 files changed, 17 insertions(+), 3 deletions(-)
mmc.h +8 -1
index 5d8a7e3..86e209a 100644
@@ -59,7 +59,14 @@
 #define EXT_CSD_OPTIMAL_READ_SIZE	266	/* RO */
 #define EXT_CSD_OPTIMAL_WRITE_SIZE	265	/* RO */
 #define EXT_CSD_OPTIMAL_TRIM_UNIT_SIZE	264	/* RO */
-#define EXT_CSD_FIRMWARE_VERSION	254	/* RO */
+#define EXT_CSD_FIRMWARE_VERSION_7	261	/* RO */
+#define EXT_CSD_FIRMWARE_VERSION_6	260	/* RO */
+#define EXT_CSD_FIRMWARE_VERSION_5	259	/* RO */
+#define EXT_CSD_FIRMWARE_VERSION_4	258	/* RO */
+#define EXT_CSD_FIRMWARE_VERSION_3	257	/* RO */
+#define EXT_CSD_FIRMWARE_VERSION_2	256	/* RO */
+#define EXT_CSD_FIRMWARE_VERSION_1	255	/* RO */
+#define EXT_CSD_FIRMWARE_VERSION_0	254	/* RO */
 #define EXT_CSD_CACHE_SIZE_3		252
 #define EXT_CSD_CACHE_SIZE_2		251
 #define EXT_CSD_CACHE_SIZE_1		250
mmc_cmds.c +9 -2
index 97ea111..45aa4c0 100644
@@ -1758,8 +1758,15 @@ int do_read_extcsd(int nargs, char **argv)
 	}
 
 	if (ext_csd_rev >= 7) {
-		printf("eMMC Firmware Version: %s\n",
-			(char*)&ext_csd[EXT_CSD_FIRMWARE_VERSION]);
+		printf("Firmware Version: 0x%02x%02x%02x%02x%02x%02x%02x%02x\n",
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_7],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_6],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_5],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_4],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_3],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_2],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_1],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_0]);
 		printf("eMMC Life Time Estimation A [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A]: 0x%02x\n",
 			ext_csd[EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A]);
 		printf("eMMC Life Time Estimation B [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B]: 0x%02x\n",
Signature · 12 lines
2.7.4


-- 
This message is intended exclusively for the individual or entity to which 
it is addressed. This communication may contain information that is 
proprietary, privileged, confidential or otherwise legally exempt from 
disclosure. If you are not the named addressee, or have been inadvertently 
and erroneously referenced in the address line, you are not authorized to 
read, print, retain, copy or disseminate this message or any part of it. If 
you have received this message in error, please notify the sender 
immediately by e-mail and delete all copies of the message.
#4 lore raw

RE: [PATCH 2/7] mmc-utils: treat FIRMWARE_VERSION as binary field instead of string

Quoted 8 lines

+++ b/mmc_cmds.c

mmc_cmds.c +0 -2
@@ -1758,8 +1758,15 @@ int do_read_extcsd(int nargs, char **argv)
 	}
 
 	if (ext_csd_rev >= 7) {
-		printf("eMMC Firmware Version: %s\n",
-			(char*)&ext_csd[EXT_CSD_FIRMWARE_VERSION]);

mmc_cmds.c int do_read_extcsd(int nargs, char **argv) · line 1770

Quoted 10 lines
mmc_cmds.c +9 -0
+		printf("Firmware Version:
 0x%02x%02x%02x%02x%02x%02x%02x%02x\n",
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_7],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_6],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_5],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_4],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_3],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_2],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_1],
+			ext_csd[EXT_CSD_FIRMWARE_VERSION_0]);

ExtCSD[261:254] is an ASCII string, just add a terminating null.

Thanks,
Avri

author
#5 lore raw

Re: [PATCH 2/7] mmc-utils: treat FIRMWARE_VERSION as binary field instead of string

Quoted 6 lines · Avri Altman
Quoted 6 lines

+++ b/mmc_cmds.c

(quoted diff) +0 -0
@@ -1758,8 +1758,15 @@ int do_read_extcsd(int nargs, char **argv)
      }
 
Quoted 14 lines

mmc_cmds.c int do_read_extcsd(int nargs, char **argv) · line 1769

Quoted 13 lines
mmc_cmds.c +9 -2
      if (ext_csd_rev >= 7) {
-             printf("eMMC Firmware Version: %s\n",
-                     (char*)&ext_csd[EXT_CSD_FIRMWARE_VERSION]);
+             printf("Firmware Version:
 0x%02x%02x%02x%02x%02x%02x%02x%02x\n",
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_7],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_6],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_5],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_4],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_3],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_2],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_1],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_0]);

ExtCSD[261:254] is an ASCII string, just add a terminating null.

Unfortunately I found two different manufacturers which put non-printable characters in this 8-byte field. So I don't think it can be treated as ASCII in all cases. Printing out the hex value seemed liked the most comprehensive solution.

Quoted 4 lines

Thanks,
Avri

--

Signature · 8 lines
This message is intended exclusively for the individual or entity to which 
it is addressed. This communication may contain information that is 
proprietary, privileged, confidential or otherwise legally exempt from 
disclosure. If you are not the named addressee, or have been inadvertently 
and erroneously referenced in the address line, you are not authorized to 
read, print, retain, copy or disseminate this message or any part of it. If 
you have received this message in error, please notify the sender 
immediately by e-mail and delete all copies of the message.
#6 lore raw

RE: [PATCH 2/7] mmc-utils: treat FIRMWARE_VERSION as binary field instead of string

Quoted 23 lines · Avri Altman
Quoted 6 lines
Quoted 6 lines

+++ b/mmc_cmds.c

(quoted diff) +0 -0
@@ -1758,8 +1758,15 @@ int do_read_extcsd(int nargs, char **argv)
      }
 
Quoted 14 lines

mmc_cmds.c int do_read_extcsd(int nargs, char **argv) · line 1769

Quoted 13 lines
mmc_cmds.c +9 -2
      if (ext_csd_rev >= 7) {
-             printf("eMMC Firmware Version: %s\n",
-                     (char*)&ext_csd[EXT_CSD_FIRMWARE_VERSION]);
+             printf("Firmware Version:
 0x%02x%02x%02x%02x%02x%02x%02x%02x\n",
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_7],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_6],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_5],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_4],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_3],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_2],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_1],
+                     ext_csd[EXT_CSD_FIRMWARE_VERSION_0]);

ExtCSD[261:254] is an ASCII string, just add a terminating null.

Quoted 4 lines

Unfortunately I found two different manufacturers which put non-printable characters in this 8-byte field. So I don't think it can be treated as ASCII in all cases. Printing out the hex value seemed liked the most comprehensive solution.

NAK with prejudice.
This interfere with the output that we/our clients expects.

author
#7 lore raw

PATCH 3/7 mmc-utils: interpret DEVICE_VERSION when printing extcsd

In reply to James Nuss

The DEVICE_VERSION is a 2-byte field

Print the individual byte values in hex

---
 mmc.h      | 2 ++
 mmc_cmds.c | 3 +++
 2 files changed, 5 insertions(+)
mmc.h +2 -0
index 86e209a..f25869e 100644
@@ -59,6 +59,8 @@
 #define EXT_CSD_OPTIMAL_READ_SIZE	266	/* RO */
 #define EXT_CSD_OPTIMAL_WRITE_SIZE	265	/* RO */
 #define EXT_CSD_OPTIMAL_TRIM_UNIT_SIZE	264	/* RO */
+#define EXT_CSD_DEVICE_VERSION_1	263	/* RO */
+#define EXT_CSD_DEVICE_VERSION_0	262	/* RO */
 #define EXT_CSD_FIRMWARE_VERSION_7	261	/* RO */
 #define EXT_CSD_FIRMWARE_VERSION_6	260	/* RO */
 #define EXT_CSD_FIRMWARE_VERSION_5	259	/* RO */
mmc_cmds.c +3 -0
index 45aa4c0..756aa2f 100644
@@ -1758,6 +1758,9 @@ int do_read_extcsd(int nargs, char **argv)
 	}
 
 	if (ext_csd_rev >= 7) {
+		printf("Device Version: 0x%02x%02x\n",
+			ext_csd[EXT_CSD_DEVICE_VERSION_1],
+			ext_csd[EXT_CSD_DEVICE_VERSION_0]);
 		printf("Firmware Version: 0x%02x%02x%02x%02x%02x%02x%02x%02x\n",
 			ext_csd[EXT_CSD_FIRMWARE_VERSION_7],
 			ext_csd[EXT_CSD_FIRMWARE_VERSION_6],
Signature · 12 lines
2.7.4


-- 
This message is intended exclusively for the individual or entity to which 
it is addressed. This communication may contain information that is 
proprietary, privileged, confidential or otherwise legally exempt from 
disclosure. If you are not the named addressee, or have been inadvertently 
and erroneously referenced in the address line, you are not authorized to 
read, print, retain, copy or disseminate this message or any part of it. If 
you have received this message in error, please notify the sender 
immediately by e-mail and delete all copies of the message.
author
#8 lore raw

PATCH 4/7 mmc-utils: Introduce write_reliability set_register command

In reply to James Nuss

"write-reliability" setting must be performed on all required partitions in one command.

Introduce new command "write_reliability set_register" to allow setting of write-reliability for all required partitions.

This command is a one-time programmable action. It cannot not be undone by power-cycling the unit.

---
 mmc.c      |  9 +++++++++
 mmc_cmds.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 mmc_cmds.h |  1 +
 3 files changed, 69 insertions(+)
mmc.c +9 -0
index 50c9c9e..aaefd3d 100644
@@ -102,6 +102,15 @@ static struct Command commands[] = {
 		"Enable write reliability per partition for the <device>.\nDry-run only unless -y or -c is passed.\nUse -c if more partitioning settings are still to come.\nNOTE!  This is a one-time programmable (unreversible) change.",
 	  NULL
 	},
+	{ do_write_reliability_set_register, -2,
+	  "write_reliability set_register", "<partition-mask> " "<device>\n"
+		"Set the write-reliability register (WR_REL_SET) for the <device>.\n"
+		"User area=bit0, GP1=bit1, GP2=bit2, GP3=bit3, GP4=bit4\n"
+		"e.g setting register to 0x03 will set 'User Area' and 'GP1' partitions \n"
+		"with write-reliability, and all others without write-reliability.\n"
+		"NOTE!  This is a one-time programmable (irreversible) change.",
+	  NULL
+	},
 	{ do_status_get, -1,
 	  "status get", "<device>\n"
 	  "Print the response to STATUS_SEND (CMD13).",
mmc_cmds.c +59 -0

65 lines not on this page · raw message

mmc_cmds.h +1 -0
index 9d3246c..8ca9ac9 100644
@@ -35,6 +35,7 @@ int do_status_get(int nargs, char **argv);
 int do_create_gp_partition(int nargs, char **argv);
 int do_enh_area_set(int nargs, char **argv);
 int do_write_reliability_set(int nargs, char **argv);
+int do_write_reliability_set_register(int nargs, char **argv);
 int do_rpmb_write_key(int nargs, char **argv);
 int do_rpmb_read_counter(int nargs, char **argv);
 int do_rpmb_read_block(int nargs, char **argv);
Signature · 12 lines
2.7.4


-- 
This message is intended exclusively for the individual or entity to which 
it is addressed. This communication may contain information that is 
proprietary, privileged, confidential or otherwise legally exempt from 
disclosure. If you are not the named addressee, or have been inadvertently 
and erroneously referenced in the address line, you are not authorized to 
read, print, retain, copy or disseminate this message or any part of it. If 
you have received this message in error, please notify the sender 
immediately by e-mail and delete all copies of the message.
author
#9 lore raw

PATCH 5/7 mmc-utils: remove write_reliability set command

In reply to James Nuss

The "write_reliability set" command is dangerous since it will only set write-reliability on one partition per command and this command is a one-time programmable action. This makes it impossible to set write-reliability on multiple partitions.

Remove the command so it cannot be used in the future. Use "write_reliability set_register" instead.

---
 mmc.c      |  5 -----
 mmc_cmds.c | 67 --------------------------------------------------------------
 mmc_cmds.h |  1 -
 3 files changed, 73 deletions(-)
mmc.c +0 -5
index aaefd3d..655546b 100644
@@ -97,11 +97,6 @@ static struct Command commands[] = {
 		"Enable the enhanced user area for the <device>.\nDry-run only unless -y or -c is passed.\nUse -c if more partitioning settings are still to come.\nNOTE!  This is a one-time programmable (unreversible) change.",
 	  NULL
 	},
-	{ do_write_reliability_set, -2,
-	  "write_reliability set", "<-y|-n|-c> " "<partition> " "<device>\n"
-		"Enable write reliability per partition for the <device>.\nDry-run only unless -y or -c is passed.\nUse -c if more partitioning settings are still to come.\nNOTE!  This is a one-time programmable (unreversible) change.",
-	  NULL
-	},
 	{ do_write_reliability_set_register, -2,
 	  "write_reliability set_register", "<partition-mask> " "<device>\n"
 		"Set the write-reliability register (WR_REL_SET) for the <device>.\n"
mmc_cmds.c +0 -67

73 lines not on this page · raw message

mmc_cmds.h +0 -1
index 8ca9ac9..cf6c6fb 100644
@@ -34,7 +34,6 @@ int do_sanitize(int nargs, char **argv);
 int do_status_get(int nargs, char **argv);
 int do_create_gp_partition(int nargs, char **argv);
 int do_enh_area_set(int nargs, char **argv);
-int do_write_reliability_set(int nargs, char **argv);
 int do_write_reliability_set_register(int nargs, char **argv);
 int do_rpmb_write_key(int nargs, char **argv);
 int do_rpmb_read_counter(int nargs, char **argv);
Signature · 12 lines
2.7.4


-- 
This message is intended exclusively for the individual or entity to which 
it is addressed. This communication may contain information that is 
proprietary, privileged, confidential or otherwise legally exempt from 
disclosure. If you are not the named addressee, or have been inadvertently 
and erroneously referenced in the address line, you are not authorized to 
read, print, retain, copy or disseminate this message or any part of it. If 
you have received this message in error, please notify the sender 
immediately by e-mail and delete all copies of the message.
author
#10 lore raw

PATCH 6/7 mmc-utils: discrete commands for enhanced and extended attribute setting

In reply to James Nuss

The enhanced and extended attributes must be set on all required partitions in a single command instead of one command per partition.

Remove the enhanced and extended attribute setting parameters from the "gp create" and "enh_area set" commands and create new commands:
* "enh_area set_partitions"
* "enh_area set_user_data"
* "gp set_extended"

---
 mmc.c      |  42 ++++++++++++---
 mmc_cmds.c | 169 ++++++++++++++++++++++++++++++++++++++++++++++---------------
 mmc_cmds.h |   4 +-
 3 files changed, 167 insertions(+), 48 deletions(-)
mmc.c +35 -7
index 655546b..f2c714c 100644
@@ -87,14 +87,42 @@ static struct Command commands[] = {
 		"Set the eMMC data sector size to 4KB by disabling emulation on\n<device>.",
 	  NULL
 	},
-	{ do_create_gp_partition, -6,
-	  "gp create", "<-y|-n|-c> " "<length KiB> " "<partition> " "<enh_attr> " "<ext_attr> " "<device>\n"
-		"Create general purpose partition for the <device>.\nDry-run only unless -y or -c is passed.\nUse -c if more partitioning settings are still to come.\nNOTE!  This is a one-time programmable (unreversible) change.\nTo set enhanced attribute to general partition being created set\n <enh_attr> to 1 else set it to 0.\nTo set extended attribute to general partition\n set <ext_attr> to 1,2 else set it to 0",
+	{ do_create_gp_partition, 4,
+	  "gp create", "<-y|-n|-c> " "<length KiB> " "<partition> " "<device>\n"
+		"Create general purpose partition for the <device>.\n"
+		"Dry-run only unless -y or -c is passed.\n"
+		"Use -c if more partitioning settings are still to come.\n"
+		"NOTE!  This is a one-time programmable (unreversible) change.",
 	  NULL
 	},
-	{ do_enh_area_set, -4,
-	  "enh_area set", "<-y|-n|-c> " "<start KiB> " "<length KiB> " "<device>\n"
-		"Enable the enhanced user area for the <device>.\nDry-run only unless -y or -c is passed.\nUse -c if more partitioning settings are still to come.\nNOTE!  This is a one-time programmable (unreversible) change.",
+	{ do_gp_set_extended, 3,
+	  "gp set_extended", "<-y|-n|-c> " "<partition-mask> " "<device>\n"
+		"Set extended attribute on specified general purpose partitions for the <device>.\n"
+		"GP4=bit[15:12], GP3=bit[11:8], GP2=bit[7:4], GP1=bit[3:0]\n"   
+		"e.g setting <partition-mask> to 0x0120 will set extended attribute 0x02 on 'GP2'\n"
+		"  partition and extended attribute 0x01 on 'GP3' partition\n"
+		"Dry-run only unless -y or -c is passed.\n"
+		"Use -c if more partitioning settings are still to come.\n"
+		"NOTE!  This is a one-time programmable (unreversible) change.",
+	  NULL
+	},
+	{ do_enh_area_set_user_data, -4,
+	  "enh_area set_user_data", "<-y|-n|-c> " "<start KiB> " "<length KiB> " "<device>\n"
+		"Set the size and offset of the enhanced user data area for the <device>.\n"
+		"Dry-run only unless -y or -c is passed.\n"
+		"Use -c if more partitioning settings are still to come.\n"
+		"NOTE!  This is a one-time programmable (unreversible) change.",
+	  NULL
+	},
+	{ do_enh_area_set_partitions, 3,
+	  "enh_area set_partitions", "<-y|-n|-c> " "<partition-mask> " "<device>\n"
+		"Enable enhanced attribute on specified partitions for the <device>.\n"
+		"User area=bit[0], GP1=bit[1], GP2=bit[2], GP3=bit[3], GP4=bit[4]\n"
+		"e.g setting <partition-mask> to 0x03 will set 'User Area' and 'GP1' partitions \n"
+		"    with enhanced attribute, and all others without enhanced attribute.\n"
+		"Dry-run only unless -y or -c is passed.\n"
+		"Use -c if more partitioning settings are still to come.\n"
+		"NOTE!  This is a one-time programmable (unreversible) change.",
 	  NULL
 	},
 	{ do_write_reliability_set_register, -2,
@@ -102,7 +130,7 @@ static struct Command commands[] = {
 		"Set the write-reliability register (WR_REL_SET) for the <device>.\n"
 		"User area=bit0, GP1=bit1, GP2=bit2, GP3=bit3, GP4=bit4\n"
 		"e.g setting register to 0x03 will set 'User Area' and 'GP1' partitions \n"
-		"with write-reliability, and all others without write-reliability.\n"
+		"    with write-reliability, and all others without write-reliability.\n"
 		"NOTE!  This is a one-time programmable (irreversible) change.",
 	  NULL
 	},
mmc_cmds.c +129 -40

238 lines not on this page · raw message

mmc_cmds.h +3 -1
index cf6c6fb..a8a90c2 100644
@@ -33,7 +33,9 @@ int do_hwreset_dis(int nargs, char **argv);
 int do_sanitize(int nargs, char **argv);
 int do_status_get(int nargs, char **argv);
 int do_create_gp_partition(int nargs, char **argv);
-int do_enh_area_set(int nargs, char **argv);
+int do_gp_set_extended(int nargs, char **argv);
+int do_enh_area_set_user_data(int nargs, char **argv);
+int do_enh_area_set_partitions(int nargs, char **argv);
 int do_write_reliability_set_register(int nargs, char **argv);
 int do_rpmb_write_key(int nargs, char **argv);
 int do_rpmb_read_counter(int nargs, char **argv);
Signature · 12 lines
2.7.4


-- 
This message is intended exclusively for the individual or entity to which 
it is addressed. This communication may contain information that is 
proprietary, privileged, confidential or otherwise legally exempt from 
disclosure. If you are not the named addressee, or have been inadvertently 
and erroneously referenced in the address line, you are not authorized to 
read, print, retain, copy or disseminate this message or any part of it. If 
you have received this message in error, please notify the sender 
immediately by e-mail and delete all copies of the message.
author
#11 lore raw

PATCH 7/7 mmc-utils: update version number to 0.2

In reply to James Nuss
---
 mmc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
mmc.c +1 -1
index f2c714c..660b62e 100644
@@ -26,7 +26,7 @@
 
 #include "mmc_cmds.h"
 
-#define MMC_VERSION	"0.1"
+#define MMC_VERSION	"0.2"
 
 #define BASIC_HELP 0
 #define ADVANCED_HELP 1
Signature · 12 lines
2.7.4


-- 
This message is intended exclusively for the individual or entity to which 
it is addressed. This communication may contain information that is 
proprietary, privileged, confidential or otherwise legally exempt from 
disclosure. If you are not the named addressee, or have been inadvertently 
and erroneously referenced in the address line, you are not authorized to 
read, print, retain, copy or disseminate this message or any part of it. If 
you have received this message in error, please notify the sender 
immediately by e-mail and delete all copies of the message.