
Hi Ilias,
On Tue, 4 Jun 2024 at 23:33, Ilias Apalodimas ilias.apalodimas@linaro.org wrote:
Hi Simon,
On Wed, 5 Jun 2024 at 06:26, Simon Glass sjg@chromium.org wrote:
On some boards, the bloblist is created in SPL once SDRAM is ready. It cannot be accessed until that point, so is not available early in SPL.
Add a condition to avoid a hang in this case.
This fixes a hang in chromebook_coral
Fixes: 70fe2385943 ("fdt: Allow the devicetree to come from a bloblist")
Signed-off-by: Simon Glass sjg@chromium.org
lib/fdtdec.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/lib/fdtdec.c b/lib/fdtdec.c index b2c59ab3818..b141244e3b9 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -1669,8 +1669,16 @@ int fdtdec_setup(void) { int ret = -ENOENT;
/* If allowing a bloblist, check that first */
if (CONFIG_IS_ENABLED(BLOBLIST)) {
/*
* If allowing a bloblist, check that first. This would be better
* handled with an OF_BLOBLIST Kconfig, but that caused far too much
* argument, so add a hack here, used e.g. by chromebook_coral
* The necessary test is whether the previous stage passed a bloblist,
* not whether this one creates one.
*/
if (CONFIG_IS_ENABLED(OF_BLOBLIST) &&
(spl_prev_phase() != PHASE_TPL ||
!IS_ENABLED(CONFIG_TPL_BLOBLIST))) {
The same condition exists in common/bloblist.c. Carve out a function --e.g
bool can can_enable_bloblist(void) return ....
instead of open coding that
Unfortunately it looks like the conditions are different, with the one you mention being:
if (spl_prev_phase() == PHASE_TPL && !IS_ENABLED(CONFIG_TPL_BLOBLIST)) from_addr = false;
(is that the one you mean?)
So I don't think I can combine them into a helper function.
Regards, Simon