Provide a function to locate this information, rather than doing it
automatically on startup, to save space in global_data.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 arch/x86/cpu/intel_common/cpu_from_spl.c |  4 +---
 arch/x86/lib/fsp2/fsp_dram.c             |  4 ++--
 cmd/sb.c                                 |  6 ++++--
 common/board_f.c                         | 12 ------------
 common/init/handoff.c                    | 12 ++++++++++++
 drivers/clk/rockchip/clk_rk3399.c        |  3 ++-
 include/asm-generic/global_data.h        |  6 ------
 include/handoff.h                        |  7 +++++++
 8 files changed, 28 insertions(+), 26 deletions(-)

diff --git a/arch/x86/cpu/intel_common/cpu_from_spl.c 
b/arch/x86/cpu/intel_common/cpu_from_spl.c
index 48b2ef253cb..5aad2ae7309 100644
--- a/arch/x86/cpu/intel_common/cpu_from_spl.c
+++ b/arch/x86/cpu/intel_common/cpu_from_spl.c
@@ -24,9 +24,7 @@ int arch_cpu_init(void)
        int ret;
 
 #if CONFIG_IS_ENABLED(HANDOFF) && IS_ENABLED(CONFIG_USE_HOB)
-       struct spl_handoff *ho = gd->spl_handoff;
-
-       gd->arch.hob_list = ho->arch.hob_list;
+       gd->arch.hob_list = handoff_get();
 #endif
        ret = x86_cpu_reinit_f();
 
diff --git a/arch/x86/lib/fsp2/fsp_dram.c b/arch/x86/lib/fsp2/fsp_dram.c
index 83c6d7bcc93..a50dc985a3c 100644
--- a/arch/x86/lib/fsp2/fsp_dram.c
+++ b/arch/x86/lib/fsp2/fsp_dram.c
@@ -59,7 +59,7 @@ int dram_init(void)
 #endif
        } else {
 #if CONFIG_IS_ENABLED(HANDOFF)
-               struct spl_handoff *ho = gd->spl_handoff;
+               struct spl_handoff *ho = handoff_get();
 
                if (!ho) {
                        log_debug("No SPL handoff found\n");
@@ -82,7 +82,7 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
                return gd->ram_size;
 
 #if CONFIG_IS_ENABLED(HANDOFF)
-       struct spl_handoff *ho = gd->spl_handoff;
+       struct spl_handoff *ho = handoff_get();
 
        log_debug("usable_ram_top = %lx\n", ho->arch.usable_ram_top);
 
diff --git a/cmd/sb.c b/cmd/sb.c
index 1aa5921f03e..db485fddfca 100644
--- a/cmd/sb.c
+++ b/cmd/sb.c
@@ -14,8 +14,10 @@ static int do_sb_handoff(struct cmd_tbl *cmdtp, int flag, 
int argc,
                         char *const argv[])
 {
 #if CONFIG_IS_ENABLED(HANDOFF)
-       if (gd->spl_handoff)
-               printf("SPL handoff magic %lx\n", gd->spl_handoff->arch.magic);
+       struct spl_handoff *handoff = handoff_get();
+
+       if (handoff)
+               printf("SPL handoff magic %lx\n", handoff->arch.magic);
        else
                printf("SPL handoff info not received\n");
 
diff --git a/common/board_f.c b/common/board_f.c
index 1e698d31841..c99b573bc17 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -304,17 +304,6 @@ static int setup_mon_len(void)
        return 0;
 }
 
-static int setup_spl_handoff(void)
-{
-#if CONFIG_IS_ENABLED(HANDOFF)
-       gd->spl_handoff = bloblist_find(BLOBLISTT_U_BOOT_SPL_HANDOFF,
-                                       sizeof(struct spl_handoff));
-       debug("Found SPL hand-off info %p\n", gd->spl_handoff);
-#endif
-
-       return 0;
-}
-
 __weak int arch_cpu_init(void)
 {
        return 0;
@@ -876,7 +865,6 @@ static const init_fnc_t init_sequence_f[] = {
        initf_bootstage,        /* uses its own timer, so does not need DM */
        event_init,
        bloblist_maybe_init,
-       setup_spl_handoff,
 #if defined(CONFIG_CONSOLE_RECORD_INIT_F)
        console_record_init,
 #endif
diff --git a/common/init/handoff.c b/common/init/handoff.c
index a7cd065fb38..86c020ee0b9 100644
--- a/common/init/handoff.c
+++ b/common/init/handoff.c
@@ -5,6 +5,7 @@
  * Copyright 2018 Google, Inc
  */
 
+#include <bloblist.h>
 #include <handoff.h>
 #include <asm/global_data.h>
 
@@ -38,3 +39,14 @@ void handoff_load_dram_banks(struct spl_handoff *ho)
                bd->bi_dram[i].size = ho->ram_bank[i].size;
        }
 }
+
+struct spl_handoff *handoff_get(void)
+{
+       struct spl_handoff *handoff;
+
+       handoff = bloblist_find(BLOBLISTT_U_BOOT_SPL_HANDOFF,
+                               sizeof(struct spl_handoff));
+       debug("Found SPL hand-off info %p\n", handoff);
+
+       return handoff;
+}
diff --git a/drivers/clk/rockchip/clk_rk3399.c 
b/drivers/clk/rockchip/clk_rk3399.c
index 24cefebd1b2..89924041299 100644
--- a/drivers/clk/rockchip/clk_rk3399.c
+++ b/drivers/clk/rockchip/clk_rk3399.c
@@ -8,6 +8,7 @@
 #include <dm.h>
 #include <dt-structs.h>
 #include <errno.h>
+#include <handoff.h>
 #include <log.h>
 #include <malloc.h>
 #include <mapmem.h>
@@ -1467,7 +1468,7 @@ static int rk3399_clk_probe(struct udevice *dev)
        init_clocks = true;
 #elif CONFIG_IS_ENABLED(HANDOFF)
        if (!(gd->flags & GD_FLG_RELOC)) {
-               if (!(gd->spl_handoff))
+               if (!handoff_get())
                        init_clocks = true;
        }
 #endif
diff --git a/include/asm-generic/global_data.h 
b/include/asm-generic/global_data.h
index a23925ba9b3..1331686066c 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -395,12 +395,6 @@ struct global_data {
         */
        struct bloblist_hdr *bloblist;
 #endif
-#if CONFIG_IS_ENABLED(HANDOFF)
-       /**
-        * @spl_handoff: SPL hand-off information
-        */
-       struct spl_handoff *spl_handoff;
-#endif
 #if defined(CONFIG_TRANSLATION_OFFSET)
        /**
         * @translation_offset: optional translation offset
diff --git a/include/handoff.h b/include/handoff.h
index c0ae7b19a75..0072ea832f8 100644
--- a/include/handoff.h
+++ b/include/handoff.h
@@ -31,6 +31,13 @@ void handoff_save_dram(struct spl_handoff *ho);
 void handoff_load_dram_size(struct spl_handoff *ho);
 void handoff_load_dram_banks(struct spl_handoff *ho);
 
+/**
+ * handoff_get() - Get the SPL handoff information
+ *
+ * Return: Pointer to SPL handoff if received, else NULL
+ */
+struct spl_handoff *handoff_get(void);
+
 /**
  * handoff_arch_save() - Save arch-specific info into the handoff area
  *
-- 
2.34.1

Reply via email to