[U-Boot] [PATCH V3 3/3] eMMC: cmd_mmc.c adds the 'rpmb' sub-command for the 'mmc' command
Wolfgang Denk
wd at denx.de
Tue Apr 22 19:48:42 CEST 2014
Dear Pierre Aubert,
In message <1398182087-14913-4-git-send-email-p.aubert at staubli.com> you wrote:
> This sub-command adds support for the RPMB partition of an eMMC:
> * mmc rpmb key <address of the authentication key>
> Programs the authentication key in the eMMC This key can not
> be overwritten.
> * mmc rpmb read <address> <block> <#count> [address of key]
> Reads <#count> blocks of 256 bytes in the RPMB partition
> beginning at block number <block>. If the optionnal
> address of the authentication key is provided, the
> Message Authentication Code (MAC) is verified on each
> block.
> * mmc rpmb write <address> <block> <#count> <address of key>
> Writes <#count> blocks of 256 bytes in the RPMB partition
> beginning at block number <block>. The datas are signed
> with the key provided.
> * mmc rpmb counter
> Returns the 'Write counter' of the RPMB partition.
>
> The sub-command is conditional on compilation flag CONFIG_SUPPORT_EMMC_RPMB
>
> Signed-off-by: Pierre Aubert <p.aubert at staubli.com>
> CC: Pantelis Antoniou <panto at antoniou-consulting.com>
> ---
> README | 10 ++++
> common/cmd_mmc.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
> 2 files changed, 132 insertions(+), 1 deletions(-)
Unfortunatley there is no changelog here. Please note that this is
mandatory for updated patch versions, see [1]
[1] http://www.denx.de/wiki/view/U-Boot/Patches#Sending_updated_patch_versions
A changelog in the cover letter is useless, as this does not get
recorded in patchwork. The changelog must always be in the patch
itself.
...
> + if (argc == 4 && strcmp(argv[2], "key") == 0)
> + state = RPMB_KEY;
> + if ((argc == 6 || argc == 7) && strcmp(argv[2], "read") == 0)
> + state = RPMB_READ;
> + else if (argc == 7 && strcmp(argv[2], "write") == 0)
> + state = RPMB_WRITE;
> + else if (argc == 3 && strcmp(argv[2], "counter") == 0)
> + state = RPMB_COUNTER;
As mentiuoned before, these repeated strcmp() should probably be
replaced by a subcommand table.
> + ret = CMD_RET_SUCCESS;
> + if (state == RPMB_KEY) {
> + key_addr = (void *)simple_strtoul(argv[3], NULL, 16);
> + if (!confirm_key_prog())
> + return CMD_RET_FAILURE;
> + if (mmc_rpmb_set_key(mmc, key_addr)) {
> + printf("ERROR - Key already programmed ?\n");
> + ret = CMD_RET_FAILURE;
Do a return here, or use some "goto errout" and place the label errout
before the needed cleanup acrtions.
> + }
> + } else if (state == RPMB_COUNTER) {
You can then get rid of this "else" level.
> + unsigned long counter;
> +
> + if (mmc_rpmb_get_counter(mmc, &counter))
> + ret = CMD_RET_FAILURE;
> + else
Ditto.
> + printf("Write counter= %lx\n", counter);
Should this be a debug() ?
> +#ifdef CONFIG_SUPPORT_EMMC_RPMB
> + } else if (strcmp(argv[1], "rpmb") == 0) {
> + return do_mmcrpmb(argc, argv);
> +#endif /* CONFIG_SUPPORT_EMMC_RPMB */
> }
Again, it would be better to switch the code to regular subcommand
processing.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"I knew then (in 1970) that a 4-kbyte minicomputer would cost as much
as a house. So I reasoned that after college, I'd have to live
cheaply in an apartment and put all my money into owning a computer."
- Apple co-founder Steve Wozniak, EE Times, June 6, 1988, pg 45
More information about the U-Boot
mailing list