Add support for changes in recovery mode
1. Add new recovery reasons:
- 0x5F: Recovery hash space lock error in RO firmware
- 0xC4: Request to reboot in recovery, train memory and reboot back.
2. Update slot type for MRC cache update in recovery mode.
3. Add new EC event for recovery mode trigger with memory retraining.
BUG=chrome-os-partner:59355
BRANCH=None
TEST=Verified output of mosys on reef:
12 | 2016-11-11 11:47:33 | EC Event | Power Button
13 | 2016-11-11 11:47:39 | Chrome OS Developer Mode
14 | 2016-11-11 11:47:40 | Memory Cache Update | Normal | Success
15 | 2016-11-11 11:51:56 | Kernel Event | Clean Shutdown
16 | 2016-11-11 11:52:05 | System boot | 296
17 | 2016-11-11 11:52:05 | Chrome OS Recovery Mode | User requested
recovery for training memory and rebooting
18 | 2016-11-11 11:52:05 | Chrome OS Developer Mode
19 | 2016-11-11 11:52:06 | Memory Cache Update | Recovery | Success
20 | 2016-11-11 11:52:22 | System boot | 297
21 | 2016-11-11 11:52:22 | Chrome OS Developer Mode
22 | 2016-11-11 11:52:22 | Memory Cache Update | Normal | Success
23 | 2016-11-11 12:01:58 | System boot | 298
24 | 2016-11-11 12:01:58 | Chrome OS Recovery Mode | Recovery Button
Pressed
25 | 2016-11-11 12:01:58 | Chrome OS Developer Mode
26 | 2016-11-11 12:01:58 | Memory Cache Update | Recovery | Success
27 | 2016-11-11 12:02:12 | System boot | 299
Change-Id: Ied22be88b1290a31eaa4a6a22a0a463e2c60e2b2
Signed-off-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/410183
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
diff --git a/include/lib/elog.h b/include/lib/elog.h
index 384c49f..5a1f8ae 100644
--- a/include/lib/elog.h
+++ b/include/lib/elog.h
@@ -111,30 +111,31 @@
} __attribute__ ((packed));
#define ELOG_TYPE_EC_EVENT 0x91
-#define EC_EVENT_LID_CLOSED 0x01
-#define EC_EVENT_LID_OPEN 0x02
-#define EC_EVENT_POWER_BUTTON 0x03
-#define EC_EVENT_AC_CONNECTED 0x04
-#define EC_EVENT_AC_DISCONNECTED 0x05
-#define EC_EVENT_BATTERY_LOW 0x06
-#define EC_EVENT_BATTERY_CRITICAL 0x07
-#define EC_EVENT_BATTERY 0x08
-#define EC_EVENT_THERMAL_THRESHOLD 0x09
-#define EC_EVENT_THERMAL_OVERLOAD 0x0a
-#define EC_EVENT_THERMAL 0x0b
-#define EC_EVENT_USB_CHARGER 0x0c
-#define EC_EVENT_KEY_PRESSED 0x0d
-#define EC_EVENT_INTERFACE_READY 0x0e
-#define EC_EVENT_KEYBOARD_RECOVERY 0x0f
-#define EC_EVENT_THERMAL_SHUTDOWN 0x10
-#define EC_EVENT_BATTERY_SHUTDOWN 0x11
-#define EC_EVENT_THROTTLE_START 0x12
-#define EC_EVENT_THROTTLE_STOP 0x13
-#define EC_EVENT_HANG_DETECT 0x14
-#define EC_EVENT_HANG_REBOOT 0x15
-#define EC_EVENT_PD_MCU 0x16
-#define EC_EVENT_BATTERY_STATUS 0x17
-#define EC_EVENT_PANIC 0x18
+#define EC_EVENT_LID_CLOSED 0x01
+#define EC_EVENT_LID_OPEN 0x02
+#define EC_EVENT_POWER_BUTTON 0x03
+#define EC_EVENT_AC_CONNECTED 0x04
+#define EC_EVENT_AC_DISCONNECTED 0x05
+#define EC_EVENT_BATTERY_LOW 0x06
+#define EC_EVENT_BATTERY_CRITICAL 0x07
+#define EC_EVENT_BATTERY 0x08
+#define EC_EVENT_THERMAL_THRESHOLD 0x09
+#define EC_EVENT_THERMAL_OVERLOAD 0x0a
+#define EC_EVENT_THERMAL 0x0b
+#define EC_EVENT_USB_CHARGER 0x0c
+#define EC_EVENT_KEY_PRESSED 0x0d
+#define EC_EVENT_INTERFACE_READY 0x0e
+#define EC_EVENT_KEYBOARD_RECOVERY 0x0f
+#define EC_EVENT_THERMAL_SHUTDOWN 0x10
+#define EC_EVENT_BATTERY_SHUTDOWN 0x11
+#define EC_EVENT_THROTTLE_START 0x12
+#define EC_EVENT_THROTTLE_STOP 0x13
+#define EC_EVENT_HANG_DETECT 0x14
+#define EC_EVENT_HANG_REBOOT 0x15
+#define EC_EVENT_PD_MCU 0x16
+#define EC_EVENT_BATTERY_STATUS 0x17
+#define EC_EVENT_PANIC 0x18
+#define EC_EVENT_KEYBOARD_RECOVERY_HWREINIT 0x19
struct elog_ec_event {
uint8_t event;
uint8_t checksum;
@@ -235,6 +236,7 @@
/* Memory Cache Update */
#define ELOG_TYPE_MEM_CACHE_UPDATE 0xaa
#define ELOG_MEM_CACHE_UPDATE_SLOT_NORMAL 0
+#define ELOG_MEM_CACHE_UPDATE_SLOT_RECOVERY 1
#define ELOG_MEM_CACHE_UPDATE_STATUS_SUCCESS 0
#define ELOG_MEM_CACHE_UPDATE_STATUS_FAIL 1
struct elog_event_mem_cache_update {
@@ -370,6 +372,8 @@
#define VBNV_RECOVERY_RW_BCB_ERROR 0x5C
/* Fastboot mode requested in firmware */
#define VBNV_RECOVERY_FW_FASTBOOT 0x5E
+/* Recovery hash space lock error in RO firmware */
+#define VBNV_RECOVERY_RO_TPM_REC_HASH_L_ERROR 0x5F
/* Unspecified/unknown error in rewritable firmware */
#define VBNV_RECOVERY_RW_UNSPECIFIED 0x7F
/* DM-verity error */
@@ -382,6 +386,8 @@
#define VBNV_RECOVERY_BCB_USER_MODE 0xC2
/* Fastboot mode requested by user-mode */
#define VBNV_RECOVERY_US_FASTBOOT 0xC3
+/* User requested recovery for training memory and rebooting. */
+#define VBNV_RECOVERY_TRAIN_AND_REBOOT 0xC4
/* Unspecified/unknown error in user-mode */
#define VBNV_RECOVERY_US_UNSPECIFIED 0xFF
diff --git a/lib/eventlog/elog.c b/lib/eventlog/elog.c
index aea32d2..279e0eb 100644
--- a/lib/eventlog/elog.c
+++ b/lib/eventlog/elog.c
@@ -255,6 +255,8 @@
{ EC_EVENT_PD_MCU, "PD MCU Request" },
{ EC_EVENT_BATTERY_STATUS, "Battery Status Request" },
{ EC_EVENT_PANIC, "Panic Reset in previous boot" },
+ { EC_EVENT_KEYBOARD_RECOVERY_HWREINIT,
+ "Keyboard Recovery Forced Hardware Reinit" },
{ 0, NULL },
};
/*
@@ -380,6 +382,8 @@
"BCB partition error on disk" },
{ VBNV_RECOVERY_FW_FASTBOOT,
"Fastboot-mode requested in firmware" },
+ { VBNV_RECOVERY_RO_TPM_REC_HASH_L_ERROR,
+ "Recovery hash space lock error in RO firmware" },
{ VBNV_RECOVERY_RW_UNSPECIFIED,
"Unspecified/unknown error in RW firmware" },
{ VBNV_RECOVERY_KE_DM_VERITY,
@@ -392,6 +396,8 @@
"User-mode requested recovery via BCB" },
{ VBNV_RECOVERY_US_FASTBOOT,
"User-mode requested fastboot mode" },
+ { VBNV_RECOVERY_TRAIN_AND_REBOOT,
+ "User requested recovery for training memory and rebooting" },
{ VBNV_RECOVERY_RW_UNSPECIFIED,
"Unknown Error in RW Firmware" },
{ VBNV_RECOVERY_KE_DM_VERITY, "DM-Verity Error" },
@@ -450,6 +456,7 @@
};
static struct valstr mem_cache_slots[] = {
{ ELOG_MEM_CACHE_UPDATE_SLOT_NORMAL, "Normal" },
+ { ELOG_MEM_CACHE_UPDATE_SLOT_RECOVERY, "Recovery" },
{ 0, NULL },
};
static struct valstr mem_cache_statuses[] = {