Kyösti Mälkki has uploaded this change for review.

View Change

drivers/pc80/rtc: Remove duplicate cmos_chksum_valid()

This moves reference to LB_CKS_xxx to a file that is only built
with USE_OPTION_TABLE and where option_table.h is always
generated.

Change-Id: I5a4b86921876c24cd1d310b674119b960c3d2fd6
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
---
M src/drivers/pc80/rtc/mc146818rtc.c
M src/drivers/pc80/rtc/mc146818rtc_boot.c
M src/drivers/pc80/rtc/option.c
M src/include/option.h
4 files changed, 9 insertions(+), 38 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/94/38194/1
diff --git a/src/drivers/pc80/rtc/mc146818rtc.c b/src/drivers/pc80/rtc/mc146818rtc.c
index fe6900f..d6a6279 100644
--- a/src/drivers/pc80/rtc/mc146818rtc.c
+++ b/src/drivers/pc80/rtc/mc146818rtc.c
@@ -26,18 +26,6 @@
#include <security/vboot/vbnv_layout.h>
#include <types.h>

-/* There's no way around this include guard. option_table.h is autogenerated */
-#if CONFIG(USE_OPTION_TABLE)
-#include "option_table.h"
-#else
-#define LB_CKS_RANGE_START 0
-#define LB_CKS_RANGE_END 0
-#define LB_CKS_LOC 0
-#endif
-
-/* Don't warn for checking >= LB_CKS_RANGE_START even though it may be 0. */
-#pragma GCC diagnostic ignored "-Wtype-limits"
-
static void cmos_reset_date(void)
{
/* Now setup a default date equals to the build date */
@@ -154,8 +142,7 @@

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 307b1cf..89b2be3 100644
--- a/src/drivers/pc80/rtc/mc146818rtc_boot.c
+++ b/src/drivers/pc80/rtc/mc146818rtc_boot.c
@@ -17,30 +17,9 @@
#include <pc80/mc146818rtc.h>
#include <fallback.h>

-#if CONFIG(USE_OPTION_TABLE)
-#include <option_table.h>
-
-static int cmos_chksum_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;
-}
-
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",
@@ -54,7 +33,6 @@
}
}
}
-#endif

#if CONFIG_MAX_REBOOT_CNT > 15
#error "CONFIG_MAX_REBOOT_CNT too high"
@@ -84,7 +62,7 @@
{
unsigned char byte;

- if (cmos_error() || (CONFIG(USE_OPTION_TABLE) && !cmos_chksum_valid())) {
+ if (cmos_error() || (CONFIG(USE_OPTION_TABLE) && !cmos_lb_cks_valid())) {
/* Invalid CMOS checksum detected!
* Force fallback boot...
*/
diff --git a/src/drivers/pc80/rtc/option.c b/src/drivers/pc80/rtc/option.c
index 65f75ef..0f4e553 100644
--- a/src/drivers/pc80/rtc/option.c
+++ b/src/drivers/pc80/rtc/option.c
@@ -233,3 +233,8 @@
rdev_munmap(&rdev, ct);
return CB_SUCCESS;
}
+
+int cmos_lb_cks_valid(void)
+{
+ return cmos_checksum_valid(LB_CKS_RANGE_START, LB_CKS_RANGE_END, LB_CKS_LOC);
+}
diff --git a/src/include/option.h b/src/include/option.h
index 4bd5dee..e3736c9 100644
--- a/src/include/option.h
+++ b/src/include/option.h
@@ -17,6 +17,7 @@
#include <types.h>

void sanitize_cmos(void);
+int cmos_lb_cks_valid(void);

/*
* FIXME: get_option() needs to be abstracted better so that other non-volatile

To view, visit change 38194. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I5a4b86921876c24cd1d310b674119b960c3d2fd6
Gerrit-Change-Number: 38194
Gerrit-PatchSet: 1
Gerrit-Owner: Kyösti Mälkki <kyosti.malkki@gmail.com>
Gerrit-MessageType: newchange