fix bugs in write_reliability and enh_area set commands + more extcsd parsing
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.
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
@@ -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
@@ -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.
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_SIZEand OPTIMALTRIM_UNIT_SIZEfields in the extcsdInterpret these fields when reading out the extcsd with human-readable results
Signed-off-by James Nuss <[email protected]>
PATCH 2/7 mmc-utils: treat FIRMWARE_VERSION as binary field instead of string
In reply to James NussThe 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
@@ -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
@@ -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.
RE: [PATCH 2/7] mmc-utils: treat FIRMWARE_VERSION as binary field instead of string
Quoted 8 lines
+++
b/mmc_cmds.cmmc_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
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
-2if (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.
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
-2if (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.
PATCH 3/7 mmc-utils: interpret DEVICE_VERSION when printing extcsd
In reply to James NussThe 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
@@ -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
@@ -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.
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
@@ -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
@@ -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.
PATCH 5/7 mmc-utils: remove write_reliability set command
In reply to James NussThe "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
@@ -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
@@ -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.
PATCH 6/7 mmc-utils: discrete commands for enhanced and extended attribute setting
In reply to James NussThe 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
@@ -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
@@ -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.
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
@@ -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.