[PATCH] rockchip: efuse: fix rk3399 reading multiple values

Jonas Karlman jonas at kwiboo.se
Mon Apr 17 19:39:24 CEST 2023


Hi John,

On 2023-04-17 18:09, John Keeping wrote:
> Update rk3399 to match the pattern in the other device-specific
> implementations to ensure the previous address is cleared when reading
> multiple blocks.

Does this fix a real issue for you?

Compared to the other device-specific implementations this reg behaves
differently on RK3399. The addr field is not read back, or it gets
auto-cleared when EFUSE_STROBE is cleared, the use of clrsetbits_le32
may mislead that this reg holds the addr value from prior iteration.

Regards,
Jonas

> 
> Signed-off-by: John Keeping <john at metanate.com>
> ---
>  drivers/misc/rockchip-efuse.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/misc/rockchip-efuse.c b/drivers/misc/rockchip-efuse.c
> index 2f96b79ea4..d302271239 100644
> --- a/drivers/misc/rockchip-efuse.c
> +++ b/drivers/misc/rockchip-efuse.c
> @@ -207,8 +207,8 @@ static int rockchip_rk3399_efuse_read(struct udevice *dev, int offset,
>  	udelay(1);
>  
>  	while (size--) {
> -		setbits_le32(efuse->base + EFUSE_CTRL,
> -			     EFUSE_STROBE | RK3399_ADDR(offset++));
> +		clrsetbits_le32(efuse->base + EFUSE_CTRL, RK3399_A_MASK,
> +				EFUSE_STROBE | RK3399_ADDR(offset++));
>  		udelay(1);
>  		*buffer++ = readl(efuse->base + EFUSE_DOUT);
>  		clrbits_le32(efuse->base + EFUSE_CTRL, EFUSE_STROBE);



More information about the U-Boot mailing list