Commit | Line | Data |
---|---|---|
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 |
31 | davinci_uart_phys: .word 0 | |
32 | davinci_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 |
38 | 10: 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 | |
70 | 99: | |
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 | |
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 |