summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerome Brunet <[email protected]>2022-08-04 16:41:38 +0200
committerNeil Armstrong <[email protected]>2022-08-08 09:56:38 +0200
commit3145e0d0ff0837647351f2ca261b4cde779f83e0 (patch)
tree01d493c205bd0c580ec85fb5f05d757bf3e041ea
parent647ba68841dbb5de82983a1cad4cf42bcf63b9b3 (diff)
ARM: meson: fixup error on efuse commands return
All `sm efuseread/efusewrite` commands exit with an error, even if the fuse have actually been dealt with correctly. This is because the smc call return the size it actually processed but this result is checked against 0. Return failure in do_efuse_read/write if the return value of meson_sm_read/write_efuse() is not the requested size. Fixes: 52195ba5f579 ("ARM: amlogic: add sm efuse write support and cmd for read/write efuse") Signed-off-by: Jerome Brunet <[email protected]> Reviewed-by: Neil Armstrong <[email protected]> Signed-off-by: Neil Armstrong <[email protected]> Link: https://lore.kernel.org/r/[email protected]
-rw-r--r--arch/arm/mach-meson/sm.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/arch/arm/mach-meson/sm.c b/arch/arm/mach-meson/sm.c
index 6c28c0f5e44..d6eb910689f 100644
--- a/arch/arm/mach-meson/sm.c
+++ b/arch/arm/mach-meson/sm.c
@@ -82,10 +82,7 @@ ssize_t meson_sm_write_efuse(uintptr_t offset, void *buffer, size_t size)
smc_call(&regs);
- if (regs.regs[0] == 0)
- return -1;
-
- return 0;
+ return regs.regs[0];
}
#define SM_CHIP_ID_LENGTH 119
@@ -222,7 +219,7 @@ static int do_efuse_read(struct cmd_tbl *cmdtp, int flag, int argc,
address = simple_strtoul(argv[3], NULL, 0);
ret = meson_sm_read_efuse(offset, (void *)address, size);
- if (ret)
+ if (ret != size)
return CMD_RET_FAILURE;
return CMD_RET_SUCCESS;
@@ -243,7 +240,7 @@ static int do_efuse_write(struct cmd_tbl *cmdtp, int flag, int argc,
address = simple_strtoul(argv[3], NULL, 0);
ret = meson_sm_write_efuse(offset, (void *)address, size);
- if (ret)
+ if (ret != size)
return CMD_RET_FAILURE;
return CMD_RET_SUCCESS;