diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2014-06-25 12:11:03 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-06-26 02:42:52 +0000 |
commit | d11086caf05c692815ae6f90aa83a4fc30d50ed7 (patch) | |
tree | a6000ff77593cfaa60591c6dab4f2ddc887b36a7 | |
parent | 4cb5497984642b8cbd592c14cb1912a787b2d4d7 (diff) | |
download | vboot-d11086caf05c692815ae6f90aa83a4fc30d50ed7.tar.gz |
vboot2: add a flag to indicate firmware was selected by vboot2
TEST=Done manually on Nyan:
localhost ~ # sudo /tmp/crossystem fw_vboot2
0
localhost ~ # sudo /tmp/crossystem fw_vboot2=1
localhost ~ # sudo /tmp/crossystem fw_vboot2
0
# reboot with vboot2 firmware
localhost ~ # /tmp/crossystem fw_vboot2
1
BUG=none
BRANCH=none
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Change-Id: I6ed553c48bdfebf07393f6f5f46832a60971314a
Reviewed-on: https://chromium-review.googlesource.com/205664
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Commit-Queue: Daisuke Nojiri <dnojiri@chromium.org>
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
-rw-r--r-- | firmware/include/vboot_struct.h | 24 | ||||
-rw-r--r-- | host/lib/crossystem.c | 7 | ||||
-rw-r--r-- | utility/crossystem.c | 1 |
3 files changed, 20 insertions, 12 deletions
diff --git a/firmware/include/vboot_struct.h b/firmware/include/vboot_struct.h index 7fa072f1..5e637ba0 100644 --- a/firmware/include/vboot_struct.h +++ b/firmware/include/vboot_struct.h @@ -236,31 +236,33 @@ typedef struct VbKernelPreambleHeader { * the firmware. If this flag is not present, it just used the hash of the * kernel keyblock. */ -#define VBSD_KERNEL_KEY_VERIFIED 0x00000002 +#define VBSD_KERNEL_KEY_VERIFIED 0x00000002 /* LoadFirmware() was told the developer switch was on */ -#define VBSD_LF_DEV_SWITCH_ON 0x00000004 +#define VBSD_LF_DEV_SWITCH_ON 0x00000004 /* LoadFirmware() is requesting the read only normal/dev code path */ -#define VBSD_LF_USE_RO_NORMAL 0x00000008 +#define VBSD_LF_USE_RO_NORMAL 0x00000008 /* Developer switch was enabled at boot time */ -#define VBSD_BOOT_DEV_SWITCH_ON 0x00000010 +#define VBSD_BOOT_DEV_SWITCH_ON 0x00000010 /* Recovery switch was enabled at boot time */ -#define VBSD_BOOT_REC_SWITCH_ON 0x00000020 +#define VBSD_BOOT_REC_SWITCH_ON 0x00000020 /* Firmware write protect was enabled at boot time */ -#define VBSD_BOOT_FIRMWARE_WP_ENABLED 0x00000040 +#define VBSD_BOOT_FIRMWARE_WP_ENABLED 0x00000040 /* Boot is a S3->S0 resume, not a S5->S0 normal boot */ -#define VBSD_BOOT_S3_RESUME 0x00000100 +#define VBSD_BOOT_S3_RESUME 0x00000100 /* Read-only firmware supports the normal/developer code path */ -#define VBSD_BOOT_RO_NORMAL_SUPPORT 0x00000200 +#define VBSD_BOOT_RO_NORMAL_SUPPORT 0x00000200 /* VbInit() was told that the system has a virtual dev-switch */ -#define VBSD_HONOR_VIRT_DEV_SWITCH 0x00000400 +#define VBSD_HONOR_VIRT_DEV_SWITCH 0x00000400 /* VbInit() was told the system supports EC software sync */ -#define VBSD_EC_SOFTWARE_SYNC 0x00000800 +#define VBSD_EC_SOFTWARE_SYNC 0x00000800 /* VbInit() was told that the EC firmware is slow to update */ -#define VBSD_EC_SLOW_UPDATE 0x00001000 +#define VBSD_EC_SLOW_UPDATE 0x00001000 /* Firmware software write protect was enabled at boot time */ #define VBSD_BOOT_FIRMWARE_SW_WP_ENABLED 0x00002000 /* VbInit() was told that the recovery button is a virtual one */ #define VBSD_BOOT_REC_SWITCH_VIRTUAL 0x00004000 +/* Firmware used vboot2 for firmware selection */ +#define VBSD_BOOT_FIRMWARE_VBOOT2 0x00008000 /* * Supported flags by header version. It's ok to add new flags while keeping diff --git a/host/lib/crossystem.c b/host/lib/crossystem.c index 5e08c391..f88d22c6 100644 --- a/host/lib/crossystem.c +++ b/host/lib/crossystem.c @@ -47,7 +47,8 @@ typedef enum VdatIntField { VDAT_INT_TRIED_FIRMWARE_B, /* Tried firmware B due to fwb_tries */ VDAT_INT_KERNEL_KEY_VERIFIED, /* Kernel key verified using * signature, not just hash */ - VDAT_INT_RECOVERY_REASON /* Recovery reason for current boot */ + VDAT_INT_RECOVERY_REASON, /* Recovery reason for current boot */ + VDAT_INT_FW_BOOT2 /* Firmware selection by vboot2 */ } VdatIntField; @@ -395,6 +396,8 @@ int GetVdatInt(VdatIntField field) { case VDAT_INT_KERNEL_VERSION_TPM: value = (int)sh->kernel_version_tpm; break; + case VDAT_INT_FW_BOOT2: + value = (sh->flags & VBSD_BOOT_FIRMWARE_VBOOT2 ? 1 : 0); default: break; } @@ -459,6 +462,8 @@ int VbGetSystemPropertyInt(const char* name) { value = VbGetNvStorage(VBNV_CLEAR_TPM_OWNER_DONE); } else if (!strcasecmp(name,"fwb_tries")) { value = VbGetNvStorage(VBNV_TRY_B_COUNT); + } else if (!strcasecmp(name,"fw_vboot2")) { + value = GetVdatInt(VDAT_INT_FW_BOOT2); } else if (!strcasecmp(name,"fwupdate_tries")) { value = VbGetNvStorage(VBNV_KERNEL_FIELD); if (value != -1) diff --git a/utility/crossystem.c b/utility/crossystem.c index 5ffb5af1..6b16ff40 100644 --- a/utility/crossystem.c +++ b/utility/crossystem.c @@ -53,6 +53,7 @@ const Param sys_param_list[] = { {"ecfw_act", IS_STRING, "Active EC firmware"}, {"fmap_base", 0, "Main firmware flashmap physical address", "0x%08x"}, {"fwb_tries", CAN_WRITE, "Try firmware B count (writable)"}, + {"fw_vboot2", 0, "1 if firmware was selected by vboot2 or 0 otherwise"}, {"fwid", IS_STRING, "Active firmware ID"}, {"fwupdate_tries", CAN_WRITE, "Times to try OS firmware update (writable, inside kern_nv)"}, |