From 86fc11d0c9b799f916d69ced72dc8a26a07591a2 Mon Sep 17 00:00:00 2001 From: Julius Werner Date: Fri, 9 Oct 2015 13:37:58 -0700 Subject: arm/arm64: Generalize bootblock C entry point When we first added ARM support to coreboot, it was clear that the bootblock would need to do vastly different tasks than on x86, so we moved its main logic under arch/. Now that we have several more architectures, it turns out (as with so many things lately) that x86 is really the odd one out, and all the others are trying to do pretty much the same thing. This has already caused maintenance issues as the ARM32 bootblock developed and less-mature architectures were left behind with old cruft. This patch tries to address that problem by centralizing that logic under lib/ for use by all architectures/SoCs that don't explicitly opt-out (with the slightly adapted existing BOOTBLOCK_CUSTOM option). This works great out of the box for ARM32 and ARM64. It could probably be easily applied to MIPS and RISCV as well, but I don't have any of those boards to test so I'll mark them as BOOTBLOCK_CUSTOM for now and leave that for later cleanup. BRANCH=None BUG=None TEST=Built Jerry and Falco, booted Oak. Change-Id: Ibbf727ad93651e388aef20e76f03f5567f9860cb Signed-off-by: Julius Werner Reviewed-on: http://review.coreboot.org/12076 Reviewed-by: Aaron Durbin Tested-by: build bot (Jenkins) --- src/arch/arm/Kconfig | 6 --- src/arch/arm/armv4/Makefile.inc | 3 +- src/arch/arm/armv7/Makefile.inc | 6 +-- src/arch/arm/armv7/bootblock_simple.c | 47 ---------------- src/arch/arm/include/bootblock_common.h | 24 --------- src/arch/arm64/Kconfig | 6 --- src/arch/arm64/armv8/Makefile.inc | 9 ++-- src/arch/arm64/armv8/bootblock_simple.c | 60 --------------------- src/arch/arm64/include/bootblock_common.h | 11 ---- src/arch/mips/Kconfig | 1 + src/arch/mips/bootblock_simple.c | 2 +- src/arch/mips/include/arch/bootblock_common.h | 26 +++++++++ src/arch/mips/include/bootblock_common.h | 26 --------- src/arch/riscv/Kconfig | 7 +-- src/arch/riscv/bootblock_simple.c | 1 - src/arch/riscv/include/bootblock_common.h | 16 ------ src/arch/x86/Kconfig | 2 + src/arch/x86/bootblock_normal.c | 2 +- src/arch/x86/bootblock_simple.c | 2 +- src/arch/x86/include/arch/bootblock_common.h | 77 +++++++++++++++++++++++++++ src/arch/x86/include/bootblock_common.h | 77 --------------------------- 21 files changed, 118 insertions(+), 293 deletions(-) delete mode 100644 src/arch/arm/armv7/bootblock_simple.c delete mode 100644 src/arch/arm/include/bootblock_common.h delete mode 100644 src/arch/arm64/armv8/bootblock_simple.c delete mode 100644 src/arch/arm64/include/bootblock_common.h create mode 100644 src/arch/mips/include/arch/bootblock_common.h delete mode 100644 src/arch/mips/include/bootblock_common.h delete mode 100644 src/arch/riscv/include/bootblock_common.h create mode 100644 src/arch/x86/include/arch/bootblock_common.h delete mode 100644 src/arch/x86/include/bootblock_common.h (limited to 'src/arch') diff --git a/src/arch/arm/Kconfig b/src/arch/arm/Kconfig index 2499d2d075..9f14dda4e7 100644 --- a/src/arch/arm/Kconfig +++ b/src/arch/arm/Kconfig @@ -22,12 +22,6 @@ config ARCH_RAMSTAGE_ARM source src/arch/arm/armv4/Kconfig source src/arch/arm/armv7/Kconfig -# If a custom bootblock is necessary, this option should be "select"-ed by -# the thing that needs it, probably the CPU. -config ARM_BOOTBLOCK_CUSTOM - bool - default n - config ARM_LPAE bool default n diff --git a/src/arch/arm/armv4/Makefile.inc b/src/arch/arm/armv4/Makefile.inc index a8c31c8069..ee1879cf8f 100644 --- a/src/arch/arm/armv4/Makefile.inc +++ b/src/arch/arm/armv4/Makefile.inc @@ -24,9 +24,8 @@ armv4_flags = -marm -march=armv4t -I$(src)/arch/arm/include/armv4/ \ ifeq ($(CONFIG_ARCH_BOOTBLOCK_ARMV4),y) -ifneq ($(CONFIG_ARM_BOOTBLOCK_CUSTOM),y) +ifneq ($(CONFIG_BOOTBLOCK_CUSTOM),y) bootblock-y += bootblock.S -bootblock-y += bootblock_simple.c endif bootblock-y += cache.c diff --git a/src/arch/arm/armv7/Makefile.inc b/src/arch/arm/armv7/Makefile.inc index a4391e9b3e..3a489cb259 100644 --- a/src/arch/arm/armv7/Makefile.inc +++ b/src/arch/arm/armv7/Makefile.inc @@ -31,9 +31,8 @@ ifeq ($(CONFIG_ARCH_BOOTBLOCK_ARMV7),y) bootblock-c-ccopts += $(armv7-a_flags) bootblock-S-ccopts += $(armv7-a_asm_flags) -ifneq ($(CONFIG_ARM_BOOTBLOCK_CUSTOM),y) +ifneq ($(CONFIG_BOOTBLOCK_CUSTOM),y) bootblock-y += bootblock.S -bootblock-$(CONFIG_BOOTBLOCK_SIMPLE) += bootblock_simple.c endif bootblock-y += cache.c @@ -46,9 +45,8 @@ else ifeq ($(CONFIG_ARCH_BOOTBLOCK_ARMV7_M),y) bootblock-c-ccopts += $(armv7-m_flags) bootblock-S-ccopts += $(armv7-m_asm_flags) -ifneq ($(CONFIG_ARM_BOOTBLOCK_CUSTOM),y) +ifneq ($(CONFIG_BOOTBLOCK_CUSTOM),y) bootblock-y += bootblock_m.S -bootblock-y += bootblock_simple.c endif bootblock-y += exception_m.c bootblock-y += cache_m.c diff --git a/src/arch/arm/armv7/bootblock_simple.c b/src/arch/arm/armv7/bootblock_simple.c deleted file mode 100644 index 0f4965af04..0000000000 --- a/src/arch/arm/armv7/bootblock_simple.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright 2010 Google Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; version 2 of - * the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -__attribute__((weak)) void bootblock_mainboard_early_init(void) { /* no-op */ } -__attribute__((weak)) void bootblock_soc_init(void) { /* do nothing */ } -__attribute__((weak)) void bootblock_mainboard_init(void) { /* do nothing */ } - -void main(void) -{ - init_timer(); - if (IS_ENABLED(CONFIG_HAS_PRECBMEM_TIMESTAMP_REGION)) - timestamp_init(timestamp_get()); - - bootblock_mainboard_early_init(); - -#if CONFIG_BOOTBLOCK_CONSOLE - console_init(); - exception_init(); -#endif - - bootblock_soc_init(); - bootblock_mainboard_init(); - - run_romstage(); -} diff --git a/src/arch/arm/include/bootblock_common.h b/src/arch/arm/include/bootblock_common.h deleted file mode 100644 index 874e84a709..0000000000 --- a/src/arch/arm/include/bootblock_common.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright 2014 Google Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef __ARCH_BOOTBLOCK_COMMON_H -#define __ARCH_BOOTBLOCK_COMMON_H - -/* These are defined as weak no-ops that can be overridden by mainboard/SoC. */ -void bootblock_mainboard_early_init(void); -void bootblock_mainboard_init(void); -void bootblock_soc_init(void); - -#endif /* __ARCH_BOOTBLOCK_COMMON_H */ diff --git a/src/arch/arm64/Kconfig b/src/arch/arm64/Kconfig index 2c8713224c..9b06589f82 100644 --- a/src/arch/arm64/Kconfig +++ b/src/arch/arm64/Kconfig @@ -22,12 +22,6 @@ config ARCH_RAMSTAGE_ARM64 source src/arch/arm64/armv8/Kconfig source src/arch/arm64/cpu/Kconfig -# If a custom bootblock is necessary, this option should be "select"-ed by -# the thing that needs it, probably the CPU. -config ARM64_BOOTBLOCK_CUSTOM - bool - default n - config ARM64_USE_ARM_TRUSTED_FIRMWARE bool default n diff --git a/src/arch/arm64/armv8/Makefile.inc b/src/arch/arm64/armv8/Makefile.inc index 357159d6a7..359a368ab9 100644 --- a/src/arch/arm64/armv8/Makefile.inc +++ b/src/arch/arm64/armv8/Makefile.inc @@ -26,10 +26,6 @@ armv8_asm_flags = $(armv8_flags) ################################################################################ ifeq ($(CONFIG_ARCH_BOOTBLOCK_ARMV8_64),y) -ifneq ($(CONFIG_ARM64_BOOTBLOCK_CUSTOM),y) -bootblock-y += bootblock.S -bootblock-y += bootblock_simple.c -endif bootblock-y += cache.c bootblock-y += cache_helpers.S bootblock-y += cpu.S @@ -38,6 +34,11 @@ bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += exception.c bootblock-c-ccopts += $(armv8_flags) bootblock-S-ccopts += $(armv8_asm_flags) +# Required to access unaligned timestamp struct members before MMU is active +# (TODO: Maybe use explicit unaligned accesses in timestamp code instead, or +# evaluate redesigning timestamp data structures to avoid misaligned members.) +bootblock-c-ccopts += -mstrict-align + endif ################################################################################ diff --git a/src/arch/arm64/armv8/bootblock_simple.c b/src/arch/arm64/armv8/bootblock_simple.c deleted file mode 100644 index e2002f2a3a..0000000000 --- a/src/arch/arm64/armv8/bootblock_simple.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright 2014 Google Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; version 2 of - * the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include -#include -#include -#include -#include -#include -#include - -static int boot_cpu(void) -{ - /* - * FIXME: This is a stub for now. All non-boot CPUs should be - * waiting for an interrupt. We could move the chunk of assembly - * which puts them to sleep in here... - */ - return 1; -} - -void main(void) -{ - /* Globally disable MMU, caches, and branch prediction (these should - * be disabled by default on reset) */ - mmu_disable(); - - /* - * Re-enable icache and branch prediction. MMU and dcache will be - * set up later. - * - * Note: If booting from USB, we need to disable branch prediction - * before copying from USB into RAM (FIXME: why?) - */ - - if (boot_cpu()) { - //bootblock_cpu_init(); - //bootblock_mainboard_init(); - } - -#if IS_ENABLED(CONFIG_BOOTBLOCK_CONSOLE) - console_init(); - exception_init(); -#endif - - run_romstage(); -} diff --git a/src/arch/arm64/include/bootblock_common.h b/src/arch/arm64/include/bootblock_common.h deleted file mode 100644 index 2fa705f5e1..0000000000 --- a/src/arch/arm64/include/bootblock_common.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifdef CONFIG_BOOTBLOCK_CPU_INIT -#include CONFIG_BOOTBLOCK_CPU_INIT -#endif - -#ifdef CONFIG_BOOTBLOCK_MAINBOARD_INIT -#include CONFIG_BOOTBLOCK_MAINBOARD_INIT -#else -static void bootblock_mainboard_init(void) -{ -} -#endif diff --git a/src/arch/mips/Kconfig b/src/arch/mips/Kconfig index b67fa29584..d0489ace4b 100644 --- a/src/arch/mips/Kconfig +++ b/src/arch/mips/Kconfig @@ -22,6 +22,7 @@ config ARCH_BOOTBLOCK_MIPS bool default n select ARCH_MIPS + select BOOTBLOCK_CUSTOM config ARCH_VERSTAGE_MIPS bool diff --git a/src/arch/mips/bootblock_simple.c b/src/arch/mips/bootblock_simple.c index c37e40ce7f..c3bd82dbee 100644 --- a/src/arch/mips/bootblock_simple.c +++ b/src/arch/mips/bootblock_simple.c @@ -14,7 +14,7 @@ * GNU General Public License for more details. */ -#include +#include #include #include #include diff --git a/src/arch/mips/include/arch/bootblock_common.h b/src/arch/mips/include/arch/bootblock_common.h new file mode 100644 index 0000000000..f5c11ba9c5 --- /dev/null +++ b/src/arch/mips/include/arch/bootblock_common.h @@ -0,0 +1,26 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Imagination Technologies + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifdef CONFIG_BOOTBLOCK_CPU_INIT +#include CONFIG_BOOTBLOCK_CPU_INIT +#endif + +#ifdef CONFIG_BOOTBLOCK_MAINBOARD_INIT +#include CONFIG_BOOTBLOCK_MAINBOARD_INIT +#else +static void bootblock_mainboard_init(void) +{ +} +#endif diff --git a/src/arch/mips/include/bootblock_common.h b/src/arch/mips/include/bootblock_common.h deleted file mode 100644 index f5c11ba9c5..0000000000 --- a/src/arch/mips/include/bootblock_common.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2014 Imagination Technologies - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifdef CONFIG_BOOTBLOCK_CPU_INIT -#include CONFIG_BOOTBLOCK_CPU_INIT -#endif - -#ifdef CONFIG_BOOTBLOCK_MAINBOARD_INIT -#include CONFIG_BOOTBLOCK_MAINBOARD_INIT -#else -static void bootblock_mainboard_init(void) -{ -} -#endif diff --git a/src/arch/riscv/Kconfig b/src/arch/riscv/Kconfig index 9618c63577..1849335386 100644 --- a/src/arch/riscv/Kconfig +++ b/src/arch/riscv/Kconfig @@ -6,6 +6,7 @@ config ARCH_BOOTBLOCK_RISCV bool default n select ARCH_RISCV + select BOOTBLOCK_CUSTOM config ARCH_VERSTAGE_RISCV bool @@ -18,9 +19,3 @@ config ARCH_ROMSTAGE_RISCV config ARCH_RAMSTAGE_RISCV bool default n - -# If a custom bootblock is necessary, this option should be "select"-ed by -# the thing that needs it, probably the CPU. -config RISCV_BOOTBLOCK_CUSTOM - bool - default n diff --git a/src/arch/riscv/bootblock_simple.c b/src/arch/riscv/bootblock_simple.c index 3214035bc3..db45ab202a 100644 --- a/src/arch/riscv/bootblock_simple.c +++ b/src/arch/riscv/bootblock_simple.c @@ -14,7 +14,6 @@ * GNU General Public License for more details. */ -#include #include #include #include diff --git a/src/arch/riscv/include/bootblock_common.h b/src/arch/riscv/include/bootblock_common.h deleted file mode 100644 index fe2c982dec..0000000000 --- a/src/arch/riscv/include/bootblock_common.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef CONFIG_BOOTBLOCK_CPU_INIT -#include CONFIG_BOOTBLOCK_CPU_INIT -#endif - -// I'm disappointed that we let this kind of thing creep in. -// we null out functions with this kind of stuff, AND weak symbols, -// AND empty cpp function defines. What's next? Ouija boards? -#if 0 -#ifdef CONFIG_BOOTBLOCK_MAINBOARD_INIT -#include CONFIG_BOOTBLOCK_MAINBOARD_INIT -#else -static void bootblock_mainboard_init(void) -{ -} -#endif -#endif diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig index 88b259297c..738e7d1c0a 100644 --- a/src/arch/x86/Kconfig +++ b/src/arch/x86/Kconfig @@ -24,6 +24,7 @@ config ARCH_BOOTBLOCK_X86_32 bool default n select ARCH_X86 + select BOOTBLOCK_CUSTOM config ARCH_VERSTAGE_X86_32 bool @@ -43,6 +44,7 @@ config ARCH_BOOTBLOCK_X86_64 bool default n select ARCH_X86 + select BOOTBLOCK_CUSTOM config ARCH_VERSTAGE_X86_64 bool diff --git a/src/arch/x86/bootblock_normal.c b/src/arch/x86/bootblock_normal.c index a4dc3c4d25..d5f03b7699 100644 --- a/src/arch/x86/bootblock_normal.c +++ b/src/arch/x86/bootblock_normal.c @@ -1,5 +1,5 @@ #include -#include +#include #include #include diff --git a/src/arch/x86/bootblock_simple.c b/src/arch/x86/bootblock_simple.c index bb0591fb53..4bff360a08 100644 --- a/src/arch/x86/bootblock_simple.c +++ b/src/arch/x86/bootblock_simple.c @@ -1,5 +1,5 @@ #include -#include +#include #include static void main(unsigned long bist) diff --git a/src/arch/x86/include/arch/bootblock_common.h b/src/arch/x86/include/arch/bootblock_common.h new file mode 100644 index 0000000000..939ba08a67 --- /dev/null +++ b/src/arch/x86/include/arch/bootblock_common.h @@ -0,0 +1,77 @@ +#include +#include +#include + +#ifdef CONFIG_BOOTBLOCK_RESETS +#include CONFIG_BOOTBLOCK_RESETS +#endif + +#ifdef CONFIG_BOOTBLOCK_CPU_INIT +#include CONFIG_BOOTBLOCK_CPU_INIT +#endif +#ifdef CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT +#include CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT +#endif +#ifdef CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT +#include CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT +#endif + +#ifdef CONFIG_BOOTBLOCK_MAINBOARD_INIT +#include CONFIG_BOOTBLOCK_MAINBOARD_INIT +#else +static void bootblock_mainboard_init(void) +{ +#ifdef CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT + bootblock_northbridge_init(); +#endif +#ifdef CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT + bootblock_southbridge_init(); +#endif +#ifdef CONFIG_BOOTBLOCK_CPU_INIT + bootblock_cpu_init(); +#endif +} +#endif + +#if CONFIG_USE_OPTION_TABLE +static void sanitize_cmos(void) +{ + if (cmos_error() || !cmos_chksum_valid() || IS_ENABLED(CONFIG_STATIC_OPTION_TABLE)) { + unsigned char *cmos_default = (unsigned char*)walkcbfs("cmos.default"); + if (cmos_default) { + int i; + cmos_disable_rtc(); + for (i = 14; i < 128; i++) { + cmos_write_inner(cmos_default[i], i); + } + cmos_enable_rtc(); + } + } +} +#endif + +#if CONFIG_CMOS_POST +static void cmos_post_init(void) +{ + u8 magic = CMOS_POST_BANK_0_MAGIC; + + /* Switch to the other bank */ + switch (cmos_read(CMOS_POST_BANK_OFFSET)) { + case CMOS_POST_BANK_1_MAGIC: + break; + case CMOS_POST_BANK_0_MAGIC: + magic = CMOS_POST_BANK_1_MAGIC; + break; + default: + /* Initialize to zero */ + cmos_write(0, CMOS_POST_BANK_0_OFFSET); + cmos_write(0, CMOS_POST_BANK_1_OFFSET); +#if CONFIG_CMOS_POST_EXTRA + cmos_write32(CMOS_POST_BANK_0_EXTRA, 0); + cmos_write32(CMOS_POST_BANK_1_EXTRA, 0); +#endif + } + + cmos_write(magic, CMOS_POST_BANK_OFFSET); +} +#endif diff --git a/src/arch/x86/include/bootblock_common.h b/src/arch/x86/include/bootblock_common.h deleted file mode 100644 index 939ba08a67..0000000000 --- a/src/arch/x86/include/bootblock_common.h +++ /dev/null @@ -1,77 +0,0 @@ -#include -#include -#include - -#ifdef CONFIG_BOOTBLOCK_RESETS -#include CONFIG_BOOTBLOCK_RESETS -#endif - -#ifdef CONFIG_BOOTBLOCK_CPU_INIT -#include CONFIG_BOOTBLOCK_CPU_INIT -#endif -#ifdef CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT -#include CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT -#endif -#ifdef CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT -#include CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT -#endif - -#ifdef CONFIG_BOOTBLOCK_MAINBOARD_INIT -#include CONFIG_BOOTBLOCK_MAINBOARD_INIT -#else -static void bootblock_mainboard_init(void) -{ -#ifdef CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT - bootblock_northbridge_init(); -#endif -#ifdef CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT - bootblock_southbridge_init(); -#endif -#ifdef CONFIG_BOOTBLOCK_CPU_INIT - bootblock_cpu_init(); -#endif -} -#endif - -#if CONFIG_USE_OPTION_TABLE -static void sanitize_cmos(void) -{ - if (cmos_error() || !cmos_chksum_valid() || IS_ENABLED(CONFIG_STATIC_OPTION_TABLE)) { - unsigned char *cmos_default = (unsigned char*)walkcbfs("cmos.default"); - if (cmos_default) { - int i; - cmos_disable_rtc(); - for (i = 14; i < 128; i++) { - cmos_write_inner(cmos_default[i], i); - } - cmos_enable_rtc(); - } - } -} -#endif - -#if CONFIG_CMOS_POST -static void cmos_post_init(void) -{ - u8 magic = CMOS_POST_BANK_0_MAGIC; - - /* Switch to the other bank */ - switch (cmos_read(CMOS_POST_BANK_OFFSET)) { - case CMOS_POST_BANK_1_MAGIC: - break; - case CMOS_POST_BANK_0_MAGIC: - magic = CMOS_POST_BANK_1_MAGIC; - break; - default: - /* Initialize to zero */ - cmos_write(0, CMOS_POST_BANK_0_OFFSET); - cmos_write(0, CMOS_POST_BANK_1_OFFSET); -#if CONFIG_CMOS_POST_EXTRA - cmos_write32(CMOS_POST_BANK_0_EXTRA, 0); - cmos_write32(CMOS_POST_BANK_1_EXTRA, 0); -#endif - } - - cmos_write(magic, CMOS_POST_BANK_OFFSET); -} -#endif -- cgit v1.2.3