summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2019-06-06 11:28:48 -0700
committerCommit Bot <commit-bot@chromium.org>2019-10-01 03:35:59 +0000
commit1fe7f225ccba0d6551c9b2cf27f28a3d3b4324eb (patch)
tree54a2a92a59870ec1caf738d230902156c27fcebf
parentd963e5f2ff1c5af93d5cbce038d926a5d45594b6 (diff)
downloadchrome-ec-1fe7f225ccba0d6551c9b2cf27f28a3d3b4324eb.tar.gz
usbpd: Fix infinite init loop
tcpci_tcpm_init can loop forever if tcpc_read or mux_read is successful but TCPC_REG_POWER_STATUS_UNINIT bit is set. This patch fixes it. Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> BUG=chromium:971741 BRANCH=none TEST=buildall Change-Id: I5eeb58fc77ee0de753a6c0b049bf332e291faa29 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1647366 Reviewed-by: Scott Collyer <scollyer@chromium.org> Commit-Queue: Daisuke Nojiri <dnojiri@chromium.org> Tested-by: Daisuke Nojiri <dnojiri@chromium.org> (cherry picked from commit 2e3ec3604f774d9c7bb9eaf0aaf339b4a8cbd9cd) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1833243 Tested-by: caveh jalali <caveh@chromium.org> Auto-Submit: caveh jalali <caveh@chromium.org> Reviewed-by: Caveh Jalali <caveh@google.com> Commit-Queue: Caveh Jalali <caveh@google.com>
-rw-r--r--driver/tcpm/tcpci.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/driver/tcpm/tcpci.c b/driver/tcpm/tcpci.c
index 5c49bceb76..51ddcb5901 100644
--- a/driver/tcpm/tcpci.c
+++ b/driver/tcpm/tcpci.c
@@ -745,13 +745,13 @@ int tcpci_tcpm_init(int port)
error = tcpc_read(port, TCPC_REG_POWER_STATUS, &power_status);
/*
* If read succeeds and the uninitialized bit is clear, then
- * initalization is complete, clear all alert bits and write
+ * initialization is complete, clear all alert bits and write
* the initial alert mask.
*/
if (!error && !(power_status & TCPC_REG_POWER_STATUS_UNINIT))
break;
- else if (error && --tries == 0)
- return error;
+ if (--tries <= 0)
+ return error ? error : EC_ERROR_TIMEOUT;
msleep(10);
}
@@ -797,8 +797,8 @@ int tcpci_tcpm_mux_init(int port)
*/
if (!error && !(power_status & TCPC_REG_POWER_STATUS_UNINIT))
break;
- else if (error && --tries == 0)
- return error;
+ if (--tries <= 0)
+ return error ? error : EC_ERROR_TIMEOUT;
msleep(10);
}