rpi: push fw_dtb_pointer in the .data section
authorMatthias Brugger <mbrugger@suse.com>
Tue, 19 Nov 2019 15:01:02 +0000 (16:01 +0100)
committerMatthias Brugger <mbrugger@suse.com>
Sun, 24 Nov 2019 09:46:27 +0000 (10:46 +0100)
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@suse.com>
board/raspberrypi/rpi/lowlevel_init.S
board/raspberrypi/rpi/rpi.c

index 435eed521f62ad40ef68ffd8785e4da4f58590dd..8c39b3e12e8050feee42e512cfbb912b487dc6ad 100644 (file)
@@ -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 */
index 9e0abdda3190c647161265e392f85ec08be807ec..e84a1db14a14c484ef3f889a3eb713526417fcad 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-/* From lowlevel_init.S */
-extern unsigned long fw_dtb_pointer;
+/* Assigned in lowlevel_init.S
+ * Push the variable into the .data section so that it
+ * does not get cleared later.
+ */
+unsigned long __section(".data") fw_dtb_pointer;
 
 /* TODO(sjg@chromium.org): Move these to the msg.c file */
 struct msg_get_arm_mem {