xref: /openbmc/u-boot/arch/arm/lib/debug.S (revision b81fa615)
11cfe9fa0SMasahiro Yamada/*
21cfe9fa0SMasahiro Yamada *  linux/arch/arm/kernel/debug.S
31cfe9fa0SMasahiro Yamada *
41cfe9fa0SMasahiro Yamada *  Copyright (C) 1994-1999 Russell King
51cfe9fa0SMasahiro Yamada *
693456512SMasahiro Yamada * SPDX-License-Identifier:	GPL-2.0+
71cfe9fa0SMasahiro Yamada *
81cfe9fa0SMasahiro Yamada *  32-bit debugging code
91cfe9fa0SMasahiro Yamada */
101cfe9fa0SMasahiro Yamada#include <linux/linkage.h>
111cfe9fa0SMasahiro Yamada#include <asm/assembler.h>
121cfe9fa0SMasahiro Yamada
131cfe9fa0SMasahiro Yamada		.text
141cfe9fa0SMasahiro Yamada
151cfe9fa0SMasahiro Yamada/*
161cfe9fa0SMasahiro Yamada * Some debugging routines (useful if you've got MM problems and
171cfe9fa0SMasahiro Yamada * printk isn't working).  For DEBUGGING ONLY!!!  Do not leave
181cfe9fa0SMasahiro Yamada * references to these in a production kernel!
191cfe9fa0SMasahiro Yamada */
201cfe9fa0SMasahiro Yamada
211cfe9fa0SMasahiro Yamada#if !defined(CONFIG_DEBUG_SEMIHOSTING)
221cfe9fa0SMasahiro Yamada#include CONFIG_DEBUG_LL_INCLUDE
231cfe9fa0SMasahiro Yamada#endif
241cfe9fa0SMasahiro Yamada
251cfe9fa0SMasahiro Yamada#ifdef CONFIG_MMU
261cfe9fa0SMasahiro Yamada		.macro	addruart_current, rx, tmp1, tmp2
271cfe9fa0SMasahiro Yamada		addruart	\tmp1, \tmp2, \rx
281cfe9fa0SMasahiro Yamada		mrc		p15, 0, \rx, c1, c0
291cfe9fa0SMasahiro Yamada		tst		\rx, #1
301cfe9fa0SMasahiro Yamada		moveq		\rx, \tmp1
311cfe9fa0SMasahiro Yamada		movne		\rx, \tmp2
321cfe9fa0SMasahiro Yamada		.endm
331cfe9fa0SMasahiro Yamada
341cfe9fa0SMasahiro Yamada#else /* !CONFIG_MMU */
351cfe9fa0SMasahiro Yamada		.macro	addruart_current, rx, tmp1, tmp2
36*b81fa615SMasahiro Yamada		addruart	\rx, \tmp1, \tmp2
371cfe9fa0SMasahiro Yamada		.endm
381cfe9fa0SMasahiro Yamada
391cfe9fa0SMasahiro Yamada#endif /* CONFIG_MMU */
401cfe9fa0SMasahiro Yamada
411cfe9fa0SMasahiro Yamada/*
421cfe9fa0SMasahiro Yamada * Useful debugging routines
431cfe9fa0SMasahiro Yamada */
441cfe9fa0SMasahiro YamadaENTRY(printhex8)
451cfe9fa0SMasahiro Yamada		mov	r1, #8
461cfe9fa0SMasahiro Yamada		b	printhex
471cfe9fa0SMasahiro YamadaENDPROC(printhex8)
481cfe9fa0SMasahiro Yamada
491cfe9fa0SMasahiro YamadaENTRY(printhex4)
501cfe9fa0SMasahiro Yamada		mov	r1, #4
511cfe9fa0SMasahiro Yamada		b	printhex
521cfe9fa0SMasahiro YamadaENDPROC(printhex4)
531cfe9fa0SMasahiro Yamada
541cfe9fa0SMasahiro YamadaENTRY(printhex2)
551cfe9fa0SMasahiro Yamada		mov	r1, #2
561cfe9fa0SMasahiro Yamadaprinthex:	adr	r2, hexbuf
571cfe9fa0SMasahiro Yamada		add	r3, r2, r1
581cfe9fa0SMasahiro Yamada		mov	r1, #0
591cfe9fa0SMasahiro Yamada		strb	r1, [r3]
601cfe9fa0SMasahiro Yamada1:		and	r1, r0, #15
611cfe9fa0SMasahiro Yamada		mov	r0, r0, lsr #4
621cfe9fa0SMasahiro Yamada		cmp	r1, #10
631cfe9fa0SMasahiro Yamada		addlt	r1, r1, #'0'
641cfe9fa0SMasahiro Yamada		addge	r1, r1, #'a' - 10
651cfe9fa0SMasahiro Yamada		strb	r1, [r3, #-1]!
661cfe9fa0SMasahiro Yamada		teq	r3, r2
671cfe9fa0SMasahiro Yamada		bne	1b
681cfe9fa0SMasahiro Yamada		mov	r0, r2
691cfe9fa0SMasahiro Yamada		b	printascii
701cfe9fa0SMasahiro YamadaENDPROC(printhex2)
711cfe9fa0SMasahiro Yamada
721cfe9fa0SMasahiro Yamadahexbuf:		.space 16
731cfe9fa0SMasahiro Yamada
741cfe9fa0SMasahiro Yamada		.ltorg
751cfe9fa0SMasahiro Yamada
761cfe9fa0SMasahiro Yamada#ifndef CONFIG_DEBUG_SEMIHOSTING
771cfe9fa0SMasahiro Yamada
781cfe9fa0SMasahiro YamadaENTRY(printascii)
791cfe9fa0SMasahiro Yamada		addruart_current r3, r1, r2
801cfe9fa0SMasahiro Yamada		b	2f
811cfe9fa0SMasahiro Yamada1:		waituart r2, r3
821cfe9fa0SMasahiro Yamada		senduart r1, r3
831cfe9fa0SMasahiro Yamada		busyuart r2, r3
841cfe9fa0SMasahiro Yamada		teq	r1, #'\n'
851cfe9fa0SMasahiro Yamada		moveq	r1, #'\r'
861cfe9fa0SMasahiro Yamada		beq	1b
871cfe9fa0SMasahiro Yamada2:		teq	r0, #0
881cfe9fa0SMasahiro Yamada		ldrneb	r1, [r0], #1
891cfe9fa0SMasahiro Yamada		teqne	r1, #0
901cfe9fa0SMasahiro Yamada		bne	1b
911cfe9fa0SMasahiro Yamada		mov	pc, lr
921cfe9fa0SMasahiro YamadaENDPROC(printascii)
931cfe9fa0SMasahiro Yamada
941cfe9fa0SMasahiro YamadaENTRY(printch)
951cfe9fa0SMasahiro Yamada		addruart_current r3, r1, r2
961cfe9fa0SMasahiro Yamada		mov	r1, r0
971cfe9fa0SMasahiro Yamada		mov	r0, #0
981cfe9fa0SMasahiro Yamada		b	1b
991cfe9fa0SMasahiro YamadaENDPROC(printch)
1001cfe9fa0SMasahiro Yamada
1011cfe9fa0SMasahiro Yamada#ifdef CONFIG_MMU
1021cfe9fa0SMasahiro YamadaENTRY(debug_ll_addr)
1031cfe9fa0SMasahiro Yamada		addruart r2, r3, ip
1041cfe9fa0SMasahiro Yamada		str	r2, [r0]
1051cfe9fa0SMasahiro Yamada		str	r3, [r1]
1061cfe9fa0SMasahiro Yamada		mov	pc, lr
1071cfe9fa0SMasahiro YamadaENDPROC(debug_ll_addr)
1081cfe9fa0SMasahiro Yamada#endif
1091cfe9fa0SMasahiro Yamada
1101cfe9fa0SMasahiro Yamada#else
1111cfe9fa0SMasahiro Yamada
1121cfe9fa0SMasahiro YamadaENTRY(printascii)
1131cfe9fa0SMasahiro Yamada		mov	r1, r0
1141cfe9fa0SMasahiro Yamada		mov	r0, #0x04		@ SYS_WRITE0
1151cfe9fa0SMasahiro Yamada	ARM(	svc	#0x123456	)
1161cfe9fa0SMasahiro Yamada	THUMB(	svc	#0xab		)
1171cfe9fa0SMasahiro Yamada		mov	pc, lr
1181cfe9fa0SMasahiro YamadaENDPROC(printascii)
1191cfe9fa0SMasahiro Yamada
1201cfe9fa0SMasahiro YamadaENTRY(printch)
1211cfe9fa0SMasahiro Yamada		adr	r1, hexbuf
1221cfe9fa0SMasahiro Yamada		strb	r0, [r1]
1231cfe9fa0SMasahiro Yamada		mov	r0, #0x03		@ SYS_WRITEC
1241cfe9fa0SMasahiro Yamada	ARM(	svc	#0x123456	)
1251cfe9fa0SMasahiro Yamada	THUMB(	svc	#0xab		)
1261cfe9fa0SMasahiro Yamada		mov	pc, lr
1271cfe9fa0SMasahiro YamadaENDPROC(printch)
1281cfe9fa0SMasahiro Yamada
1291cfe9fa0SMasahiro YamadaENTRY(debug_ll_addr)
1301cfe9fa0SMasahiro Yamada		mov	r2, #0
1311cfe9fa0SMasahiro Yamada		str	r2, [r0]
1321cfe9fa0SMasahiro Yamada		str	r2, [r1]
1331cfe9fa0SMasahiro Yamada		mov	pc, lr
1341cfe9fa0SMasahiro YamadaENDPROC(debug_ll_addr)
1351cfe9fa0SMasahiro Yamada
1361cfe9fa0SMasahiro Yamada#endif
137