From patchwork Fri Mar 15 16:54:00 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [U-Boot] armv7: do not relocate _start twice X-Patchwork-Submitter: =?utf-8?q?Vincent_Stehl=C3=A9?= X-Patchwork-Id: 228097 X-Patchwork-Delegate: albert.aribaud@free.fr Message-Id: <1363366440-13227-1-git-send-email-v-stehle@ti.com> To: Cc: lpopov@mm-sol.com, u-boot@lists.denx.de Date: Fri, 15 Mar 2013 17:54:00 +0100 From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= List-Id: U-Boot discussion The _start symbol is already relocated, so do not add the relocation the second time in c_runtime_cpu_setup. This fixes e.g. the abort exception handling path, which ended in double fault due to bad address in VBAR. Signed-off-by: Vincent Stehlé Reported-by: Lubomir Popov --- Hello, Here is a fix for a bug reported by Lubomir. He noticed that exceptions were not handled correctly anymore. This can be seen with e.g. the 'dhcp' command on some OMAP platforms. Looking at the code, I would says the fix applies to all armv7 platforms except Tegra but I did only test on OMAP5. On this platform at least the abort is now handled: OMAP5430 EVM # dhcp data abort MAYBE you should read doc/README.arm-unaligned-accesses pc : [] lr : [] sp : feef9dc4 ip : fefed0f8 fp : 00000000 r10: 00000001 r9 : 00000001 r8 : feef9f48 r7 : feef9fe0 r6 : 00000000 r5 : 00000000 r4 : 00000014 r3 : 00000000 r2 : 00000002 r1 : 00000014 r0 : fefed0f4 Flags: Nzcv IRQs off FIQs off Mode SVC_32 Resetting CPU ... resetting ... It would be appreciated if folks could verify on other ARMv7 platforms, when running from flash for example (where relocation may differ?) arch/arm/cpu/armv7/start.S | 1 - 1 file changed, 1 deletion(-) diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S index 6b59529d..d06b35f 100644 --- a/arch/arm/cpu/armv7/start.S +++ b/arch/arm/cpu/armv7/start.S @@ -254,7 +254,6 @@ ENTRY(c_runtime_cpu_setup) #if !defined(CONFIG_TEGRA) /* Set vector address in CP15 VBAR register */ ldr r0, =_start - add r0, r0, r9 mcr p15, 0, r0, c12, c0, 0 @Set VBAR #endif /* !Tegra */