xref: /openbmc/linux/arch/arm/kernel/debug.S (revision 200b7a8dc09504bc0aedac567a307a6e533f39e5)
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
257d95ded9STony Lindgren#if defined(CONFIG_CPU_V6)
267d95ded9STony Lindgren
277d95ded9STony Lindgren		.macro	addruart, rx
287d95ded9STony Lindgren		.endm
297d95ded9STony Lindgren
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
52*200b7a8dSTony Lindgren#elif defined(CONFIG_CPU_V7)
53*200b7a8dSTony Lindgren
54*200b7a8dSTony Lindgren		.macro	addruart, rx
55*200b7a8dSTony Lindgren		.endm
56*200b7a8dSTony Lindgren
57*200b7a8dSTony Lindgren		.macro	senduart, rd, rx
58*200b7a8dSTony Lindgren		mcr	p14, 0, \rd, c0, c5, 0
59*200b7a8dSTony Lindgren		.endm
60*200b7a8dSTony Lindgren
61*200b7a8dSTony Lindgren		.macro	busyuart, rd, rx
62*200b7a8dSTony Lindgrenbusy:		mrc	p14, 0, pc, c0, c1, 0
63*200b7a8dSTony Lindgren		bcs	busy
64*200b7a8dSTony Lindgren		.endm
65*200b7a8dSTony Lindgren
66*200b7a8dSTony Lindgren		.macro	waituart, rd, rx
67*200b7a8dSTony Lindgrenwait:		mrc	p14, 0, pc, c0, c1, 0
68*200b7a8dSTony Lindgren		bcs	wait
69*200b7a8dSTony Lindgren
70*200b7a8dSTony Lindgren		.endm
71*200b7a8dSTony Lindgren
72c633c3cfSJean-Christop PLAGNIOL-VILLARD#elif defined(CONFIG_CPU_XSCALE)
73c633c3cfSJean-Christop PLAGNIOL-VILLARD
74c633c3cfSJean-Christop PLAGNIOL-VILLARD		.macro	addruart, rx
75c633c3cfSJean-Christop PLAGNIOL-VILLARD		.endm
76c633c3cfSJean-Christop PLAGNIOL-VILLARD
77c633c3cfSJean-Christop PLAGNIOL-VILLARD		.macro	senduart, rd, rx
78c633c3cfSJean-Christop PLAGNIOL-VILLARD		mcr	p14, 0, \rd, c8, c0, 0
79c633c3cfSJean-Christop PLAGNIOL-VILLARD		.endm
80c633c3cfSJean-Christop PLAGNIOL-VILLARD
81c633c3cfSJean-Christop PLAGNIOL-VILLARD		.macro	busyuart, rd, rx
82c633c3cfSJean-Christop PLAGNIOL-VILLARD1001:
83c633c3cfSJean-Christop PLAGNIOL-VILLARD		mrc	p14, 0, \rx, c14, c0, 0
84c633c3cfSJean-Christop PLAGNIOL-VILLARD		tst	\rx, #0x10000000
85c633c3cfSJean-Christop PLAGNIOL-VILLARD		beq	1001b
86c633c3cfSJean-Christop PLAGNIOL-VILLARD		.endm
87c633c3cfSJean-Christop PLAGNIOL-VILLARD
88c633c3cfSJean-Christop PLAGNIOL-VILLARD		.macro	waituart, rd, rx
89c633c3cfSJean-Christop PLAGNIOL-VILLARD		mov	\rd, #0x10000000
90c633c3cfSJean-Christop PLAGNIOL-VILLARD1001:
91c633c3cfSJean-Christop PLAGNIOL-VILLARD		subs	\rd, \rd, #1
92c633c3cfSJean-Christop PLAGNIOL-VILLARD		bmi	1002f
93c633c3cfSJean-Christop PLAGNIOL-VILLARD		mrc	p14, 0, \rx, c14, c0, 0
94c633c3cfSJean-Christop PLAGNIOL-VILLARD		tst	\rx, #0x10000000
95c633c3cfSJean-Christop PLAGNIOL-VILLARD		bne	1001b
96c633c3cfSJean-Christop PLAGNIOL-VILLARD1002:
97c633c3cfSJean-Christop PLAGNIOL-VILLARD		.endm
98c633c3cfSJean-Christop PLAGNIOL-VILLARD
997d95ded9STony Lindgren#else
1007d95ded9STony Lindgren
1011da177e4SLinus Torvalds		.macro	addruart, rx
1021da177e4SLinus Torvalds		.endm
1031da177e4SLinus Torvalds
1041da177e4SLinus Torvalds		.macro	senduart, rd, rx
1051da177e4SLinus Torvalds		mcr	p14, 0, \rd, c1, c0, 0
1061da177e4SLinus Torvalds		.endm
1071da177e4SLinus Torvalds
1081da177e4SLinus Torvalds		.macro	busyuart, rd, rx
1091da177e4SLinus Torvalds1001:
1101da177e4SLinus Torvalds		mrc	p14, 0, \rx, c0, c0, 0
1111da177e4SLinus Torvalds		tst	\rx, #2
1121da177e4SLinus Torvalds		beq	1001b
1131da177e4SLinus Torvalds
1141da177e4SLinus Torvalds		.endm
1151da177e4SLinus Torvalds
1161da177e4SLinus Torvalds		.macro	waituart, rd, rx
1171da177e4SLinus Torvalds		mov	\rd, #0x2000000
1181da177e4SLinus Torvalds1001:
1191da177e4SLinus Torvalds		subs	\rd, \rd, #1
1201da177e4SLinus Torvalds		bmi	1002f
1211da177e4SLinus Torvalds		mrc	p14, 0, \rx, c0, c0, 0
1221da177e4SLinus Torvalds		tst	\rx, #2
1231da177e4SLinus Torvalds		bne	1001b
1241da177e4SLinus Torvalds1002:
1251da177e4SLinus Torvalds		.endm
1267d95ded9STony Lindgren
1277d95ded9STony Lindgren#endif	/* CONFIG_CPU_V6 */
1287d95ded9STony Lindgren
1291da177e4SLinus Torvalds#else
130a09e64fbSRussell King#include <mach/debug-macro.S>
1317d95ded9STony Lindgren#endif	/* CONFIG_DEBUG_ICEDCC */
1321da177e4SLinus Torvalds
1331da177e4SLinus Torvalds/*
1341da177e4SLinus Torvalds * Useful debugging routines
1351da177e4SLinus Torvalds */
1361da177e4SLinus TorvaldsENTRY(printhex8)
1371da177e4SLinus Torvalds		mov	r1, #8
1381da177e4SLinus Torvalds		b	printhex
13993ed3970SCatalin MarinasENDPROC(printhex8)
1401da177e4SLinus Torvalds
1411da177e4SLinus TorvaldsENTRY(printhex4)
1421da177e4SLinus Torvalds		mov	r1, #4
1431da177e4SLinus Torvalds		b	printhex
14493ed3970SCatalin MarinasENDPROC(printhex4)
1451da177e4SLinus Torvalds
1461da177e4SLinus TorvaldsENTRY(printhex2)
1471da177e4SLinus Torvalds		mov	r1, #2
1481da177e4SLinus Torvaldsprinthex:	adr	r2, hexbuf
1491da177e4SLinus Torvalds		add	r3, r2, r1
1501da177e4SLinus Torvalds		mov	r1, #0
1511da177e4SLinus Torvalds		strb	r1, [r3]
1521da177e4SLinus Torvalds1:		and	r1, r0, #15
1531da177e4SLinus Torvalds		mov	r0, r0, lsr #4
1541da177e4SLinus Torvalds		cmp	r1, #10
1551da177e4SLinus Torvalds		addlt	r1, r1, #'0'
1561da177e4SLinus Torvalds		addge	r1, r1, #'a' - 10
1571da177e4SLinus Torvalds		strb	r1, [r3, #-1]!
1581da177e4SLinus Torvalds		teq	r3, r2
1591da177e4SLinus Torvalds		bne	1b
1601da177e4SLinus Torvalds		mov	r0, r2
1611da177e4SLinus Torvalds		b	printascii
16293ed3970SCatalin MarinasENDPROC(printhex2)
1631da177e4SLinus Torvalds
1641da177e4SLinus Torvalds		.ltorg
1651da177e4SLinus Torvalds
1661da177e4SLinus TorvaldsENTRY(printascii)
1671da177e4SLinus Torvalds		addruart r3
1681da177e4SLinus Torvalds		b	2f
1691da177e4SLinus Torvalds1:		waituart r2, r3
1701da177e4SLinus Torvalds		senduart r1, r3
1711da177e4SLinus Torvalds		busyuart r2, r3
1721da177e4SLinus Torvalds		teq	r1, #'\n'
1731da177e4SLinus Torvalds		moveq	r1, #'\r'
1741da177e4SLinus Torvalds		beq	1b
1751da177e4SLinus Torvalds2:		teq	r0, #0
1761da177e4SLinus Torvalds		ldrneb	r1, [r0], #1
1771da177e4SLinus Torvalds		teqne	r1, #0
1781da177e4SLinus Torvalds		bne	1b
1791da177e4SLinus Torvalds		mov	pc, lr
18093ed3970SCatalin MarinasENDPROC(printascii)
1811da177e4SLinus Torvalds
1821da177e4SLinus TorvaldsENTRY(printch)
1831da177e4SLinus Torvalds		addruart r3
1841da177e4SLinus Torvalds		mov	r1, r0
1851da177e4SLinus Torvalds		mov	r0, #0
1861da177e4SLinus Torvalds		b	1b
18793ed3970SCatalin MarinasENDPROC(printch)
1881da177e4SLinus Torvalds
1891da177e4SLinus Torvaldshexbuf:		.space 16
190