summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2015-08-21 13:09:34 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-08-22 01:37:51 +0000
commit9312676ab37de0be031d79629177c5590e83cc65 (patch)
tree43c62e29b6e4343809bb2e1a2c4539e34adea3f4
parent5ca252d4ef2511b9233f1f42efc9ceda5afe5aec (diff)
downloadchrome-ec-9312676ab37de0be031d79629177c5590e83cc65.tar.gz
i2c: Fix i2c_lock deadlock on sysjump
On sysjump we attempt to lock all i2c ports in use, but locking is by-controller. This leads to a deadlock if two ports from the same controller are in use. Fix this by directly locking all controllers present in the system. BUG=chrome-os-partner:44214 TEST=`sysjump rw` and then `sysjump ro` on glados BRANCH=None Change-Id: I21d65cd4455769414216016a5c97ad118a712117 Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/294959 Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r--common/i2c.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/common/i2c.c b/common/i2c.c
index 24f0d95354..a17edc51d4 100644
--- a/common/i2c.c
+++ b/common/i2c.c
@@ -72,9 +72,9 @@ void i2c_prepare_sysjump(void)
{
int i;
- /* Lock all I2C port to prepare for sysjump */
- for (i = 0; i < i2c_ports_used; i++)
- i2c_lock(i2c_ports[i].port, 1);
+ /* Lock all i2c controllers */
+ for (i = 0; i < I2C_CONTROLLER_COUNT; ++i)
+ mutex_lock(port_mutex + i);
}
int i2c_read32(int port, int slave_addr, int offset, int *data)