linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: ithamar.adema@team-embedded.nl (Ithamar R. Adema)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/9] lpc2k: Exception vector handling
Date: Thu, 17 Mar 2011 16:54:17 +0100	[thread overview]
Message-ID: <1300377264-10843-3-git-send-email-ithamar.adema@team-embedded.nl> (raw)
In-Reply-To: <1300377264-10843-1-git-send-email-ithamar.adema@team-embedded.nl>

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 */
+	swi	SYS_ERROR0
+	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

  parent reply	other threads:[~2011-03-17 15:54 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 ` Ithamar R. Adema [this message]
2011-03-17 16:18   ` [PATCH 2/9] lpc2k: Exception vector handling Uwe Kleine-König
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=1300377264-10843-3-git-send-email-ithamar.adema@team-embedded.nl \
    --to=ithamar.adema@team-embedded.nl \
    --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).