aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Delaunay <patrick.delaunay@foss.st.com>2021-06-28 14:55:59 +0200
committerPatrick Delaunay <patrick.delaunay@foss.st.com>2021-07-16 09:28:46 +0200
commitfe24090eb7f7cfe33a964a7966e78b7ed954ee98 (patch)
tree1b161e289136dc5527a4ad896aa65f946154228a
parentbc78d5f25aeee238d6e2ef6b0dda4dfc09f26d2e (diff)
downloadu-boot-fe24090eb7f7cfe33a964a7966e78b7ed954ee98.zip
u-boot-fe24090eb7f7cfe33a964a7966e78b7ed954ee98.tar.gz
u-boot-fe24090eb7f7cfe33a964a7966e78b7ed954ee98.tar.bz2
stm32mp: cmd_stm32key: handle error in fuse_hash_value
Handle errors in fuse_hash_value function. Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com> Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
-rw-r--r--arch/arm/mach-stm32mp/cmd_stm32key.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/arch/arm/mach-stm32mp/cmd_stm32key.c b/arch/arm/mach-stm32mp/cmd_stm32key.c
index d2045a5..2529139 100644
--- a/arch/arm/mach-stm32mp/cmd_stm32key.c
+++ b/arch/arm/mach-stm32mp/cmd_stm32key.c
@@ -25,7 +25,7 @@ static void read_hash_value(u32 addr)
}
}
-static void fuse_hash_value(u32 addr, bool print)
+static int fuse_hash_value(u32 addr, bool print)
{
struct udevice *dev;
u32 word, val;
@@ -36,21 +36,25 @@ static void fuse_hash_value(u32 addr, bool print)
&dev);
if (ret) {
log_err("Can't find stm32mp_bsec driver\n");
- return;
+ return ret;
}
for (i = 0; i < STM32_OTP_HASH_KEY_SIZE; i++) {
- if (print)
- printf("Fuse OTP %i : %x\n",
- STM32_OTP_HASH_KEY_START + i,
- __be32_to_cpu(*(u32 *)addr));
-
word = STM32_OTP_HASH_KEY_START + i;
val = __be32_to_cpu(*(u32 *)addr);
- misc_write(dev, STM32_BSEC_OTP(word), &val, 4);
+ if (print)
+ printf("Fuse OTP %i : %x\n", word, val);
+
+ ret = misc_write(dev, STM32_BSEC_OTP(word), &val, 4);
+ if (ret != 4) {
+ log_err("Fuse OTP %i failed\n", word);
+ return ret;
+ }
addr += 4;
}
+
+ return 0;
}
static int confirm_prog(void)
@@ -104,7 +108,9 @@ static int do_stm32key_fuse(struct cmd_tbl *cmdtp, int flag, int argc, char *con
if (!yes && !confirm_prog())
return CMD_RET_FAILURE;
- fuse_hash_value(addr, !yes);
+ if (fuse_hash_value(addr, !yes))
+ return CMD_RET_FAILURE;
+
printf("Hash key updated !\n");
return CMD_RET_SUCCESS;