[PATCH v6] ARM: zImage: add support for ARMv7-M
Ezequiel Garcia
ezequiel at vanguardiasur.com.ar
Sat Dec 20 11:12:19 PST 2014
Stefan,
On 12/20/2014 10:33 AM, Stefan Agner wrote:
> On 2014-12-17 09:56, Uwe Kleine-König wrote:
>> From: Joachim Eastwood <manabian at gmail.com>
>>
>> This patch makes it possible to enter zImage in Thumb mode for ARMv7-M
>> (Cortex-M) CPUs that do not support ARM mode. The kernel entry is also
>> made in Thumb mode.
>>
>> Signed-off-by: Joachim Eastwood <manabian at gmail.com>
>> [ukl: fix spelling in commit log, return early in call_cache_fn]
>> Signed-off-by: Uwe Kleine-König <u.kleine-koenig at pengutronix.de>
>> ---
>> Hello,
>>
>> I just picked up Joachim's patch and fixed the small concerns I had in
>> the last round.
>>
>> I thought about adding a wrapper for accessing the CPUID registers that
>> are located in cp15 on v7-A/R and memory mapped on v7-M. The
>> corresponding registers and their address are as follows:
>>
>> name cp15 reg [1] on -A/R address on -M
>> MIDR/CPUID CRm=c0, opc2=0 0xe000ed00
>> PFR0 CRm=c1, opc2=0 0xe000ed40
>> PFR1 CRm=c1, opc2=1 0xe000ed44
>> DFR0 CRm=c1, opc2=2 0xe000ed48
>> AFR0 CRm=c1, opc2=3 0xe000ed4c
>> MMFR0 CRm=c1, opc2=4 0xe000ed50
>> MMFR1 CRm=c1, opc2=5 0xe000ed54
>> MMFR2 CRm=c1, opc2=6 0xe000ed58
>> MMFR3 CRm=c1, opc2=7 0xe000ed5c
>> ISAR0 CRm=c2, opc2=0 0xe000ed60
>> ISAR1 CRm=c2, opc2=1 0xe000ed64
>> ISAR2 CRm=c2, opc2=2 0xe000ed68
>> ISAR3 CRm=c2, opc2=3 0xe000ed6c
>> ISAR4 CRm=c2, opc2=4 0xe000ed70
>> ISAR5 CRm=c2, opc2=5 0xe000ed74
>>
>> But there is no nice translation and as cache handling is implementation
>> defined on v7-M anyhow there is not much use and I decided to just
>> return early in the cache function.
>>
>> This patch is only compile tested as I don't have a machine with enough
>> RAM to run a non-XIP kernel, so Tested-by tags are welcome.
>
> Hi Uwe,
>
> Tried the patch on Vybrid's M4 CPU. Since the M4 has full access to the
> DDR3 RAM, it is even possible to use AUTO_ZRELADDR for both CPU's: The
> Colibri VF61 has 256MB of RAM: A5 relocates to 0x80008000, M4 to
> 0x88008000.
>
> The uncompressing stage seems to work fine, however it seems I hit a
> different bug which is triggered by using the zImage: Freeing the memory
> location used by the compressed image seems to fail:
>
Does this happen systematically for you?
I tried this patch on a LPC4337 based board, and came across very
strange and random memory corruptions, ranging from hitting strange
WARN(), BUG(), to OOM, to unhandled exceptions.
Rebuilding the kernel caused the different results (perhaps due to link
differences?).
The problem is this machine is not yet mainlined, so I'm not yet sure
it's this patch the one to blame.
--
Ezequiel Garcia, VanguardiaSur
www.vanguardiasur.com.ar
More information about the linux-arm-kernel
mailing list