[PATCH] common: Add Kconfig option for FDT mem alignment
Michal Simek
michal.simek at xilinx.com
Fri Apr 17 08:49:11 CEST 2020
On 16. 04. 20 19:21, Stephen Warren wrote:
> On 4/16/20 11:06 AM, Tom Rini wrote:
>> On Thu, Apr 16, 2020 at 05:47:41PM +0200, Michal Simek wrote:
>>> On 16. 04. 20 17:39, Tom Rini wrote:
>>>> On Mon, Apr 13, 2020 at 10:03:04AM +0200, Michal Simek wrote:
>>>>
>>>>> From: Ashok Reddy Soma <ashok.reddy.soma at xilinx.com>
>>>>>
>>>>> FDT memory is aligned by 4KB. This is hardcoded in common/board_f.c.
>>>>> Add Kconfig option, assign default value of 0x1000 and enable option to
>>>>> change this value.
>>>>>
>>>>> Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma at xilinx.com>
>>>>> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
>>>>> ---
>>>>>
>>>>> common/board_f.c | 3 ++-
>>>>> dts/Kconfig | 7 +++++++
>>>>> 2 files changed, 9 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/common/board_f.c b/common/board_f.c
>>>>> index 82a164752aa3..928874e03555 100644
>>>>> --- a/common/board_f.c
>>>>> +++ b/common/board_f.c
>>>>> @@ -546,7 +546,8 @@ static int reserve_fdt(void)
>>>>> * will be relocated with other data.
>>>>> */
>>>>> if (gd->fdt_blob) {
>>>>> - gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob) + 0x1000, 32);
>>>>> + gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob) +
>>>>> + CONFIG_FDT_MEM_ALIGN_SIZE, 32);
>>>>>
>>>>> gd->start_addr_sp -= gd->fdt_size;
>>>>> gd->new_fdt = map_sysmem(gd->start_addr_sp, gd->fdt_size);
>>>>> diff --git a/dts/Kconfig b/dts/Kconfig
>>>>> index 046a54a17366..696c0b71afaf 100644
>>>>> --- a/dts/Kconfig
>>>>> +++ b/dts/Kconfig
>>>>> @@ -121,6 +121,13 @@ config DEFAULT_DEVICE_TREE
>>>>> It can be overridden from the command line:
>>>>> $ make DEVICE_TREE=<device-tree-name>
>>>>>
>>>>> +config FDT_MEM_ALIGN_SIZE
>>>>> + hex "FDT memory alignment size"
>>>>> + default 0x1000
>>>>> + help
>>>>> + This option is used to set the default alignment when reserving memory
>>>>> + for fdt.
>>>>
>>>> I'm not sure this is clear enough of a description. At first I thought
>>>> this was about where the start address needs to be, and that is 8 bytes
>>>> and non-configurable (both arm32 and arm64 require 64bit aligned). What
>>>> I don't see is where the size of the overall blob needs to be aligned.
>>>> We need to point at that requirement somewhere in the help so that we
>>>> don't have people using bad values and then working around it without
>>>> realizing the problem. Thanks!
>>>
>>> Definitely description should be better as we agreed in second review.
>>> But the point is do we really need such a big FDT alignment here?
>>> It was added by Simon long time ago without any explanation as the part
>>> of bigger patch.
>>> But are we allowing resizing FDT that we need additional "4k" alignment?
>>
>> So, I stumbled on an even older thread asking about this where it seems
>> like part of the reason we do something here is so that there's room to
>> add bootargs, etc to /chosen. The start address must be 64bit-aligned,
>> but the size seems like it just needs to be big enough for everything we
>> could have in it, and at this point in the code we don't know just how
>> much that is?
>
> Adding space for DT modifications certainly makes sense. This isn't
> alignment though, it's just adding space.
yes but 4k additional space pointed by $fdtcontroladdr.
As Heinrich pointed out UEFI is doing own copy.
I tried to run booti 80000 - $fdtcontroladdr (bootm should be the same)
and DT is copied to different location anyway (based on fdt_high) which
is reported by
"Loading Device Tree to 000000000fff3000, end 000000000fffffff ... OK"
And on this copy image_setup_libfdt() is called.
And 4k is not enough for playing games with DT overlays anyway.
That's why my question remains. Do we use this additional 4k space in GD
structure for any purpose?
>
> Looking back at the original patch, there was no change to alignment of
> the start or end of the DT, just the ability to configure the amount of
> extra space added to the DT. Nothing should refer to that as alignment,
> since it's not.
That description will be fixed when we finish this discussion.
Thanks,
Michal
More information about the U-Boot
mailing list