aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/head.S
diff options
context:
space:
mode:
authorJeremy Kerr <jeremy.kerr@canonical.com>2010-07-06 23:19:48 -0400
committerNicolas Pitre <nico@fluxnic.net>2010-10-20 00:27:34 -0400
commitc293393faa8e11a5a80a9e358718432b8697f451 (patch)
treed2d10ba089773e0f1a5742de7a40f8830e272935 /arch/arm/kernel/head.S
parent0ea1293009826da45e1019f45dfde1e557bb30df (diff)
arm: use addruart macro to establish debug mappings
Since we can get both physical and virtual addresses from the addruart macro, we can use this to establish the debug mappings. In the case of CONFIG_DEBUG_ICEDCC, we don't need any mappings, but may still need to setup r7 correctly. Incorporating ASM changes from Nicolas Pitre <npitre@fluxnic.net>. Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com> Tested-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/kernel/head.S')
-rw-r--r--arch/arm/kernel/head.S23
1 files changed, 19 insertions, 4 deletions
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index 767390449e0a..dd6b369ac69c 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -22,6 +22,10 @@
22#include <asm/thread_info.h> 22#include <asm/thread_info.h>
23#include <asm/system.h> 23#include <asm/system.h>
24 24
25#ifdef CONFIG_DEBUG_LL
26#include <mach/debug-macro.S>
27#endif
28
25#if (PHYS_OFFSET & 0x001fffff) 29#if (PHYS_OFFSET & 0x001fffff)
26#error "PHYS_OFFSET must be at an even 2MiB boundary!" 30#error "PHYS_OFFSET must be at an even 2MiB boundary!"
27#endif 31#endif
@@ -204,24 +208,35 @@ __create_page_tables:
204 str r6, [r0] 208 str r6, [r0]
205 209
206#ifdef CONFIG_DEBUG_LL 210#ifdef CONFIG_DEBUG_LL
207 ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags 211#ifndef CONFIG_DEBUG_ICEDCC
208 /* 212 /*
209 * Map in IO space for serial debugging. 213 * Map in IO space for serial debugging.
210 * This allows debug messages to be output 214 * This allows debug messages to be output
211 * via a serial console before paging_init. 215 * via a serial console before paging_init.
212 */ 216 */
213 ldr r3, [r8, #MACHINFO_PGOFFIO] 217 addruart r7, r3
218
219 mov r3, r3, lsr #20
220 mov r3, r3, lsl #2
221
214 add r0, r4, r3 222 add r0, r4, r3
215 rsb r3, r3, #0x4000 @ PTRS_PER_PGD*sizeof(long) 223 rsb r3, r3, #0x4000 @ PTRS_PER_PGD*sizeof(long)
216 cmp r3, #0x0800 @ limit to 512MB 224 cmp r3, #0x0800 @ limit to 512MB
217 movhi r3, #0x0800 225 movhi r3, #0x0800
218 add r6, r0, r3 226 add r6, r0, r3
219 ldr r3, [r8, #MACHINFO_PHYSIO] 227 mov r3, r7, lsr #20
220 orr r3, r3, r7 228 ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags
229 orr r3, r7, r3, lsl #20
2211: str r3, [r0], #4 2301: str r3, [r0], #4
222 add r3, r3, #1 << 20 231 add r3, r3, #1 << 20
223 teq r0, r6 232 teq r0, r6
224 bne 1b 233 bne 1b
234
235#else /* CONFIG_DEBUG_ICEDCC */
236 /* we don't need any serial debugging mappings for ICEDCC */
237 ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags
238#endif /* !CONFIG_DEBUG_ICEDCC */
239
225#if defined(CONFIG_ARCH_NETWINDER) || defined(CONFIG_ARCH_CATS) 240#if defined(CONFIG_ARCH_NETWINDER) || defined(CONFIG_ARCH_CATS)
226 /* 241 /*
227 * If we're using the NetWinder or CATS, we also need to map 242 * If we're using the NetWinder or CATS, we also need to map