]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
stm32mp: cmd_stm32key: handle error in fuse_hash_value
authorPatrick Delaunay <patrick.delaunay@foss.st.com>
Mon, 28 Jun 2021 12:55:59 +0000 (14:55 +0200)
committerPatrick Delaunay <patrick.delaunay@foss.st.com>
Fri, 16 Jul 2021 07:28:46 +0000 (09:28 +0200)
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>
arch/arm/mach-stm32mp/cmd_stm32key.c

index d2045a5983bff035cb6414b4af47a66ccc258ca3..2529139ebc6eba28442d828783e14a706fe741c6 100644 (file)
@@ -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;