Cortex-M and zImage
Joachim Eastwood
manabian at gmail.com
Tue Sep 16 23:55:05 PDT 2014
On 17 September 2014 08:11, Uwe Kleine-König
<u.kleine-koenig at pengutronix.de> wrote:
> Hello Joachim,
>
> On Tue, Sep 16, 2014 at 10:25:02PM +0200, Joachim Eastwood wrote:
>> I am working on Linux support for the NXP LPC18xx/43xx family of
>> Cortex-M3/M4 microcontrollers. Building zImage for Cortex-M fails
>> with the following two errors:
>> error: arch/arm/boot/compressed/piggy.gzip.o: Conflicting architecture
>> profiles M/A
>> linux/arch/arm/boot/compressed/head.S:794: undefined reference to
>> `CONFIG_PROCESSOR_ID'
>>
>> The last error is easy to fix. But the first about conflicting arch is
>> harder.
> Do you send a patch?
No, I haven't sent a patch to the fix undefined reference since the
conflicting arch stuff prevented zImage from compiling anyways.
> I was able to compile a zImage with the patch below. For the
> "Conflicting architecture profiles" error the most relevant hunk is the
> first. And of course this needs some #ifdefs.
Thanks, I'll give it a try later today.
But is this the way to go?
Adding lots of 'ifdefs CONFIG_CPU_V7M' to compressed/head.S ?
I'll guess Russell have to answer that one.
regards
Joachim Eastwood
> Best regards
> Uwe
>
> diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
> index 413fd94b5301..abad996484f1 100644
> --- a/arch/arm/boot/compressed/head.S
> +++ b/arch/arm/boot/compressed/head.S
> @@ -11,7 +11,7 @@
> #include <linux/linkage.h>
> #include <asm/assembler.h>
>
> - .arch armv7-a
> + .arch armv7-m
> /*
> * Debugging stuff
> *
> @@ -114,7 +114,7 @@
> * sort out different calling conventions
> */
> .align
> - .arm @ Always enter in ARM state
> + @.arm @ Always enter in ARM state
> start:
> .type start,#function
> .rept 7
> @@ -133,7 +133,7 @@ start:
> THUMB( .thumb )
> 1:
> ARM_BE8( setend be ) @ go BE8 if compiled for BE8
> - mrs r9, cpsr
> + @mrs r9, cpsr
> #ifdef CONFIG_ARM_VIRT_EXT
> bl __hyp_stub_install @ get into SVC mode, reversibly
> #endif
> @@ -145,7 +145,7 @@ start:
> * FIQs/IRQs (numeric definitions from angel arm.h source).
> * We only do this if we were in user mode on entry.
> */
> - mrs r2, cpsr @ get current mode
> + @mrs r2, cpsr @ get current mode
> tst r2, #3 @ not user?
> bne not_angel
> mov r0, #0x17 @ angel_SWIreason_EnterSVC
> @@ -153,7 +153,7 @@ start:
> THUMB( svc 0xab ) @ angel_SWI_THUMB
> not_angel:
> safe_svcmode_maskall r0
> - msr spsr_cxsf, r9 @ Save the CPU boot mode in
> + @msr spsr_cxsf, r9 @ Save the CPU boot mode in
> @ SPSR
> /*
> * Note that some cache flushing and other stuff may
> @@ -366,7 +366,7 @@ dtb_check_done:
>
> /* Relocate the hyp vector base if necessary */
> #ifdef CONFIG_ARM_VIRT_EXT
> - mrs r0, spsr
> + @mrs r0, spsr
> and r0, r0, #MODE_MASK
> cmp r0, #HYP_MODE
> bne 1f
> @@ -500,7 +500,7 @@ not_relocated: mov r0, #0
> mov r2, r8 @ restore atags pointer
>
> #ifdef CONFIG_ARM_VIRT_EXT
> - mrs r0, spsr @ Get saved CPU boot mode
> + @mrs r0, spsr @ Get saved CPU boot mode
> and r0, r0, #MODE_MASK
> cmp r0, #HYP_MODE @ if not booted in HYP mode...
> bne __enter_kernel @ boot kernel directly
> @@ -791,7 +791,7 @@ call_cache_fn: adr r12, proc_types
> #ifdef CONFIG_CPU_CP15
> mrc p15, 0, r9, c0, c0 @ get processor ID
> #else
> - ldr r9, =CONFIG_PROCESSOR_ID
> + @ldr r9, =CONFIG_PROCESSOR_ID
> #endif
> 1: ldr r1, [r12, #0] @ get value
> ldr r2, [r12, #4] @ get mask
>
>> As far as I know zImage on Cortex-M is not supported or not tested.
>>
>> Are there any plans to support zImage on Cortex-M?
>> If so does anyone have an idea how the conflicting arch issue could
>> be solved?
>>
>> btw, building with 'make Image' works fine and I have been running
>> Linux for a while on the NXP LPC4357.
>
> --
> Pengutronix e.K. | Uwe Kleine-König |
> Industrial Linux Solutions | http://www.pengutronix.de/ |
More information about the linux-arm-kernel
mailing list