[PATCH] ARM: meson: fixup error on efuse commands return
Neil Armstrong
narmstrong at baylibre.com
Mon Aug 8 09:42:16 CEST 2022
On 04/08/2022 16:41, Jerome Brunet wrote:
> 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 <jbrunet at baylibre.com>
> ---
> arch/arm/mach-meson/sm.c | 9 +++------
> 1 file changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mach-meson/sm.c b/arch/arm/mach-meson/sm.c
> index 6c28c0f5e445..d6eb910689f4 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(®s);
>
> - 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;
Reviewed-by: Neil Armstrong <narmstrong at baylibre.com>
More information about the U-Boot
mailing list