xref: /openbmc/linux/arch/arm/kernel/debug.S (revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2)
1*1da177e4SLinus Torvalds/*
2*1da177e4SLinus Torvalds *  linux/arch/arm/kernel/debug.S
3*1da177e4SLinus Torvalds *
4*1da177e4SLinus Torvalds *  Copyright (C) 1994-1999 Russell King
5*1da177e4SLinus Torvalds *
6*1da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or modify
7*1da177e4SLinus Torvalds * it under the terms of the GNU General Public License version 2 as
8*1da177e4SLinus Torvalds * published by the Free Software Foundation.
9*1da177e4SLinus Torvalds *
10*1da177e4SLinus Torvalds *  32-bit debugging code
11*1da177e4SLinus Torvalds */
12*1da177e4SLinus Torvalds#include <linux/config.h>
13*1da177e4SLinus Torvalds#include <linux/linkage.h>
14*1da177e4SLinus Torvalds#include <asm/hardware.h>
15*1da177e4SLinus Torvalds
16*1da177e4SLinus Torvalds		.text
17*1da177e4SLinus Torvalds
18*1da177e4SLinus Torvalds/*
19*1da177e4SLinus Torvalds * Some debugging routines (useful if you've got MM problems and
20*1da177e4SLinus Torvalds * printk isn't working).  For DEBUGGING ONLY!!!  Do not leave
21*1da177e4SLinus Torvalds * references to these in a production kernel!
22*1da177e4SLinus Torvalds */
23*1da177e4SLinus Torvalds
24*1da177e4SLinus Torvalds#if defined(CONFIG_DEBUG_ICEDCC)
25*1da177e4SLinus Torvalds		@@ debug using ARM EmbeddedICE DCC channel
26*1da177e4SLinus Torvalds		.macro	addruart, rx
27*1da177e4SLinus Torvalds		.endm
28*1da177e4SLinus Torvalds
29*1da177e4SLinus Torvalds		.macro	senduart, rd, rx
30*1da177e4SLinus Torvalds		mcr	p14, 0, \rd, c1, c0, 0
31*1da177e4SLinus Torvalds		.endm
32*1da177e4SLinus Torvalds
33*1da177e4SLinus Torvalds		.macro	busyuart, rd, rx
34*1da177e4SLinus Torvalds1001:
35*1da177e4SLinus Torvalds		mrc	p14, 0, \rx, c0, c0, 0
36*1da177e4SLinus Torvalds		tst	\rx, #2
37*1da177e4SLinus Torvalds		beq	1001b
38*1da177e4SLinus Torvalds
39*1da177e4SLinus Torvalds		.endm
40*1da177e4SLinus Torvalds
41*1da177e4SLinus Torvalds		.macro	waituart, rd, rx
42*1da177e4SLinus Torvalds		mov	\rd, #0x2000000
43*1da177e4SLinus Torvalds1001:
44*1da177e4SLinus Torvalds		subs	\rd, \rd, #1
45*1da177e4SLinus Torvalds		bmi	1002f
46*1da177e4SLinus Torvalds		mrc	p14, 0, \rx, c0, c0, 0
47*1da177e4SLinus Torvalds		tst	\rx, #2
48*1da177e4SLinus Torvalds		bne	1001b
49*1da177e4SLinus Torvalds1002:
50*1da177e4SLinus Torvalds		.endm
51*1da177e4SLinus Torvalds#else
52*1da177e4SLinus Torvalds#include <asm/arch/debug-macro.S>
53*1da177e4SLinus Torvalds#endif
54*1da177e4SLinus Torvalds
55*1da177e4SLinus Torvalds/*
56*1da177e4SLinus Torvalds * Useful debugging routines
57*1da177e4SLinus Torvalds */
58*1da177e4SLinus TorvaldsENTRY(printhex8)
59*1da177e4SLinus Torvalds		mov	r1, #8
60*1da177e4SLinus Torvalds		b	printhex
61*1da177e4SLinus Torvalds
62*1da177e4SLinus TorvaldsENTRY(printhex4)
63*1da177e4SLinus Torvalds		mov	r1, #4
64*1da177e4SLinus Torvalds		b	printhex
65*1da177e4SLinus Torvalds
66*1da177e4SLinus TorvaldsENTRY(printhex2)
67*1da177e4SLinus Torvalds		mov	r1, #2
68*1da177e4SLinus Torvaldsprinthex:	adr	r2, hexbuf
69*1da177e4SLinus Torvalds		add	r3, r2, r1
70*1da177e4SLinus Torvalds		mov	r1, #0
71*1da177e4SLinus Torvalds		strb	r1, [r3]
72*1da177e4SLinus Torvalds1:		and	r1, r0, #15
73*1da177e4SLinus Torvalds		mov	r0, r0, lsr #4
74*1da177e4SLinus Torvalds		cmp	r1, #10
75*1da177e4SLinus Torvalds		addlt	r1, r1, #'0'
76*1da177e4SLinus Torvalds		addge	r1, r1, #'a' - 10
77*1da177e4SLinus Torvalds		strb	r1, [r3, #-1]!
78*1da177e4SLinus Torvalds		teq	r3, r2
79*1da177e4SLinus Torvalds		bne	1b
80*1da177e4SLinus Torvalds		mov	r0, r2
81*1da177e4SLinus Torvalds		b	printascii
82*1da177e4SLinus Torvalds
83*1da177e4SLinus Torvalds		.ltorg
84*1da177e4SLinus Torvalds
85*1da177e4SLinus TorvaldsENTRY(printascii)
86*1da177e4SLinus Torvalds		addruart r3
87*1da177e4SLinus Torvalds		b	2f
88*1da177e4SLinus Torvalds1:		waituart r2, r3
89*1da177e4SLinus Torvalds		senduart r1, r3
90*1da177e4SLinus Torvalds		busyuart r2, r3
91*1da177e4SLinus Torvalds		teq	r1, #'\n'
92*1da177e4SLinus Torvalds		moveq	r1, #'\r'
93*1da177e4SLinus Torvalds		beq	1b
94*1da177e4SLinus Torvalds2:		teq	r0, #0
95*1da177e4SLinus Torvalds		ldrneb	r1, [r0], #1
96*1da177e4SLinus Torvalds		teqne	r1, #0
97*1da177e4SLinus Torvalds		bne	1b
98*1da177e4SLinus Torvalds		mov	pc, lr
99*1da177e4SLinus Torvalds
100*1da177e4SLinus TorvaldsENTRY(printch)
101*1da177e4SLinus Torvalds		addruart r3
102*1da177e4SLinus Torvalds		mov	r1, r0
103*1da177e4SLinus Torvalds		mov	r0, #0
104*1da177e4SLinus Torvalds		b	1b
105*1da177e4SLinus Torvalds
106*1da177e4SLinus Torvaldshexbuf:		.space 16
107