Merge branch 'master' into next
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / arm / mach-davinci / include / mach / debug-macro.S
CommitLineData
7c6337e2
KH
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
17eb1570
C
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>
dc2eb76c
CC
20
21#include <asm/memory.h>
22
23#include <mach/serial.h>
24
17eb1570
C
25#define UART_SHIFT 2
26
5cf4c80a
KH
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
dc2eb76c
CC
30 .pushsection .data
31davinci_uart_phys: .word 0
32davinci_uart_virt: .word 0
33 .popsection
34
0ea12930 35 .macro addruart, rp, rv
dc2eb76c
CC
36
37 /* Use davinci_uart_phys/virt if already configured */
0ea12930
JK
3810: mrc p15, 0, \rp, c1, c0
39 tst \rp, #1 @ MMU enabled?
5cf4c80a 40 ldreq \rp, =davinci_uart_v2p(davinci_uart_phys)
0ea12930
JK
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
dc2eb76c
CC
47 bne 99f @ already configured
48
0ea12930
JK
49 /* Check the debug UART address set in uncompress.h */
50 mrc p15, 0, \rp, c1, c0
51 tst \rp, #1 @ MMU enabled?
dc2eb76c
CC
52
53 /* Copy uart phys address from decompressor uart info */
5cf4c80a 54 ldreq \rv, =davinci_uart_v2p(davinci_uart_phys)
0ea12930
JK
55 ldrne \rv, =davinci_uart_phys
56 ldreq \rp, =DAVINCI_UART_INFO
5cf4c80a 57 ldrne \rp, =davinci_uart_p2v(DAVINCI_UART_INFO)
0ea12930
JK
58 ldr \rp, [\rp, #0]
59 str \rp, [\rv]
dc2eb76c
CC
60
61 /* Copy uart virt address from decompressor uart info */
5cf4c80a 62 ldreq \rv, =davinci_uart_v2p(davinci_uart_virt)
0ea12930
JK
63 ldrne \rv, =davinci_uart_virt
64 ldreq \rp, =DAVINCI_UART_INFO
5cf4c80a 65 ldrne \rp, =davinci_uart_p2v(DAVINCI_UART_INFO)
0ea12930
JK
66 ldr \rp, [\rp, #4]
67 str \rp, [\rv]
dc2eb76c
CC
68
69 b 10b
7099:
7c6337e2
KH
71 .endm
72
17eb1570
C
73 .macro senduart,rd,rx
74 str \rd, [\rx, #UART_TX << UART_SHIFT]
75 .endm
76
77 .macro busyuart,rd,rx
781002: 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
861001: ldr \rd, [\rx, #UART_MSR << UART_SHIFT]
87 tst \rd, #UART_MSR_CTS
88 beq 1001b
89#endif
90 .endm
91