armv8: layerscape: load function pointer using ADR
authorMichael Walle <michael@walle.cc>
Mon, 1 Jun 2020 19:53:28 +0000 (21:53 +0200)
committerPriyanka Jain <priyanka.jain@nxp.com>
Mon, 27 Jul 2020 08:46:27 +0000 (14:16 +0530)
Don't use LDR to load a pointer to a function. This will generate a
literal which cannot be relocated. Use ADR which is PC-relative and
therefore can easily be relocated.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
arch/arm/cpu/armv8/fsl-layerscape/spintable.S

index d71ec13..ac9c622 100644 (file)
@@ -57,11 +57,11 @@ ENTRY(secondary_boot_func)
         * table (each elem is padded to 64 bytes)
         */
        lsl     x1, x10, #6
-       ldr     x0, =__spin_table
+       adr     x0, __spin_table
        /* physical address of this cpus spin table element */
        add     x11, x1, x0
 
-       ldr     x0, =__real_cntfrq
+       adr     x0, __real_cntfrq
        ldr     x0, [x0]
        msr     cntfrq_el0, x0  /* set with real frequency */
        str     x9, [x11, #16]  /* LPID */
@@ -117,7 +117,7 @@ ENTRY(secondary_switch_to_el1)
        orr     x10, x2, x1, lsl #2     /* x10 has LPID */
 
        lsl     x1, x10, #6
-       ldr     x0, =__spin_table
+       adr     x0, __spin_table
        /* physical address of this cpus spin table element */
        add     x11, x1, x0