aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2012-07-16 12:47:45 -0700
committerRonald G. Minnich <rminnich@gmail.com>2012-07-26 20:34:12 +0200
commit8de884424cb65bdba80a5602e76a4e40b11b154f (patch)
tree877377990e0a2426c3cfca9af201b9c7b2665d5f
parentc1c9435863dd4bb22d06de486527d58b8a9e0170 (diff)
ELOG: Fix reporting of developer/recovery modes
Recent changes in EC/Vboot/U-boot have completely broken the logging of developer and recovery modes. Recovery mode may not be in VBNV, so if that is zero and yet we are in recovery mode then assume it is there because the button/key was pressed. Since there may not be any actual developer mode switch we look if option rom is loaded and the system is not in recovery mode and consider that as developer mode. Change-Id: I70104877b24de477217e1ff5b3a019aef22343ec Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: http://review.coreboot.org/1346 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
-rw-r--r--src/include/elog.h1
-rw-r--r--src/vendorcode/google/chromeos/gnvs.c9
2 files changed, 7 insertions, 3 deletions
diff --git a/src/include/elog.h b/src/include/elog.h
index 5a84c75d4b..488549eb1e 100644
--- a/src/include/elog.h
+++ b/src/include/elog.h
@@ -104,6 +104,7 @@ struct elog_event_data_wake {
/* Chrome OS related events */
#define ELOG_TYPE_CROS_DEVELOPER_MODE 0xa0
#define ELOG_TYPE_CROS_RECOVERY_MODE 0xa1
+#define ELOG_CROS_RECOVERY_MODE_BUTTON 0x02
/* Management Engine Events */
#define ELOG_TYPE_MANAGEMENT_ENGINE 0xa2
diff --git a/src/vendorcode/google/chromeos/gnvs.c b/src/vendorcode/google/chromeos/gnvs.c
index c8ccfe4301..2e9975c9cb 100644
--- a/src/vendorcode/google/chromeos/gnvs.c
+++ b/src/vendorcode/google/chromeos/gnvs.c
@@ -37,11 +37,14 @@ void chromeos_init_vboot(chromeos_acpi_t *chromeos)
memcpy(vboot_data->mehh, me_hash_saved, sizeof(vboot_data->mehh));
#if CONFIG_ELOG
- if (developer_mode_enabled())
+ if (developer_mode_enabled() ||
+ (vboot_wants_oprom() && !recovery_mode_enabled()))
elog_add_event(ELOG_TYPE_CROS_DEVELOPER_MODE);
- if (recovery_mode_enabled())
+ if (recovery_mode_enabled()) {
+ int reason = get_recovery_mode_from_vbnv();
elog_add_event_byte(ELOG_TYPE_CROS_RECOVERY_MODE,
- get_recovery_mode_from_vbnv());
+ reason ? reason : ELOG_CROS_RECOVERY_MODE_BUTTON);
+ }
#endif
}