[U-Boot] [PATCH v3 1/4] rpi: push fw_dtb_pointer in the .data section

Matthias Brugger mbrugger at suse.com
Tue Nov 12 12:50:47 UTC 2019



On 12/11/2019 13:20, Alexander Graf wrote:
> 
> On 12.11.19 13:00, matthias.bgg at kernel.org wrote:
>> From: Matthias Brugger <mbrugger at suse.com>
>>
>> The fw_dtb_pointer was defined in the assembly code, which makes him
>> live in section .text_rest
>> Put that's not necessary, we can push the variable in the .data section.
>>
>> This will prevent relocation errors like:
>> board/raspberrypi/rpi/rpi.c:317:(.text.board_get_usable_ram_top+0x8):
>> relocation truncated to fit: R_AARCH64_LDST64_ABS_LO12_NC against symbol
>> `fw_dtb_pointer' defined in .text section in board/raspberrypi/rpi/built-in.o
>>
>> Signed-off-by: Matthias Brugger <mbrugger at suse.com>
>>
>> ---
>>
>> Changes in v3:
>> - fix armv7 build
>>
>> Changes in v2:
>> - push fw_dtb_pointer into the .data section
>>
>>   board/raspberrypi/rpi/lowlevel_init.S | 12 ++----------
>>   board/raspberrypi/rpi/rpi.c           |  4 ++--
>>   2 files changed, 4 insertions(+), 12 deletions(-)
>>
>> diff --git a/board/raspberrypi/rpi/lowlevel_init.S
>> b/board/raspberrypi/rpi/lowlevel_init.S
>> index 435eed521f..8c39b3e12e 100644
>> --- a/board/raspberrypi/rpi/lowlevel_init.S
>> +++ b/board/raspberrypi/rpi/lowlevel_init.S
>> @@ -6,15 +6,6 @@
>>     #include <config.h>
>>   -.align 8
>> -.global fw_dtb_pointer
>> -fw_dtb_pointer:
>> -#ifdef CONFIG_ARM64
>> -    .dword 0x0
>> -#else
>> -    .word 0x0
>> -#endif
>> -
>>   /*
>>    * Routine: save_boot_params (called after reset from start.S)
>>    * Description: save ATAG/FDT address provided by the firmware at boot time
>> @@ -28,7 +19,8 @@ save_boot_params:
>>       adr    x8, fw_dtb_pointer
>>       str    x0, [x8]
>>   #else
>> -    str    r2, fw_dtb_pointer
>> +    ldr    r8, =fw_dtb_pointer
>> +    str    r2, [r8]
>>   #endif
>>         /* Returns */
>> diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
>> index 9e0abdda31..0e05d59e1f 100644
>> --- a/board/raspberrypi/rpi/rpi.c
>> +++ b/board/raspberrypi/rpi/rpi.c
>> @@ -27,8 +27,8 @@
>>     DECLARE_GLOBAL_DATA_PTR;
>>   -/* From lowlevel_init.S */
>> -extern unsigned long fw_dtb_pointer;
>> +/* Assigned in lowlevel_init.S */
>> +unsigned long fw_dtb_pointer = 0x1;
> 
> 
> I assume you assign the 0x1 here so that it doesn't land in .bss which may get
> cleared after you wrote it? If so, please document that in the comment. Also

Yes exactly.

> even better yet, document it in a comment and just manually assign the variable
> to the ".data" section using
> 
>   __attribute__((section(".data")))
> 

Agree that's a cleaner approach then adding any random value to the pointer.

Regards,
Matthias


More information about the U-Boot mailing list