spi-topcliff-pch: add recovery processing in case wait-event timeout
[zen-stable.git] / arch / arm / mach-omap1 / include / mach / debug-macro.S
blob2b36a281dc842a55757459860164369b763edd28
1 /* arch/arm/mach-omap1/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 <plat/serial.h>
18                 .pushsection .data
19 omap_uart_phys: .word   0x0
20 omap_uart_virt: .word   0x0
21                 .popsection
23                 /*
24                  * Note that this code won't work if the bootloader passes
25                  * a wrong machine ID number in r1. To debug, just hardcode
26                  * the desired UART phys and virt addresses temporarily into
27                  * the omap_uart_phys and omap_uart_virt above.
28                  */
29                 .macro  addruart, rp, rv, tmp
31                 /* Use omap_uart_phys/virt if already configured */
32 9:              adr     \rp, 99f                @ get effective addr of 99f
33                 ldr     \rv, [\rp]              @ get absolute addr of 99f
34                 sub     \rv, \rv, \rp           @ offset between the two
35                 ldr     \rp, [\rp, #4]          @ abs addr of omap_uart_phys
36                 sub     \tmp, \rp, \rv          @ make it effective
37                 ldr     \rp, [\tmp, #0]         @ omap_uart_phys
38                 ldr     \rv, [\tmp, #4]         @ omap_uart_virt
39                 cmp     \rp, #0                 @ is port configured?
40                 cmpne   \rv, #0
41                 bne     100f                    @ already configured
43                 /* Check the debug UART configuration set in uncompress.h */
44                 and     \rp, pc, #0xff000000
45                 ldr     \rv, =OMAP_UART_INFO_OFS
46                 ldr     \rp, [\rp, \rv]
48                 /* Select the UART to use based on the UART1 scratchpad value */
49 10:             cmp     \rp, #0                 @ no port configured?
50                 beq     11f                     @ if none, try to use UART1
51                 cmp     \rp, #OMAP1UART1
52                 beq     11f                     @ configure OMAP1UART1
53                 cmp     \rp, #OMAP1UART2
54                 beq     12f                     @ configure OMAP1UART2
55                 cmp     \rp, #OMAP1UART3
56                 beq     13f                     @ configure OMAP2UART3
58                 /* Configure the UART offset from the phys/virt base */
59 11:             mov     \rp, #0x00fb0000        @ OMAP1UART1
60                 b       98f
61 12:             mov     \rp, #0x00fb0000        @ OMAP1UART1
62                 orr     \rp, \rp, #0x00000800   @ OMAP1UART2
63                 b       98f
64 13:             mov     \rp, #0x00fb0000        @ OMAP1UART1
65                 orr     \rp, \rp, #0x00000800   @ OMAP1UART2
66                 orr     \rp, \rp, #0x00009000   @ OMAP1UART3
68                 /* Store both phys and virt address for the uart */
69 98:             add     \rp, \rp, #0xff000000   @ phys base
70                 str     \rp, [\tmp, #0]         @ omap_uart_phys
71                 sub     \rp, \rp, #0xff000000   @ phys base
72                 add     \rp, \rp, #0xfe000000   @ virt base
73                 str     \rp, [\tmp, #4]         @ omap_uart_virt
74                 b       9b
76                 .align
77 99:             .word   .
78                 .word   omap_uart_phys
79                 .ltorg
81 100:
82                 .endm
84                 .macro  senduart,rd,rx
85                 strb    \rd, [\rx]
86                 .endm
88                 .macro  busyuart,rd,rx
89 1001:           ldrb    \rd, [\rx, #(UART_LSR << OMAP_PORT_SHIFT)]
90                 and     \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
91                 teq     \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
92                 beq     1002f
93                 ldrb    \rd, [\rx, #(UART_LSR << OMAP7XX_PORT_SHIFT)]
94                 and     \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
95                 teq     \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
96                 bne     1001b
97 1002:
98                 .endm
100                 .macro  waituart,rd,rx
101                 .endm