• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/arm/kernel/
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 */
12#include <linux/linkage.h>
13#include <asm/memory.h>
14
15		.text
16
17/*
18 * Some debugging routines (useful if you've got MM problems and
19 * printk isn't working).  For DEBUGGING ONLY!!!  Do not leave
20 * references to these in a production kernel!
21 */
22
23#if defined(CONFIG_DEBUG_ICEDCC)
24		@@ debug using ARM EmbeddedICE DCC channel
25
26#if defined(CONFIG_CPU_V6)
27
28		.macro	addruart, rx, tmp
29		.endm
30
31		.macro	senduart, rd, rx
32		mcr	p14, 0, \rd, c0, c5, 0
33		.endm
34
35		.macro	busyuart, rd, rx
361001:
37		mrc	p14, 0, \rx, c0, c1, 0
38		tst	\rx, #0x20000000
39		beq	1001b
40		.endm
41
42		.macro	waituart, rd, rx
43		mov	\rd, #0x2000000
441001:
45		subs	\rd, \rd, #1
46		bmi	1002f
47		mrc	p14, 0, \rx, c0, c1, 0
48		tst	\rx, #0x20000000
49		bne	1001b
501002:
51		.endm
52
53#elif defined(CONFIG_CPU_V7)
54
55		.macro	addruart, rx, tmp
56		.endm
57
58		.macro	senduart, rd, rx
59		mcr	p14, 0, \rd, c0, c5, 0
60		.endm
61
62		.macro	busyuart, rd, rx
63busy:		mrc	p14, 0, pc, c0, c1, 0
64		bcs	busy
65		.endm
66
67		.macro	waituart, rd, rx
68wait:		mrc	p14, 0, pc, c0, c1, 0
69		bcs	wait
70
71		.endm
72
73#elif defined(CONFIG_CPU_XSCALE)
74
75		.macro	addruart, rx, tmp
76		.endm
77
78		.macro	senduart, rd, rx
79		mcr	p14, 0, \rd, c8, c0, 0
80		.endm
81
82		.macro	busyuart, rd, rx
831001:
84		mrc	p14, 0, \rx, c14, c0, 0
85		tst	\rx, #0x10000000
86		beq	1001b
87		.endm
88
89		.macro	waituart, rd, rx
90		mov	\rd, #0x10000000
911001:
92		subs	\rd, \rd, #1
93		bmi	1002f
94		mrc	p14, 0, \rx, c14, c0, 0
95		tst	\rx, #0x10000000
96		bne	1001b
971002:
98		.endm
99
100#else
101
102		.macro	addruart, rx, tmp
103		.endm
104
105		.macro	senduart, rd, rx
106		mcr	p14, 0, \rd, c1, c0, 0
107		.endm
108
109		.macro	busyuart, rd, rx
1101001:
111		mrc	p14, 0, \rx, c0, c0, 0
112		tst	\rx, #2
113		beq	1001b
114
115		.endm
116
117		.macro	waituart, rd, rx
118		mov	\rd, #0x2000000
1191001:
120		subs	\rd, \rd, #1
121		bmi	1002f
122		mrc	p14, 0, \rx, c0, c0, 0
123		tst	\rx, #2
124		bne	1001b
1251002:
126		.endm
127
128#endif	/* CONFIG_CPU_V6 */
129
130#else
131#include <mach/debug-macro.S>
132#endif	/* CONFIG_DEBUG_ICEDCC */
133
134/*
135 * Useful debugging routines
136 */
137ENTRY(printhex8)
138		mov	r1, #8
139		b	printhex
140ENDPROC(printhex8)
141
142ENTRY(printhex4)
143		mov	r1, #4
144		b	printhex
145ENDPROC(printhex4)
146
147ENTRY(printhex2)
148		mov	r1, #2
149printhex:
150		mrc	p15, 0, r2, c1, c0	@ read SysCtrl
151		tst	r2, #1			@ MMU enabled?
152		ldrne	r2, =hexbuf		@ =1 virtual
153		ldreq	r2, =__virt_to_phys(hexbuf) @ =0 physical
154		add	r3, r2, r1
155		mov	r1, #0
156		strb	r1, [r3]
1571:		and	r1, r0, #15
158		mov	r0, r0, lsr #4
159		cmp	r1, #10
160		addlt	r1, r1, #'0'
161		addge	r1, r1, #'a' - 10
162		strb	r1, [r3, #-1]!
163		teq	r3, r2
164		bne	1b
165		mov	r0, r2
166		b	printascii
167ENDPROC(printhex2)
168
169		.ltorg
170
171ENTRY(printascii)
172		addruart r3, r1
173		b	2f
1741:		waituart r2, r3
175		senduart r1, r3
176		busyuart r2, r3
177		teq	r1, #'\n'
178		moveq	r1, #'\r'
179		beq	1b
1802:		teq	r0, #0
181		ldrneb	r1, [r0], #1
182		teqne	r1, #0
183		bne	1b
184		mov	pc, lr
185ENDPROC(printascii)
186
187ENTRY(printch)
188		addruart r3, r1
189		mov	r1, r0
190		mov	r0, #0
191		b	1b
192ENDPROC(printch)
193
194		.bss
195hexbuf:		.space 16
196