[PATCH v3] ARM: xip: Use correct symbol for end of ROM marker
Chris Brandt
Chris.Brandt at renesas.com
Wed Nov 18 12:51:52 PST 2015
> Probably the best way to fix it would be something like:
>
> in asm/memory.h or similar:
>
> #ifdef CONFIG_XIP_KERNEL
> #define PHYS_OFFSET_FIXUP \
> ( XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR) - PAGE_OFFSET + \
> PLAT_PHYS_OFFSET - CONFIG_XIP_PHYS_ADDR ) #else #define
> PHYS_OFFSET_FIXUP 0 #endif
>
> And then, after my patch is applied, changing:
>
> __v7_setup_stack_ptr:
> .word __v7_setup_stack - .
>
> into:
>
> __v7_setup_stack_ptr:
> .word __v7_setup_stack - . + PHYS_OFFSET_FIXUP
>
> should do the trick. This way it'll work for all those places where
> the code is getting at the data area when the MMU is off with no XIP
> conditionals in the code.
Tested....it works!
Here's your new results:
__v7_ca17mp_setup:
mov r10, #0
1: adr r0, __v7_setup_stack_ptr
r0=0x18213df4
ldr r12, [r0]
r12=0x7e174cc
add r12, r12, r0 @ the local stack
r12=0x2002b2c0
stmia r12, {r1-r6, lr} @ v7_invalidate_l1 touches r0-r6
bl v7_invalidate_l1
0x2002b2c0 is indeed the correct physical address of __v7_setup_stack_ptr.
So, you still need to use #ifdef XIP_KERNEL and PLAT_PHYS_OFFSET....but...you bury it in another file. I'm good with that!!
> Then another patch could bring all those places XIP compatible with
> the simple addition of that PHYS_OFFSET_FIXUP constant.
Yes, the less CONFIG_XIP_KERNEL is sprinkled around the arm tree code, the better.
Chris
More information about the linux-arm-kernel
mailing list