| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
|  | 2 | *  linux/arch/arm/kernel/debug.S | 
|  | 3 | * | 
|  | 4 | *  Copyright (C) 1994-1999 Russell King | 
|  | 5 | * | 
|  | 6 | * This program is free software; you can redistribute it and/or modify | 
|  | 7 | * it under the terms of the GNU General Public License version 2 as | 
|  | 8 | * published by the Free Software Foundation. | 
|  | 9 | * | 
|  | 10 | *  32-bit debugging code | 
|  | 11 | */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 12 | #include <linux/linkage.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 13 |  | 
|  | 14 | .text | 
|  | 15 |  | 
|  | 16 | /* | 
|  | 17 | * Some debugging routines (useful if you've got MM problems and | 
|  | 18 | * printk isn't working).  For DEBUGGING ONLY!!!  Do not leave | 
|  | 19 | * references to these in a production kernel! | 
|  | 20 | */ | 
|  | 21 |  | 
|  | 22 | #if defined(CONFIG_DEBUG_ICEDCC) | 
|  | 23 | @@ debug using ARM EmbeddedICE DCC channel | 
| Tony Lindgren | 7d95ded | 2006-09-20 13:03:34 +0100 | [diff] [blame] | 24 |  | 
| Jeremy Kerr | 0ea1293 | 2010-07-06 18:30:06 +0800 | [diff] [blame] | 25 | .macro	addruart, rp, rv | 
| Tony Lindgren | 7d95ded | 2006-09-20 13:03:34 +0100 | [diff] [blame] | 26 | .endm | 
|  | 27 |  | 
| Stephen Boyd | dfad549 | 2011-03-23 22:46:15 +0100 | [diff] [blame] | 28 | #if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) || defined(CONFIG_CPU_V7) | 
| Jeremy Kerr | 1ea6461 | 2010-07-21 10:40:50 +0200 | [diff] [blame] | 29 |  | 
| Tony Lindgren | 7d95ded | 2006-09-20 13:03:34 +0100 | [diff] [blame] | 30 | .macro	senduart, rd, rx | 
|  | 31 | mcr	p14, 0, \rd, c0, c5, 0 | 
|  | 32 | .endm | 
|  | 33 |  | 
|  | 34 | .macro	busyuart, rd, rx | 
|  | 35 | 1001: | 
|  | 36 | mrc	p14, 0, \rx, c0, c1, 0 | 
|  | 37 | tst	\rx, #0x20000000 | 
|  | 38 | beq	1001b | 
|  | 39 | .endm | 
|  | 40 |  | 
|  | 41 | .macro	waituart, rd, rx | 
|  | 42 | mov	\rd, #0x2000000 | 
|  | 43 | 1001: | 
|  | 44 | subs	\rd, \rd, #1 | 
|  | 45 | bmi	1002f | 
|  | 46 | mrc	p14, 0, \rx, c0, c1, 0 | 
|  | 47 | tst	\rx, #0x20000000 | 
|  | 48 | bne	1001b | 
|  | 49 | 1002: | 
|  | 50 | .endm | 
|  | 51 |  | 
| Jean-Christop PLAGNIOL-VILLARD | c633c3c | 2009-02-25 04:20:40 +0100 | [diff] [blame] | 52 | #elif defined(CONFIG_CPU_XSCALE) | 
|  | 53 |  | 
| Jean-Christop PLAGNIOL-VILLARD | c633c3c | 2009-02-25 04:20:40 +0100 | [diff] [blame] | 54 | .macro	senduart, rd, rx | 
|  | 55 | mcr	p14, 0, \rd, c8, c0, 0 | 
|  | 56 | .endm | 
|  | 57 |  | 
|  | 58 | .macro	busyuart, rd, rx | 
|  | 59 | 1001: | 
|  | 60 | mrc	p14, 0, \rx, c14, c0, 0 | 
|  | 61 | tst	\rx, #0x10000000 | 
|  | 62 | beq	1001b | 
|  | 63 | .endm | 
|  | 64 |  | 
|  | 65 | .macro	waituart, rd, rx | 
|  | 66 | mov	\rd, #0x10000000 | 
|  | 67 | 1001: | 
|  | 68 | subs	\rd, \rd, #1 | 
|  | 69 | bmi	1002f | 
|  | 70 | mrc	p14, 0, \rx, c14, c0, 0 | 
|  | 71 | tst	\rx, #0x10000000 | 
|  | 72 | bne	1001b | 
|  | 73 | 1002: | 
|  | 74 | .endm | 
|  | 75 |  | 
| Tony Lindgren | 7d95ded | 2006-09-20 13:03:34 +0100 | [diff] [blame] | 76 | #else | 
|  | 77 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 78 | .macro	senduart, rd, rx | 
|  | 79 | mcr	p14, 0, \rd, c1, c0, 0 | 
|  | 80 | .endm | 
|  | 81 |  | 
|  | 82 | .macro	busyuart, rd, rx | 
|  | 83 | 1001: | 
|  | 84 | mrc	p14, 0, \rx, c0, c0, 0 | 
|  | 85 | tst	\rx, #2 | 
|  | 86 | beq	1001b | 
|  | 87 |  | 
|  | 88 | .endm | 
|  | 89 |  | 
|  | 90 | .macro	waituart, rd, rx | 
|  | 91 | mov	\rd, #0x2000000 | 
|  | 92 | 1001: | 
|  | 93 | subs	\rd, \rd, #1 | 
|  | 94 | bmi	1002f | 
|  | 95 | mrc	p14, 0, \rx, c0, c0, 0 | 
|  | 96 | tst	\rx, #2 | 
|  | 97 | bne	1001b | 
|  | 98 | 1002: | 
|  | 99 | .endm | 
| Tony Lindgren | 7d95ded | 2006-09-20 13:03:34 +0100 | [diff] [blame] | 100 |  | 
|  | 101 | #endif	/* CONFIG_CPU_V6 */ | 
|  | 102 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 103 | #else | 
| Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame] | 104 | #include <mach/debug-macro.S> | 
| Tony Lindgren | 7d95ded | 2006-09-20 13:03:34 +0100 | [diff] [blame] | 105 | #endif	/* CONFIG_DEBUG_ICEDCC */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 106 |  | 
| Jeremy Kerr | 0ea1293 | 2010-07-06 18:30:06 +0800 | [diff] [blame] | 107 | #ifdef CONFIG_MMU | 
|  | 108 | .macro	addruart_current, rx, tmp1, tmp2 | 
|  | 109 | addruart	\tmp1, \tmp2 | 
|  | 110 | mrc		p15, 0, \rx, c1, c0 | 
|  | 111 | tst		\rx, #1 | 
|  | 112 | moveq		\rx, \tmp1 | 
|  | 113 | movne		\rx, \tmp2 | 
|  | 114 | .endm | 
|  | 115 |  | 
|  | 116 | #else /* !CONFIG_MMU */ | 
|  | 117 | .macro	addruart_current, rx, tmp1, tmp2 | 
|  | 118 | addruart	\rx, \tmp1 | 
|  | 119 | .endm | 
|  | 120 |  | 
|  | 121 | #endif /* CONFIG_MMU */ | 
|  | 122 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 123 | /* | 
|  | 124 | * Useful debugging routines | 
|  | 125 | */ | 
|  | 126 | ENTRY(printhex8) | 
|  | 127 | mov	r1, #8 | 
|  | 128 | b	printhex | 
| Catalin Marinas | 93ed397 | 2008-08-28 11:22:32 +0100 | [diff] [blame] | 129 | ENDPROC(printhex8) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 130 |  | 
|  | 131 | ENTRY(printhex4) | 
|  | 132 | mov	r1, #4 | 
|  | 133 | b	printhex | 
| Catalin Marinas | 93ed397 | 2008-08-28 11:22:32 +0100 | [diff] [blame] | 134 | ENDPROC(printhex4) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 135 |  | 
|  | 136 | ENTRY(printhex2) | 
|  | 137 | mov	r1, #2 | 
|  | 138 | printhex:	adr	r2, hexbuf | 
|  | 139 | add	r3, r2, r1 | 
|  | 140 | mov	r1, #0 | 
|  | 141 | strb	r1, [r3] | 
|  | 142 | 1:		and	r1, r0, #15 | 
|  | 143 | mov	r0, r0, lsr #4 | 
|  | 144 | cmp	r1, #10 | 
|  | 145 | addlt	r1, r1, #'0' | 
|  | 146 | addge	r1, r1, #'a' - 10 | 
|  | 147 | strb	r1, [r3, #-1]! | 
|  | 148 | teq	r3, r2 | 
|  | 149 | bne	1b | 
|  | 150 | mov	r0, r2 | 
|  | 151 | b	printascii | 
| Catalin Marinas | 93ed397 | 2008-08-28 11:22:32 +0100 | [diff] [blame] | 152 | ENDPROC(printhex2) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 153 |  | 
|  | 154 | .ltorg | 
|  | 155 |  | 
|  | 156 | ENTRY(printascii) | 
| Jeremy Kerr | 0ea1293 | 2010-07-06 18:30:06 +0800 | [diff] [blame] | 157 | addruart_current r3, r1, r2 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 158 | b	2f | 
|  | 159 | 1:		waituart r2, r3 | 
|  | 160 | senduart r1, r3 | 
|  | 161 | busyuart r2, r3 | 
|  | 162 | teq	r1, #'\n' | 
|  | 163 | moveq	r1, #'\r' | 
|  | 164 | beq	1b | 
|  | 165 | 2:		teq	r0, #0 | 
|  | 166 | ldrneb	r1, [r0], #1 | 
|  | 167 | teqne	r1, #0 | 
|  | 168 | bne	1b | 
|  | 169 | mov	pc, lr | 
| Catalin Marinas | 93ed397 | 2008-08-28 11:22:32 +0100 | [diff] [blame] | 170 | ENDPROC(printascii) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 171 |  | 
|  | 172 | ENTRY(printch) | 
| Jeremy Kerr | 0ea1293 | 2010-07-06 18:30:06 +0800 | [diff] [blame] | 173 | addruart_current r3, r1, r2 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 174 | mov	r1, r0 | 
|  | 175 | mov	r0, #0 | 
|  | 176 | b	1b | 
| Catalin Marinas | 93ed397 | 2008-08-28 11:22:32 +0100 | [diff] [blame] | 177 | ENDPROC(printch) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 178 |  | 
|  | 179 | hexbuf:		.space 16 |