From: u.kleine-koenig@pengutronix.de (Uwe Kleine-König)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/9] lpc2k: Exception vector handling
Date: Thu, 17 Mar 2011 17:18:25 +0100 [thread overview]
Message-ID: <20110317161825.GA31219@pengutronix.de> (raw)
In-Reply-To: <1300377264-10843-3-git-send-email-ithamar.adema@team-embedded.nl>
On Thu, Mar 17, 2011 at 04:54:17PM +0100, Ithamar R. Adema wrote:
> Since the LPC2K does not have an MMU (ARM7TDMI based), it expects the vectors to be
> stored in on-chip SRAM. However, this moves the vectors too far away from the stubs
> page, requiring the vector jumps to be indirect.
>
> Since now VECTOR_BASE is below PHYS_OFFSET, do not try to reserve the vector
> page, as it will fail (and prevent the kernel from booting).
>
> Also, commit 247055aa (6384/1: Remove the domain switching on ARMv6k/v7 CPUs) broke
> the placement of vectors in the !MMU case, so fix this too.
>
> Signed-off-by: Ithamar R. Adema <ithamar.adema@team-embedded.nl>
> ---
> arch/arm/Kconfig | 1 +
> arch/arm/kernel/entry-armv.S | 18 ++++++++++++++++++
> arch/arm/kernel/traps.c | 2 +-
> arch/arm/mm/nommu.c | 2 ++
> 4 files changed, 22 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 331540d..9c12d71 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -186,6 +186,7 @@ config VECTORS_BASE
> hex
> default 0xffff0000 if MMU || CPU_HIGH_VECTOR
> default DRAM_BASE if REMAP_VECTORS_TO_RAM
> + default 0x40000000 if ARCH_LPC2K
> default 0x00000000
> help
> The base address of exception vectors.
> diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
> index e8d8856..618a971 100644
> --- a/arch/arm/kernel/entry-armv.S
> +++ b/arch/arm/kernel/entry-armv.S
> @@ -1208,6 +1208,7 @@ __stubs_end:
>
> .globl __vectors_start
> __vectors_start:
> +#ifndef CONFIG_ARCH_LPC2K
> ARM( swi SYS_ERROR0 )
> THUMB( svc #0 )
> THUMB( nop )
> @@ -1218,6 +1219,23 @@ __vectors_start:
> W(b) vector_addrexcptn + stubs_offset
> W(b) vector_irq + stubs_offset
> W(b) vector_fiq + stubs_offset
> +#else /* CONFIG_ARCH_LPC2K */
The description from the commit log should be repeated here.
And I wonder if this shouldn't depend on CONFIG_ARCH_LPC2K but
CONFIG_MMU.
> + swi SYS_ERROR0
I think arm7tdmi doesn't have thumb2, does it? If it has you need to do
ARM(swi SYS_ERROR0)
THUMB(svc ..)
...
as above
> + ldr pc, .vector_und
> + ldr pc, .vector_swi
> + ldr pc, .vector_pabt
> + ldr pc, .vector_dabt
> + ldr pc, .vector_addrexcptn
> + ldr pc, .vector_irq
> + ldr pc, .vector_fiq
> +.vector_und: .word vector_und
> +.vector_swi: .word vector_swi
> +.vector_pabt: .word vector_pabt
> +.vector_dabt: .word vector_dabt
> +.vector_addrexcptn: .word vector_addrexcptn
> +.vector_irq: .word vector_irq
> +.vector_fiq: .word vector_fiq
> +#endif
>
> .globl __vectors_end
> __vectors_end:
> diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
> index 21ac43f..639c4c8 100644
> --- a/arch/arm/kernel/traps.c
> +++ b/arch/arm/kernel/traps.c
> @@ -758,7 +758,7 @@ static void __init kuser_get_tls_init(unsigned long vectors)
>
> void __init early_trap_init(void)
> {
> -#if defined(CONFIG_CPU_USE_DOMAINS)
> +#if defined(CONFIG_CPU_USE_DOMAINS) || !defined(CONFIG_MMU)
> unsigned long vectors = CONFIG_VECTORS_BASE;
> #else
> unsigned long vectors = (unsigned long)vectors_page;
> diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c
> index 687d023..e3bec02 100644
> --- a/arch/arm/mm/nommu.c
> +++ b/arch/arm/mm/nommu.c
> @@ -24,7 +24,9 @@ void __init arm_mm_memblock_reserve(void)
> * some architectures which the DRAM is the exception vector to trap,
> * alloc_page breaks with error, although it is not NULL, but "0."
> */
> +#if PHYS_OFFSET <= CONFIG_VECTORS_BASE
> memblock_reserve(CONFIG_VECTORS_BASE, PAGE_SIZE);
> +#endif
> }
>
> /*
> --
> 1.7.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |
next prev parent reply other threads:[~2011-03-17 16:18 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-17 15:54 [PATCH 0/9] Support for NXP LPC2K SoCs Ithamar R. Adema
2011-03-17 15:54 ` [PATCH 1/9] lpc2k: Core support Ithamar R. Adema
2011-03-17 21:26 ` Jamie Iles
2011-03-17 21:32 ` Vitaly Wool
2011-03-17 21:50 ` Ithamar R. Adema
2011-03-17 22:08 ` Kevin Wells
2011-03-17 22:25 ` Ithamar R. Adema
2011-03-17 15:54 ` [PATCH 2/9] lpc2k: Exception vector handling Ithamar R. Adema
2011-03-17 16:18 ` Uwe Kleine-König [this message]
2011-03-17 16:28 ` Ithamar R. Adema
2011-03-18 0:43 ` Greg Ungerer
2011-03-17 15:54 ` [PATCH 3/9] lpc2k: clk API Ithamar R. Adema
2011-03-17 22:08 ` Kevin Wells
2011-03-18 9:44 ` Ithamar R. Adema
2011-03-17 22:16 ` Kevin Wells
2011-03-17 22:29 ` Ithamar R. Adema
2011-03-17 15:54 ` [PATCH 4/9] lpc2k: generic time and clockevents Ithamar R. Adema
2011-03-17 21:38 ` Jamie Iles
2011-03-17 22:00 ` Ithamar R. Adema
2011-03-17 15:54 ` [PATCH 5/9] lpc2k: gpiolib Ithamar R. Adema
2011-03-17 15:54 ` [PATCH 6/9] lpc2k: multifunction pin configuration Ithamar R. Adema
2011-03-17 15:54 ` [PATCH 7/9] lpc2k: Add EmbeddedArtists LPC2478 Developer's Kit board Ithamar R. Adema
2011-03-17 22:07 ` Kevin Wells
2011-03-17 22:18 ` Ithamar R. Adema
2011-03-17 22:33 ` Kevin Wells
2011-03-17 22:49 ` Ithamar R. Adema
2011-03-17 15:54 ` [PATCH 8/9] lpc2k: Add UART, SSP, and MCI devices Ithamar R. Adema
2011-03-17 15:54 ` [PATCH 9/9] lpc2k: defconfig for NXP LPC2K platform Ithamar R. Adema
2011-03-17 17:18 ` [PATCH 0/9] Support for NXP LPC2K SoCs Kevin Wells
2011-03-18 0:45 ` Greg Ungerer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110317161825.GA31219@pengutronix.de \
--to=u.kleine-koenig@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).