mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-30 16:39:35 +00:00
944c7a3176
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>
77 lines
1.5 KiB
ArmAsm
77 lines
1.5 KiB
ArmAsm
/*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#include <config.h>
|
|
#include <linux/linkage.h>
|
|
|
|
#ifdef CONFIG_MVEBU_BOOTROM_UARTBOOT
|
|
ENTRY(save_boot_params)
|
|
stmfd sp!, {r0 - r12, lr} /* @ save registers on stack */
|
|
ldr r12, =CONFIG_SPL_BOOTROM_SAVE
|
|
str sp, [r12]
|
|
b save_boot_params_ret
|
|
ENDPROC(save_boot_params)
|
|
|
|
ENTRY(return_to_bootrom)
|
|
ldr r12, =CONFIG_SPL_BOOTROM_SAVE
|
|
ldr sp, [r12]
|
|
mov r0, #0x0 /* @ return value: 0x0 NO_ERR */
|
|
ldmfd sp!, {r0 - r12, pc} /* @ restore regs and return */
|
|
ENDPROC(return_to_bootrom)
|
|
#else
|
|
ENTRY(save_boot_params)
|
|
b save_boot_params_ret
|
|
ENDPROC(save_boot_params)
|
|
#endif
|
|
|
|
/*
|
|
* cache_inv - invalidate Cache line
|
|
* r0 - dest
|
|
*/
|
|
.global cache_inv
|
|
.type cache_inv, %function
|
|
cache_inv:
|
|
|
|
stmfd sp!, {r1-r12}
|
|
|
|
mcr p15, 0, r0, c7, c6, 1
|
|
|
|
ldmfd sp!, {r1-r12}
|
|
bx lr
|
|
|
|
|
|
/*
|
|
* flush_l1_v6 - l1 cache clean invalidate
|
|
* r0 - dest
|
|
*/
|
|
.global flush_l1_v6
|
|
.type flush_l1_v6, %function
|
|
flush_l1_v6:
|
|
|
|
stmfd sp!, {r1-r12}
|
|
|
|
mcr p15, 0, r0, c7, c10, 5 /* @ data memory barrier */
|
|
mcr p15, 0, r0, c7, c14, 1 /* @ clean & invalidate D line */
|
|
mcr p15, 0, r0, c7, c10, 4 /* @ data sync barrier */
|
|
|
|
ldmfd sp!, {r1-r12}
|
|
bx lr
|
|
|
|
|
|
/*
|
|
* flush_l1_v7 - l1 cache clean invalidate
|
|
* r0 - dest
|
|
*/
|
|
.global flush_l1_v7
|
|
.type flush_l1_v7, %function
|
|
flush_l1_v7:
|
|
|
|
stmfd sp!, {r1-r12}
|
|
|
|
dmb /* @data memory barrier */
|
|
mcr p15, 0, r0, c7, c14, 1 /* @ clean & invalidate D line */
|
|
dsb /* @data sync barrier */
|
|
|
|
ldmfd sp!, {r1-r12}
|
|
bx lr
|