mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
arm: mach-k3: common: Clamp RAM end address to board-usable region in spl_enable_cache()
commitba20b2443c("arm: mach-k3: common: Reserve video memory from end of the RAM") switched spl_enable_cache() to use gd->ram_top directly but omitted the board_get_usable_ram_top() call that limits RAM configuration and provides updated RAM end address per memory map used by board and impacts subsequent allocations and reservations. For e.g. here it impacts how high the TLB may be placed. On Verdin AM62 (512 MiB), the raw end of RAM (0xA0000000) is inside OP-TEE's region. board_get_usable_ram_top() in verdin-am62.c returns 0x9C000000 to keep relocations below it, but spl_enable_cache() never called it. commit42b3ee7fa5("arm: mach-k3: am62x: Enable memory firewall support") then enforced the OP-TEE firewall, turning the silent corruption into a hard hang. Fix by calling board_get_usable_ram_top() after computing raw ram_top, consistent with setup_dest_addr() in board_f.c. A weak default is provided for boards that do not need to restrict the RAM top. Fixes:ba20b2443c("arm: mach-k3: common: Reserve video memory from end of the RAM") Reported-by: Francesco Dolcini <francesco@dolcini.it> Link: https://lore.kernel.org/all/20260224102121.GB340942@francesco-nb/ Signed-off-by: Devarsh Thakkar <devarsht@ti.com> Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com> # Verdin AM62 512MB
This commit is contained in:
committed by
Tom Rini
parent
afa8f076db
commit
26048cdb4c
@@ -407,6 +407,11 @@ void k3_fix_rproc_clock(const char *path)
|
||||
path, a_core_frequency / 1000000, speed_grade);
|
||||
}
|
||||
|
||||
__weak phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
|
||||
{
|
||||
return gd->ram_top;
|
||||
}
|
||||
|
||||
void spl_enable_cache(void)
|
||||
{
|
||||
#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))
|
||||
@@ -420,6 +425,7 @@ void spl_enable_cache(void)
|
||||
gd->arch.tlb_size = PGTABLE_SIZE;
|
||||
|
||||
gd->ram_top += get_effective_memsize();
|
||||
gd->ram_top = board_get_usable_ram_top(0);
|
||||
gd->relocaddr = gd->ram_top;
|
||||
|
||||
ret = spl_reserve_video_from_ram_top();
|
||||
|
||||
Reference in New Issue
Block a user