Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas...
[linux-2.6.git] / arch / arm / mach-davinci / include / mach / debug-macro.S
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 <asm/memory.h>
22
23 #include <mach/serial.h>
24
25 #define UART_SHIFT      2
26
27 #define davinci_uart_v2p(x)     ((x) - PAGE_OFFSET + PLAT_PHYS_OFFSET)
28 #define davinci_uart_p2v(x)     ((x) - PLAT_PHYS_OFFSET + PAGE_OFFSET)
29
30                 .pushsection .data
31 davinci_uart_phys:      .word   0
32 davinci_uart_virt:      .word   0
33                 .popsection
34
35                 .macro addruart, rp, rv
36
37                 /* Use davinci_uart_phys/virt if already configured */
38 10:             mrc     p15, 0, \rp, c1, c0
39                 tst     \rp, #1                 @ MMU enabled?
40                 ldreq   \rp, =davinci_uart_v2p(davinci_uart_phys)
41                 ldrne   \rp, =davinci_uart_phys
42                 add     \rv, \rp, #4            @ davinci_uart_virt
43                 ldr     \rp, [\rp, #0]
44                 ldr     \rv, [\rv, #0]
45                 cmp     \rp, #0                 @ is port configured?
46                 cmpne   \rv, #0
47                 bne     99f                     @ already configured
48
49                 /* Check the debug UART address set in uncompress.h */
50                 mrc     p15, 0, \rp, c1, c0
51                 tst     \rp, #1                 @ MMU enabled?
52
53                 /* Copy uart phys address from decompressor uart info */
54                 ldreq   \rv, =davinci_uart_v2p(davinci_uart_phys)
55                 ldrne   \rv, =davinci_uart_phys
56                 ldreq   \rp, =DAVINCI_UART_INFO
57                 ldrne   \rp, =davinci_uart_p2v(DAVINCI_UART_INFO)
58                 ldr     \rp, [\rp, #0]
59                 str     \rp, [\rv]
60
61                 /* Copy uart virt address from decompressor uart info */
62                 ldreq   \rv, =davinci_uart_v2p(davinci_uart_virt)
63                 ldrne   \rv, =davinci_uart_virt
64                 ldreq   \rp, =DAVINCI_UART_INFO
65                 ldrne   \rp, =davinci_uart_p2v(DAVINCI_UART_INFO)
66                 ldr     \rp, [\rp, #4]
67                 str     \rp, [\rv]
68
69                 b       10b
70 99:
71                 .endm
72
73                 .macro  senduart,rd,rx
74                 str     \rd, [\rx, #UART_TX << UART_SHIFT]
75                 .endm
76
77                 .macro  busyuart,rd,rx
78 1002:           ldr     \rd, [\rx, #UART_LSR << UART_SHIFT]
79                 and     \rd, \rd, #UART_LSR_TEMT | UART_LSR_THRE
80                 teq     \rd, #UART_LSR_TEMT | UART_LSR_THRE
81                 bne     1002b
82                 .endm
83
84                 .macro  waituart,rd,rx
85 #ifdef FLOW_CONTROL
86 1001:           ldr     \rd, [\rx, #UART_MSR << UART_SHIFT]
87                 tst     \rd, #UART_MSR_CTS
88                 beq     1001b
89 #endif
90                 .endm
91