[PATCH 5/9] fdt: Correct condition for bloblist existing

Simon Glass sjg at chromium.org
Tue Jun 11 12:54:10 CEST 2024


Hi Raymond,

On Mon, 10 Jun 2024 at 13:13, Raymond Mao <raymond.mao at linaro.org> wrote:
>
> Hi Simon,
>
> On Tue, 4 Jun 2024 at 23:27, Simon Glass <sjg at 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 at 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
>
> I am a bit confused by this comment - It means you will not use OF_BLOBLIST,
> but actually you are using it below. Is it a typo?

Basically it would be cleaner to have a separate, phase-specific
Kconfig control as to whether the DT can come from the bloblist (I
can't remember the Kconfig name I suggested, nor the patch as it was
last year sometime). But for now I am adding this hack to get a few
boards working again.

>
>>
>> +        * 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))) {
>>                 ret = bloblist_maybe_init();
>>                 if (!ret) {
>>                         gd->fdt_blob = bloblist_find(BLOBLISTT_CONTROL_FDT, 0);
>> --
>> 2.34.1
>>
>
> Regards,
> Raymond

Regards,
Simon


More information about the U-Boot mailing list