xref: /openbmc/linux/arch/arm/kernel/debug.S (revision 93ed3970114983543bbebd195bef65db84444ea2)
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
527d95ded9STony Lindgren#else
537d95ded9STony Lindgren
541da177e4SLinus Torvalds		.macro	addruart, rx
551da177e4SLinus Torvalds		.endm
561da177e4SLinus Torvalds
571da177e4SLinus Torvalds		.macro	senduart, rd, rx
581da177e4SLinus Torvalds		mcr	p14, 0, \rd, c1, c0, 0
591da177e4SLinus Torvalds		.endm
601da177e4SLinus Torvalds
611da177e4SLinus Torvalds		.macro	busyuart, rd, rx
621da177e4SLinus Torvalds1001:
631da177e4SLinus Torvalds		mrc	p14, 0, \rx, c0, c0, 0
641da177e4SLinus Torvalds		tst	\rx, #2
651da177e4SLinus Torvalds		beq	1001b
661da177e4SLinus Torvalds
671da177e4SLinus Torvalds		.endm
681da177e4SLinus Torvalds
691da177e4SLinus Torvalds		.macro	waituart, rd, rx
701da177e4SLinus Torvalds		mov	\rd, #0x2000000
711da177e4SLinus Torvalds1001:
721da177e4SLinus Torvalds		subs	\rd, \rd, #1
731da177e4SLinus Torvalds		bmi	1002f
741da177e4SLinus Torvalds		mrc	p14, 0, \rx, c0, c0, 0
751da177e4SLinus Torvalds		tst	\rx, #2
761da177e4SLinus Torvalds		bne	1001b
771da177e4SLinus Torvalds1002:
781da177e4SLinus Torvalds		.endm
797d95ded9STony Lindgren
807d95ded9STony Lindgren#endif	/* CONFIG_CPU_V6 */
817d95ded9STony Lindgren
821da177e4SLinus Torvalds#else
83a09e64fbSRussell King#include <mach/debug-macro.S>
847d95ded9STony Lindgren#endif	/* CONFIG_DEBUG_ICEDCC */
851da177e4SLinus Torvalds
861da177e4SLinus Torvalds/*
871da177e4SLinus Torvalds * Useful debugging routines
881da177e4SLinus Torvalds */
891da177e4SLinus TorvaldsENTRY(printhex8)
901da177e4SLinus Torvalds		mov	r1, #8
911da177e4SLinus Torvalds		b	printhex
92*93ed3970SCatalin MarinasENDPROC(printhex8)
931da177e4SLinus Torvalds
941da177e4SLinus TorvaldsENTRY(printhex4)
951da177e4SLinus Torvalds		mov	r1, #4
961da177e4SLinus Torvalds		b	printhex
97*93ed3970SCatalin MarinasENDPROC(printhex4)
981da177e4SLinus Torvalds
991da177e4SLinus TorvaldsENTRY(printhex2)
1001da177e4SLinus Torvalds		mov	r1, #2
1011da177e4SLinus Torvaldsprinthex:	adr	r2, hexbuf
1021da177e4SLinus Torvalds		add	r3, r2, r1
1031da177e4SLinus Torvalds		mov	r1, #0
1041da177e4SLinus Torvalds		strb	r1, [r3]
1051da177e4SLinus Torvalds1:		and	r1, r0, #15
1061da177e4SLinus Torvalds		mov	r0, r0, lsr #4
1071da177e4SLinus Torvalds		cmp	r1, #10
1081da177e4SLinus Torvalds		addlt	r1, r1, #'0'
1091da177e4SLinus Torvalds		addge	r1, r1, #'a' - 10
1101da177e4SLinus Torvalds		strb	r1, [r3, #-1]!
1111da177e4SLinus Torvalds		teq	r3, r2
1121da177e4SLinus Torvalds		bne	1b
1131da177e4SLinus Torvalds		mov	r0, r2
1141da177e4SLinus Torvalds		b	printascii
115*93ed3970SCatalin MarinasENDPROC(printhex2)
1161da177e4SLinus Torvalds
1171da177e4SLinus Torvalds		.ltorg
1181da177e4SLinus Torvalds
1191da177e4SLinus TorvaldsENTRY(printascii)
1201da177e4SLinus Torvalds		addruart r3
1211da177e4SLinus Torvalds		b	2f
1221da177e4SLinus Torvalds1:		waituart r2, r3
1231da177e4SLinus Torvalds		senduart r1, r3
1241da177e4SLinus Torvalds		busyuart r2, r3
1251da177e4SLinus Torvalds		teq	r1, #'\n'
1261da177e4SLinus Torvalds		moveq	r1, #'\r'
1271da177e4SLinus Torvalds		beq	1b
1281da177e4SLinus Torvalds2:		teq	r0, #0
1291da177e4SLinus Torvalds		ldrneb	r1, [r0], #1
1301da177e4SLinus Torvalds		teqne	r1, #0
1311da177e4SLinus Torvalds		bne	1b
1321da177e4SLinus Torvalds		mov	pc, lr
133*93ed3970SCatalin MarinasENDPROC(printascii)
1341da177e4SLinus Torvalds
1351da177e4SLinus TorvaldsENTRY(printch)
1361da177e4SLinus Torvalds		addruart r3
1371da177e4SLinus Torvalds		mov	r1, r0
1381da177e4SLinus Torvalds		mov	r0, #0
1391da177e4SLinus Torvalds		b	1b
140*93ed3970SCatalin MarinasENDPROC(printch)
1411da177e4SLinus Torvalds
1421da177e4SLinus Torvaldshexbuf:		.space 16
143