diff options
author | Mary Ruthven <mruthven@chromium.org> | 2016-01-05 14:59:05 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-01-06 05:22:40 -0800 |
commit | 46d78db74a0c14a99adc86b3a8b4536ce0c87365 (patch) | |
tree | 1d6b7944fa4b1cb8a34283d4374f6a0dd47423ee | |
parent | 0e5f54d79158f216edeb42bfe9c5cd6d35dc6e0d (diff) | |
download | vboot-46d78db74a0c14a99adc86b3a8b4536ce0c87365.tar.gz |
vboot2: Add try RO software sync flag
This flag will be used by the firmware updater to indicate that RO
software sync should be attempted.
BUG=chrome-os-partner:48703
BRANCH=None
TEST=make runtests
Change-Id: I42090ac47da45c724e66334648ab447ad3c21178
Signed-off-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/320621
Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r-- | firmware/2lib/2nvstorage.c | 7 | ||||
-rw-r--r-- | firmware/2lib/include/2nvstorage.h | 2 | ||||
-rw-r--r-- | firmware/2lib/include/2nvstorage_fields.h | 3 | ||||
-rw-r--r-- | firmware/include/vboot_nvstorage.h | 2 | ||||
-rw-r--r-- | firmware/lib/vboot_nvstorage.c | 12 | ||||
-rw-r--r-- | host/lib/crossystem.c | 4 | ||||
-rw-r--r-- | tests/vb2_nvstorage_tests.c | 1 | ||||
-rw-r--r-- | tests/vboot_nvstorage_test.c | 1 | ||||
-rw-r--r-- | utility/crossystem.c | 1 |
9 files changed, 32 insertions, 1 deletions
diff --git a/firmware/2lib/2nvstorage.c b/firmware/2lib/2nvstorage.c index 851c3872..3e2a8740 100644 --- a/firmware/2lib/2nvstorage.c +++ b/firmware/2lib/2nvstorage.c @@ -169,6 +169,9 @@ uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param) case VB2_NV_BOOT_ON_AC_DETECT: return GETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_BOOT_ON_AC_DETECT); + + case VB2_NV_TRY_RO_SYNC: + return GETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_TRY_RO_SYNC); } /* @@ -343,6 +346,10 @@ void vb2_nv_set(struct vb2_context *ctx, SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_BOOT_ON_AC_DETECT); break; + case VB2_NV_TRY_RO_SYNC: + SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_TRY_RO_SYNC); + break; + } /* diff --git a/firmware/2lib/include/2nvstorage.h b/firmware/2lib/include/2nvstorage.h index 31dfc8df..5c958c76 100644 --- a/firmware/2lib/include/2nvstorage.h +++ b/firmware/2lib/include/2nvstorage.h @@ -94,6 +94,8 @@ enum vb2_nv_param { VB2_NV_FASTBOOT_UNLOCK_IN_FW, /* Boot system when AC detected (0=no, 1=yes). */ VB2_NV_BOOT_ON_AC_DETECT, + /* Try to update the EC-RO image after updating the EC-RW image(0=no, 1=yes). */ + VB2_NV_TRY_RO_SYNC, }; /* Set default boot in developer mode */ diff --git a/firmware/2lib/include/2nvstorage_fields.h b/firmware/2lib/include/2nvstorage_fields.h index fd625d06..9ec3d884 100644 --- a/firmware/2lib/include/2nvstorage_fields.h +++ b/firmware/2lib/include/2nvstorage_fields.h @@ -70,8 +70,9 @@ enum vb2_nv_offset { #define VB2_NV_TPM_CLEAR_OWNER_DONE 0x02 #define VB2_NV_TPM_REBOOTED 0x04 -/* Fields in VB2_NV_OFFS_MISC (unused = 0xfc) */ +/* Fields in VB2_NV_OFFS_MISC (unused = 0xf8) */ #define VB2_NV_MISC_UNLOCK_FASTBOOT 0x01 #define VB2_NV_MISC_BOOT_ON_AC_DETECT 0x02 +#define VB2_NV_MISC_TRY_RO_SYNC 0x04 #endif /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_ */ diff --git a/firmware/include/vboot_nvstorage.h b/firmware/include/vboot_nvstorage.h index dc4ab50e..91f62cb4 100644 --- a/firmware/include/vboot_nvstorage.h +++ b/firmware/include/vboot_nvstorage.h @@ -118,6 +118,8 @@ typedef enum VbNvParam { VBNV_FASTBOOT_UNLOCK_IN_FW, /* Boot system when AC detected (0=no, 1=yes). */ VBNV_BOOT_ON_AC_DETECT, + /* Try to update the EC-RO image (0=no, 1=yes). */ + VBNV_TRY_RO_SYNC, } VbNvParam; diff --git a/firmware/lib/vboot_nvstorage.c b/firmware/lib/vboot_nvstorage.c index 403ce30f..d022c5d3 100644 --- a/firmware/lib/vboot_nvstorage.c +++ b/firmware/lib/vboot_nvstorage.c @@ -63,6 +63,7 @@ #define MISC_OFFSET 8 #define MISC_UNLOCK_FASTBOOT 0x01 #define MISC_BOOT_ON_AC_DETECT 0x02 +#define MISC_TRY_RO_SYNC 0x04 #define KERNEL_FIELD_OFFSET 11 #define CRC_OFFSET 15 @@ -226,6 +227,10 @@ int VbNvGet(VbNvContext *context, VbNvParam param, uint32_t *dest) *dest = (raw[MISC_OFFSET] & MISC_BOOT_ON_AC_DETECT) ? 1 : 0; return 0; + case VBNV_TRY_RO_SYNC: + *dest = (raw[MISC_OFFSET] & MISC_TRY_RO_SYNC) ? 1 : 0; + return 0; + default: return 1; } @@ -444,6 +449,13 @@ int VbNvSet(VbNvContext *context, VbNvParam param, uint32_t value) raw[MISC_OFFSET] &= ~MISC_BOOT_ON_AC_DETECT; break; + case VBNV_TRY_RO_SYNC: + if (value) + raw[MISC_OFFSET] |= MISC_TRY_RO_SYNC; + else + raw[MISC_OFFSET] &= ~MISC_TRY_RO_SYNC; + break; + default: return 1; } diff --git a/host/lib/crossystem.c b/host/lib/crossystem.c index e2066cee..fd5cd9eb 100644 --- a/host/lib/crossystem.c +++ b/host/lib/crossystem.c @@ -540,6 +540,8 @@ int VbGetSystemPropertyInt(const char* name) { value = VbGetNvStorage(VBNV_FASTBOOT_UNLOCK_IN_FW); } else if (!strcasecmp(name, "boot_on_ac_detect")) { value = VbGetNvStorage(VBNV_BOOT_ON_AC_DETECT); + } else if (!strcasecmp(name, "try_ro_sync")) { + value = VbGetNvStorage(VBNV_TRY_RO_SYNC); } return value; @@ -674,6 +676,8 @@ int VbSetSystemPropertyInt(const char* name, int value) { return VbSetNvStorage_WithBackup(VBNV_FASTBOOT_UNLOCK_IN_FW, value); } else if (!strcasecmp(name, "boot_on_ac_detect")) { return VbSetNvStorage_WithBackup(VBNV_BOOT_ON_AC_DETECT, value); + } else if (!strcasecmp(name, "try_ro_sync")) { + return VbSetNvStorage_WithBackup(VBNV_TRY_RO_SYNC, value); } return -1; diff --git a/tests/vb2_nvstorage_tests.c b/tests/vb2_nvstorage_tests.c index 7796a1b4..45dd7b5e 100644 --- a/tests/vb2_nvstorage_tests.c +++ b/tests/vb2_nvstorage_tests.c @@ -53,6 +53,7 @@ static struct nv_field nvfields[] = { {VB2_NV_BACKUP_NVRAM_REQUEST, 0, 1, 0, "backup nvram request"}, {VB2_NV_FASTBOOT_UNLOCK_IN_FW, 0, 1, 0, "fastboot unlock in fw"}, {VB2_NV_BOOT_ON_AC_DETECT, 0, 1, 0, "boot on ac detect"}, + {VB2_NV_TRY_RO_SYNC, 0, 1, 0, "try read only software sync"}, {0, 0, 0, 0, NULL} }; diff --git a/tests/vboot_nvstorage_test.c b/tests/vboot_nvstorage_test.c index 6a90ea4d..ecfe1714 100644 --- a/tests/vboot_nvstorage_test.c +++ b/tests/vboot_nvstorage_test.c @@ -48,6 +48,7 @@ static VbNvField nvfields[] = { {VBNV_FW_PREV_RESULT, VBNV_FW_RESULT_UNKNOWN, 1, 3, "firmware prev result"}, {VBNV_FASTBOOT_UNLOCK_IN_FW, 0, 1, 0, "fastboot unlock in firmware"}, {VBNV_BOOT_ON_AC_DETECT, 0, 1, 0, "boot on ac detect"}, + {VBNV_TRY_RO_SYNC, 0, 1, 0, "try read only software sync"}, {0, 0, 0, 0, NULL} }; diff --git a/utility/crossystem.c b/utility/crossystem.c index 8f944b1e..330a3fd5 100644 --- a/utility/crossystem.c +++ b/utility/crossystem.c @@ -87,6 +87,7 @@ const Param sys_param_list[] = { {"tpm_fwver", 0, "Firmware version stored in TPM", "0x%08x"}, {"tpm_kernver", 0, "Kernel version stored in TPM", "0x%08x"}, {"tpm_rebooted", 0, "TPM requesting repeated reboot (vboot2)"}, + {"try_ro_sync", 0, "try read only software sync"}, {"tried_fwb", 0, "Tried firmware B before A this boot"}, {"vdat_flags", 0, "Flags from VbSharedData", "0x%08x"}, {"vdat_lfdebug", IS_STRING|NO_PRINT_ALL, |