mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-21 02:33:07 +00:00
7048bb13b2
This patch fixes an stability issue seen on some vcoreiii targets, which was root caused to a cache inconsistency situation. The inconsistency was caused by having kuseg pointing to NOR area but used as a stack/gd/heap area during initialization, while only relatively late remapping the RAM area into kuseg position. The fix is to initialize the DDR right after the TLB setup, and then remapping it into position before gd/stack/heap usage. Reported-by: Ramin Seyed-Moussavi <ramin.moussavi@yacoub.de> Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Reviewed-by: Horatiu Vultur <horatiu.vultur@microchip.com> Signed-off-by: Lars Povlsen <lars.povlsen@microchip.com>
45 lines
817 B
ArmAsm
45 lines
817 B
ArmAsm
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
|
/*
|
|
* Copyright (c) 2018 Microsemi Corporation
|
|
*/
|
|
|
|
#include <asm/asm.h>
|
|
#include <asm/regdef.h>
|
|
|
|
.set noreorder
|
|
.extern vcoreiii_tlb_init
|
|
.extern vcoreiii_ddr_init
|
|
#ifdef CONFIG_SOC_LUTON
|
|
.extern pll_init
|
|
#endif
|
|
|
|
LEAF(lowlevel_init)
|
|
/*
|
|
* As we have no stack yet, we can assume the restricted
|
|
* luxury of the sX-registers without saving them
|
|
*/
|
|
|
|
/* Modify ra/s0 such we return to physical NOR location */
|
|
li t0, 0x0fffffff
|
|
li t1, CONFIG_SYS_TEXT_BASE
|
|
and s0, ra, t0
|
|
add s0, s0, t1
|
|
|
|
jal vcoreiii_tlb_init
|
|
nop
|
|
|
|
#ifdef CONFIG_SOC_LUTON
|
|
jal pll_init
|
|
nop
|
|
#endif
|
|
|
|
/* Initialize DDR controller to enable stack/gd/heap */
|
|
0:
|
|
jal vcoreiii_ddr_init
|
|
nop
|
|
bnez v0, 0b /* Retry on error */
|
|
nop
|
|
|
|
jr s0
|
|
nop
|
|
END(lowlevel_init)
|