xref: /rk3399_rockchip-uboot/arch/arm/lib/debug.S (revision 1cfe9fa012da6c70402b5c2787414fd47fafb65f)
1*1cfe9fa0SMasahiro Yamada/*
2*1cfe9fa0SMasahiro Yamada *  linux/arch/arm/kernel/debug.S
3*1cfe9fa0SMasahiro Yamada *
4*1cfe9fa0SMasahiro Yamada *  Copyright (C) 1994-1999 Russell King
5*1cfe9fa0SMasahiro Yamada *
6*1cfe9fa0SMasahiro Yamada * This program is free software; you can redistribute it and/or modify
7*1cfe9fa0SMasahiro Yamada * it under the terms of the GNU General Public License version 2 as
8*1cfe9fa0SMasahiro Yamada * published by the Free Software Foundation.
9*1cfe9fa0SMasahiro Yamada *
10*1cfe9fa0SMasahiro Yamada *  32-bit debugging code
11*1cfe9fa0SMasahiro Yamada */
12*1cfe9fa0SMasahiro Yamada#include <linux/linkage.h>
13*1cfe9fa0SMasahiro Yamada#include <asm/assembler.h>
14*1cfe9fa0SMasahiro Yamada
15*1cfe9fa0SMasahiro Yamada		.text
16*1cfe9fa0SMasahiro Yamada
17*1cfe9fa0SMasahiro Yamada/*
18*1cfe9fa0SMasahiro Yamada * Some debugging routines (useful if you've got MM problems and
19*1cfe9fa0SMasahiro Yamada * printk isn't working).  For DEBUGGING ONLY!!!  Do not leave
20*1cfe9fa0SMasahiro Yamada * references to these in a production kernel!
21*1cfe9fa0SMasahiro Yamada */
22*1cfe9fa0SMasahiro Yamada
23*1cfe9fa0SMasahiro Yamada#if !defined(CONFIG_DEBUG_SEMIHOSTING)
24*1cfe9fa0SMasahiro Yamada#include CONFIG_DEBUG_LL_INCLUDE
25*1cfe9fa0SMasahiro Yamada#endif
26*1cfe9fa0SMasahiro Yamada
27*1cfe9fa0SMasahiro Yamada#ifdef CONFIG_MMU
28*1cfe9fa0SMasahiro Yamada		.macro	addruart_current, rx, tmp1, tmp2
29*1cfe9fa0SMasahiro Yamada		addruart	\tmp1, \tmp2, \rx
30*1cfe9fa0SMasahiro Yamada		mrc		p15, 0, \rx, c1, c0
31*1cfe9fa0SMasahiro Yamada		tst		\rx, #1
32*1cfe9fa0SMasahiro Yamada		moveq		\rx, \tmp1
33*1cfe9fa0SMasahiro Yamada		movne		\rx, \tmp2
34*1cfe9fa0SMasahiro Yamada		.endm
35*1cfe9fa0SMasahiro Yamada
36*1cfe9fa0SMasahiro Yamada#else /* !CONFIG_MMU */
37*1cfe9fa0SMasahiro Yamada		.macro	addruart_current, rx, tmp1, tmp2
38*1cfe9fa0SMasahiro Yamada		addruart	\rx, \tmp1
39*1cfe9fa0SMasahiro Yamada		.endm
40*1cfe9fa0SMasahiro Yamada
41*1cfe9fa0SMasahiro Yamada#endif /* CONFIG_MMU */
42*1cfe9fa0SMasahiro Yamada
43*1cfe9fa0SMasahiro Yamada/*
44*1cfe9fa0SMasahiro Yamada * Useful debugging routines
45*1cfe9fa0SMasahiro Yamada */
46*1cfe9fa0SMasahiro YamadaENTRY(printhex8)
47*1cfe9fa0SMasahiro Yamada		mov	r1, #8
48*1cfe9fa0SMasahiro Yamada		b	printhex
49*1cfe9fa0SMasahiro YamadaENDPROC(printhex8)
50*1cfe9fa0SMasahiro Yamada
51*1cfe9fa0SMasahiro YamadaENTRY(printhex4)
52*1cfe9fa0SMasahiro Yamada		mov	r1, #4
53*1cfe9fa0SMasahiro Yamada		b	printhex
54*1cfe9fa0SMasahiro YamadaENDPROC(printhex4)
55*1cfe9fa0SMasahiro Yamada
56*1cfe9fa0SMasahiro YamadaENTRY(printhex2)
57*1cfe9fa0SMasahiro Yamada		mov	r1, #2
58*1cfe9fa0SMasahiro Yamadaprinthex:	adr	r2, hexbuf
59*1cfe9fa0SMasahiro Yamada		add	r3, r2, r1
60*1cfe9fa0SMasahiro Yamada		mov	r1, #0
61*1cfe9fa0SMasahiro Yamada		strb	r1, [r3]
62*1cfe9fa0SMasahiro Yamada1:		and	r1, r0, #15
63*1cfe9fa0SMasahiro Yamada		mov	r0, r0, lsr #4
64*1cfe9fa0SMasahiro Yamada		cmp	r1, #10
65*1cfe9fa0SMasahiro Yamada		addlt	r1, r1, #'0'
66*1cfe9fa0SMasahiro Yamada		addge	r1, r1, #'a' - 10
67*1cfe9fa0SMasahiro Yamada		strb	r1, [r3, #-1]!
68*1cfe9fa0SMasahiro Yamada		teq	r3, r2
69*1cfe9fa0SMasahiro Yamada		bne	1b
70*1cfe9fa0SMasahiro Yamada		mov	r0, r2
71*1cfe9fa0SMasahiro Yamada		b	printascii
72*1cfe9fa0SMasahiro YamadaENDPROC(printhex2)
73*1cfe9fa0SMasahiro Yamada
74*1cfe9fa0SMasahiro Yamadahexbuf:		.space 16
75*1cfe9fa0SMasahiro Yamada
76*1cfe9fa0SMasahiro Yamada		.ltorg
77*1cfe9fa0SMasahiro Yamada
78*1cfe9fa0SMasahiro Yamada#ifndef CONFIG_DEBUG_SEMIHOSTING
79*1cfe9fa0SMasahiro Yamada
80*1cfe9fa0SMasahiro YamadaENTRY(printascii)
81*1cfe9fa0SMasahiro Yamada		addruart_current r3, r1, r2
82*1cfe9fa0SMasahiro Yamada		b	2f
83*1cfe9fa0SMasahiro Yamada1:		waituart r2, r3
84*1cfe9fa0SMasahiro Yamada		senduart r1, r3
85*1cfe9fa0SMasahiro Yamada		busyuart r2, r3
86*1cfe9fa0SMasahiro Yamada		teq	r1, #'\n'
87*1cfe9fa0SMasahiro Yamada		moveq	r1, #'\r'
88*1cfe9fa0SMasahiro Yamada		beq	1b
89*1cfe9fa0SMasahiro Yamada2:		teq	r0, #0
90*1cfe9fa0SMasahiro Yamada		ldrneb	r1, [r0], #1
91*1cfe9fa0SMasahiro Yamada		teqne	r1, #0
92*1cfe9fa0SMasahiro Yamada		bne	1b
93*1cfe9fa0SMasahiro Yamada		mov	pc, lr
94*1cfe9fa0SMasahiro YamadaENDPROC(printascii)
95*1cfe9fa0SMasahiro Yamada
96*1cfe9fa0SMasahiro YamadaENTRY(printch)
97*1cfe9fa0SMasahiro Yamada		addruart_current r3, r1, r2
98*1cfe9fa0SMasahiro Yamada		mov	r1, r0
99*1cfe9fa0SMasahiro Yamada		mov	r0, #0
100*1cfe9fa0SMasahiro Yamada		b	1b
101*1cfe9fa0SMasahiro YamadaENDPROC(printch)
102*1cfe9fa0SMasahiro Yamada
103*1cfe9fa0SMasahiro Yamada#ifdef CONFIG_MMU
104*1cfe9fa0SMasahiro YamadaENTRY(debug_ll_addr)
105*1cfe9fa0SMasahiro Yamada		addruart r2, r3, ip
106*1cfe9fa0SMasahiro Yamada		str	r2, [r0]
107*1cfe9fa0SMasahiro Yamada		str	r3, [r1]
108*1cfe9fa0SMasahiro Yamada		mov	pc, lr
109*1cfe9fa0SMasahiro YamadaENDPROC(debug_ll_addr)
110*1cfe9fa0SMasahiro Yamada#endif
111*1cfe9fa0SMasahiro Yamada
112*1cfe9fa0SMasahiro Yamada#else
113*1cfe9fa0SMasahiro Yamada
114*1cfe9fa0SMasahiro YamadaENTRY(printascii)
115*1cfe9fa0SMasahiro Yamada		mov	r1, r0
116*1cfe9fa0SMasahiro Yamada		mov	r0, #0x04		@ SYS_WRITE0
117*1cfe9fa0SMasahiro Yamada	ARM(	svc	#0x123456	)
118*1cfe9fa0SMasahiro Yamada	THUMB(	svc	#0xab		)
119*1cfe9fa0SMasahiro Yamada		mov	pc, lr
120*1cfe9fa0SMasahiro YamadaENDPROC(printascii)
121*1cfe9fa0SMasahiro Yamada
122*1cfe9fa0SMasahiro YamadaENTRY(printch)
123*1cfe9fa0SMasahiro Yamada		adr	r1, hexbuf
124*1cfe9fa0SMasahiro Yamada		strb	r0, [r1]
125*1cfe9fa0SMasahiro Yamada		mov	r0, #0x03		@ SYS_WRITEC
126*1cfe9fa0SMasahiro Yamada	ARM(	svc	#0x123456	)
127*1cfe9fa0SMasahiro Yamada	THUMB(	svc	#0xab		)
128*1cfe9fa0SMasahiro Yamada		mov	pc, lr
129*1cfe9fa0SMasahiro YamadaENDPROC(printch)
130*1cfe9fa0SMasahiro Yamada
131*1cfe9fa0SMasahiro YamadaENTRY(debug_ll_addr)
132*1cfe9fa0SMasahiro Yamada		mov	r2, #0
133*1cfe9fa0SMasahiro Yamada		str	r2, [r0]
134*1cfe9fa0SMasahiro Yamada		str	r2, [r1]
135*1cfe9fa0SMasahiro Yamada		mov	pc, lr
136*1cfe9fa0SMasahiro YamadaENDPROC(debug_ll_addr)
137*1cfe9fa0SMasahiro Yamada
138*1cfe9fa0SMasahiro Yamada#endif
139