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
|
#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) && \
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue