summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2019-06-06 11:28:48 -0700
committerCommit Bot <commit-bot@chromium.org>2019-06-07 20:16:53 +0000
commit2e3ec3604f774d9c7bb9eaf0aaf339b4a8cbd9cd (patch)
tree45ed41aea9151a8e041e334aac145b4c58920823 /driver
parent1cd577fa390d15919cee520c8655b2e08251a88d (diff)
downloadchrome-ec-2e3ec3604f774d9c7bb9eaf0aaf339b4a8cbd9cd.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>
Diffstat (limited to 'driver')
-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 a3ff61746e..b7150a4935 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);
}
@@ -804,8 +804,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);
}