summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ec/google/chromeec/ec.c16
-rw-r--r--src/ec/google/chromeec/ec.h3
2 files changed, 14 insertions, 5 deletions
diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c
index c57e18bbca..6e7ecdfb36 100644
--- a/src/ec/google/chromeec/ec.c
+++ b/src/ec/google/chromeec/ec.c
@@ -100,8 +100,7 @@ u32 google_chromeec_get_events_b(void)
}
#ifndef __SMM__
-/* Check for recovery mode and ensure EC is in RO */
-void google_chromeec_early_init(void)
+void google_chromeec_check_ec_image(int expected_type)
{
struct chromeec_command cec_cmd;
struct ec_response_get_version cec_resp = {{0}};
@@ -113,9 +112,7 @@ void google_chromeec_early_init(void)
cec_cmd.cmd_size_out = sizeof(cec_resp);
google_chromeec_command(&cec_cmd);
- if (cec_cmd.cmd_code ||
- (recovery_mode_enabled() &&
- (cec_resp.current_image != EC_IMAGE_RO))) {
+ if (cec_cmd.cmd_code || cec_resp.current_image != expected_type) {
struct ec_params_reboot_ec reboot_ec;
/* Reboot the EC and make it come back in RO mode */
reboot_ec.cmd = EC_REBOOT_COLD;
@@ -133,6 +130,15 @@ void google_chromeec_early_init(void)
}
}
+/* Check for recovery mode and ensure EC is in RO */
+void google_chromeec_early_init(void)
+{
+ /* If in recovery ensure EC is running RO firmware. */
+ if (recovery_mode_enabled()) {
+ google_chromeec_check_ec_image(EC_IMAGE_RO);
+ }
+}
+
u16 google_chromeec_get_board_version(void)
{
struct chromeec_command cmd;
diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h
index a037d0147d..d033bab73a 100644
--- a/src/ec/google/chromeec/ec.h
+++ b/src/ec/google/chromeec/ec.h
@@ -36,7 +36,10 @@ int google_ec_running_ro(void);
void google_chromeec_init(void);
#endif
+/* If recovery mode is enabled and EC is not running RO firmware reboot. */
void google_chromeec_early_init(void);
+/* Reboot if EC firmware is not expected type. */
+void google_chromeec_check_ec_image(int expected_type);
uint8_t google_chromeec_calc_checksum(const uint8_t *data, int size);
u16 google_chromeec_get_board_version(void);
u32 google_chromeec_get_events_b(void);