xref: /aosp_15_r20/external/vboot_reference/firmware/2lib/include/2recovery_reasons.h (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1 /* Copyright 2014 The ChromiumOS Authors
2  * Use of this source code is governed by a BSD-style license that can be
3  * found in the LICENSE file.
4  *
5  * Recovery reasons.
6  */
7 
8 #ifndef VBOOT_REFERENCE_2RECOVERY_REASONS_H_
9 #define VBOOT_REFERENCE_2RECOVERY_REASONS_H_
10 
11 #include "2sysincludes.h"
12 
13 /**
14  * Return a description of the recovery reason code.
15  *
16  * @param		recovery reason code
17  * @return A string literal with English description of the recovery reason
18  */
19 const char *vb2_get_recovery_reason_string(uint8_t code);
20 
21 /* Recovery reason codes */
22 enum vb2_nv_recovery {
23 
24 	/**********************************************************************/
25 	/**** Uncategorized errors ********************************************/
26 
27 	/* Recovery not requested. */
28 	VB2_RECOVERY_NOT_REQUESTED = 0x00,
29 
30 	/*
31 	 * Recovery requested from legacy utility.  (Prior to the NV storage
32 	 * spec, recovery mode was a single bitfield; this value is reserved so
33 	 * that scripts which wrote 1 to the recovery field are distinguishable
34 	 * from scripts whch use the recovery reasons listed here.
35 	 */
36 	VB2_RECOVERY_LEGACY = 0x01,
37 
38 	/* User manually requested recovery via recovery button */
39 	VB2_RECOVERY_RO_MANUAL = 0x02,
40 
41 
42 
43 	/**********************************************************************/
44 	/**** Firmware verification (RO) errors (and some EC stuff???) ********/
45 
46 	/* Unspecified RW verification error (when none of 0x10-0x1f fit) */
47 	VB2_RECOVERY_RO_INVALID_RW = 0x03,
48 
49 	/* S3 resume failed (deprecated) */
50 	VB2_RECOVERY_DEPRECATED_RO_S3_RESUME = 0x04,
51 
52 	/* TPM error in read-only firmware (deprecated, see 0x54+) */
53 	VB2_RECOVERY_DEPRECATED_RO_TPM_ERROR = 0x05,
54 
55 	/* Shared data error in read-only firmware */
56 	VB2_RECOVERY_RO_SHARED_DATA = 0x06,
57 
58 	/* Test error from S3Resume() (deprecated) */
59 	VB2_RECOVERY_DEPRECATED_RO_TEST_S3 = 0x07,
60 
61 	/* Test error from LoadFirmwareSetup() (deprecated) */
62 	VB2_RECOVERY_DEPRECATED_RO_TEST_LFS = 0x08,
63 
64 	/* Test error from LoadFirmware() (deprecated) */
65 	VB2_RECOVERY_DEPRECATED_RO_TEST_LF = 0x09,
66 
67 	/*
68 	 * RW firmware failed signature check (neither RW firmware slot was
69 	 * valid).  Recovery reason is VB2_RECOVERY_DEPRECATED_RW_NOT_DONE +
70 	 * the check value for the slot which came closest to validating; see
71 	 * VBSD_LF_CHECK_* in vboot_struct.h (deprecated).
72 	 */
73 	VB2_RECOVERY_DEPRECATED_RW_NOT_DONE = 0x10,
74 
75 	/* Latest tried RW firmware developer flag mismatch */
76 	VB2_RECOVERY_DEPRECATED_RW_DEV_FLAG_MISMATCH = 0x11,
77 
78 	/* Latest tried RW firmware recovery flag mismatch */
79 	VB2_RECOVERY_DEPRECATED_RW_REC_FLAG_MISMATCH = 0x12,
80 
81 	/* Latest tried RW firmware keyblock verification failed */
82 	VB2_RECOVERY_FW_KEYBLOCK = 0x13,
83 
84 	/* Latest tried RW firmware key version too old */
85 	VB2_RECOVERY_FW_KEY_ROLLBACK = 0x14,
86 
87 	/* Latest tried RW firmware unable to parse data key */
88 	VB2_RECOVERY_DEPRECATED_RW_DATA_KEY_PARSE = 0x15,
89 
90 	/* Latest tried RW firmware preamble verification failed */
91 	VB2_RECOVERY_FW_PREAMBLE = 0x16,
92 
93 	/* Latest tried RW firmware version too old */
94 	VB2_RECOVERY_FW_ROLLBACK = 0x17,
95 
96 	/* Latest tried RW firmware header valid */
97 	VB2_RECOVERY_DEPRECATED_FW_HEADER_VALID = 0x18,
98 
99 	/* Latest tried RW firmware unable to get firmware body */
100 	VB2_RECOVERY_FW_GET_FW_BODY = 0x19,
101 
102 	/* Latest tried RW firmware hash wrong size */
103 	VB2_RECOVERY_DEPRECATED_FW_HASH_WRONG_SIZE = 0x1a,
104 
105 	/* Latest tried RW firmware body verification failed */
106 	VB2_RECOVERY_FW_BODY = 0x1b,
107 
108 	/* Latest tried RW firmware valid */
109 	VB2_RECOVERY_DEPRECATED_FW_VALID = 0x1c,
110 
111 	/* Latest tried RW firmware RO normal path not supported */
112 	VB2_RECOVERY_DEPRECATED_FW_NO_RO_NORMAL = 0x1d,
113 
114 	/* Latest tried RW firmware vendor blob verification failed */
115 	VB2_RECOVERY_FW_VENDOR_BLOB = 0x1e,
116 
117 	/*
118 	 * Firmware boot failure outside of verified boot (RAM init, missing
119 	 * SSD, etc.).
120 	 */
121 	VB2_RECOVERY_RO_FIRMWARE = 0x20,
122 
123 	/*
124 	 * Recovery mode TPM initialization requires a system reboot.  The
125 	 * system was already in recovery mode for some other reason when this
126 	 * happened.
127 	 */
128 	VB2_RECOVERY_RO_TPM_REBOOT = 0x21,
129 
130 	/* EC software sync - other error */
131 	VB2_RECOVERY_EC_SOFTWARE_SYNC = 0x22,
132 
133 	/* EC software sync - unable to determine active EC image */
134 	VB2_RECOVERY_EC_UNKNOWN_IMAGE = 0x23,
135 
136 	/* EC software sync - error obtaining EC image hash (deprecated) */
137 	VB2_RECOVERY_DEPRECATED_EC_HASH = 0x24,
138 
139 	/* EC software sync - error obtaining expected EC image (deprecated) */
140 	VB2_RECOVERY_DEPRECATED_EC_EXPECTED_IMAGE = 0x25,
141 
142 	/* EC software sync - error updating EC */
143 	VB2_RECOVERY_EC_UPDATE = 0x26,
144 
145 	/* EC software sync - unable to jump to EC-RW */
146 	VB2_RECOVERY_EC_JUMP_RW = 0x27,
147 
148 	/* EC software sync - unable to protect / unprotect EC-RW */
149 	VB2_RECOVERY_EC_PROTECT = 0x28,
150 
151 	/* EC software sync - error obtaining expected EC hash */
152 	VB2_RECOVERY_EC_EXPECTED_HASH = 0x29,
153 
154 	/* EC software sync - expected EC image doesn't match hash (deprc.) */
155 	VB2_RECOVERY_DEPRECATED_EC_HASH_MISMATCH = 0x2a,
156 
157 	/* Firmware secure data initialization error */
158 	VB2_RECOVERY_SECDATA_FIRMWARE_INIT = 0x2b,
159 
160 	/* GBB header is bad */
161 	VB2_RECOVERY_GBB_HEADER = 0x2c,
162 
163 	/* Unable to clear TPM owner */
164 	VB2_RECOVERY_TPM_CLEAR_OWNER = 0x2d,
165 
166 	/* Error determining/updating virtual dev switch */
167 	VB2_RECOVERY_DEV_SWITCH = 0x2e,
168 
169 	/* Error determining firmware slot */
170 	VB2_RECOVERY_FW_SLOT = 0x2f,
171 
172 	/* Error updating auxiliary firmware */
173 	VB2_RECOVERY_AUXFW_UPDATE = 0x30,
174 
175 	/*
176 	 * Intel CSE Lite SKU firmware failure; see subcodes defined in coreboot for specific
177 	 * reason.
178 	 */
179 	VB2_RECOVERY_INTEL_CSE_LITE_SKU = 0x31,
180 
181 	/* Unspecified/unknown error in read-only firmware */
182 	VB2_RECOVERY_RO_UNSPECIFIED = 0x3f,
183 
184 
185 
186 	/**********************************************************************/
187 	/**** Kernel verification (RW) errors *********************************/
188 
189 	/*
190 	 * User manually requested recovery by pressing a key at developer
191 	 * warning screen (deprecated)
192 	 */
193 	VB2_RECOVERY_DEPRECATED_RW_DEV_SCREEN = 0x41,
194 
195 	/* No OS kernel detected (deprecated, now 0x5b) */
196 	VB2_RECOVERY_DEPRECATED_RW_NO_OS = 0x42,
197 
198 	/* OS kernel failed signature check. Since the kernel corrupts itself
199 	   (DMVERROR) on a verity failure, may also indicate corrupt rootfs. */
200 	VB2_RECOVERY_RW_INVALID_OS = 0x43,
201 
202 	/* TPM error in rewritable firmware (deprecated, see 0x54+) */
203 	VB2_RECOVERY_DEPRECATED_RW_TPM_ERROR = 0x44,
204 
205 	/* RW firmware in dev mode, but dev switch is off (deprecated) */
206 	VB2_RECOVERY_DEPRECATED_RW_DEV_MISMATCH = 0x45,
207 
208 	/* Shared data error in rewritable firmware */
209 	VB2_RECOVERY_RW_SHARED_DATA = 0x46,
210 
211 	/* Test error from vb2api_load_kernel() (deprecated) */
212 	VB2_RECOVERY_DEPRECATED_RW_TEST_LK = 0x47,
213 
214 	/* No bootable disk found (deprecated, see 0x5a) */
215 	VB2_RECOVERY_DEPRECATED_RW_NO_DISK = 0x48,
216 
217 	/* Rebooting did not correct TPM_E_FAIL or TPM_E_FAILEDSELFTEST  */
218 	VB2_RECOVERY_TPM_E_FAIL = 0x49,
219 
220 	/* TPM setup error in read-only firmware */
221 	VB2_RECOVERY_RO_TPM_S_ERROR = 0x50,
222 
223 	/* TPM write error in read-only firmware */
224 	VB2_RECOVERY_RO_TPM_W_ERROR = 0x51,
225 
226 	/* TPM lock error in read-only firmware */
227 	VB2_RECOVERY_RO_TPM_L_ERROR = 0x52,
228 
229 	/* TPM update error in read-only firmware */
230 	VB2_RECOVERY_RO_TPM_U_ERROR = 0x53,
231 
232 	/* TPM read error in rewritable firmware */
233 	VB2_RECOVERY_RW_TPM_R_ERROR = 0x54,
234 
235 	/* TPM write error in rewritable firmware */
236 	VB2_RECOVERY_RW_TPM_W_ERROR = 0x55,
237 
238 	/* TPM lock error in rewritable firmware */
239 	VB2_RECOVERY_RW_TPM_L_ERROR = 0x56,
240 
241 	/* EC software sync unable to get EC image hash */
242 	VB2_RECOVERY_EC_HASH_FAILED = 0x57,
243 
244 	/* EC software sync invalid image hash size */
245 	VB2_RECOVERY_EC_HASH_SIZE = 0x58,
246 
247 	/* Unspecified error while trying to load kernel */
248 	VB2_RECOVERY_LK_UNSPECIFIED = 0x59,
249 
250 	/* No bootable storage device in system */
251 	VB2_RECOVERY_RW_NO_DISK = 0x5a,
252 
253 	/* No bootable kernel found on disk */
254 	VB2_RECOVERY_RW_NO_KERNEL = 0x5b,
255 
256 	/* BCB related error in RW firmware (deprecated) */
257 	VB2_RECOVERY_DEPRECATED_RW_BCB_ERROR = 0x5c,
258 
259 	/* Kernel secure data initialization error */
260 	VB2_RECOVERY_SECDATA_KERNEL_INIT = 0x5d,
261 
262 	/* Fastboot mode requested in firmware (deprecated) */
263 	VB2_RECOVERY_DEPRECATED_FW_FASTBOOT = 0x5e,
264 
265 	/* Recovery hash space lock error in RO firmware */
266 	VB2_RECOVERY_RO_TPM_REC_HASH_L_ERROR = 0x5f,
267 
268 	/* Failed to disable the TPM [prior to running untrusted code] */
269 	VB2_RECOVERY_TPM_DISABLE_FAILED = 0x60,
270 
271 	/* Verification of altfw payload failed (deprecated) */
272 	VB2_RECOVERY_ALTFW_HASH_MISMATCH = 0x61,
273 
274 	/* FWMP secure data initialization error */
275 	VB2_RECOVERY_SECDATA_FWMP_INIT = 0x62,
276 
277 	/* Failed to get boot mode from TPM/GSC */
278 	VB2_RECOVERY_GSC_BOOT_MODE = 0x63,
279 
280 	/* Attempt to escape from NO_BOOT mode was detected */
281 	VB2_RECOVERY_ESCAPE_NO_BOOT = 0x64,
282 
283 	/* Failed to prepare the widevine functionality */
284 	VB2_RECOVERY_WIDEVINE_PREPARE = 0x65,
285 
286 	/* Unspecified/unknown error in rewritable firmware */
287 	VB2_RECOVERY_RW_UNSPECIFIED = 0x7f,
288 
289 
290 
291 	/**********************************************************************/
292 	/**** OS level (kernel) errors (deprecated) ***************************/
293 
294 	/*
295 	 * Note: we want to avoid having the kernel touch vboot NVRAM directly
296 	 * in the future, so this whole range is essentially deprecated until
297 	 * further notice.
298 	 */
299 
300 	/* DM-verity error (deprecated) */
301 	VB2_RECOVERY_DEPRECATED_KE_DM_VERITY = 0x81,
302 
303 	/* Unspecified/unknown error in kernel (deprecated) */
304 	VB2_RECOVERY_DEPRECATED_KE_UNSPECIFIED = 0xbf,
305 
306 
307 
308 	/**********************************************************************/
309 	/**** OS level (userspace) errors *************************************/
310 
311 	/* Recovery mode test from user-mode */
312 	VB2_RECOVERY_US_TEST = 0xc1,
313 
314 	/* Recovery requested by user-mode via BCB (deprecated) */
315 	VB2_RECOVERY_DEPRECATED_BCB_USER_MODE = 0xc2,
316 
317 	/* Fastboot mode requested by user-mode (deprecated) */
318 	VB2_RECOVERY_DEPRECATED_US_FASTBOOT = 0xc3,
319 
320 	/* User requested recovery for training memory and rebooting. */
321 	VB2_RECOVERY_TRAIN_AND_REBOOT = 0xc4,
322 
323 	/* Unspecified/unknown error in user-mode */
324 	VB2_RECOVERY_US_UNSPECIFIED = 0xff,
325 };
326 
327 #endif  /* VBOOT_REFERENCE_2RECOVERY_REASONS_H_ */
328