[PATCH] i2c: uniphier-f: correct error recovery

Kunihiko Hayashi hayashi.kunihiko at socionext.com
Mon Dec 26 01:49:00 CET 2022


On 2022/12/09 20:38, Dai Okamura wrote:
> The uniphier i2c block can recognize some handshake errors.
> But driver handles all error detections as no error if no timeout.
> So this makes unrecoverable state.
> 
> This replaces the return values with the right ones to tell the i2c
> framework the errors:
> - EDEADLK for arbitration lost error
> - ENODATA for no answer error
> 
> Signed-off-by: Dai Okamura <okamura.dai at socionext.com>
> ---
>   drivers/i2c/i2c-uniphier-f.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/i2c/i2c-uniphier-f.c b/drivers/i2c/i2c-uniphier-f.c
> index 9d6f1688cb..3dcd382469 100644
> --- a/drivers/i2c/i2c-uniphier-f.c
> +++ b/drivers/i2c/i2c-uniphier-f.c
> @@ -130,12 +130,12 @@ static int wait_for_irq(struct uniphier_fi2c_priv
> *priv, u32 flags,
>   	if (irq & I2C_INT_AL) {
>   		dev_dbg(priv->dev, "error: arbitration lost\n");
>   		*stop = false;
> -		return ret;
> +		return -EDEADLK;
>   	}
>   
>   	if (irq & I2C_INT_NA) {
>   		dev_dbg(priv->dev, "error: no answer\n");
> -		return ret;
> +		return -ENODATA;
>   	}
>   
>   	return 0;

I understand this "ret" comes from readl_poll_timeout() and is zero,
so the error can't be detected. It should be fixed.

Fixes: 238bd0b8ce52 ("i2c: UniPhier: add driver for UniPhier FIFO-builtin i2c controller")

and,

Acked-by: Kunihiko Hayashi <hayashi.kunihiko at socionext.com>

Thank you,

---
Best Regards
Kunihiko Hayashi


More information about the U-Boot mailing list