diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/pc80/rtc/Makefile.inc | 3 | ||||
-rw-r--r-- | src/drivers/pc80/rtc/mc146818rtc.c | 7 | ||||
-rw-r--r-- | src/drivers/pc80/rtc/mc146818rtc_boot.c | 21 | ||||
-rw-r--r-- | src/include/pc80/mc146818rtc.h | 5 |
4 files changed, 13 insertions, 23 deletions
diff --git a/src/drivers/pc80/rtc/Makefile.inc b/src/drivers/pc80/rtc/Makefile.inc index 998b7e7dbd..749306bfba 100644 --- a/src/drivers/pc80/rtc/Makefile.inc +++ b/src/drivers/pc80/rtc/Makefile.inc @@ -1,6 +1,7 @@ ifeq ($(CONFIG_ARCH_X86),y) -bootblock-$(CONFIG_DRIVERS_MC146818) += mc146818rtc_boot.c +all-$(CONFIG_DRIVERS_MC146818) += mc146818rtc_boot.c + bootblock-$(CONFIG_DRIVERS_MC146818) += mc146818rtc.c postcar-$(CONFIG_DRIVERS_MC146818) += mc146818rtc.c romstage-$(CONFIG_DRIVERS_MC146818) += mc146818rtc.c diff --git a/src/drivers/pc80/rtc/mc146818rtc.c b/src/drivers/pc80/rtc/mc146818rtc.c index b870da2674..715e440955 100644 --- a/src/drivers/pc80/rtc/mc146818rtc.c +++ b/src/drivers/pc80/rtc/mc146818rtc.c @@ -53,7 +53,7 @@ static void cmos_reset_date(void) rtc_set(&time); } -static int cmos_checksum_valid(int range_start, int range_end, int cks_loc) +int cmos_checksum_valid(int range_start, int range_end, int cks_loc) { int i; u16 sum, old_sum; @@ -69,7 +69,7 @@ static int cmos_checksum_valid(int range_start, int range_end, int cks_loc) return sum == old_sum; } -static void cmos_set_checksum(int range_start, int range_end, int cks_loc) +void cmos_set_checksum(int range_start, int range_end, int cks_loc) { int i; u16 sum; @@ -149,8 +149,7 @@ static bool __cmos_init(bool invalid) if (CONFIG(USE_OPTION_TABLE)) { /* See if there is a LB CMOS checksum error */ - checksum_invalid = !cmos_checksum_valid(LB_CKS_RANGE_START, - LB_CKS_RANGE_END, LB_CKS_LOC); + checksum_invalid = !cmos_lb_cks_valid(); if (checksum_invalid) printk(BIOS_DEBUG, "RTC: coreboot checksum invalid\n"); diff --git a/src/drivers/pc80/rtc/mc146818rtc_boot.c b/src/drivers/pc80/rtc/mc146818rtc_boot.c index 2998c73baa..e599affd2d 100644 --- a/src/drivers/pc80/rtc/mc146818rtc_boot.c +++ b/src/drivers/pc80/rtc/mc146818rtc_boot.c @@ -19,27 +19,14 @@ #if CONFIG(USE_OPTION_TABLE) #include <option_table.h> -int cmos_chksum_valid(void) +int cmos_lb_cks_valid(void) { - unsigned char addr; - u16 sum, old_sum; - - sum = 0; - /* Compute the cmos checksum */ - for (addr = LB_CKS_RANGE_START; addr <= LB_CKS_RANGE_END; addr++) - sum += cmos_read(addr); - - /* Read the stored checksum */ - old_sum = cmos_read(LB_CKS_LOC) << 8; - old_sum |= cmos_read(LB_CKS_LOC + 1); - - return sum == old_sum; + return cmos_checksum_valid(LB_CKS_RANGE_START, LB_CKS_RANGE_END, LB_CKS_LOC); } void sanitize_cmos(void) { - if (cmos_error() || !cmos_chksum_valid() || - CONFIG(STATIC_OPTION_TABLE)) { + 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", @@ -83,7 +70,7 @@ int do_normal_boot(void) { unsigned char byte; - if (!CONFIG(USE_OPTION_TABLE) || cmos_error() || !cmos_chksum_valid()) { + if (!CONFIG(USE_OPTION_TABLE) || cmos_error() || !cmos_lb_cks_valid()) { /* Invalid CMOS checksum detected! * Force fallback boot... */ diff --git a/src/include/pc80/mc146818rtc.h b/src/include/pc80/mc146818rtc.h index 5fd07294b6..91413d11d5 100644 --- a/src/include/pc80/mc146818rtc.h +++ b/src/include/pc80/mc146818rtc.h @@ -176,7 +176,10 @@ static inline void cmos_write32(u32 value, u8 offset) void cmos_init(bool invalid); void cmos_check_update_date(void); int cmos_error(void); -int cmos_chksum_valid(void); +int cmos_lb_cks_valid(void); + +int cmos_checksum_valid(int range_start, int range_end, int cks_loc); +void cmos_set_checksum(int range_start, int range_end, int cks_loc); enum cb_err set_option(const char *name, void *val); enum cb_err get_option(void *dest, const char *name); |