Commit 3a3c6b7b authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Andi Shyti
Browse files

i2c: i801: Improve too small kill wait time in i801_check_post



In my tests terminating a transaction took about 25ms, what is
in line with the chip-internal timeout as described in 5.21.3.2
"Bus Time Out" in [0]. Therefore the 2ms delay is too low.
Instead of a fixed delay let's use i801_wait_intr() here,
this also facilitates the status handling.

This potential issue seems to have been existing forever, but as no
related problem is known, treat it as an improvement.

[0] Intel document #326776-003, 7 Series PCH datasheet

Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarAndi Shyti <andi.shyti@kernel.org>
Link: https://lore.kernel.org/r/ad4ef645-5d03-4833-a0b6-f31f8fd06483@gmail.com
parent e5befb5b
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -441,12 +441,11 @@ static int i801_check_post(struct i801_priv *priv, int status)
	if (unlikely(status < 0)) {
		/* try to stop the current command */
		outb_p(SMBHSTCNT_KILL, SMBHSTCNT(priv));
		usleep_range(1000, 2000);
		status = i801_wait_intr(priv);
		outb_p(0, SMBHSTCNT(priv));

		/* Check if it worked */
		status = inb_p(SMBHSTSTS(priv));
		if ((status & SMBHSTSTS_HOST_BUSY) || !(status & SMBHSTSTS_FAILED))
		if (status < 0 || !(status & SMBHSTSTS_FAILED))
			pci_dbg(priv->pci_dev, "Failed terminating the transaction\n");
		return -ETIMEDOUT;
	}