summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/pc80/rtc/Makefile.inc3
-rw-r--r--src/drivers/pc80/rtc/mc146818rtc.c7
-rw-r--r--src/drivers/pc80/rtc/mc146818rtc_boot.c21
-rw-r--r--src/include/pc80/mc146818rtc.h5
4 files changed, 13 insertions, 23 deletions
diff --git a/src/drivers/pc80/rtc/Makefile.inc b/src/drivers/pc80/rtc/Makefile.inc
index 998b7e7dbd4d..749306bfba51 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 b870da26748c..715e44095515 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 2998c73baa1b..e599affd2d95 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 5fd07294b6db..91413d11d592 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);