summaryrefslogtreecommitdiff
path: root/src/arch/arm
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2014-11-25 13:22:20 -0800
committerPatrick Georgi <pgeorgi@google.com>2015-04-13 17:21:17 +0200
commitf1e321001d5954096f06f9a43138219a9a46536e (patch)
tree55622593340f5a4332505ee25b87e8c1d9bc25db /src/arch/arm
parenta512e117b0a550e8d8c8a13e74ebbf971614ebee (diff)
arm: Add bootblock_mainboard_early_init() for pre-console initialization
On most platforms, enabling the console and exception handlers are amongst the very first things you want to do, as they help you see what's going on and debug errors in other early init code. However, most ARM boards require some small amount of board-specific initialization (pinmuxing, maybe clocks) to get the UART running, which is why bootblock_mainboard_init() (and with it almost all of the actual bootblock code) always had to run before console initialization for now. This patch introduces an explicit bootblock_mainboard_early_init() hook for only that part of initialization that absolutely needs to run before console output. The other two hooks for SoC and mainboard are moved below console_init(). This model has already proven its worth before in the tegra124 and tegra132 custom bootblocks. BRANCH=None BUG=chrome-os-partner:32123 TEST=Booted on Pinky. Compiled for Daisy, Storm and Ryu. Change-Id: I510c58189faf0c08c740bcc3b5a654f81f892464 Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Original-Commit-Id: f58e84a2fc1c9951e9c4c65cdec1dbeb6a20d597 Original-Change-Id: I4257b5a8807595140e8c973ca04e68ea8630bf9a Original-Signed-off-by: Julius Werner <jwerner@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/231941 Reviewed-on: http://review.coreboot.org/9603 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/arch/arm')
-rw-r--r--src/arch/arm/armv4/bootblock_simple.c7
-rw-r--r--src/arch/arm/armv7/bootblock_simple.c7
-rw-r--r--src/arch/arm/include/bootblock_common.h1
3 files changed, 11 insertions, 4 deletions
diff --git a/src/arch/arm/armv4/bootblock_simple.c b/src/arch/arm/armv4/bootblock_simple.c
index 9e399a9b7c..26646eebf5 100644
--- a/src/arch/arm/armv4/bootblock_simple.c
+++ b/src/arch/arm/armv4/bootblock_simple.c
@@ -26,18 +26,21 @@
#include <console/console.h>
#include <program_loading.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)
{
- bootblock_soc_init();
- bootblock_mainboard_init();
+ bootblock_mainboard_early_init();
if (CONFIG_BOOTBLOCK_CONSOLE) {
console_init();
exception_init();
}
+ bootblock_soc_init();
+ bootblock_mainboard_init();
+
run_romstage();
}
diff --git a/src/arch/arm/armv7/bootblock_simple.c b/src/arch/arm/armv7/bootblock_simple.c
index 450e5b437b..564db5b80a 100644
--- a/src/arch/arm/armv7/bootblock_simple.c
+++ b/src/arch/arm/armv7/bootblock_simple.c
@@ -27,18 +27,21 @@
#include <program_loading.h>
#include <smp/node.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)
{
- bootblock_soc_init();
- bootblock_mainboard_init();
+ 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
index 413a206177..06312928da 100644
--- a/src/arch/arm/include/bootblock_common.h
+++ b/src/arch/arm/include/bootblock_common.h
@@ -21,6 +21,7 @@
#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);