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:
parent
f116e38908
commit
c6f0e81965
|
|
@ -197,6 +197,49 @@ static int boot_from_udisk(void)
|
|||
}
|
||||
#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)
|
||||
{
|
||||
#ifdef CONFIG_ROCKCHIP_PRELOADER_ATAGS
|
||||
|
|
@ -230,6 +273,7 @@ int board_late_init(void)
|
|||
#ifdef CONFIG_DRM_ROCKCHIP
|
||||
rockchip_show_logo();
|
||||
#endif
|
||||
env_fixup();
|
||||
soc_clk_dump();
|
||||
cmdline_handle();
|
||||
|
||||
|
|
@ -441,12 +485,27 @@ static int mmc_dm_reinit(void)
|
|||
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)
|
||||
{
|
||||
ulong fdt_addr;
|
||||
void *ufdt_blob;
|
||||
int ret;
|
||||
|
||||
env_fixup_fdt_addr();
|
||||
|
||||
fdt_addr = env_get_ulong("fdt_addr_r", 16, 0);
|
||||
if (!fdt_addr) {
|
||||
printf("No Found FDT Load Address.\n");
|
||||
|
|
@ -503,49 +562,6 @@ int init_kernel_dtb(void)
|
|||
}
|
||||
#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)
|
||||
{
|
||||
#if defined(CONFIG_PWRKEY_DNL_TRIGGER_NUM) && \
|
||||
|
|
|
|||
Loading…
Reference in New Issue