Fix checksum calculation both in romstage and ramstage.
[coreboot.git] / src / pc80 / mc146818rtc_early.c
index 455ed08ab9aa17624d89c72e6715ccb2ba9414fe..0652f27c47ff5967eb4a270e8fc37de4b2775b22 100644 (file)
@@ -1,3 +1,4 @@
+#include <stdint.h>
 #include <pc80/mc146818rtc.h>
 #include <fallback.h>
 #if CONFIG_USE_OPTION_TABLE
 #error "CONFIG_MAX_REBOOT_CNT too high"
 #endif
 
-#if CONFIG_USE_CMOS_RECOVERY
-#include <cbfs.h>
-#include <console/loglevel.h>
-
-int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
-#define printk_warning(fmt, arg...) do_printk(BIOS_WARNING ,fmt, ##arg)
-#define printk_debug(fmt, arg...) do_printk(BIOS_DEBUG ,fmt, ##arg)
-#endif
-
 static int cmos_error(void)
 {
        unsigned char reg_d;
@@ -32,13 +24,12 @@ static int cmos_chksum_valid(void)
 {
 #if CONFIG_USE_OPTION_TABLE
        unsigned char addr;
-       unsigned long sum, old_sum;
+       u16 sum, old_sum;
        sum = 0;
-       /* Comput the cmos checksum */
+       /* Compute the cmos checksum */
        for(addr = LB_CKS_RANGE_START; addr <= LB_CKS_RANGE_END; addr++) {
                sum += cmos_read(addr);
        }
-       sum = (sum & 0xffff) ^ 0xffff;
 
        /* Read the stored checksum */
        old_sum = cmos_read(LB_CKS_LOC) << 8;
@@ -61,27 +52,8 @@ static inline int last_boot_normal(void)
 static inline int do_normal_boot(void)
 {
        unsigned char byte;
-       int i;
 
        if (cmos_error() || !cmos_chksum_valid()) {
-#if CONFIG_USE_CMOS_RECOVERY
-               char *cmos_default = cbfs_find_file("cmos.default", CBFS_COMPONENT_CMOS_DEFAULT);
-               if (cmos_default) {
-                       printk_warning("WARNING - CMOS CORRUPTED. RESTORING DEFAULTS.\n");
-                       /* First 14 bytes are reserved for
-                          RTC and ignored by nvramtool, too.
-                          Only 128 bytes: 128+ requires cmos configuration and
-                          contains only suspend-to-ram data, which isn't part
-                          of the recovery procedure. */
-                       for (i = 14; i < 128; i++) {
-                               cmos_write(cmos_default[i], i);
-                       }
-                       /* Now reboot to run with default cmos. */
-                       outb(0x06, 0xcf9);
-                       for (;;) asm("hlt"); /* Wait for reset! */
-               }
-#endif
-
                /* There are no impossible values, no checksums so just
                 * trust whatever value we have in the the cmos,
                 * but clear the fallback bit.
@@ -120,7 +92,7 @@ static inline int do_normal_boot(void)
        return (byte & (1<<1));
 }
 
-unsigned read_option(unsigned start, unsigned size, unsigned def)
+unsigned read_option_lowlevel(unsigned start, unsigned size, unsigned def)
 {
 #if CONFIG_USE_OPTION_TABLE
        unsigned byte;