bootstage: Convert to use malloc()

At present bootstage uses the data section of the image to store its
information. There are a few problems with this:

- It does not work on all boards (e.g. those which run from flash before
relocation)
- Allocated strings still point back to the pre-relocation data after
relocation

Now that U-Boot has a pre-relocation malloc() we can use this instead,
with a pointer to the data in global_data. Update bootstage to do this and
set up an init routine to allocate the memory.

Now that we have a real init function, we can drop the fake 'reset' record
and add a normal one instead.

Note that part of the problem with allocated strings remains. They are
reallocated but this will only work where pre-relocation memory is
accessible after relocation.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2017-05-22 05:05:25 -06:00
committed by Tom Rini
parent 5a0e275cbb
commit b383d6c05e
4 changed files with 79 additions and 33 deletions

View File

@ -673,8 +673,14 @@ static int jump_to_copy(void)
#endif
/* Record the board_init_f() bootstage (after arch_cpu_init()) */
static int mark_bootstage(void)
static int initf_bootstage(void)
{
int ret;
ret = bootstage_init(true);
if (ret)
return ret;
bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_F, "board_init_f");
return 0;
@ -735,7 +741,7 @@ static const init_fnc_t init_sequence_f[] = {
mach_cpu_init, /* SoC/machine dependent CPU setup */
initf_dm,
arch_cpu_init_dm,
mark_bootstage, /* need timer, go after init dm */
initf_bootstage, /* need timer, go after init dm */
#if defined(CONFIG_BOARD_EARLY_INIT_F)
board_early_init_f,
#endif