From mboxrd@z Thu Jan 1 00:00:00 1970 From: Luca Ellero Date: Mon, 19 Jan 2015 11:11:34 +0100 Subject: [U-Boot] [PATCH] arm: fix exception vectors In-Reply-To: <20150117074001.5ae2abd4@lilith> References: <1419865853-2562-1-git-send-email-luca.ellero@brickedbrain.com> <20150117074001.5ae2abd4@lilith> Message-ID: <54BCD856.1020607@brickedbrain.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Albert, On 17/01/2015 07:40, Albert ARIBAUD wrote: > Hello Luca, > > On Mon, 29 Dec 2014 16:10:53 +0100, Luca Ellero > wrote: >> After relocation, exception vectors still point to the old code (not relocated). >> This patch fixes them. >> >> Signed-off-by: Luca Ellero >> --- >> arch/arm/lib/relocate.S | 15 +++++++++++++++ >> 1 file changed, 15 insertions(+) >> >> diff --git a/arch/arm/lib/relocate.S b/arch/arm/lib/relocate.S >> index 92f5314..4186344 100644 >> --- a/arch/arm/lib/relocate.S >> +++ b/arch/arm/lib/relocate.S >> @@ -76,6 +76,21 @@ copy_loop: >> blo copy_loop >> >> /* >> + * fix exception vectors >> + */ >> + ldr r2, =_undefined_instruction >> + ldr r3, =_fiq >> + add r2, r2, r4 >> + add r3, r3, r4 >> +fix_exceptions: >> + ldr r0, [r2] >> + add r0, r0, r4 >> + str r0, [r2] >> + cmp r2,r3 >> + add r2, #4 >> + blo fix_exceptions >> + >> + /* >> * fix .rel.dyn relocations >> */ >> ldr r2, =__rel_dyn_start /* r2 <- SRC &__rel_dyn_start */ >> -- >> 1.7.10.4 >> > > There is already a mechanism to relocate vectors (do a git grep for > 'relocate_vectors' which takes into account various ISA and SoC cases. > > Can you describe the use case which you are encountering? As far as I can see the mechanism to relocate vectors is implemented only on iMX25/27 and involves high vectors address (0xFFFFxxxx). The problem is that, after relocation, U-Boot doesn't fix the vector table addresses, they still point to the old addresses (before relocation). This is wrong and this patch fixes them to point to the new addresses. I had to use this patch trying to implement IRQ support for a Freescale iMX6 board. iMX6 does not provide RAM at the high vectors address and trying to access them leads to errors, so I couldn't use them. Regards -- Luca Ellero E-mail: luca.ellero at brickedbrain.com Internet: www.brickedbrain.com