diff options
author | Simon Glass <sjg@chromium.org> | 2022-01-12 19:26:22 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2022-01-13 09:13:41 -0700 |
commit | 99047f5d7f9cb013f7040edd7d20a70cc30646b5 (patch) | |
tree | 8ac10ebed8cff29c9826885294667b76924e6022 /common/bloblist.c | |
parent | 5938d654dec74ba42ab06f06d6e0c89b006099b8 (diff) | |
download | u-boot-99047f5d7f9cb013f7040edd7d20a70cc30646b5.tar.gz |
bloblist: Refactor Kconfig to support alloc or fixed
At present we do support allocating the bloblist but the Kconfig is a bit
strange, since we still have to specify an address in that case. Partly
this is because it is a pain to have CONFIG options that disappears when
its dependency is enabled. It means that we must have #ifdefs in the code,
either in the C code or header file.
Make use of IF_ENABLED_INT() and its friend to solve that problem, so we
can separate out the location of bloblist into a choice. Put the address
and size into variables so we can log the result.
Add the options for SPL as well, so we can use CONFIG_IS_ENABLED().
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common/bloblist.c')
-rw-r--r-- | common/bloblist.c | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/common/bloblist.c b/common/bloblist.c index b5fea12b69..0049bb9a39 100644 --- a/common/bloblist.c +++ b/common/bloblist.c @@ -4,6 +4,7 @@ * Written by Simon Glass <sjg@chromium.org> */ +#define LOG_DEBUG #define LOG_CATEGORY LOGC_BLOBLIST #include <common.h> @@ -360,6 +361,8 @@ int bloblist_finish(void) struct bloblist_hdr *hdr = gd->bloblist; hdr->chksum = bloblist_calc_chksum(hdr); + log_debug("Finished bloblist size %lx at %lx\n", (ulong)hdr->size, + (ulong)map_to_sysmem(hdr)); return 0; } @@ -415,8 +418,9 @@ void bloblist_reloc(void *to, uint to_size, void *from, uint from_size) int bloblist_init(void) { - bool expected; int ret = -ENOENT; + ulong addr, size; + bool expected; /** * Wed expect to find an existing bloblist in the first phase of U-Boot @@ -425,27 +429,32 @@ int bloblist_init(void) expected = !u_boot_first_phase(); if (spl_prev_phase() == PHASE_TPL && !IS_ENABLED(CONFIG_TPL_BLOBLIST)) expected = false; - if (expected) - ret = bloblist_check(CONFIG_BLOBLIST_ADDR, - CONFIG_BLOBLIST_SIZE); + addr = bloblist_addr(); + size = CONFIG_BLOBLIST_SIZE; + if (expected) { + ret = bloblist_check(addr, 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->size; + } + } if (ret) { - ulong addr; - - log(LOGC_BLOBLIST, expected ? LOGL_WARNING : LOGL_DEBUG, - "Existing bloblist not found: creating new bloblist\n"); - if (IS_ENABLED(CONFIG_BLOBLIST_ALLOC)) { - void *ptr = memalign(BLOBLIST_ALIGN, - CONFIG_BLOBLIST_SIZE); + if (CONFIG_IS_ENABLED(BLOBLIST_ALLOC)) { + void *ptr = memalign(BLOBLIST_ALIGN, size); if (!ptr) return log_msg_ret("alloc", -ENOMEM); addr = map_to_sysmem(ptr); - } else { - addr = CONFIG_BLOBLIST_ADDR; } - ret = bloblist_new(addr, CONFIG_BLOBLIST_SIZE, 0); + log_debug("Creating new bloblist size %lx at %lx\n", size, + addr); + ret = bloblist_new(addr, size, 0); } else { - log_debug("Found existing bloblist\n"); + log_debug("Found existing bloblist size %lx at %lx\n", size, + addr); } return ret; |