[U-Boot] [PATCH 046/126] spl: Allow distinguishing between two phases in U-Boot

Simon Glass sjg at chromium.org
Wed Sep 25 14:56:30 UTC 2019


U-Boot has two distinct phases: before and after relocation. These are
commonly referred to as F (running from Flash) and R (Relocated and
running from RAM). Some drivers want to do different things in these
phases so update the SPL phase function to return a different value for
each.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 include/spl.h | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/include/spl.h b/include/spl.h
index 2869c9dc702..1ba90c36def 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -50,9 +50,10 @@ static inline bool u_boot_first_phase(void)
 }
 
 enum u_boot_phase {
-	PHASE_TPL,
-	PHASE_SPL,
-	PHASE_U_BOOT,
+	PHASE_TPL,	/* Running in TPL */
+	PHASE_SPL,	/* Running in SPL */
+	PHASE_BOARD_F,	/* Running in U-Boot before relocation */
+	PHASE_BOARD_R,	/* Running in U-Boot after relocation */
 };
 
 /**
@@ -92,7 +93,7 @@ enum u_boot_phase {
  *
  * but with this you can use:
  *
- *    if (spl_phase() == PHASE_U_BOOT) {
+ *    if (spl_phase() == PHASE_BOARD_F) {
  *       ...
  *    }
  *
@@ -105,7 +106,12 @@ static inline enum u_boot_phase spl_phase(void)
 #elif CONFIG_SPL_BUILD
 	return PHASE_SPL;
 #else
-	return PHASE_U_BOOT;
+	DECLARE_GLOBAL_DATA_PTR;
+
+	if (!(gd->flags & GD_FLG_RELOC))
+		return PHASE_BOARD_F;
+	else
+		return PHASE_BOARD_R;
 #endif
 }
 
-- 
2.23.0.444.g18eeb5a265-goog



More information about the U-Boot mailing list