ARM: 6651/1: omap: Fix DEBUG_LL code for p2v changes
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / arch / arm / mach-omap2 / include / mach / debug-macro.S
blob6049f465ec8447599aafba46124059aef64b8a9d
1 /* arch/arm/mach-omap2/include/mach/debug-macro.S
2  *
3  * Debugging macro include header
4  *
5  *  Copyright (C) 1994-1999 Russell King
6  *  Moved from linux/arch/arm/kernel/debug.S by Ben Dooks
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
14 #include <linux/serial_reg.h>
16 #include <asm/memory.h>
18 #include <plat/serial.h>
20 #define UART_OFFSET(addr)       ((addr) & 0x00ffffff)
22 #define omap_uart_v2p(x)        ((x) - PAGE_OFFSET + PLAT_PHYS_OFFSET)
23 #define omap_uart_p2v(x)        ((x) - PLAT_PHYS_OFFSET + PAGE_OFFSET)
25                 .pushsection .data
26 omap_uart_phys: .word   0
27 omap_uart_virt: .word   0
28 omap_uart_lsr:  .word   0
29                 .popsection
31                 /*
32                  * Note that this code won't work if the bootloader passes
33                  * a wrong machine ID number in r1. To debug, just hardcode
34                  * the desired UART phys and virt addresses temporarily into
35                  * the omap_uart_phys and omap_uart_virt above.
36                  */
37                 .macro  addruart, rp, rv
39                 /* Use omap_uart_phys/virt if already configured */
40 10:             mrc     p15, 0, \rp, c1, c0
41                 tst     \rp, #1                 @ MMU enabled?
42                 ldreq   \rp, =omap_uart_v2p(omap_uart_phys)     @ MMU disabled
43                 ldrne   \rp, =omap_uart_phys    @ MMU enabled
44                 add     \rv, \rp, #4            @ omap_uart_virt
45                 ldr     \rp, [\rp, #0]
46                 ldr     \rv, [\rv, #0]
47                 cmp     \rp, #0                 @ is port configured?
48                 cmpne   \rv, #0
49                 bne     99f                     @ already configured
51                 /* Check the debug UART configuration set in uncompress.h */
52                 mrc     p15, 0, \rp, c1, c0
53                 tst     \rp, #1                 @ MMU enabled?
54                 ldreq   \rp, =OMAP_UART_INFO    @ MMU not enabled
55                 ldrne   \rp, =omap_uart_p2v(OMAP_UART_INFO)     @ MMU enabled
56                 ldr     \rp, [\rp, #0]
58                 /* Select the UART to use based on the UART1 scratchpad value */
59                 cmp     \rp, #0                 @ no port configured?
60                 beq     21f                     @ if none, try to use UART1
61                 cmp     \rp, #OMAP2UART1        @ OMAP2/3/4UART1
62                 beq     21f                     @ configure OMAP2/3/4UART1
63                 cmp     \rp, #OMAP2UART2        @ OMAP2/3/4UART2
64                 beq     22f                     @ configure OMAP2/3/4UART2
65                 cmp     \rp, #OMAP2UART3        @ only on 24xx
66                 beq     23f                     @ configure OMAP2UART3
67                 cmp     \rp, #OMAP3UART3        @ only on 34xx
68                 beq     33f                     @ configure OMAP3UART3
69                 cmp     \rp, #OMAP4UART3        @ only on 44xx
70                 beq     43f                     @ configure OMAP4UART3
71                 cmp     \rp, #OMAP3UART4        @ only on 36xx
72                 beq     34f                     @ configure OMAP3UART4
73                 cmp     \rp, #OMAP4UART4        @ only on 44xx
74                 beq     44f                     @ configure OMAP4UART4
75                 cmp     \rp, #ZOOM_UART         @ only on zoom2/3
76                 beq     95f                     @ configure ZOOM_UART
78                 /* Configure the UART offset from the phys/virt base */
79 21:             mov     \rp, #UART_OFFSET(OMAP2_UART1_BASE)     @ omap2/3/4
80                 b       98f
81 22:             mov     \rp, #UART_OFFSET(OMAP2_UART2_BASE)     @ omap2/3/4
82                 b       98f
83 23:             mov     \rp, #UART_OFFSET(OMAP2_UART3_BASE)
84                 b       98f
85 33:             mov     \rp, #UART_OFFSET(OMAP3_UART1_BASE)
86                 add     \rp, \rp, #0x00fb0000
87                 add     \rp, \rp, #0x00006000           @ OMAP3_UART3_BASE
88                 b       98f
89 34:             mov     \rp, #UART_OFFSET(OMAP3_UART1_BASE)
90                 add     \rp, \rp, #0x00fb0000
91                 add     \rp, \rp, #0x00028000           @ OMAP3_UART4_BASE
92                 b       98f
93 43:             mov     \rp, #UART_OFFSET(OMAP4_UART3_BASE)
94                 b       98f
95 44:             mov     \rp, #UART_OFFSET(OMAP4_UART4_BASE)
96                 b       98f
97 95:             ldr     \rp, =ZOOM_UART_BASE
98                 mrc     p15, 0, \rv, c1, c0
99                 tst     \rv, #1                 @ MMU enabled?
100                 ldreq   \rv, =omap_uart_v2p(omap_uart_phys)     @ MMU disabled
101                 ldrne   \rv, =omap_uart_phys    @ MMU enabled
102                 str     \rp, [\rv, #0]
103                 ldr     \rp, =ZOOM_UART_VIRT
104                 add     \rv, \rv, #4            @ omap_uart_virt
105                 str     \rp, [\rv, #0]
106                 mov     \rp, #(UART_LSR << ZOOM_PORT_SHIFT)
107                 add     \rv, \rv, #4            @ omap_uart_lsr
108                 str     \rp, [\rv, #0]
109                 b       10b
111                 /* Store both phys and virt address for the uart */
112 98:             add     \rp, \rp, #0x48000000   @ phys base
113                 mrc     p15, 0, \rv, c1, c0
114                 tst     \rv, #1                 @ MMU enabled?
115                 ldreq   \rv, =omap_uart_v2p(omap_uart_phys)     @ MMU disabled
116                 ldrne   \rv, =omap_uart_phys    @ MMU enabled
117                 str     \rp, [\rv, #0]
118                 sub     \rp, \rp, #0x48000000   @ phys base
119                 add     \rp, \rp, #0xfa000000   @ virt base
120                 add     \rv, \rv, #4            @ omap_uart_virt
121                 str     \rp, [\rv, #0]
122                 mov     \rp, #(UART_LSR << OMAP_PORT_SHIFT)
123                 add     \rv, \rv, #4            @ omap_uart_lsr
124                 str     \rp, [\rv, #0]
126                 b       10b
128                 .endm
130                 .macro  senduart,rd,rx
131                 strb    \rd, [\rx]
132                 .endm
134                 .macro  busyuart,rd,rx
135 1001:           mrc     p15, 0, \rd, c1, c0
136                 tst     \rd, #1                 @ MMU enabled?
137                 ldreq   \rd, =omap_uart_v2p(omap_uart_lsr)      @ MMU disabled
138                 ldrne   \rd, =omap_uart_lsr     @ MMU enabled
139                 ldr     \rd, [\rd, #0]
140                 ldrb    \rd, [\rx, \rd]
141                 and     \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
142                 teq     \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
143                 bne     1001b
144                 .endm
146                 .macro  waituart,rd,rx
147                 .endm