xref: /aosp_15_r20/external/vboot_reference/firmware/2lib/2recovery_reasons.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2020 The ChromiumOS Authors
2*8617a60dSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
3*8617a60dSAndroid Build Coastguard Worker  * found in the LICENSE file.
4*8617a60dSAndroid Build Coastguard Worker  *
5*8617a60dSAndroid Build Coastguard Worker  * Recovery reason string mapping.
6*8617a60dSAndroid Build Coastguard Worker  */
7*8617a60dSAndroid Build Coastguard Worker 
8*8617a60dSAndroid Build Coastguard Worker #include "2recovery_reasons.h"
9*8617a60dSAndroid Build Coastguard Worker #include "2sysincludes.h"
10*8617a60dSAndroid Build Coastguard Worker 
vb2_get_recovery_reason_string(uint8_t code)11*8617a60dSAndroid Build Coastguard Worker const char *vb2_get_recovery_reason_string(uint8_t code)
12*8617a60dSAndroid Build Coastguard Worker {
13*8617a60dSAndroid Build Coastguard Worker 	switch ((enum vb2_nv_recovery)code) {
14*8617a60dSAndroid Build Coastguard Worker 	/* 0x00 */ case VB2_RECOVERY_NOT_REQUESTED:
15*8617a60dSAndroid Build Coastguard Worker 		return "Recovery not requested";
16*8617a60dSAndroid Build Coastguard Worker 	/* 0x01 */ case VB2_RECOVERY_LEGACY:
17*8617a60dSAndroid Build Coastguard Worker 		return "Recovery requested from legacy utility";
18*8617a60dSAndroid Build Coastguard Worker 	/* 0x02 */ case VB2_RECOVERY_RO_MANUAL:
19*8617a60dSAndroid Build Coastguard Worker 		return "Recovery button pressed";
20*8617a60dSAndroid Build Coastguard Worker 	/* 0x03 */ case VB2_RECOVERY_RO_INVALID_RW:
21*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware failed signature check";
22*8617a60dSAndroid Build Coastguard Worker 	/* 0x04 */ case VB2_RECOVERY_DEPRECATED_RO_S3_RESUME:
23*8617a60dSAndroid Build Coastguard Worker 		return "S3 resume failed";
24*8617a60dSAndroid Build Coastguard Worker 	/* 0x05 */ case VB2_RECOVERY_DEPRECATED_RO_TPM_ERROR:
25*8617a60dSAndroid Build Coastguard Worker 		return "TPM error in read-only firmware";
26*8617a60dSAndroid Build Coastguard Worker 	/* 0x06 */ case VB2_RECOVERY_RO_SHARED_DATA:
27*8617a60dSAndroid Build Coastguard Worker 		return "Shared data error in read-only firmware";
28*8617a60dSAndroid Build Coastguard Worker 	/* 0x07 */ case VB2_RECOVERY_DEPRECATED_RO_TEST_S3:
29*8617a60dSAndroid Build Coastguard Worker 		return "Test error from S3Resume()";
30*8617a60dSAndroid Build Coastguard Worker 	/* 0x08 */ case VB2_RECOVERY_DEPRECATED_RO_TEST_LFS:
31*8617a60dSAndroid Build Coastguard Worker 		return "Test error from LoadFirmwareSetup()";
32*8617a60dSAndroid Build Coastguard Worker 	/* 0x09 */ case VB2_RECOVERY_DEPRECATED_RO_TEST_LF:
33*8617a60dSAndroid Build Coastguard Worker 		return "Test error from LoadFirmware()";
34*8617a60dSAndroid Build Coastguard Worker 	/* 0x10 */ case VB2_RECOVERY_DEPRECATED_RW_NOT_DONE:
35*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware check not done";
36*8617a60dSAndroid Build Coastguard Worker 	/* 0x11 */ case VB2_RECOVERY_DEPRECATED_RW_DEV_FLAG_MISMATCH:
37*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware developer flag mismatch";
38*8617a60dSAndroid Build Coastguard Worker 	/* 0x12 */ case VB2_RECOVERY_DEPRECATED_RW_REC_FLAG_MISMATCH:
39*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware recovery flag mismatch";
40*8617a60dSAndroid Build Coastguard Worker 	/* 0x13 */ case VB2_RECOVERY_FW_KEYBLOCK:
41*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware unable to verify keyblock";
42*8617a60dSAndroid Build Coastguard Worker 	/* 0x14 */ case VB2_RECOVERY_FW_KEY_ROLLBACK:
43*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware key version rollback detected";
44*8617a60dSAndroid Build Coastguard Worker 	/* 0x15 */ case VB2_RECOVERY_DEPRECATED_RW_DATA_KEY_PARSE:
45*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware unable to parse data key";
46*8617a60dSAndroid Build Coastguard Worker 	/* 0x16 */ case VB2_RECOVERY_FW_PREAMBLE:
47*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware unable to verify preamble";
48*8617a60dSAndroid Build Coastguard Worker 	/* 0x17 */ case VB2_RECOVERY_FW_ROLLBACK:
49*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware version rollback detected";
50*8617a60dSAndroid Build Coastguard Worker 	/* 0x18 */ case VB2_RECOVERY_DEPRECATED_FW_HEADER_VALID:
51*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware header is valid";
52*8617a60dSAndroid Build Coastguard Worker 	/* 0x19 */ case VB2_RECOVERY_FW_GET_FW_BODY:
53*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware error when accessing firmware body";
54*8617a60dSAndroid Build Coastguard Worker 	/* 0x1a */ case VB2_RECOVERY_DEPRECATED_FW_HASH_WRONG_SIZE:
55*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware hash is wrong size";
56*8617a60dSAndroid Build Coastguard Worker 	/* 0x1b */ case VB2_RECOVERY_FW_BODY:
57*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware unable to verify firmware body";
58*8617a60dSAndroid Build Coastguard Worker 	/* 0x1c */ case VB2_RECOVERY_DEPRECATED_FW_VALID:
59*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware is valid";
60*8617a60dSAndroid Build Coastguard Worker 	/* 0x1d */ case VB2_RECOVERY_DEPRECATED_FW_NO_RO_NORMAL:
61*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware read-only normal path is not supported";
62*8617a60dSAndroid Build Coastguard Worker 	/* 0x1e */ case VB2_RECOVERY_FW_VENDOR_BLOB:
63*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware vendor blob verification failure";
64*8617a60dSAndroid Build Coastguard Worker 	/* 0x20 */ case VB2_RECOVERY_RO_FIRMWARE:
65*8617a60dSAndroid Build Coastguard Worker 		return "Firmware problem outside of verified boot";
66*8617a60dSAndroid Build Coastguard Worker 	/* 0x21 */ case VB2_RECOVERY_RO_TPM_REBOOT:
67*8617a60dSAndroid Build Coastguard Worker 		return "TPM requires a system reboot (should be transient)";
68*8617a60dSAndroid Build Coastguard Worker 	/* 0x22 */ case VB2_RECOVERY_EC_SOFTWARE_SYNC:
69*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync error";
70*8617a60dSAndroid Build Coastguard Worker 	/* 0x23 */ case VB2_RECOVERY_EC_UNKNOWN_IMAGE:
71*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync unable to determine active EC image";
72*8617a60dSAndroid Build Coastguard Worker 	/* 0x24 */ case VB2_RECOVERY_DEPRECATED_EC_HASH:
73*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync error obtaining EC image hash";
74*8617a60dSAndroid Build Coastguard Worker 	/* 0x25 */ case VB2_RECOVERY_DEPRECATED_EC_EXPECTED_IMAGE:
75*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync error "
76*8617a60dSAndroid Build Coastguard Worker 			"obtaining expected EC image from BIOS";
77*8617a60dSAndroid Build Coastguard Worker 	/* 0x26 */ case VB2_RECOVERY_EC_UPDATE:
78*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync error updating EC";
79*8617a60dSAndroid Build Coastguard Worker 	/* 0x27 */ case VB2_RECOVERY_EC_JUMP_RW:
80*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync unable to jump to EC-RW";
81*8617a60dSAndroid Build Coastguard Worker 	/* 0x28 */ case VB2_RECOVERY_EC_PROTECT:
82*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync protection error";
83*8617a60dSAndroid Build Coastguard Worker 	/* 0x29 */ case VB2_RECOVERY_EC_EXPECTED_HASH:
84*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync error "
85*8617a60dSAndroid Build Coastguard Worker 			"obtaining expected EC hash from BIOS";
86*8617a60dSAndroid Build Coastguard Worker 	/* 0x2a */ case VB2_RECOVERY_DEPRECATED_EC_HASH_MISMATCH:
87*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync error "
88*8617a60dSAndroid Build Coastguard Worker 			"comparing expected EC hash and image";
89*8617a60dSAndroid Build Coastguard Worker 	/* 0x2b */ case VB2_RECOVERY_SECDATA_FIRMWARE_INIT:
90*8617a60dSAndroid Build Coastguard Worker 		return "Firmware secure NVRAM (TPM) initialization error";
91*8617a60dSAndroid Build Coastguard Worker 	/* 0x2c */ case VB2_RECOVERY_GBB_HEADER:
92*8617a60dSAndroid Build Coastguard Worker 		return "Error parsing GBB header";
93*8617a60dSAndroid Build Coastguard Worker 	/* 0x2d */ case VB2_RECOVERY_TPM_CLEAR_OWNER:
94*8617a60dSAndroid Build Coastguard Worker 		return "Error trying to clear TPM owner";
95*8617a60dSAndroid Build Coastguard Worker 	/* 0x2e */ case VB2_RECOVERY_DEV_SWITCH:
96*8617a60dSAndroid Build Coastguard Worker 		return "Error reading or updating developer switch";
97*8617a60dSAndroid Build Coastguard Worker 	/* 0x2f */ case VB2_RECOVERY_FW_SLOT:
98*8617a60dSAndroid Build Coastguard Worker 		return "Error selecting RW firmware slot";
99*8617a60dSAndroid Build Coastguard Worker 	/* 0x30 */ case VB2_RECOVERY_AUXFW_UPDATE:
100*8617a60dSAndroid Build Coastguard Worker 		return "Error updating auxiliary firmware";
101*8617a60dSAndroid Build Coastguard Worker 	/* 0x31 */ case VB2_RECOVERY_INTEL_CSE_LITE_SKU:
102*8617a60dSAndroid Build Coastguard Worker 		return "Intel CSE Lite SKU firmware failure";
103*8617a60dSAndroid Build Coastguard Worker 	/* 0x3f */ case VB2_RECOVERY_RO_UNSPECIFIED:
104*8617a60dSAndroid Build Coastguard Worker 		return "Unspecified/unknown error in RO firmware";
105*8617a60dSAndroid Build Coastguard Worker 	/* 0x41 */ case VB2_RECOVERY_DEPRECATED_RW_DEV_SCREEN:
106*8617a60dSAndroid Build Coastguard Worker 		return "User requested recovery from dev-mode warning screen";
107*8617a60dSAndroid Build Coastguard Worker 	/* 0x42 */ case VB2_RECOVERY_DEPRECATED_RW_NO_OS:
108*8617a60dSAndroid Build Coastguard Worker 		return "No OS kernel detected (or kernel rollback attempt?)";
109*8617a60dSAndroid Build Coastguard Worker 	/* 0x43 */ case VB2_RECOVERY_RW_INVALID_OS:
110*8617a60dSAndroid Build Coastguard Worker 		return "OS kernel or rootfs failed signature check";
111*8617a60dSAndroid Build Coastguard Worker 	/* 0x44 */ case VB2_RECOVERY_DEPRECATED_RW_TPM_ERROR:
112*8617a60dSAndroid Build Coastguard Worker 		return "TPM error in rewritable firmware";
113*8617a60dSAndroid Build Coastguard Worker 	/* 0x45 */ case VB2_RECOVERY_DEPRECATED_RW_DEV_MISMATCH:
114*8617a60dSAndroid Build Coastguard Worker 		return "RW firmware in dev mode, but dev switch is off";
115*8617a60dSAndroid Build Coastguard Worker 	/* 0x46 */ case VB2_RECOVERY_RW_SHARED_DATA:
116*8617a60dSAndroid Build Coastguard Worker 		return "Shared data error in rewritable firmware";
117*8617a60dSAndroid Build Coastguard Worker 	/* 0x47 */ case VB2_RECOVERY_DEPRECATED_RW_TEST_LK:
118*8617a60dSAndroid Build Coastguard Worker 		return "Test error from vb2api_load_kernel()";
119*8617a60dSAndroid Build Coastguard Worker 	/* 0x48 */ case VB2_RECOVERY_DEPRECATED_RW_NO_DISK:
120*8617a60dSAndroid Build Coastguard Worker 		return "No bootable storage device in system";
121*8617a60dSAndroid Build Coastguard Worker 	/* 0x49 */ case VB2_RECOVERY_TPM_E_FAIL:
122*8617a60dSAndroid Build Coastguard Worker 		return "TPM error that was not fixed by reboot";
123*8617a60dSAndroid Build Coastguard Worker 	/* 0x50 */ case VB2_RECOVERY_RO_TPM_S_ERROR:
124*8617a60dSAndroid Build Coastguard Worker 		return "TPM setup error in read-only firmware";
125*8617a60dSAndroid Build Coastguard Worker 	/* 0x51 */ case VB2_RECOVERY_RO_TPM_W_ERROR:
126*8617a60dSAndroid Build Coastguard Worker 		return "TPM write error in read-only firmware";
127*8617a60dSAndroid Build Coastguard Worker 	/* 0x52 */ case VB2_RECOVERY_RO_TPM_L_ERROR:
128*8617a60dSAndroid Build Coastguard Worker 		return "TPM lock error in read-only firmware";
129*8617a60dSAndroid Build Coastguard Worker 	/* 0x53 */ case VB2_RECOVERY_RO_TPM_U_ERROR:
130*8617a60dSAndroid Build Coastguard Worker 		return "TPM update error in read-only firmware";
131*8617a60dSAndroid Build Coastguard Worker 	/* 0x54 */ case VB2_RECOVERY_RW_TPM_R_ERROR:
132*8617a60dSAndroid Build Coastguard Worker 		return "TPM read error in rewritable firmware";
133*8617a60dSAndroid Build Coastguard Worker 	/* 0x55 */ case VB2_RECOVERY_RW_TPM_W_ERROR:
134*8617a60dSAndroid Build Coastguard Worker 		return "TPM write error in rewritable firmware";
135*8617a60dSAndroid Build Coastguard Worker 	/* 0x56 */ case VB2_RECOVERY_RW_TPM_L_ERROR:
136*8617a60dSAndroid Build Coastguard Worker 		return "TPM lock error in rewritable firmware";
137*8617a60dSAndroid Build Coastguard Worker 	/* 0x57 */ case VB2_RECOVERY_EC_HASH_FAILED:
138*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync unable to get EC image hash";
139*8617a60dSAndroid Build Coastguard Worker 	/* 0x58 */ case VB2_RECOVERY_EC_HASH_SIZE:
140*8617a60dSAndroid Build Coastguard Worker 		return "EC software sync invalid image hash size";
141*8617a60dSAndroid Build Coastguard Worker 	/* 0x59 */ case VB2_RECOVERY_LK_UNSPECIFIED:
142*8617a60dSAndroid Build Coastguard Worker 		return "Unspecified error while trying to load kernel";
143*8617a60dSAndroid Build Coastguard Worker 	/* 0x5a */ case VB2_RECOVERY_RW_NO_DISK:
144*8617a60dSAndroid Build Coastguard Worker 		return "No bootable storage device in system";
145*8617a60dSAndroid Build Coastguard Worker 	/* 0x5b */ case VB2_RECOVERY_RW_NO_KERNEL:
146*8617a60dSAndroid Build Coastguard Worker 		return "No bootable kernel found on disk";
147*8617a60dSAndroid Build Coastguard Worker 	/* 0x5c */ case VB2_RECOVERY_DEPRECATED_RW_BCB_ERROR:
148*8617a60dSAndroid Build Coastguard Worker 		return "BCB partition error on disk";
149*8617a60dSAndroid Build Coastguard Worker 	/* 0x5d */ case VB2_RECOVERY_SECDATA_KERNEL_INIT:
150*8617a60dSAndroid Build Coastguard Worker 		return "Kernel secure NVRAM (TPM) initialization error";
151*8617a60dSAndroid Build Coastguard Worker 	/* 0x5e */ case VB2_RECOVERY_DEPRECATED_FW_FASTBOOT:
152*8617a60dSAndroid Build Coastguard Worker 		return "Fastboot-mode requested in firmware";
153*8617a60dSAndroid Build Coastguard Worker 	/* 0x5f */ case VB2_RECOVERY_RO_TPM_REC_HASH_L_ERROR:
154*8617a60dSAndroid Build Coastguard Worker 		return "Recovery hash space lock error in RO firmware";
155*8617a60dSAndroid Build Coastguard Worker 	/* 0x60 */ case VB2_RECOVERY_TPM_DISABLE_FAILED:
156*8617a60dSAndroid Build Coastguard Worker 		return "Failed to disable TPM before running untrusted code";
157*8617a60dSAndroid Build Coastguard Worker 	/* 0x61 */ case VB2_RECOVERY_ALTFW_HASH_MISMATCH:
158*8617a60dSAndroid Build Coastguard Worker 		return "Verification of alternate bootloader payload failed";
159*8617a60dSAndroid Build Coastguard Worker 	/* 0x62 */ case VB2_RECOVERY_SECDATA_FWMP_INIT:
160*8617a60dSAndroid Build Coastguard Worker 		return "FWMP secure NVRAM (TPM) initialization error";
161*8617a60dSAndroid Build Coastguard Worker 	/* 0x63 */ case VB2_RECOVERY_GSC_BOOT_MODE:
162*8617a60dSAndroid Build Coastguard Worker 		return "Failed to get boot mode from GSC";
163*8617a60dSAndroid Build Coastguard Worker 	/* 0x64 */ case VB2_RECOVERY_ESCAPE_NO_BOOT:
164*8617a60dSAndroid Build Coastguard Worker 		return "Attempt to escape from NO_BOOT mode was detected";
165*8617a60dSAndroid Build Coastguard Worker 	/* 0x65 */ case VB2_RECOVERY_WIDEVINE_PREPARE:
166*8617a60dSAndroid Build Coastguard Worker 		return "Failed to prepare widevine";
167*8617a60dSAndroid Build Coastguard Worker 	/* 0x7f */ case VB2_RECOVERY_RW_UNSPECIFIED:
168*8617a60dSAndroid Build Coastguard Worker 		return "Unspecified/unknown error in RW firmware";
169*8617a60dSAndroid Build Coastguard Worker 	/* 0x81 */ case VB2_RECOVERY_DEPRECATED_KE_DM_VERITY:
170*8617a60dSAndroid Build Coastguard Worker 		return "DM-verity error";
171*8617a60dSAndroid Build Coastguard Worker 	/* 0xbf */ case VB2_RECOVERY_DEPRECATED_KE_UNSPECIFIED:
172*8617a60dSAndroid Build Coastguard Worker 		return "Unspecified/unknown error in kernel";
173*8617a60dSAndroid Build Coastguard Worker 	/* 0xc1 */ case VB2_RECOVERY_US_TEST:
174*8617a60dSAndroid Build Coastguard Worker 		return "Recovery mode test from user-mode";
175*8617a60dSAndroid Build Coastguard Worker 	/* 0xc2 */ case VB2_RECOVERY_DEPRECATED_BCB_USER_MODE:
176*8617a60dSAndroid Build Coastguard Worker 		return "User-mode requested recovery via BCB";
177*8617a60dSAndroid Build Coastguard Worker 	/* 0xc3 */ case VB2_RECOVERY_DEPRECATED_US_FASTBOOT:
178*8617a60dSAndroid Build Coastguard Worker 		return "User-mode requested fastboot mode";
179*8617a60dSAndroid Build Coastguard Worker 	/* 0xc4 */ case VB2_RECOVERY_TRAIN_AND_REBOOT:
180*8617a60dSAndroid Build Coastguard Worker 		return "User-mode requested DRAM train and reboot";
181*8617a60dSAndroid Build Coastguard Worker 	/* 0xff */ case VB2_RECOVERY_US_UNSPECIFIED:
182*8617a60dSAndroid Build Coastguard Worker 		return "Unspecified/unknown error in user-mode";
183*8617a60dSAndroid Build Coastguard Worker 	}
184*8617a60dSAndroid Build Coastguard Worker 	return "Unknown error code";
185*8617a60dSAndroid Build Coastguard Worker }
186