diff options
author | David Huang <david.huang@quanta.corp-partner.google.com> | 2019-12-12 17:02:45 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-01-10 05:29:22 +0000 |
commit | b5888e92487d846227ec048ea625ab0d099ff4fb (patch) | |
tree | 7daa5267a43a0b5c15e63f3185ae5f71655f0136 /board/kindred | |
parent | deaa645651c493ee3e46192dfeee09672f35e887 (diff) | |
download | chrome-ec-b5888e92487d846227ec048ea625ab0d099ff4fb.tar.gz |
Kindred: Add workaround for TI TPS51486RJER when system resume
Monitor GPIO PG_EC_ALL_SYS_PWRG was not trigger,
when power on within 3 seond, EC will reset system.
BUG=b:143440730
BRANCH=master
TEST=check boot to OS was workable
Change-Id: I19f2411a5369c75b6895316b791d077e2aee7deb
Signed-off-by: David Huang <David.Huang@quantatw.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1948690
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: Scott Collyer <scollyer@chromium.org>
Commit-Queue: David Huang <david.huang@quanta.corp-partner.google.com>
Diffstat (limited to 'board/kindred')
-rw-r--r-- | board/kindred/board.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/board/kindred/board.c b/board/kindred/board.c index 6ba4c949ea..99fbc47943 100644 --- a/board/kindred/board.c +++ b/board/kindred/board.c @@ -47,6 +47,10 @@ #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) #define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) +static void check_reboot_deferred(void); +DECLARE_DEFERRED(check_reboot_deferred); +static int system_in_resume_state = 0; + /* GPIO to enable/disable the USB Type-A port. */ const int usb_port_enable[CONFIG_USB_PORT_POWER_SMART_PORT_COUNT] = { GPIO_EN_USB_A_5V, @@ -477,3 +481,22 @@ __override uint32_t board_override_feature_flags0(uint32_t flags0) else return (flags0 & ~EC_FEATURE_MASK_0(EC_FEATURE_PWM_KEYB)); } + +void all_sys_pgood_check_reboot(void) +{ + system_in_resume_state = 1; + hook_call_deferred(&check_reboot_deferred_data, 3000 * MSEC); +} + +static void all_sys_pgood_reset_reboot(void) +{ + system_in_resume_state = 0; +} +DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, all_sys_pgood_reset_reboot, HOOK_PRIO_DEFAULT); + +static void check_reboot_deferred(void) +{ + if (!gpio_get_level(GPIO_PG_EC_ALL_SYS_PWRGD) && system_in_resume_state == 1) { + system_reset(SYSTEM_RESET_MANUALLY_TRIGGERED); + } +} |