Kyösti Mälkki has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/38195 )
Change subject: drivers/pc80/rtc: Move sanitize_cmos() ......................................................................
drivers/pc80/rtc: Move sanitize_cmos()
Implementation has dependency on USE_OPTION_TABLE.
Change-Id: If7f8f478db3214842b6cc60cd77b4ea81cab6e3a Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com --- M src/drivers/pc80/rtc/mc146818rtc_boot.c M src/drivers/pc80/rtc/option.c 2 files changed, 23 insertions(+), 18 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/95/38195/1
diff --git a/src/drivers/pc80/rtc/mc146818rtc_boot.c b/src/drivers/pc80/rtc/mc146818rtc_boot.c index 89b2be3..d345281 100644 --- a/src/drivers/pc80/rtc/mc146818rtc_boot.c +++ b/src/drivers/pc80/rtc/mc146818rtc_boot.c @@ -12,28 +12,10 @@ */
#include <stdint.h> -#include <cbfs.h> #include <option.h> #include <pc80/mc146818rtc.h> #include <fallback.h>
-void sanitize_cmos(void) -{ - if (cmos_error() || !cmos_lb_cks_valid() || CONFIG(STATIC_OPTION_TABLE)) { - size_t length = 128; - const unsigned char *cmos_default = - cbfs_boot_map_with_leak("cmos.default", - CBFS_COMPONENT_CMOS_DEFAULT, &length); - if (cmos_default) { - size_t i; - cmos_disable_rtc(); - for (i = 14; i < MIN(128, length); i++) - cmos_write_inner(cmos_default[i], i); - cmos_enable_rtc(); - } - } -} - #if CONFIG_MAX_REBOOT_CNT > 15 #error "CONFIG_MAX_REBOOT_CNT too high" #endif diff --git a/src/drivers/pc80/rtc/option.c b/src/drivers/pc80/rtc/option.c index 0f4e553..01707c2 100644 --- a/src/drivers/pc80/rtc/option.c +++ b/src/drivers/pc80/rtc/option.c @@ -234,7 +234,30 @@ return CB_SUCCESS; }
+static void cmos_load_defaults(void) +{ + size_t length = 128; + size_t i; + + const unsigned char *cmos_default = + cbfs_boot_map_with_leak("cmos.default", + CBFS_COMPONENT_CMOS_DEFAULT, &length); + if (!cmos_default) + return; + + cmos_disable_rtc(); + for (i = 14; i < MIN(128, length); i++) + cmos_write_inner(cmos_default[i], i); + cmos_enable_rtc(); +} + int cmos_lb_cks_valid(void) { return cmos_checksum_valid(LB_CKS_RANGE_START, LB_CKS_RANGE_END, LB_CKS_LOC); } + +void sanitize_cmos(void) +{ + if (cmos_error() || !cmos_lb_cks_valid() || CONFIG(STATIC_OPTION_TABLE)) + cmos_load_defaults(); +}