aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/Kconfig.debug16
-rw-r--r--arch/arm/kernel/debug.S25
-rw-r--r--arch/arm/kernel/head.S8
3 files changed, 44 insertions, 5 deletions
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index e0d236d7ff73..755d9fbe3238 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -100,6 +100,22 @@ choice
100 Note that the system will appear to hang during boot if there 100 Note that the system will appear to hang during boot if there
101 is nothing connected to read from the DCC. 101 is nothing connected to read from the DCC.
102 102
103 config DEBUG_SEMIHOSTING
104 bool "Kernel low-level debug output via semihosting I"
105 help
106 Semihosting enables code running on an ARM target to use
107 the I/O facilities on a host debugger/emulator through a
108 simple SVC calls. The host debugger or emulator must have
109 semihosting enabled for the special svc call to be trapped
110 otherwise the kernel will crash.
111
112 This is known to work with OpenOCD, as wellas
113 ARM's Fast Models, or any other controlling environment
114 that implements semihosting.
115
116 For more details about semihosting, please see
117 chapter 8 of DUI0203I_rvct_developer_guide.pdf from ARM Ltd.
118
103 config AT91_DEBUG_LL_DBGU0 119 config AT91_DEBUG_LL_DBGU0
104 bool "Kernel low-level debugging on rm9200, 9260/9g20, 9261/9g10 and 9rl" 120 bool "Kernel low-level debugging on rm9200, 9260/9g20, 9261/9g10 and 9rl"
105 depends on HAVE_AT91_DBGU0 121 depends on HAVE_AT91_DBGU0
diff --git a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S
index 204e2160cfcc..e5a765c5f06a 100644
--- a/arch/arm/kernel/debug.S
+++ b/arch/arm/kernel/debug.S
@@ -100,7 +100,7 @@
100 100
101#endif /* CONFIG_CPU_V6 */ 101#endif /* CONFIG_CPU_V6 */
102 102
103#else 103#elif !defined(CONFIG_DEBUG_SEMIHOSTING)
104#include <mach/debug-macro.S> 104#include <mach/debug-macro.S>
105#endif /* CONFIG_DEBUG_ICEDCC */ 105#endif /* CONFIG_DEBUG_ICEDCC */
106 106
@@ -155,6 +155,8 @@ hexbuf: .space 16
155 155
156 .ltorg 156 .ltorg
157 157
158#ifndef CONFIG_DEBUG_SEMIHOSTING
159
158ENTRY(printascii) 160ENTRY(printascii)
159 addruart_current r3, r1, r2 161 addruart_current r3, r1, r2
160 b 2f 162 b 2f
@@ -177,3 +179,24 @@ ENTRY(printch)
177 mov r0, #0 179 mov r0, #0
178 b 1b 180 b 1b
179ENDPROC(printch) 181ENDPROC(printch)
182
183#else
184
185ENTRY(printascii)
186 mov r1, r0
187 mov r0, #0x04 @ SYS_WRITE0
188 ARM( svc #0x123456 )
189 THUMB( svc #0xab )
190 mov pc, lr
191ENDPROC(printascii)
192
193ENTRY(printch)
194 adr r1, hexbuf
195 strb r0, [r1]
196 mov r0, #0x03 @ SYS_WRITEC
197 ARM( svc #0x123456 )
198 THUMB( svc #0xab )
199 mov pc, lr
200ENDPROC(printch)
201
202#endif
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index a2e9694a68ee..3bf0c7f8b043 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -265,7 +265,7 @@ __create_page_tables:
265 str r6, [r3] 265 str r6, [r3]
266 266
267#ifdef CONFIG_DEBUG_LL 267#ifdef CONFIG_DEBUG_LL
268#ifndef CONFIG_DEBUG_ICEDCC 268#if !defined(CONFIG_DEBUG_ICEDCC) && !defined(CONFIG_DEBUG_SEMIHOSTING)
269 /* 269 /*
270 * Map in IO space for serial debugging. 270 * Map in IO space for serial debugging.
271 * This allows debug messages to be output 271 * This allows debug messages to be output
@@ -297,10 +297,10 @@ __create_page_tables:
297 cmp r0, r6 297 cmp r0, r6
298 blo 1b 298 blo 1b
299 299
300#else /* CONFIG_DEBUG_ICEDCC */ 300#else /* CONFIG_DEBUG_ICEDCC || CONFIG_DEBUG_SEMIHOSTING */
301 /* we don't need any serial debugging mappings for ICEDCC */ 301 /* we don't need any serial debugging mappings */
302 ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags 302 ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags
303#endif /* !CONFIG_DEBUG_ICEDCC */ 303#endif
304 304
305#if defined(CONFIG_ARCH_NETWINDER) || defined(CONFIG_ARCH_CATS) 305#if defined(CONFIG_ARCH_NETWINDER) || defined(CONFIG_ARCH_CATS)
306 /* 306 /*