summaryrefslogtreecommitdiff
path: root/firmware/lib/vboot_nvstorage.c
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2011-02-22 13:06:53 -0800
committerRandall Spangler <rspangler@chromium.org>2011-02-22 13:06:53 -0800
commit9e162cdaa7433dff01d3e47ba3a47cb8b39ff3a1 (patch)
treefd0c35df3b22cddb38c5887b4cb681d5fe45409c /firmware/lib/vboot_nvstorage.c
parent0376203b417a36856cd91cb1b7fa0c7ca71bc26e (diff)
downloadvboot-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.c17
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;