[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(&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;

Reviewed-by: Neil Armstrong <narmstrong at baylibre.com>


More information about the U-Boot mailing list