Index: firmware/lib/vboot_nvstorage.c |
diff --git a/firmware/lib/vboot_nvstorage.c b/firmware/lib/vboot_nvstorage.c |
index 6e8c1c799a61e0c1ef6741ad9d3ae2250e8bcb71..ec6e55dee8c2094033fa5ff91c643652909d618e 100644 |
--- a/firmware/lib/vboot_nvstorage.c |
+++ b/firmware/lib/vboot_nvstorage.c |
@@ -14,17 +14,22 @@ |
* bitfields so the data format is consistent across platforms and |
* compilers. */ |
#define HEADER_OFFSET 0 |
-#define HEADER_MASK 0xC0 |
-#define HEADER_SIGNATURE 0x40 |
-#define HEADER_FIRMWARE_SETTINGS_RESET 0x20 |
-#define HEADER_KERNEL_SETTINGS_RESET 0x10 |
+#define HEADER_MASK 0xC0 |
+#define HEADER_SIGNATURE 0x40 |
+#define HEADER_FIRMWARE_SETTINGS_RESET 0x20 |
+#define HEADER_KERNEL_SETTINGS_RESET 0x10 |
#define BOOT_OFFSET 1 |
-#define BOOT_DEBUG_RESET_MODE 0x80 |
-#define BOOT_TRY_B_COUNT 0x0F |
+#define BOOT_DEBUG_RESET_MODE 0x80 |
+#define BOOT_TRY_B_COUNT 0x0F |
#define RECOVERY_OFFSET 2 |
#define LOCALIZATION_OFFSET 3 |
+ |
+#define FIRMWARE_FLAGS_OFFSET 5 |
+#define FIRMWARE_FW_USED_TRY_B 0x80 |
+#define FIRMWARE_FW_VERIFIED_KERNEL_KEY 0x40 |
+ |
#define KERNEL_FIELD_OFFSET 11 |
#define CRC_OFFSET 15 |
@@ -120,6 +125,15 @@ int VbNvGet(VbNvContext* context, VbNvParam param, uint32_t* dest) { |
| (raw[KERNEL_FIELD_OFFSET + 3] << 24)); |
return 0; |
+ case VBNV_FW_USED_TRY_B: |
+ *dest = (raw[FIRMWARE_FLAGS_OFFSET] & FIRMWARE_FW_USED_TRY_B ? 1 : 0); |
+ return 0; |
+ |
+ case VBNV_FW_VERIFIED_KERNEL_KEY: |
+ *dest = (raw[FIRMWARE_FLAGS_OFFSET] & FIRMWARE_FW_VERIFIED_KERNEL_KEY ? |
+ 1 : 0); |
+ return 0; |
+ |
default: |
return 1; |
} |
@@ -187,6 +201,20 @@ int VbNvSet(VbNvContext* context, VbNvParam param, uint32_t value) { |
raw[KERNEL_FIELD_OFFSET + 3] = (uint8_t)(value >> 24); |
break; |
+ case VBNV_FW_USED_TRY_B: |
+ if (value) |
+ raw[FIRMWARE_FLAGS_OFFSET] |= FIRMWARE_FW_USED_TRY_B; |
+ else |
+ raw[FIRMWARE_FLAGS_OFFSET] &= ~FIRMWARE_FW_USED_TRY_B; |
+ break; |
+ |
+ case VBNV_FW_VERIFIED_KERNEL_KEY: |
+ if (value) |
+ raw[FIRMWARE_FLAGS_OFFSET] |= FIRMWARE_FW_VERIFIED_KERNEL_KEY; |
+ else |
+ raw[FIRMWARE_FLAGS_OFFSET] &= ~FIRMWARE_FW_VERIFIED_KERNEL_KEY; |
+ break; |
+ |
default: |
return 1; |
} |