spl: Add functions for next and previous phase
It is useful to be able to figure out which phase we are loading next and which phase we came from. Add some functions to handle this as well as returning the name of a phase. This allows messages like "Booting to x" where x is the next phase. At present, TPL says 'Jumping to U-Boot' at the end, when in fact it is jumping to SPL. This is confusing, so use the new functions to correct this. Tests for this will come with an upcoming minor SPL test refactor. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
040fad3791
commit
09d9ba9097
@ -734,7 +734,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
|
||||
debug("Failed to stash bootstage: err=%d\n", ret);
|
||||
#endif
|
||||
|
||||
debug("loaded - jumping to U-Boot...\n");
|
||||
debug("loaded - jumping to %s...\n", spl_phase_name(spl_next_phase()));
|
||||
spl_board_prepare_for_boot();
|
||||
jump_to_image_no_args(&spl_image);
|
||||
}
|
||||
|
@ -58,6 +58,7 @@ static inline bool u_boot_first_phase(void)
|
||||
}
|
||||
|
||||
enum u_boot_phase {
|
||||
PHASE_NONE, /* Invalid phase, signifying before U-Boot */
|
||||
PHASE_TPL, /* Running in TPL */
|
||||
PHASE_SPL, /* Running in SPL */
|
||||
PHASE_BOARD_F, /* Running in U-Boot before relocation */
|
||||
@ -123,6 +124,58 @@ static inline enum u_boot_phase spl_phase(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* spl_prev_phase() - Figure out the previous U-Boot phase
|
||||
*
|
||||
* @return the previous phase from this one, e.g. if called in SPL this returns
|
||||
* PHASE_TPL, if TPL is enabled
|
||||
*/
|
||||
static inline enum u_boot_phase spl_prev_phase(void)
|
||||
{
|
||||
#ifdef CONFIG_TPL_BUILD
|
||||
return PHASE_NONE;
|
||||
#elif defined(CONFIG_SPL_BUILD)
|
||||
return IS_ENABLED(CONFIG_TPL) ? PHASE_TPL : PHASE_NONE;
|
||||
#else
|
||||
return IS_ENABLED(CONFIG_SPL) ? PHASE_SPL : PHASE_NONE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* spl_next_phase() - Figure out the next U-Boot phase
|
||||
*
|
||||
* @return the next phase from this one, e.g. if called in TPL this returns
|
||||
* PHASE_SPL
|
||||
*/
|
||||
static inline enum u_boot_phase spl_next_phase(void)
|
||||
{
|
||||
#ifdef CONFIG_TPL_BUILD
|
||||
return PHASE_SPL;
|
||||
#else
|
||||
return PHASE_BOARD_F;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* spl_phase_name() - Get the name of the current phase
|
||||
*
|
||||
* @return phase name
|
||||
*/
|
||||
static inline const char *spl_phase_name(enum u_boot_phase phase)
|
||||
{
|
||||
switch (phase) {
|
||||
case PHASE_TPL:
|
||||
return "TPL";
|
||||
case PHASE_SPL:
|
||||
return "SPL";
|
||||
case PHASE_BOARD_F:
|
||||
case PHASE_BOARD_R:
|
||||
return "U-Boot";
|
||||
default:
|
||||
return "phase?";
|
||||
}
|
||||
}
|
||||
|
||||
/* A string name for SPL or TPL */
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
# ifdef CONFIG_TPL_BUILD
|
||||
|
Loading…
Reference in New Issue
Block a user