From: Marek Vasut Date: Thu, 7 Mar 2019 02:41:08 +0000 (+0100) Subject: i2c: rcar_iic: Read ICSR only once X-Git-Tag: v2019.04-rc4~13^2~9 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=eb54682e91a0a3f9ca8629d67c5195ae54cfb1e9;p=oweals%2Fu-boot.git i2c: rcar_iic: Read ICSR only once Read ICSR only once to avoid missing interrupts. This happens on R8A7791 Porter during reset, when reading the PMIC register 0x13, which may fail sometimes because of the missed DTE interrupt. Signed-off-by: Marek Vasut Cc: Heiko Schocher Cc: Nobuhiro Iwamatsu Reviewed-by: Heiko Schocher --- diff --git a/drivers/i2c/rcar_iic.c b/drivers/i2c/rcar_iic.c index e91fc86c1a..9d45f547d1 100644 --- a/drivers/i2c/rcar_iic.c +++ b/drivers/i2c/rcar_iic.c @@ -58,12 +58,14 @@ static void sh_irq_dte(struct udevice *dev) static int sh_irq_dte_with_tack(struct udevice *dev) { struct rcar_iic_priv *priv = dev_get_priv(dev); + u8 icsr; int i; for (i = 0; i < IRQ_WAIT; i++) { - if (RCAR_IC_DTE & readb(priv->base + RCAR_IIC_ICSR)) + icsr = readb(priv->base + RCAR_IIC_ICSR); + if (RCAR_IC_DTE & icsr) break; - if (RCAR_IC_TACK & readb(priv->base + RCAR_IIC_ICSR)) + if (RCAR_IC_TACK & icsr) return -ETIMEDOUT; udelay(10); }