xref: /openbmc/linux/arch/arm/kernel/debug.S (revision 0ea1293009826da45e1019f45dfde1e557bb30df)
11da177e4SLinus Torvalds/*
21da177e4SLinus Torvalds *  linux/arch/arm/kernel/debug.S
31da177e4SLinus Torvalds *
41da177e4SLinus Torvalds *  Copyright (C) 1994-1999 Russell King
51da177e4SLinus Torvalds *
61da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or modify
71da177e4SLinus Torvalds * it under the terms of the GNU General Public License version 2 as
81da177e4SLinus Torvalds * published by the Free Software Foundation.
91da177e4SLinus Torvalds *
101da177e4SLinus Torvalds *  32-bit debugging code
111da177e4SLinus Torvalds */
121da177e4SLinus Torvalds#include <linux/linkage.h>
131da177e4SLinus Torvalds
141da177e4SLinus Torvalds		.text
151da177e4SLinus Torvalds
161da177e4SLinus Torvalds/*
171da177e4SLinus Torvalds * Some debugging routines (useful if you've got MM problems and
181da177e4SLinus Torvalds * printk isn't working).  For DEBUGGING ONLY!!!  Do not leave
191da177e4SLinus Torvalds * references to these in a production kernel!
201da177e4SLinus Torvalds */
211da177e4SLinus Torvalds
221da177e4SLinus Torvalds#if defined(CONFIG_DEBUG_ICEDCC)
231da177e4SLinus Torvalds		@@ debug using ARM EmbeddedICE DCC channel
247d95ded9STony Lindgren
25*0ea12930SJeremy Kerr		.macro	addruart, rp, rv
267d95ded9STony Lindgren		.endm
277d95ded9STony Lindgren
281ea64615SJeremy Kerr#if defined(CONFIG_CPU_V6)
291ea64615SJeremy Kerr
307d95ded9STony Lindgren		.macro	senduart, rd, rx
317d95ded9STony Lindgren		mcr	p14, 0, \rd, c0, c5, 0
327d95ded9STony Lindgren		.endm
337d95ded9STony Lindgren
347d95ded9STony Lindgren		.macro	busyuart, rd, rx
357d95ded9STony Lindgren1001:
367d95ded9STony Lindgren		mrc	p14, 0, \rx, c0, c1, 0
377d95ded9STony Lindgren		tst	\rx, #0x20000000
387d95ded9STony Lindgren		beq	1001b
397d95ded9STony Lindgren		.endm
407d95ded9STony Lindgren
417d95ded9STony Lindgren		.macro	waituart, rd, rx
427d95ded9STony Lindgren		mov	\rd, #0x2000000
437d95ded9STony Lindgren1001:
447d95ded9STony Lindgren		subs	\rd, \rd, #1
457d95ded9STony Lindgren		bmi	1002f
467d95ded9STony Lindgren		mrc	p14, 0, \rx, c0, c1, 0
477d95ded9STony Lindgren		tst	\rx, #0x20000000
487d95ded9STony Lindgren		bne	1001b
497d95ded9STony Lindgren1002:
507d95ded9STony Lindgren		.endm
517d95ded9STony Lindgren
52200b7a8dSTony Lindgren#elif defined(CONFIG_CPU_V7)
53200b7a8dSTony Lindgren
54200b7a8dSTony Lindgren		.macro	senduart, rd, rx
55200b7a8dSTony Lindgren		mcr	p14, 0, \rd, c0, c5, 0
56200b7a8dSTony Lindgren		.endm
57200b7a8dSTony Lindgren
58200b7a8dSTony Lindgren		.macro	busyuart, rd, rx
59200b7a8dSTony Lindgrenbusy:		mrc	p14, 0, pc, c0, c1, 0
60200b7a8dSTony Lindgren		bcs	busy
61200b7a8dSTony Lindgren		.endm
62200b7a8dSTony Lindgren
63200b7a8dSTony Lindgren		.macro	waituart, rd, rx
64200b7a8dSTony Lindgrenwait:		mrc	p14, 0, pc, c0, c1, 0
65200b7a8dSTony Lindgren		bcs	wait
66200b7a8dSTony Lindgren
67200b7a8dSTony Lindgren		.endm
68200b7a8dSTony Lindgren
69c633c3cfSJean-Christop PLAGNIOL-VILLARD#elif defined(CONFIG_CPU_XSCALE)
70c633c3cfSJean-Christop PLAGNIOL-VILLARD
71c633c3cfSJean-Christop PLAGNIOL-VILLARD		.macro	senduart, rd, rx
72c633c3cfSJean-Christop PLAGNIOL-VILLARD		mcr	p14, 0, \rd, c8, c0, 0
73c633c3cfSJean-Christop PLAGNIOL-VILLARD		.endm
74c633c3cfSJean-Christop PLAGNIOL-VILLARD
75c633c3cfSJean-Christop PLAGNIOL-VILLARD		.macro	busyuart, rd, rx
76c633c3cfSJean-Christop PLAGNIOL-VILLARD1001:
77c633c3cfSJean-Christop PLAGNIOL-VILLARD		mrc	p14, 0, \rx, c14, c0, 0
78c633c3cfSJean-Christop PLAGNIOL-VILLARD		tst	\rx, #0x10000000
79c633c3cfSJean-Christop PLAGNIOL-VILLARD		beq	1001b
80c633c3cfSJean-Christop PLAGNIOL-VILLARD		.endm
81c633c3cfSJean-Christop PLAGNIOL-VILLARD
82c633c3cfSJean-Christop PLAGNIOL-VILLARD		.macro	waituart, rd, rx
83c633c3cfSJean-Christop PLAGNIOL-VILLARD		mov	\rd, #0x10000000
84c633c3cfSJean-Christop PLAGNIOL-VILLARD1001:
85c633c3cfSJean-Christop PLAGNIOL-VILLARD		subs	\rd, \rd, #1
86c633c3cfSJean-Christop PLAGNIOL-VILLARD		bmi	1002f
87c633c3cfSJean-Christop PLAGNIOL-VILLARD		mrc	p14, 0, \rx, c14, c0, 0
88c633c3cfSJean-Christop PLAGNIOL-VILLARD		tst	\rx, #0x10000000
89c633c3cfSJean-Christop PLAGNIOL-VILLARD		bne	1001b
90c633c3cfSJean-Christop PLAGNIOL-VILLARD1002:
91c633c3cfSJean-Christop PLAGNIOL-VILLARD		.endm
92c633c3cfSJean-Christop PLAGNIOL-VILLARD
937d95ded9STony Lindgren#else
947d95ded9STony Lindgren
951da177e4SLinus Torvalds		.macro	senduart, rd, rx
961da177e4SLinus Torvalds		mcr	p14, 0, \rd, c1, c0, 0
971da177e4SLinus Torvalds		.endm
981da177e4SLinus Torvalds
991da177e4SLinus Torvalds		.macro	busyuart, rd, rx
1001da177e4SLinus Torvalds1001:
1011da177e4SLinus Torvalds		mrc	p14, 0, \rx, c0, c0, 0
1021da177e4SLinus Torvalds		tst	\rx, #2
1031da177e4SLinus Torvalds		beq	1001b
1041da177e4SLinus Torvalds
1051da177e4SLinus Torvalds		.endm
1061da177e4SLinus Torvalds
1071da177e4SLinus Torvalds		.macro	waituart, rd, rx
1081da177e4SLinus Torvalds		mov	\rd, #0x2000000
1091da177e4SLinus Torvalds1001:
1101da177e4SLinus Torvalds		subs	\rd, \rd, #1
1111da177e4SLinus Torvalds		bmi	1002f
1121da177e4SLinus Torvalds		mrc	p14, 0, \rx, c0, c0, 0
1131da177e4SLinus Torvalds		tst	\rx, #2
1141da177e4SLinus Torvalds		bne	1001b
1151da177e4SLinus Torvalds1002:
1161da177e4SLinus Torvalds		.endm
1177d95ded9STony Lindgren
1187d95ded9STony Lindgren#endif	/* CONFIG_CPU_V6 */
1197d95ded9STony Lindgren
1201da177e4SLinus Torvalds#else
121a09e64fbSRussell King#include <mach/debug-macro.S>
1227d95ded9STony Lindgren#endif	/* CONFIG_DEBUG_ICEDCC */
1231da177e4SLinus Torvalds
124*0ea12930SJeremy Kerr#ifdef CONFIG_MMU
125*0ea12930SJeremy Kerr		.macro	addruart_current, rx, tmp1, tmp2
126*0ea12930SJeremy Kerr		addruart	\tmp1, \tmp2
127*0ea12930SJeremy Kerr		mrc		p15, 0, \rx, c1, c0
128*0ea12930SJeremy Kerr		tst		\rx, #1
129*0ea12930SJeremy Kerr		moveq		\rx, \tmp1
130*0ea12930SJeremy Kerr		movne		\rx, \tmp2
131*0ea12930SJeremy Kerr		.endm
132*0ea12930SJeremy Kerr
133*0ea12930SJeremy Kerr#else /* !CONFIG_MMU */
134*0ea12930SJeremy Kerr		.macro	addruart_current, rx, tmp1, tmp2
135*0ea12930SJeremy Kerr		addruart	\rx, \tmp1
136*0ea12930SJeremy Kerr		.endm
137*0ea12930SJeremy Kerr
138*0ea12930SJeremy Kerr#endif /* CONFIG_MMU */
139*0ea12930SJeremy Kerr
1401da177e4SLinus Torvalds/*
1411da177e4SLinus Torvalds * Useful debugging routines
1421da177e4SLinus Torvalds */
1431da177e4SLinus TorvaldsENTRY(printhex8)
1441da177e4SLinus Torvalds		mov	r1, #8
1451da177e4SLinus Torvalds		b	printhex
14693ed3970SCatalin MarinasENDPROC(printhex8)
1471da177e4SLinus Torvalds
1481da177e4SLinus TorvaldsENTRY(printhex4)
1491da177e4SLinus Torvalds		mov	r1, #4
1501da177e4SLinus Torvalds		b	printhex
15193ed3970SCatalin MarinasENDPROC(printhex4)
1521da177e4SLinus Torvalds
1531da177e4SLinus TorvaldsENTRY(printhex2)
1541da177e4SLinus Torvalds		mov	r1, #2
1551da177e4SLinus Torvaldsprinthex:	adr	r2, hexbuf
1561da177e4SLinus Torvalds		add	r3, r2, r1
1571da177e4SLinus Torvalds		mov	r1, #0
1581da177e4SLinus Torvalds		strb	r1, [r3]
1591da177e4SLinus Torvalds1:		and	r1, r0, #15
1601da177e4SLinus Torvalds		mov	r0, r0, lsr #4
1611da177e4SLinus Torvalds		cmp	r1, #10
1621da177e4SLinus Torvalds		addlt	r1, r1, #'0'
1631da177e4SLinus Torvalds		addge	r1, r1, #'a' - 10
1641da177e4SLinus Torvalds		strb	r1, [r3, #-1]!
1651da177e4SLinus Torvalds		teq	r3, r2
1661da177e4SLinus Torvalds		bne	1b
1671da177e4SLinus Torvalds		mov	r0, r2
1681da177e4SLinus Torvalds		b	printascii
16993ed3970SCatalin MarinasENDPROC(printhex2)
1701da177e4SLinus Torvalds
1711da177e4SLinus Torvalds		.ltorg
1721da177e4SLinus Torvalds
1731da177e4SLinus TorvaldsENTRY(printascii)
174*0ea12930SJeremy Kerr		addruart_current r3, r1, r2
1751da177e4SLinus Torvalds		b	2f
1761da177e4SLinus Torvalds1:		waituart r2, r3
1771da177e4SLinus Torvalds		senduart r1, r3
1781da177e4SLinus Torvalds		busyuart r2, r3
1791da177e4SLinus Torvalds		teq	r1, #'\n'
1801da177e4SLinus Torvalds		moveq	r1, #'\r'
1811da177e4SLinus Torvalds		beq	1b
1821da177e4SLinus Torvalds2:		teq	r0, #0
1831da177e4SLinus Torvalds		ldrneb	r1, [r0], #1
1841da177e4SLinus Torvalds		teqne	r1, #0
1851da177e4SLinus Torvalds		bne	1b
1861da177e4SLinus Torvalds		mov	pc, lr
18793ed3970SCatalin MarinasENDPROC(printascii)
1881da177e4SLinus Torvalds
1891da177e4SLinus TorvaldsENTRY(printch)
190*0ea12930SJeremy Kerr		addruart_current r3, r1, r2
1911da177e4SLinus Torvalds		mov	r1, r0
1921da177e4SLinus Torvalds		mov	r0, #0
1931da177e4SLinus Torvalds		b	1b
19493ed3970SCatalin MarinasENDPROC(printch)
1951da177e4SLinus Torvalds
1961da177e4SLinus Torvaldshexbuf:		.space 16
197