mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-31 14:28:52 +09:00
![]() Tegra U-Boot ensures that board_get_usable_ram_top() never returns a value
over 4GB, since some peripherals can't access such addresses. However, on
systems with more than 2GB of RAM, RAM bank 1 does describe this extra
RAM, so that Linux (or whatever OS) can use it, subject to DMA
limitations. Since board_get_usable_ram_top() points at the top of RAM
bank 0, the memory locations describes by RAM bank 1 are not mapped by
U-Boot's MMU configuration, and so cannot be used for anything.
For some completely inexplicable reason, U-Boot's EFI support ignores the
value returned by board_get_usable_ram_top(), and EFI memory allocation
routines will return values above U-Boot's RAM top. This causes U-Boot to
crash when it accesses that RAM, since it isn't mapped by the MMU. One
use-case where this happens is TFTP download of a file on Jetson TX1
(p2371-2180).
This change explicitly tells the EFI code that this extra RAM should not
be used, thus avoiding the crash.
A previous attempt to make EFI honor board_get_usable_ram_top() was
rejected. So, this patch will need to be replicated for any board that
implements board_get_usable_ram_top().
Fixes:
|
||
---|---|---|
.. | ||
tegra20 | ||
tegra30 | ||
tegra114 | ||
tegra124 | ||
tegra186 | ||
tegra210 | ||
ap.c | ||
arm64-mmu.c | ||
board2.c | ||
board186.c | ||
board.c | ||
cache.c | ||
clock.c | ||
cmd_enterrcm.c | ||
cpu.c | ||
cpu.h | ||
dt-setup.c | ||
emc.c | ||
emc.h | ||
gpu.c | ||
ivc.c | ||
Kconfig | ||
lowlevel_init.S | ||
Makefile | ||
pinmux-common.c | ||
powergate.c | ||
psci.S | ||
spl.c | ||
sys_info.c | ||
xusb-padctl-common.c | ||
xusb-padctl-common.h | ||
xusb-padctl-dummy.c |