Skip to content
Snippets Groups Projects
Commit e0418347 authored by Michal Simek's avatar Michal Simek
Browse files

microblaze: Setup initrd_high and fdt_high at run time


Setup initrd_high and fdt_high to be placed in lowmem space for kernel to
be able to reach it. Values are setup at run time to ensure that the same
setting can be used on different memory setup. Do this setting only when
variables are not

Similar run time detection was done for Zynqmp and Versal.

Signed-off-by: default avatarMichal Simek <michal.simek@xilinx.com>
parent 8272f310
No related merge requests found
...@@ -20,6 +20,14 @@ config TARGET_MICROBLAZE_GENERIC ...@@ -20,6 +20,14 @@ config TARGET_MICROBLAZE_GENERIC
endchoice endchoice
config STACK_SIZE
hex "Define max stack size that can be used by u-boot"
default 0x200000
help
Defines Max stack size that can be used by u-boot so that the
initrd_high will be calculated as base stack pointer minus this
stack size.
source "board/xilinx/microblaze-generic/Kconfig" source "board/xilinx/microblaze-generic/Kconfig"
config SPL_LDSCRIPT config SPL_LDSCRIPT
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <asm/gpio.h> #include <asm/gpio.h>
#include <dm/uclass.h> #include <dm/uclass.h>
#include <wdt.h> #include <wdt.h>
#include <linux/sizes.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
...@@ -39,6 +40,8 @@ int dram_init(void) ...@@ -39,6 +40,8 @@ int dram_init(void)
int board_late_init(void) int board_late_init(void)
{ {
ulong max_size, lowmem_size;
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_SYSRESET_MICROBLAZE) #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_SYSRESET_MICROBLAZE)
int ret; int ret;
...@@ -47,5 +50,21 @@ int board_late_init(void) ...@@ -47,5 +50,21 @@ int board_late_init(void)
if (ret) if (ret)
printf("Warning: No reset driver: ret=%d\n", ret); printf("Warning: No reset driver: ret=%d\n", ret);
#endif #endif
if (!(gd->flags & GD_FLG_ENV_DEFAULT)) {
debug("Saved variables - Skipping\n");
return 0;
}
max_size = gd->start_addr_sp - CONFIG_STACK_SIZE;
max_size = round_down(max_size, SZ_16M);
/* Linux default LOWMEM_SIZE is 0x30000000 = 768MB */
lowmem_size = gd->ram_base + 768 * 1024 * 1024;
env_set_addr("initrd_high", (void *)min_t(ulong, max_size,
lowmem_size));
env_set_addr("fdt_high", (void *)min_t(ulong, max_size, lowmem_size));
return 0; return 0;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment