Index: firmware/lib/vboot_nvstorage.c |
diff --git a/firmware/lib/vboot_nvstorage.c b/firmware/lib/vboot_nvstorage.c |
index 419a9fbc1bfa485eabc6b8bf185c9f3492a41656..83f6ef5cdcf3f91f6a626878150c55e97f0ea75d 100644 |
--- a/firmware/lib/vboot_nvstorage.c |
+++ b/firmware/lib/vboot_nvstorage.c |
@@ -29,6 +29,9 @@ |
#define FIRMWARE_FLAGS_OFFSET 5 |
#define FIRMWARE_TRIED_FIRMWARE_B 0x80 |
#define FIRMWARE_FW_VERIFIED_KERNEL_KEY 0x40 |
+#define FIRMWARE_TEST_ERR_FUNC_MASK 0x38 |
+#define FIRMWARE_TEST_ERR_FUNC_SHIFT 3 |
+#define FIRMWARE_TEST_ERR_NUM_MASK 0x07 |
#define KERNEL_FIELD_OFFSET 11 |
#define CRC_OFFSET 15 |
@@ -134,6 +137,15 @@ int VbNvGet(VbNvContext* context, VbNvParam param, uint32_t* dest) { |
1 : 0); |
return 0; |
+ case VBNV_TEST_ERROR_FUNC: |
+ *dest = (raw[FIRMWARE_FLAGS_OFFSET] & FIRMWARE_TEST_ERR_FUNC_MASK) |
+ >> FIRMWARE_TEST_ERR_FUNC_SHIFT; |
+ return 0; |
+ |
+ case VBNV_TEST_ERROR_NUM: |
+ *dest = raw[FIRMWARE_FLAGS_OFFSET] & FIRMWARE_TEST_ERR_NUM_MASK; |
+ return 0; |
+ |
default: |
return 1; |
} |
@@ -215,6 +227,17 @@ int VbNvSet(VbNvContext* context, VbNvParam param, uint32_t value) { |
raw[FIRMWARE_FLAGS_OFFSET] &= ~FIRMWARE_FW_VERIFIED_KERNEL_KEY; |
break; |
+ case VBNV_TEST_ERROR_FUNC: |
+ raw[FIRMWARE_FLAGS_OFFSET] &= ~FIRMWARE_TEST_ERR_FUNC_MASK; |
+ raw[FIRMWARE_FLAGS_OFFSET] |= (value << FIRMWARE_TEST_ERR_FUNC_SHIFT) |
+ & FIRMWARE_TEST_ERR_FUNC_MASK; |
+ break; |
+ |
+ case VBNV_TEST_ERROR_NUM: |
+ raw[FIRMWARE_FLAGS_OFFSET] &= ~FIRMWARE_TEST_ERR_NUM_MASK; |
+ raw[FIRMWARE_FLAGS_OFFSET] |= (value & FIRMWARE_TEST_ERR_NUM_MASK); |
+ break; |
+ |
default: |
return 1; |
} |