mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-17 10:18:38 +00:00
5bb2c550b1
Moving of internal registers from INTREG_BASE_ADDR_REG to SOC_REGS_PHY_BASE needs to be done very early, prior calling any function which may touch internal registers, like debug_uart_init(). So do it earlier in arch_very_early_init() instead of arch_cpu_init(). Movement is done in proper U-Boot, not in SPL. SPL may return to bootrom and bootrom requires internal registers at (old) expected location. Signed-off-by: Pali Rohár <pali@kernel.org> Reviewed-by: Stefan Roese <sr@denx.de>
27 lines
666 B
ArmAsm
27 lines
666 B
ArmAsm
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
|
|
#include <config.h>
|
|
#include <linux/linkage.h>
|
|
|
|
ENTRY(arch_very_early_init)
|
|
#ifdef CONFIG_ARMADA_38X
|
|
/*
|
|
* Only with disabled MMU its possible to switch the base
|
|
* register address on Armada 38x. Without this the SDRAM
|
|
* located at >= 0x4000.0000 is also not accessible, as its
|
|
* still locked to cache.
|
|
*/
|
|
mrc p15, 0, r0, c1, c0, 0
|
|
bic r0, #1
|
|
mcr p15, 0, r0, c1, c0, 0
|
|
#endif
|
|
|
|
/* Move internal registers from INTREG_BASE_ADDR_REG to SOC_REGS_PHY_BASE */
|
|
ldr r0, =SOC_REGS_PHY_BASE
|
|
ldr r1, =INTREG_BASE_ADDR_REG
|
|
str r0, [r1]
|
|
add r0, r0, #0xC000
|
|
mcr p15, 4, r0, c15, c0
|
|
|
|
bx lr
|
|
ENDPROC(arch_very_early_init)
|