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