summaryrefslogtreecommitdiff
path: root/arch/arm/mach-mvebu/spl.c
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2015-08-25 13:49:41 +0200
committerLuka Perkov <luka.perkov@sartura.hr>2015-10-21 02:25:00 +0200
commit944c7a317675d8dbf082a2f144fec1139a5cb811 (patch)
tree0f0c7b461e220787baf29d1b16d9b1dc162a66bd /arch/arm/mach-mvebu/spl.c
parentc3d891405bda42cfd00958ab0143e0d3900b06d9 (diff)
downloadu-boot-imx-944c7a317675d8dbf082a2f144fec1139a5cb811.zip
u-boot-imx-944c7a317675d8dbf082a2f144fec1139a5cb811.tar.gz
u-boot-imx-944c7a317675d8dbf082a2f144fec1139a5cb811.tar.bz2
arm: mvebu: Add option to use UART xmodem protocol via kwboot
This patch enables the use of the kwboot tool, to boot mainline U-Boot on the Marvell Armada XP/38x SoC's. This is done by returning to the SoC's BootROM after SPL has initialized the SDRAM. We need to make sure to not reconfigure the internal register space and MBARs. Otherwise the BootROM will not be able to continue after SPL jumps back to it. To use this feature, please don't forget to change the BOOT_FROM line in your board specfic kwbimage.cfg file this way: BOOT_FROM uart Tested on these Marvell eval boards: DB-MV784MP-GP - Armada XP DB-88F6820-GP - Armada 38x Signed-off-by: Stefan Roese <sr@denx.de> Cc: Dirk Eibach <eibach@gdsys.de> Cc: Kevin Smith <kevin.smith@elecsyscorp.com> Cc: Luka Perkov <luka.perkov@sartura.hr>
Diffstat (limited to 'arch/arm/mach-mvebu/spl.c')
-rw-r--r--arch/arm/mach-mvebu/spl.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index af61ded..26ff1a2 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -34,8 +34,18 @@ void board_init_f(ulong dummy)
/* Set global data pointer */
gd = &gdata;
+#ifndef CONFIG_MVEBU_BOOTROM_UARTBOOT
+ /*
+ * Only call arch_cpu_init() when not returning to the
+ * Marvell BootROM, which is done when booting via
+ * the xmodem protocol (kwboot tool). Otherwise the
+ * internal register will get remapped and the BootROM
+ * can't continue to run correctly.
+ */
+
/* Linux expects the internal registers to be at 0xf1000000 */
arch_cpu_init();
+#endif
/*
* Pin muxing needs to be done before UART output, since
@@ -54,5 +64,20 @@ void board_init_f(ulong dummy)
/* Setup DDR */
ddr3_init();
+#ifdef CONFIG_MVEBU_BOOTROM_UARTBOOT
+ /*
+ * Return to the BootROM to continue the Marvell xmodem
+ * UART boot protocol. As initiated by the kwboot tool.
+ *
+ * This can only be done by the BootROM and not by the
+ * U-Boot SPL infrastructure, since the beginning of the
+ * image is already read and interpreted by the BootROM.
+ * SPL has no chance to receive this information. So we
+ * need to return to the BootROM to enable this xmodem
+ * UART download.
+ */
+ return_to_bootrom();
+#endif
+
board_init_r(NULL, 0);
}