diff options
author | Nick Sanders <nsanders@chromium.org> | 2018-04-18 20:26:50 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-04-25 23:00:34 -0700 |
commit | 805b9850a6402d56e3671e3cb1d5abd9cd68dd50 (patch) | |
tree | faa652eeca357c01e94d1c09c5d88906d88824eb /chip | |
parent | c1c571035e49956ddb92187dc837c5b38ead595c (diff) | |
download | chrome-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')
-rw-r--r-- | chip/it83xx/system.c | 25 |
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 |