The logic of this has become too confusing.

The primary issue with the patch is that U-Boot needs to set up a
bloblist in the first phase where BLOBLIST is enabled. Subsequent
phases can then use that bloblist.

But the first phase of U-Boot cannot assume that one exists.

Reverting this commit seems like a better starting point for getting
things working for all use-cases.

Note: The work to tidy this up is apparently underway. For this series,
a revert is the easiest path.

This reverts commit 66131310d8ff1ba228f989b41bd8812f43be41c3.

https://lore.kernel.org/u-boot/CAPnjgZ3hMHtiH=f5zkxnniofv_-vfryq1gn7qz5hku8wjo8...@mail.gmail.com/

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

(no changes since v1)

 common/bloblist.c  | 64 ++++++++++++++--------------------------------
 include/bloblist.h | 10 --------
 2 files changed, 19 insertions(+), 55 deletions(-)

diff --git a/common/bloblist.c b/common/bloblist.c
index e8acfc74331..7eda94ecdf9 100644
--- a/common/bloblist.c
+++ b/common/bloblist.c
@@ -487,57 +487,37 @@ int bloblist_reloc(void *to, uint to_size)
        return 0;
 }
 
-/*
- * Weak default function for getting bloblist from boot args.
- */
-int __weak xferlist_from_boot_arg(ulong __always_unused addr,
-                                 ulong __always_unused size)
-{
-       return -ENOENT;
-}
-
 int bloblist_init(void)
 {
        bool fixed = IS_ENABLED(CONFIG_BLOBLIST_FIXED);
        int ret = -ENOENT;
-       ulong addr = 0, size;
-       /*
-        * If U-Boot is not in the first phase, an existing bloblist must be
-        * at a fixed address.
-        */
-       bool from_addr = fixed && !xpl_is_first_phase();
-       /*
-        * If U-Boot is in the first phase that an arch custom routine should
-        * install the bloblist passed from previous loader to this fixed
+       ulong addr, size;
+       bool expected;
+
+       /**
+        * We don't expect to find an existing bloblist in the first phase of
+        * U-Boot that runs. Also we have no way to receive the address of an
+        * allocated bloblist from a previous stage, so it must be at a fixed
         * address.
         */
-       bool from_boot_arg = fixed && xpl_is_first_phase();
-
+       expected = fixed && !xpl_is_first_phase();
        if (xpl_prev_phase() == PHASE_TPL && !IS_ENABLED(CONFIG_TPL_BLOBLIST))
-               from_addr = false;
+               expected = false;
        if (fixed)
                addr = IF_ENABLED_INT(CONFIG_BLOBLIST_FIXED,
                                      CONFIG_BLOBLIST_ADDR);
        size = CONFIG_BLOBLIST_SIZE;
-
-       if (from_boot_arg)
-               ret = xferlist_from_boot_arg(addr, size);
-       else if (from_addr)
+       if (expected) {
                ret = bloblist_check(addr, size);
-
-       if (ret)
-               log_warning("Bloblist at %lx not found (err=%d)\n",
-                           addr, ret);
-       else
-               /* Get the real size */
-               size = gd->bloblist->total_size;
-
+               if (ret) {
+                       log_warning("Expected bloblist at %lx not found 
(err=%d)\n",
+                                   addr, ret);
+               } else {
+                       /* Get the real size, if it is not what we expected */
+                       size = gd->bloblist->total_size;
+               }
+       }
        if (ret) {
-               /*
-                * If we don't have a bloblist from a fixed address, or the one
-                * in the fixed address is not valid. we must allocate the
-                * memory for it now.
-                */
                if (CONFIG_IS_ENABLED(BLOBLIST_ALLOC)) {
                        void *ptr = memalign(BLOBLIST_ALIGN, size);
 
@@ -545,8 +525,7 @@ int bloblist_init(void)
                                return log_msg_ret("alloc", -ENOMEM);
                        addr = map_to_sysmem(ptr);
                } else if (!fixed) {
-                       return log_msg_ret("BLOBLIST_FIXED is not enabled",
-                                          ret);
+                       return log_msg_ret("!fixed", ret);
                }
                log_debug("Creating new bloblist size %lx at %lx\n", size,
                          addr);
@@ -559,11 +538,6 @@ int bloblist_init(void)
                return log_msg_ret("ini", ret);
        gd->flags |= GD_FLG_BLOBLIST_READY;
 
-#ifdef DEBUG
-       bloblist_show_stats();
-       bloblist_show_list();
-#endif
-
        return 0;
 }
 
diff --git a/include/bloblist.h b/include/bloblist.h
index 1e1ca34aa92..5063ab66e4a 100644
--- a/include/bloblist.h
+++ b/include/bloblist.h
@@ -482,14 +482,4 @@ static inline int bloblist_maybe_init(void)
  */
 int bloblist_check_reg_conv(ulong rfdt, ulong rzero, ulong rsig);
 
-/**
- * xferlist_from_boot_arg() - Get bloblist from the boot args and relocate it
- *                           to the specified address.
- *
- * @addr: Address for the bloblist
- * @size: Size of space reserved for the bloblist
- * Return: 0 if OK, else on error
- */
-int xferlist_from_boot_arg(ulong addr, ulong size);
-
 #endif /* __BLOBLIST_H */
-- 
2.43.0

Reply via email to