diff options
author | Julius Werner <jwerner@chromium.org> | 2015-10-09 13:37:58 -0700 |
---|---|---|
committer | Julius Werner <jwerner@chromium.org> | 2015-11-11 05:08:07 +0100 |
commit | 86fc11d0c9b799f916d69ced72dc8a26a07591a2 (patch) | |
tree | 3a38637eac9dc376e29eeadd7e36e71935f0c211 /src/arch/arm64 | |
parent | fe4cbf1167fcb27ec332a2efe16297705ca07359 (diff) |
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 <jwerner@chromium.org>
Reviewed-on: http://review.coreboot.org/12076
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Tested-by: build bot (Jenkins)
Diffstat (limited to 'src/arch/arm64')
-rw-r--r-- | src/arch/arm64/Kconfig | 6 | ||||
-rw-r--r-- | src/arch/arm64/armv8/Makefile.inc | 9 | ||||
-rw-r--r-- | src/arch/arm64/armv8/bootblock_simple.c | 60 | ||||
-rw-r--r-- | src/arch/arm64/include/bootblock_common.h | 11 |
4 files changed, 5 insertions, 81 deletions
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 <bootblock_common.h> -#include <arch/cache.h> -#include <arch/stages.h> -#include <arch/exception.h> -#include <cbfs.h> -#include <console/console.h> -#include <program_loading.h> - -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 |