rockchip: board: add env fixup

It was called from set_env_default() which only handles
nowhere env, let's move it to board late to handle all
env types.

Fix fdt address earlier before init kernel dtb.

Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
Change-Id: I1e60355eef7897b7e92c7652c60a3c72350e46b0
This commit is contained in:
Joseph Chen 2020-02-23 12:03:06 +08:00
parent f116e38908
commit c6f0e81965
1 changed files with 59 additions and 43 deletions

View File

@ -197,6 +197,49 @@ static int boot_from_udisk(void)
} }
#endif #endif
static void env_fixup(void)
{
struct memblock mem;
ulong u_addr_r;
phys_size_t end;
char *addr_r;
#ifdef ENV_MEM_LAYOUT_SETTINGS1
const char *env_addr0[] = {
"scriptaddr", "pxefile_addr_r",
"fdt_addr_r", "kernel_addr_r", "ramdisk_addr_r",
};
const char *env_addr1[] = {
"scriptaddr1", "pxefile_addr1_r",
"fdt_addr1_r", "kernel_addr1_r", "ramdisk_addr1_r",
};
int i;
/* 128M is a typical ram size for most platform, so as default here */
if (gd->ram_size <= SZ_128M) {
/* Replace orignal xxx_addr_r */
for (i = 0; i < ARRAY_SIZE(env_addr1); i++) {
addr_r = env_get(env_addr1[i]);
if (addr_r)
env_set(env_addr0[i], addr_r);
}
}
#endif
/* If bl32 is disabled, maybe kernel can be load to lower address. */
if (!(gd->flags & GD_FLG_BL32_ENABLED)) {
addr_r = env_get("kernel_addr_no_bl32_r");
if (addr_r)
env_set("kernel_addr_r", addr_r);
/* If bl32 is enlarged, we move ramdisk addr right behind it */
} else {
mem = param_parse_optee_mem();
end = mem.base + mem.size;
u_addr_r = env_get_ulong("ramdisk_addr_r", 16, 0);
if (u_addr_r >= mem.base && u_addr_r < end)
env_set_hex("ramdisk_addr_r", end);
}
}
static void cmdline_handle(void) static void cmdline_handle(void)
{ {
#ifdef CONFIG_ROCKCHIP_PRELOADER_ATAGS #ifdef CONFIG_ROCKCHIP_PRELOADER_ATAGS
@ -230,6 +273,7 @@ int board_late_init(void)
#ifdef CONFIG_DRM_ROCKCHIP #ifdef CONFIG_DRM_ROCKCHIP
rockchip_show_logo(); rockchip_show_logo();
#endif #endif
env_fixup();
soc_clk_dump(); soc_clk_dump();
cmdline_handle(); cmdline_handle();
@ -441,12 +485,27 @@ static int mmc_dm_reinit(void)
return 0; return 0;
} }
static void env_fixup_fdt_addr(void)
{
#ifdef ENV_MEM_LAYOUT_SETTINGS1
char *addr_r;
if (gd->ram_size <= SZ_128M) {
addr_r = env_get("fdt_addr1_r");
if (addr_r)
env_set("fdt_addr_r", addr_r);
}
#endif
}
int init_kernel_dtb(void) int init_kernel_dtb(void)
{ {
ulong fdt_addr; ulong fdt_addr;
void *ufdt_blob; void *ufdt_blob;
int ret; int ret;
env_fixup_fdt_addr();
fdt_addr = env_get_ulong("fdt_addr_r", 16, 0); fdt_addr = env_get_ulong("fdt_addr_r", 16, 0);
if (!fdt_addr) { if (!fdt_addr) {
printf("No Found FDT Load Address.\n"); printf("No Found FDT Load Address.\n");
@ -503,49 +562,6 @@ int init_kernel_dtb(void)
} }
#endif #endif
void board_env_fixup(void)
{
struct memblock mem;
ulong u_addr_r;
phys_size_t end;
char *addr_r;
#ifdef ENV_MEM_LAYOUT_SETTINGS1
const char *env_addr0[] = {
"scriptaddr", "pxefile_addr_r",
"fdt_addr_r", "kernel_addr_r", "ramdisk_addr_r",
};
const char *env_addr1[] = {
"scriptaddr1", "pxefile_addr1_r",
"fdt_addr1_r", "kernel_addr1_r", "ramdisk_addr1_r",
};
int i;
/* 128M is a typical ram size for most platform, so as default here */
if (gd->ram_size <= SZ_128M) {
/* Replace orignal xxx_addr_r */
for (i = 0; i < ARRAY_SIZE(env_addr1); i++) {
addr_r = env_get(env_addr1[i]);
if (addr_r)
env_set(env_addr0[i], addr_r);
}
}
#endif
/* If bl32 is disabled, maybe kernel can be load to lower address. */
if (!(gd->flags & GD_FLG_BL32_ENABLED)) {
addr_r = env_get("kernel_addr_no_bl32_r");
if (addr_r)
env_set("kernel_addr_r", addr_r);
/* If bl32 is enlarged, we move ramdisk addr right behind it */
} else {
mem = param_parse_optee_mem();
end = mem.base + mem.size;
u_addr_r = env_get_ulong("ramdisk_addr_r", 16, 0);
if (u_addr_r >= mem.base && u_addr_r < end)
env_set_hex("ramdisk_addr_r", end);
}
}
static void early_download(void) static void early_download(void)
{ {
#if defined(CONFIG_PWRKEY_DNL_TRIGGER_NUM) && \ #if defined(CONFIG_PWRKEY_DNL_TRIGGER_NUM) && \