diff options
author | Jeremy Kerr <jeremy.kerr@canonical.com> | 2010-07-06 23:19:48 -0400 |
---|---|---|
committer | Nicolas Pitre <nico@fluxnic.net> | 2010-10-20 00:27:34 -0400 |
commit | c293393faa8e11a5a80a9e358718432b8697f451 (patch) | |
tree | d2d10ba089773e0f1a5742de7a40f8830e272935 /arch | |
parent | 0ea1293009826da45e1019f45dfde1e557bb30df (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')
-rw-r--r-- | arch/arm/kernel/head.S | 23 |
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 | ||
221 | 1: str r3, [r0], #4 | 230 | 1: 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 |