diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2019-06-06 11:28:48 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-06-07 20:16:53 +0000 |
commit | 2e3ec3604f774d9c7bb9eaf0aaf339b4a8cbd9cd (patch) | |
tree | 45ed41aea9151a8e041e334aac145b4c58920823 /driver | |
parent | 1cd577fa390d15919cee520c8655b2e08251a88d (diff) | |
download | chrome-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.c | 10 |
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); } |