diff options
author | Randall Spangler <rspangler@chromium.org> | 2011-02-22 13:06:53 -0800 |
---|---|---|
committer | Randall Spangler <rspangler@chromium.org> | 2011-02-22 13:06:53 -0800 |
commit | 9e162cdaa7433dff01d3e47ba3a47cb8b39ff3a1 (patch) | |
tree | fd0c35df3b22cddb38c5887b4cb681d5fe45409c /firmware/lib/vboot_nvstorage.c | |
parent | 0376203b417a36856cd91cb1b7fa0c7ca71bc26e (diff) | |
download | vboot-9e162cdaa7433dff01d3e47ba3a47cb8b39ff3a1.tar.gz |
VbNvStorage cleanup and comments
BUG=12282
TEST=make && make runtests
Review URL: http://codereview.chromium.org/6469059
Change-Id: I912b53ae33d65305353a747cc0bdd2b1ea62a04f
Diffstat (limited to 'firmware/lib/vboot_nvstorage.c')
-rw-r--r-- | firmware/lib/vboot_nvstorage.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/firmware/lib/vboot_nvstorage.c b/firmware/lib/vboot_nvstorage.c index 81816ac4..6e8c1c79 100644 --- a/firmware/lib/vboot_nvstorage.c +++ b/firmware/lib/vboot_nvstorage.c @@ -61,7 +61,7 @@ int VbNvSetup(VbNvContext* context) { || (Crc8(raw, CRC_OFFSET) != raw[CRC_OFFSET])) { /* Data is inconsistent (bad CRC or header), so reset defaults */ - Memset(raw, 0, NV_BLOCK_SIZE); + Memset(raw, 0, VBNV_BLOCK_SIZE); raw[HEADER_OFFSET] = (HEADER_SIGNATURE | HEADER_FIRMWARE_SETTINGS_RESET | HEADER_KERNEL_SETTINGS_RESET); @@ -153,19 +153,30 @@ int VbNvSet(VbNvContext* context, VbNvParam param, uint32_t value) { if (value) raw[BOOT_OFFSET] |= BOOT_DEBUG_RESET_MODE; else - raw[BOOT_OFFSET] &= BOOT_DEBUG_RESET_MODE; + raw[BOOT_OFFSET] &= ~BOOT_DEBUG_RESET_MODE; break; case VBNV_TRY_B_COUNT: + /* Clip to valid range. */ + if (value > BOOT_TRY_B_COUNT) + value = BOOT_TRY_B_COUNT - 1; + raw[BOOT_OFFSET] &= ~BOOT_TRY_B_COUNT; - raw[BOOT_OFFSET] |= (uint8_t)(value & BOOT_TRY_B_COUNT); + raw[BOOT_OFFSET] |= (uint8_t)value; break; case VBNV_RECOVERY_REQUEST: + /* Map values outside the valid range to the legacy reason, since we + * can't determine if we're called from kernel or user mode. */ + if (value > 0xFF) + value = VBNV_RECOVERY_LEGACY; raw[RECOVERY_OFFSET] = (uint8_t)value; break; case VBNV_LOCALIZATION_INDEX: + /* Map values outside the valid range to the default index. */ + if (value > 0xFF) + value = 0; raw[LOCALIZATION_OFFSET] = (uint8_t)value; break; |