spl: Add a function to determine the U-Boot phase

U-Boot is built in three phases: TPL, SPL and U-Boot proper. Sometimes
it is necessary to use different init code depending on the phase. For
example, TPL might do very basic CPU init, SPL might do a little more
and U-Boot proper might bring the CPU up to full speed and enable all
cores.

Add a function which allows easy determination of the current phase being
built.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2019-09-25 08:11:20 -06:00 committed by Bin Meng
parent 3cd7198153
commit 8e83b76df4

View file

@ -49,6 +49,66 @@ static inline bool u_boot_first_phase(void)
return false;
}
enum u_boot_phase {
PHASE_TPL,
PHASE_SPL,
PHASE_U_BOOT,
};
/**
* spl_phase() - Find out the phase of U-Boot
*
* This can be used to avoid #ifdef logic and use if() instead.
*
* For example, to include code only in TPL, you might do:
*
* #ifdef CONFIG_TPL_BUILD
* ...
* #endif
*
* but with this you can use:
*
* if (spl_phase() == PHASE_TPL) {
* ...
* }
*
* To include code only in SPL, you might do:
*
* #if defined(CONFIG_SPL_BUILD) && !defined(CONFIG_TPL_BUILD)
* ...
* #endif
*
* but with this you can use:
*
* if (spl_phase() == PHASE_SPL) {
* ...
* }
*
* To include code only in U-Boot proper, you might do:
*
* #ifndef CONFIG_SPL_BUILD
* ...
* #endif
*
* but with this you can use:
*
* if (spl_phase() == PHASE_U_BOOT) {
* ...
* }
*
* @return U-Boot phase
*/
static inline enum u_boot_phase spl_phase(void)
{
#ifdef CONFIG_TPL_BUILD
return PHASE_TPL;
#elif CONFIG_SPL_BUILD
return PHASE_SPL;
#else
return PHASE_U_BOOT;
#endif
}
/* A string name for SPL or TPL */
#ifdef CONFIG_SPL_BUILD
# ifdef CONFIG_TPL_BUILD