summaryrefslogtreecommitdiff
path: root/src/vboot/vbnv_cmos.c
diff options
context:
space:
mode:
authorPhilipp Deppenwiese <zaolin@das-labor.org>2017-10-17 17:02:29 +0200
committerMartin Roth <martinroth@google.com>2017-10-22 02:14:46 +0000
commitfea2429e254c41b192dd0856966d5f80eb15a07a (patch)
tree40e81b3ca7ee3c1f9985af9a8a24a3a9b21e8700 /src/vboot/vbnv_cmos.c
parent9e0d69bf1e0194509108eba23511a12d597ae49e (diff)
security/vboot: Move vboot2 to security kconfig section
This commit just moves the vboot sources into the security directory and fixes kconfig/makefile paths. Fix vboot2 headers Change-Id: Icd87f95640186f7a625242a3937e1dd13347eb60 Signed-off-by: Philipp Deppenwiese <zaolin@das-labor.org> Reviewed-on: https://review.coreboot.org/22074 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin Roth <martinroth@google.com>
Diffstat (limited to 'src/vboot/vbnv_cmos.c')
-rw-r--r--src/vboot/vbnv_cmos.c114
1 files changed, 0 insertions, 114 deletions
diff --git a/src/vboot/vbnv_cmos.c b/src/vboot/vbnv_cmos.c
deleted file mode 100644
index a311fddbb1..0000000000
--- a/src/vboot/vbnv_cmos.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2011 The ChromiumOS Authors. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-
-#include <bootstate.h>
-#include <console/console.h>
-#include <types.h>
-#include <pc80/mc146818rtc.h>
-#include <vboot/vbnv.h>
-#include <vboot/vbnv_layout.h>
-
-static void clear_vbnv_battery_cutoff_flag(uint8_t *vbnv_copy)
-{
- /*
- * Currently battery cutoff is done in payload stage, which does not
- * update backup VBNV. And doing battery cutoff will invalidate CMOS.
- * This means for every reboot after cutoff, read_vbnv_cmos will reload
- * backup VBNV and try to cutoff again, causing endless reboot loop.
- * So we should always clear battery cutoff flag from loaded backup.
- */
- if (vbnv_copy[MISC_FLAGS_OFFSET] & MISC_FLAGS_BATTERY_CUTOFF_MASK) {
- printk(BIOS_INFO, "VBNV: Remove battery cut-off request.\n");
- vbnv_copy[MISC_FLAGS_OFFSET] &= ~MISC_FLAGS_BATTERY_CUTOFF_MASK;
- regen_vbnv_crc(vbnv_copy);
- }
-}
-
-/* Return non-zero if backup was used. */
-static int restore_from_backup(uint8_t *vbnv_copy)
-{
- if (!IS_ENABLED(CONFIG_VBOOT_VBNV_CMOS_BACKUP_TO_FLASH))
- return 0;
-
- printk(BIOS_INFO, "VBNV: CMOS invalid, restoring from flash\n");
- read_vbnv_flash(vbnv_copy);
-
- if (verify_vbnv(vbnv_copy)) {
- clear_vbnv_battery_cutoff_flag(vbnv_copy);
- save_vbnv_cmos(vbnv_copy);
- printk(BIOS_INFO, "VBNV: Flash backup restored\n");
- return 1;
- }
-
- printk(BIOS_INFO, "VBNV: Restore from flash failed\n");
-
- return 0;
-}
-
-void read_vbnv_cmos(uint8_t *vbnv_copy)
-{
- int i;
-
- for (i = 0; i < VBOOT_VBNV_BLOCK_SIZE; i++)
- vbnv_copy[i] = cmos_read(CONFIG_VBOOT_VBNV_OFFSET + 14 + i);
-
- /* Verify contents before attempting a restore from backup storage. */
- if (verify_vbnv(vbnv_copy))
- return;
-
- restore_from_backup(vbnv_copy);
-}
-
-void save_vbnv_cmos(const uint8_t *vbnv_copy)
-{
- int i;
-
- for (i = 0; i < VBOOT_VBNV_BLOCK_SIZE; i++)
- cmos_write(vbnv_copy[i], CONFIG_VBOOT_VBNV_OFFSET + 14 + i);
-}
-
-void vbnv_init_cmos(uint8_t *vbnv_copy)
-{
- /* If no cmos failure just defer to the normal read path for checking
- vbnv contents' integrity. */
- if (!vbnv_cmos_failed())
- return;
-
- /* In the case of cmos failure force the backup. If backup wasn't used
- force the vbnv cmos to be reset. */
- if (!restore_from_backup(vbnv_copy)) {
- vbnv_reset(vbnv_copy);
- /* This parallels the vboot_reference implementation. */
- vbnv_copy[HEADER_OFFSET] = HEADER_SIGNATURE |
- HEADER_FIRMWARE_SETTINGS_RESET |
- HEADER_KERNEL_SETTINGS_RESET;
- regen_vbnv_crc(vbnv_copy);
- save_vbnv_cmos(vbnv_copy);
- }
-}
-
-#if IS_ENABLED(CONFIG_VBOOT_VBNV_CMOS_BACKUP_TO_FLASH)
-static void back_up_vbnv_cmos(void *unused)
-{
- uint8_t vbnv_cmos[VBOOT_VBNV_BLOCK_SIZE];
-
- /* Read current VBNV from CMOS. */
- read_vbnv_cmos(vbnv_cmos);
-
- /* Save to flash, will only be saved if different. */
- save_vbnv_flash(vbnv_cmos);
-}
-BOOT_STATE_INIT_ENTRY(BS_POST_DEVICE, BS_ON_EXIT, back_up_vbnv_cmos, NULL);
-#endif