diff options
-rw-r--r-- | cmd/bdinfo.c | 1 | ||||
-rw-r--r-- | common/board_f.c | 11 | ||||
-rw-r--r-- | include/asm-generic/global_data.h | 11 | ||||
-rw-r--r-- | include/board_f.h | 23 | ||||
-rw-r--r-- | test/cmd/bdinfo.c | 2 |
5 files changed, 37 insertions, 11 deletions
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 437ac4e8630..b53b51acca4 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -154,7 +154,6 @@ static int bdinfo_print_all(struct bd_info *bd) if (IS_ENABLED(CONFIG_CMD_NET)) print_eth(); bdinfo_print_num_l("fdt_blob", (ulong)map_to_sysmem(gd->fdt_blob)); - bdinfo_print_num_l("new_fdt", (ulong)map_to_sysmem(gd->new_fdt)); bdinfo_print_num_l("fdt_size", (ulong)gd->fdt_size); if (IS_ENABLED(CONFIG_VIDEO)) show_video_info(); diff --git a/common/board_f.c b/common/board_f.c index a1f8641ae26..8f7c56e812f 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -578,7 +578,7 @@ static int reserve_fdt(void) gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob), 32); gd->start_addr_sp = reserve_stack_aligned(gd->fdt_size); - gd->new_fdt = map_sysmem(gd->start_addr_sp, gd->fdt_size); + gd->boardf->new_fdt = map_sysmem(gd->start_addr_sp, gd->fdt_size); debug("Reserving %lu Bytes for FDT at: %08lx\n", gd->fdt_size, gd->start_addr_sp); } @@ -668,10 +668,10 @@ static int init_post(void) static int reloc_fdt(void) { if (!IS_ENABLED(CONFIG_OF_EMBED)) { - if (gd->new_fdt) { - memcpy(gd->new_fdt, gd->fdt_blob, + if (gd->boardf->new_fdt) { + memcpy(gd->boardf->new_fdt, gd->fdt_blob, fdt_totalsize(gd->fdt_blob)); - gd->fdt_blob = gd->new_fdt; + gd->fdt_blob = gd->boardf->new_fdt; } } @@ -1021,8 +1021,11 @@ static const init_fnc_t init_sequence_f[] = { void board_init_f(ulong boot_flags) { + struct board_f boardf; + gd->flags = boot_flags; gd->flags &= ~GD_FLG_HAVE_CONSOLE; + gd->boardf = &boardf; if (initcall_run_list(init_sequence_f)) hang(); diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h index 1252b8acefa..8a1a4e298ac 100644 --- a/include/asm-generic/global_data.h +++ b/include/asm-generic/global_data.h @@ -20,6 +20,7 @@ */ #ifndef __ASSEMBLY__ +#include <board_f.h> #include <cyclic.h> #include <event_internal.h> #include <fdtdec.h> @@ -42,6 +43,12 @@ struct global_data { * @bd: board information */ struct bd_info *bd; +#ifndef CONFIG_SPL_BUILD + /** + * @boardf: information only used before relocation + */ + struct board_f *boardf; +#endif /** * @flags: global data flags * @@ -220,10 +227,6 @@ struct global_data { */ const void *fdt_blob; /** - * @new_fdt: relocated device tree - */ - void *new_fdt; - /** * @fdt_size: space reserved for relocated device space */ unsigned long fdt_size; diff --git a/include/board_f.h b/include/board_f.h new file mode 100644 index 00000000000..74fca6df75c --- /dev/null +++ b/include/board_f.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2024 Google LLC + * Written by: Simon Glass <sjg@chromeium.org> + */ + +#ifndef __BOARD_F +#define __BOARD_F + +/** + * struct board_f: Information used only before relocation + * + * This struct is set up in board_init_f() and used to deal with relocation. It + * is not available after relocation. + */ +struct board_f { + /** + * @new_fdt: relocated device tree + */ + void *new_fdt; +}; + +#endif diff --git a/test/cmd/bdinfo.c b/test/cmd/bdinfo.c index 027848c3e24..60adc4aa960 100644 --- a/test/cmd/bdinfo.c +++ b/test/cmd/bdinfo.c @@ -185,8 +185,6 @@ static int bdinfo_test_all(struct unit_test_state *uts) ut_assert(map_to_sysmem(gd->fdt_blob) == env_get_hex("fdtcontroladdr", 0x1234)); ut_assertok(test_num_l(uts, "fdt_blob", (ulong)map_to_sysmem(gd->fdt_blob))); - ut_assertok(test_num_l(uts, "new_fdt", - (ulong)map_to_sysmem(gd->new_fdt))); ut_assertok(test_num_l(uts, "fdt_size", (ulong)gd->fdt_size)); if (IS_ENABLED(CONFIG_VIDEO)) |