1/*
2 * Debugging macro for DaVinci
3 *
4 * Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com>
5 *
6 * 2007 (c) MontaVista Software, Inc. This file is licensed under
7 * the terms of the GNU General Public License version 2. This program
8 * is licensed "as is" without any warranty of any kind, whether express
9 * or implied.
10 */
11
12/* Modifications
13 * Jan 2009	Chaithrika U S	Added senduart, busyuart, waituart
14 *				macros, based on debug-8250.S file
15 *				but using 32-bit accesses required for
16 *                              some davinci devices.
17 */
18
19#include <linux/serial_reg.h>
20
21#include <mach/serial.h>
22
23#define UART_SHIFT	2
24
25		.pushsection .data
26davinci_uart_phys:	.word	0
27davinci_uart_virt:	.word	0
28		.popsection
29
30		.macro addruart, rp, rv, tmp
31
32		/* Use davinci_uart_phys/virt if already configured */
3310:		adr	\rp, 99f		@ get effective addr of 99f
34		ldr	\rv, [\rp]		@ get absolute addr of 99f
35		sub	\rv, \rv, \rp		@ offset between the two
36		ldr	\rp, [\rp, #4]		@ abs addr of omap_uart_phys
37		sub	\tmp, \rp, \rv		@ make it effective
38		ldr	\rp, [\tmp, #0]		@ davinci_uart_phys
39		ldr	\rv, [\tmp, #4]		@ davinci_uart_virt
40		cmp	\rp, #0			@ is port configured?
41		cmpne	\rv, #0
42		bne	100f			@ already configured
43
44		/* Check the debug UART address set in uncompress.h */
45		and	\rp, pc, #0xff000000
46		ldr	\rv, =DAVINCI_UART_INFO_OFS
47		add	\rp, \rp, \rv
48
49		/* Copy uart phys address from decompressor uart info */
50		ldr	\rv, [\rp, #0]
51		str	\rv, [\tmp, #0]
52
53		/* Copy uart virt address from decompressor uart info */
54		ldr	\rv, [\rp, #4]
55		str	\rv, [\tmp, #4]
56
57		b	10b
58
59		.align
6099:		.word	.
61		.word	davinci_uart_phys
62		.ltorg
63
64100:
65		.endm
66
67		.macro	senduart,rd,rx
68		str	\rd, [\rx, #UART_TX << UART_SHIFT]
69		.endm
70
71		.macro	busyuart,rd,rx
721002:		ldr	\rd, [\rx, #UART_LSR << UART_SHIFT]
73		and	\rd, \rd, #UART_LSR_TEMT | UART_LSR_THRE
74		teq	\rd, #UART_LSR_TEMT | UART_LSR_THRE
75		bne	1002b
76		.endm
77
78		.macro	waituart,rd,rx
79#ifdef FLOW_CONTROL
801001:		ldr	\rd, [\rx, #UART_MSR << UART_SHIFT]
81		tst	\rd, #UART_MSR_CTS
82		beq	1001b
83#endif
84		.endm
85
86