summaryrefslogtreecommitdiff
path: root/src/arch/arm
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2015-10-09 13:37:58 -0700
committerJulius Werner <jwerner@chromium.org>2015-11-11 05:08:07 +0100
commit86fc11d0c9b799f916d69ced72dc8a26a07591a2 (patch)
tree3a38637eac9dc376e29eeadd7e36e71935f0c211 /src/arch/arm
parentfe4cbf1167fcb27ec332a2efe16297705ca07359 (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/arm')
-rw-r--r--src/arch/arm/Kconfig6
-rw-r--r--src/arch/arm/armv4/Makefile.inc3
-rw-r--r--src/arch/arm/armv7/Makefile.inc6
-rw-r--r--src/arch/arm/armv7/bootblock_simple.c47
-rw-r--r--src/arch/arm/include/bootblock_common.h24
5 files changed, 3 insertions, 83 deletions
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 <arch/exception.h>
-#include <arch/stages.h>
-#include <bootblock_common.h>
-#include <console/console.h>
-#include <delay.h>
-#include <program_loading.h>
-#include <smp/node.h>
-#include <timestamp.h>
-
-__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 */