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 <s...@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

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to