summaryrefslogtreecommitdiff
path: root/chip/it83xx
diff options
context:
space:
mode:
authorNick Sanders <nsanders@chromium.org>2018-04-18 20:26:50 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-04-25 23:00:34 -0700
commit805b9850a6402d56e3671e3cb1d5abd9cd68dd50 (patch)
treefaa652eeca357c01e94d1c09c5d88906d88824eb /chip/it83xx
parentc1c571035e49956ddb92187dc837c5b38ead595c (diff)
downloadchrome-ec-805b9850a6402d56e3671e3cb1d5abd9cd68dd50.tar.gz
it83xx: implement reboot wait-ext
This was missed on it83xx, but is helpful for servod to work reliably. Refactor save_flags to use common code. BUG=b:77830536 TEST=(not yet done) it waits 10 sec for external reboot. Change-Id: Ia2aac1879d73ac11dd7f3dfc13a1dd871905473e Signed-off-by: Nick Sanders <nsanders@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1018597 Tested-by: Dino Li <Dino.Li@ite.com.tw> Reviewed-by: Jett Rink <jettrink@chromium.org>
Diffstat (limited to 'chip/it83xx')
-rw-r--r--chip/it83xx/system.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/chip/it83xx/system.c b/chip/it83xx/system.c
index ddd8b048f0..3ff3921d1b 100644
--- a/chip/it83xx/system.c
+++ b/chip/it83xx/system.c
@@ -120,18 +120,8 @@ void system_reset(int flags)
/* Disable interrupts to avoid task swaps during reboot. */
interrupt_disable();
- /* Save current reset reasons if necessary */
- if (flags & SYSTEM_RESET_PRESERVE_FLAGS)
- save_flags = system_get_reset_flags() | RESET_FLAG_PRESERVED;
-
- /* Add in AP off flag into saved flags. */
- if (flags & SYSTEM_RESET_LEAVE_AP_OFF)
- save_flags |= RESET_FLAG_AP_OFF;
-
- if (flags & SYSTEM_RESET_HARD)
- save_flags |= RESET_FLAG_HARD;
- else
- save_flags |= RESET_FLAG_SOFT;
+ /* Handle saving common reset flags. */
+ system_encode_save_flags(flags, &save_flags);
if (clock_ec_wake_from_sleep())
save_flags |= RESET_FLAG_HIBERNATE;
@@ -142,6 +132,17 @@ void system_reset(int flags)
BRAM_RESET_FLAGS2 = (save_flags >> 8) & 0xff;
BRAM_RESET_FLAGS3 = save_flags & 0xff;
+ /* If WAIT_EXT is set, then allow 10 seconds for external reset */
+ if (flags & SYSTEM_RESET_WAIT_EXT) {
+ int i;
+
+ /* Wait 10 seconds for external reset */
+ for (i = 0; i < 1000; i++) {
+ watchdog_reload();
+ udelay(10000);
+ }
+ }
+
/*
* bit4, disable debug mode through SMBus.
* If we are in debug mode, we need disable it before triggering