diff mbox series

[4/4] xilinx: common: Change bootm_size variable setting

Message ID 7cc83209f1d7af045e7574990bf3d0296d9d943c.1597228970.git.michal.simek@xilinx.com
State Accepted
Commit 2570cc6430cf191b2b0f71b9dcfed46c94a645dc
Delegated to: Michal Simek
Headers show
Series xilinx: common: Fix fdt/initrd_high and bootm_* variables | expand

Commit Message

Michal Simek Aug. 12, 2020, 10:42 a.m. UTC
Linux kernel for arm32 requires dtb and initrd to be placed in low memory
to work properly. This requirement is described in chapter 4b) and 5) in
Linux documentation (Documentation/arm/booting.rst).

There is an issue on arm32 with 2GB of memory that bootm_size is bigger
than Linux lowmem (for example with VMSPLIT_3G). That's why limit bootm
size on these systems not to be above 768MB.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

 board/xilinx/common/board.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
index 581c88ad49a4..eab389d049f2 100644
--- a/board/xilinx/common/board.c
+++ b/board/xilinx/common/board.c
@@ -78,11 +78,15 @@  void *board_fdt_blob_setup(void)
 int board_late_init_xilinx(void)
 {
 	u32 ret = 0;
+	phys_size_t bootm_size = gd->ram_size;
+
+	if (CONFIG_IS_ENABLED(ARCH_ZYNQ))
+		bootm_size = min(bootm_size, (phys_size_t)(SZ_512M + SZ_256M));
 
 	ret |= env_set_hex("script_offset_f", CONFIG_BOOT_SCRIPT_OFFSET);
 
 	ret |= env_set_addr("bootm_low", (void *)gd->ram_base);
-	ret |= env_set_addr("bootm_size", (void *)gd->ram_size);
+	ret |= env_set_addr("bootm_size", (void *)bootm_size);
 
 	if (ret)
 		printf("%s: Saving run time variables FAILED\n", __func__);