[U-Boot] [PATCH] board_f: Do not mark pre-relocated fdt space as reserved
Simon Goldschmidt
simon.k.r.goldschmidt at gmail.com
Fri May 3 18:45:22 UTC 2019
Hi Lokesh,
On 03.05.19 16:24, Lokesh Vutla wrote:
> Simon,
>
> On 22/04/19 8:15 PM, Tom Rini wrote:
>> On Thu, Apr 18, 2019 at 08:23:45AM +0200, Simon Goldschmidt wrote:
>>> On Thu, Apr 18, 2019 at 8:12 AM Lokesh Vutla <lokeshvutla at ti.com> wrote:
>>>>
>>>>
>>>>
>>>> On 18/04/19 12:46 AM, Simon Goldschmidt wrote:
>>>>> [This is a follow-up to https://patchwork.ozlabs.org/patch/1033584/ right?]
>>>>
>>>> Right.
>>>>
>>>>>
>>>>> Am 16.04.2019 um 10:43 schrieb Lokesh Vutla:
>>>>>> SPL while copying u-boot and dtb it does the following:
>>>>>> - Copy u-boot
>>>>>> - Copy right dtb.
>>>>>> - mark dtb location as reserved in dtb.
>>>>>
>>>>> Hmm, why does it do that? Reserving space when U-Boot starts Linux *might* make
>>>>> sense, but why should SPL add this reservation when starting U-Boot? These steps
>>>>> are for U-Boot in a fit-image, right? Because I can't see this for U-Boot as
>>>>> uImage.
>>>>>
>>>>> Am I correct that 'fdt_shrink_to_minimum()' adds this reservation? The name of
>>>>> that function doesn't suggest that to me. Would it make more sense to let this
>>>>> funtion only *change* the reservation, i.e. only add it if it is removed at the
>>>>> beginning of said function? Would that fix your issue?
>>>>>
>>>>> Something like this:
>>>>>
>>>>> diff --git a/common/fdt_support.c b/common/fdt_support.c
>>>>> index ab08a0114f..4e7cf6ebe9 100644
>>>>> --- a/common/fdt_support.c
>>>>> +++ b/common/fdt_support.c
>>>>> @@ -597,6 +597,7 @@ int fdt_shrink_to_minimum(void *blob, uint extrasize)
>>>>> uint64_t addr, size;
>>>>> int total, ret;
>>>>> uint actualsize;
>>>>> + int fdt_memrsv = 0;
>>>>>
>>>>> if (!blob)
>>>>> return 0;
>>>>> @@ -606,6 +607,7 @@ int fdt_shrink_to_minimum(void *blob, uint extrasize)
>>>>> fdt_get_mem_rsv(blob, i, &addr, &size);
>>>>> if (addr == (uintptr_t)blob) {
>>>>> fdt_del_mem_rsv(blob, i);
>>>>> + fdt_memrsv = 1;
>>>>> break;
>>>>> }
>>>>> }
>>>>> @@ -627,10 +629,12 @@ int fdt_shrink_to_minimum(void *blob, uint extrasize)
>>>>> /* Change the fdt header to reflect the correct size */
>>>>> fdt_set_totalsize(blob, actualsize);
>>>>>
>>>>> - /* Add the new reservation */
>>>>> - ret = fdt_add_mem_rsv(blob, map_to_sysmem(blob), actualsize);
>>>>> - if (ret < 0)
>>>>> - return ret;
>>>>> + if (fdt_memrsv) {
>>>>> + /* Add the new reservation */
>>>>> + ret = fdt_add_mem_rsv(blob, map_to_sysmem(blob), actualsize);
>>>>> + if (ret < 0)
>>>>> + return ret;
>>>>> + }
>>>>
>>>> Agreed. This works and more appropriate place to fix it. Will you post a
>>>> separate patch or do you want me to post it on your behalf?
>>>
>>> While it's good to know this fixes your issue, I'm not sure this doesn't break
>>> anything else.
>>>
>>> Tom, Simon, can you add anything here? Why is the dtb memory added as
>>> reserved to itself? It seems to me this is redundant, as the code using the
>>> dtb should well know the pointer to it...
>>>
>>> Lokesh, I can send a patch once this is discussed.
>>
>> OK, so the history of that call is really what's seen in:
>> commit 41c5eaa7253ed82bbae1eda5667755872c615164
>> Author: Andy Fleming <afleming at freescale.com>
>> Date: Mon Jun 16 13:58:56 2008 -0500
>>
>> Resize device tree to allow space for board changes and the chosen node
>>
>> Current code requires that a compiled device tree have space added to the end to
>> leave room for extra nodes added by board code (and the chosen node). This
>> requires that device tree creators anticipate how much space U-Boot will add to
>> the tree, which is absurd. Ideally, the code would resize and/or relocate the
>> tree when it needed more space, but this would require a systemic change to the
>> fdt code, which is non-trivial. Instead, we resize the tree inside
>> boot_relocate_fdt, reserving either the remainder of the bootmap (in the case
>> where the fdt is inside the bootmap), or adding CFG_FDT_PAD bytes to the size.
>>
>> Signed-off-by: Andy Fleming <afleming at freescale.com>
>>
>> Which is all about preparing things for passing the device tree we
>> loaded specifically for Linux. In:
>> commit 3082d2348c8e13342f5fdd10e9b3f7408062dbf9
>> Author: Kumar Gala <galak at kernel.crashing.org>
>> Date: Fri Aug 15 08:24:42 2008 -0500
>>
>> fdt: refactor fdt resize code
>>
>> Move the fdt resizing code out of ppc specific boot code and into
>> common fdt support code.
>>
>> Signed-off-by: Kumar Gala <galak at kernel.crashing.org>
>>
>> The code was moved to a more common area. So the intent on "reserve"
>> was to make sure that we had enough space set aside for the dtb to be
>> able to be updated at runtime, by U-Boot, for various needs and that we
>> wouldn't give that memory away to something else / allow it to be
>> clobbered.
>>
>
> Any update on this? Any chance you will be posting your changes?
No, sorry, not update. I'll send the patch I suggested above and we'll
see how the discussion continues.
Regards,
Simon
More information about the U-Boot
mailing list