]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | */ | |
1da177e4 | 12 | #include <linux/linkage.h> |
1da177e4 LT |
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 | |
7d95ded9 | 24 | |
639da5ee | 25 | .macro addruart, rp, rv, tmp |
7d95ded9 TL |
26 | .endm |
27 | ||
dfad549d | 28 | #if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) || defined(CONFIG_CPU_V7) |
1ea64615 | 29 | |
7d95ded9 TL |
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 | ||
c633c3cf JCPV |
52 | #elif defined(CONFIG_CPU_XSCALE) |
53 | ||
c633c3cf JCPV |
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 | ||
7d95ded9 TL |
76 | #else |
77 | ||
1da177e4 LT |
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 | |
7d95ded9 TL |
100 | |
101 | #endif /* CONFIG_CPU_V6 */ | |
102 | ||
1da177e4 | 103 | #else |
a09e64fb | 104 | #include <mach/debug-macro.S> |
7d95ded9 | 105 | #endif /* CONFIG_DEBUG_ICEDCC */ |
1da177e4 | 106 | |
0ea12930 JK |
107 | #ifdef CONFIG_MMU |
108 | .macro addruart_current, rx, tmp1, tmp2 | |
639da5ee | 109 | addruart \tmp1, \tmp2, \rx |
0ea12930 JK |
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 | ||
1da177e4 LT |
123 | /* |
124 | * Useful debugging routines | |
125 | */ | |
126 | ENTRY(printhex8) | |
127 | mov r1, #8 | |
128 | b printhex | |
93ed3970 | 129 | ENDPROC(printhex8) |
1da177e4 LT |
130 | |
131 | ENTRY(printhex4) | |
132 | mov r1, #4 | |
133 | b printhex | |
93ed3970 | 134 | ENDPROC(printhex4) |
1da177e4 LT |
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 | |
93ed3970 | 152 | ENDPROC(printhex2) |
1da177e4 | 153 | |
b55fa188 AM |
154 | hexbuf: .space 16 |
155 | ||
1da177e4 LT |
156 | .ltorg |
157 | ||
158 | ENTRY(printascii) | |
0ea12930 | 159 | addruart_current r3, r1, r2 |
1da177e4 LT |
160 | b 2f |
161 | 1: waituart r2, r3 | |
162 | senduart r1, r3 | |
163 | busyuart r2, r3 | |
164 | teq r1, #'\n' | |
165 | moveq r1, #'\r' | |
166 | beq 1b | |
167 | 2: teq r0, #0 | |
168 | ldrneb r1, [r0], #1 | |
169 | teqne r1, #0 | |
170 | bne 1b | |
171 | mov pc, lr | |
93ed3970 | 172 | ENDPROC(printascii) |
1da177e4 LT |
173 | |
174 | ENTRY(printch) | |
0ea12930 | 175 | addruart_current r3, r1, r2 |
1da177e4 LT |
176 | mov r1, r0 |
177 | mov r0, #0 | |
178 | b 1b | |
93ed3970 | 179 | ENDPROC(printch) |