
Albert,
On Sun, Mar 13, 2011 at 10:46 AM, Albert ARIBAUD albert.aribaud@free.fr wrote:
Le 16/02/2011 21:26, Tom Warren a écrit :
Signed-off-by: Tom Warrentwarren@nvidia.com
arch/arm/cpu/armv7/start.S | 6 + arch/arm/cpu/armv7/tegra2/Makefile | 2 +-
arch/arm/cpu/armv7/tegra2/ap20.c | 490 ++++++++++++++++++++++++++++
This one has an extra empty line at end of file.
Thanks - I'll remove it.
+void cold_boot(void) +{
- asm volatile(
- "msr cpsr_c, #0xd3 \n"
- /*
- * Check current processor: CPU or AVP?
- * If AVP, go to AVP boot code, else continue on.
- */
- "mov r0, %0 \n"
- "ldrb r2, [r0, %1] \n"
- /* are we the CPU? */
- "cmp r2, %2 \n"
- "mov sp, %3 \n"
- /* leave in some symbols for release debugging */
- "mov r3, %6 \n"
- "str r3, [sp, #-4]! \n"
- "str r3, [sp, #-4]! \n"
- /* yep, we are the CPU */
- "bxeq %4 \n"
- /* AVP Initialization follows this path */
- "mov sp, %5 \n"
- /* leave in some symbols for release debugging */
- "mov r3, %6 \n"
- "str r3, [sp, #-4]! \n"
- "str r3, [sp, #-4]! \n"
- /* Init and Start CPU */
- "b startup_cpu \n"
- :
- : "i"(NV_PA_PG_UP_BASE),
If I'm not mistaken, NV_PA_PG_UP_BASE could be used just as well directly in the asm statement instead of via %0 and i(), as anyway the asm will be preprocessed and the macro will turn to a number. That would simplify the asm instruction as a whole and make the asm statement more understandable (also applies to other macros used similarly).
Yeah, this code came this way from our bringup group for out in-house bootloader, and it's always been confusing. I'll try to simplify it when I incorporate Peter's critiques. Thanks.
Apart from that, I must admit I don't know the Tegra2/A9 well enough to comment further.
amicalement, Amicalement, -- Albert.
Thanks for the input, Tom