[U-Boot] [PATCH] board_f: Do not mark pre-relocated fdt space as reserved
Lokesh Vutla
lokeshvutla at ti.com
Fri May 3 14:24:09 UTC 2019
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?
Thanks and regards,
Lokesh
More information about the U-Boot
mailing list