aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ec/google/chromeec/ec.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c
index ed7f97dc43..26c6054a38 100644
--- a/src/ec/google/chromeec/ec.c
+++ b/src/ec/google/chromeec/ec.c
@@ -993,9 +993,24 @@ static uint16_t google_chromeec_get_uptime_info(
bool google_chromeec_get_ap_watchdog_flag(void)
{
+ int i;
struct ec_response_uptime_info resp;
- return (!google_chromeec_get_uptime_info(&resp) &&
- (resp.ec_reset_flags & EC_RESET_FLAG_AP_WATCHDOG));
+
+ if (google_chromeec_get_uptime_info(&resp))
+ return false;
+
+ if (resp.ec_reset_flags & EC_RESET_FLAG_AP_WATCHDOG)
+ return true;
+
+ /* Find the last valid entry */
+ for (i = ARRAY_SIZE(resp.recent_ap_reset) - 1; i >= 0; i--) {
+ if (resp.recent_ap_reset[i].reset_time_ms == 0)
+ continue;
+ return (resp.recent_ap_reset[i].reset_cause ==
+ CHIPSET_RESET_AP_WATCHDOG);
+ }
+
+ return false;
}
int google_chromeec_i2c_xfer(uint8_t chip, uint8_t addr, int alen,