diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2019-02-26 17:17:24 +0200 |
---|---|---|
committer | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2019-03-04 13:06:40 +0000 |
commit | 44206e38bf6e3ddd6a628ceab0c2c982ca6660b3 (patch) | |
tree | c451baf7f6fdcde8150d1621560af776f01e46dc /src | |
parent | 62b4b4496190c69b3e0f8562a3c560913af119bf (diff) | |
download | coreboot-44206e38bf6e3ddd6a628ceab0c2c982ca6660b3.tar.xz |
sb/intel/common: Fix SMBus block commands
Fix regression after commit
c38d543 sb/intel/common: SMBus complete_command()
When evaluating HSTSTS register, BYTE_DONE bit must
be excluded from transaction completion and error criteria.
Change-Id: I49cc43d1fa58250988cc41b2ca747b9f1d7586d6
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/31622
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Nico Huber <nico.h@gmx.de>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/southbridge/intel/common/smbus.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/southbridge/intel/common/smbus.c b/src/southbridge/intel/common/smbus.c index a842a61222..9ae01ad178 100644 --- a/src/southbridge/intel/common/smbus.c +++ b/src/southbridge/intel/common/smbus.c @@ -74,7 +74,10 @@ static int host_completed(u8 status) { if (status & SMBHSTSTS_HOST_BUSY) return 0; - status &= ~(SMBHSTSTS_SMBALERT_STS | SMBHSTSTS_INUSE_STS); + + /* These status bits do not imply completion of transaction. */ + status &= ~(SMBHSTSTS_BYTE_DONE | SMBHSTSTS_INUSE_STS | + SMBHSTSTS_SMBALERT_STS); return status != 0; } @@ -89,8 +92,9 @@ static int recover_master(int smbus_base, int ret) static int cb_err_from_stat(u8 status) { - /* Ignore the "In Use" status... */ - status &= ~(SMBHSTSTS_SMBALERT_STS | SMBHSTSTS_INUSE_STS); + /* These status bits do not imply errors. */ + status &= ~(SMBHSTSTS_BYTE_DONE | SMBHSTSTS_INUSE_STS | + SMBHSTSTS_SMBALERT_STS); if (status == SMBHSTSTS_INTR) return 0; |