ar71xx: add serial driver for the AR933X UART
[openwrt/openwrt.git] / target / linux / ar71xx / files / drivers / serial / ar933x_uart.c
1 /*
2 * linux/drivers/serial/hornet_serial.c
3 *
4 * Driver for hornet serial ports
5 *
6 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
7 *
8 * Copyright (C) 2010 Ryan Hsu.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * $Id$
16 *
17 * A note about mapbase / membase
18 *
19 * mapbase is the physical address of the IO port.
20 * membase is an 'ioremapped' cookie.
21 */
22
23 #include <linux/module.h>
24 #include <linux/moduleparam.h>
25 #include <linux/ioport.h>
26 #include <linux/init.h>
27 #include <linux/console.h>
28 #include <linux/sysrq.h>
29 #include <linux/delay.h>
30 #include <linux/platform_device.h>
31 #include <linux/tty.h>
32 #include <linux/tty_flip.h>
33 #include <linux/serial_reg.h>
34 #include <linux/serial_core.h>
35 #include <linux/serial.h>
36 #include <linux/serial_8250.h>
37 #include <linux/nmi.h>
38 #include <linux/mutex.h>
39 #include <linux/slab.h>
40
41 #include <asm/mach-ar71xx/ar933x_uart_platform.h>
42
43 #include <asm/io.h>
44 #include <asm/irq.h>
45
46 #include "8250.h"
47 #define ar7240_reg_rmw_clear(_reg, _val) do {} while (0)
48
49 #define DRIVER_NAME "ar933x-uart"
50
51 #define AR933X_UART_REGS_SIZE 20
52 #define AR933X_UART_FIFO_SIZE 16
53
54 /*
55 * Uart block
56 */
57 #define UARTDATA_UARTTXCSR_MSB 9
58 #define UARTDATA_UARTTXCSR_LSB 9
59 #define UARTDATA_UARTTXCSR_MASK 0x00000200
60 #define UARTDATA_UARTTXCSR_GET(x) (((x) & UARTDATA_UARTTXCSR_MASK) >> UARTDATA_UARTTXCSR_LSB)
61 #define UARTDATA_UARTTXCSR_SET(x) (((0 | (x)) << UARTDATA_UARTTXCSR_LSB) & UARTDATA_UARTTXCSR_MASK)
62 #define UARTDATA_UARTTXCSR_RESET 0
63 #define UARTDATA_UARTRXCSR_MSB 8
64 #define UARTDATA_UARTRXCSR_LSB 8
65 #define UARTDATA_UARTRXCSR_MASK 0x00000100
66 #define UARTDATA_UARTRXCSR_GET(x) (((x) & UARTDATA_UARTRXCSR_MASK) >> UARTDATA_UARTRXCSR_LSB)
67 #define UARTDATA_UARTRXCSR_SET(x) (((0 | (x)) << UARTDATA_UARTRXCSR_LSB) & UARTDATA_UARTRXCSR_MASK)
68 #define UARTDATA_UARTRXCSR_RESET 0
69 #define UARTDATA_UARTTXRXDATA_MSB 7
70 #define UARTDATA_UARTTXRXDATA_LSB 0
71 #define UARTDATA_UARTTXRXDATA_MASK 0x000000ff
72 #define UARTDATA_UARTTXRXDATA_GET(x) (((x) & UARTDATA_UARTTXRXDATA_MASK) >> UARTDATA_UARTTXRXDATA_LSB)
73 #define UARTDATA_UARTTXRXDATA_SET(x) (((0 | (x)) << UARTDATA_UARTTXRXDATA_LSB) & UARTDATA_UARTTXRXDATA_MASK)
74 #define UARTDATA_UARTTXRXDATA_RESET 0
75 #define UARTDATA_ADDRESS 0x0000
76 #define UARTDATA_HW_MASK 0x000003ff
77 #define UARTDATA_SW_MASK 0x000003ff
78 #define UARTDATA_RSTMASK 0x000003ff
79 #define UARTDATA_RESET 0x00000000
80
81 // 0x0004 (UARTCS)
82 #define UARTCS_UARTRXBUSY_MSB 15
83 #define UARTCS_UARTRXBUSY_LSB 15
84 #define UARTCS_UARTRXBUSY_MASK 0x00008000
85 #define UARTCS_UARTRXBUSY_GET(x) (((x) & UARTCS_UARTRXBUSY_MASK) >> UARTCS_UARTRXBUSY_LSB)
86 #define UARTCS_UARTRXBUSY_SET(x) (((0 | (x)) << UARTCS_UARTRXBUSY_LSB) & UARTCS_UARTRXBUSY_MASK)
87 #define UARTCS_UARTRXBUSY_RESET 0
88 #define UARTCS_UARTTXBUSY_MSB 14
89 #define UARTCS_UARTTXBUSY_LSB 14
90 #define UARTCS_UARTTXBUSY_MASK 0x00004000
91 #define UARTCS_UARTTXBUSY_GET(x) (((x) & UARTCS_UARTTXBUSY_MASK) >> UARTCS_UARTTXBUSY_LSB)
92 #define UARTCS_UARTTXBUSY_SET(x) (((0 | (x)) << UARTCS_UARTTXBUSY_LSB) & UARTCS_UARTTXBUSY_MASK)
93 #define UARTCS_UARTTXBUSY_RESET 0
94 #define UARTCS_UARTHOSTINTEN_MSB 13
95 #define UARTCS_UARTHOSTINTEN_LSB 13
96 #define UARTCS_UARTHOSTINTEN_MASK 0x00002000
97 #define UARTCS_UARTHOSTINTEN_GET(x) (((x) & UARTCS_UARTHOSTINTEN_MASK) >> UARTCS_UARTHOSTINTEN_LSB)
98 #define UARTCS_UARTHOSTINTEN_SET(x) (((0 | (x)) << UARTCS_UARTHOSTINTEN_LSB) & UARTCS_UARTHOSTINTEN_MASK)
99 #define UARTCS_UARTHOSTINTEN_RESET 0
100 #define UARTCS_UARTHOSTINT_MSB 12
101 #define UARTCS_UARTHOSTINT_LSB 12
102 #define UARTCS_UARTHOSTINT_MASK 0x00001000
103 #define UARTCS_UARTHOSTINT_GET(x) (((x) & UARTCS_UARTHOSTINT_MASK) >> UARTCS_UARTHOSTINT_LSB)
104 #define UARTCS_UARTHOSTINT_SET(x) (((0 | (x)) << UARTCS_UARTHOSTINT_LSB) & UARTCS_UARTHOSTINT_MASK)
105 #define UARTCS_UARTHOSTINT_RESET 0
106 #define UARTCS_UARTTXBREAK_MSB 11
107 #define UARTCS_UARTTXBREAK_LSB 11
108 #define UARTCS_UARTTXBREAK_MASK 0x00000800
109 #define UARTCS_UARTTXBREAK_GET(x) (((x) & UARTCS_UARTTXBREAK_MASK) >> UARTCS_UARTTXBREAK_LSB)
110 #define UARTCS_UARTTXBREAK_SET(x) (((0 | (x)) << UARTCS_UARTTXBREAK_LSB) & UARTCS_UARTTXBREAK_MASK)
111 #define UARTCS_UARTTXBREAK_RESET 0
112 #define UARTCS_UARTRXBREAK_MSB 10
113 #define UARTCS_UARTRXBREAK_LSB 10
114 #define UARTCS_UARTRXBREAK_MASK 0x00000400
115 #define UARTCS_UARTRXBREAK_GET(x) (((x) & UARTCS_UARTRXBREAK_MASK) >> UARTCS_UARTRXBREAK_LSB)
116 #define UARTCS_UARTRXBREAK_SET(x) (((0 | (x)) << UARTCS_UARTRXBREAK_LSB) & UARTCS_UARTRXBREAK_MASK)
117 #define UARTCS_UARTRXBREAK_RESET 0
118 #define UARTCS_UARTSERIATXREADY_MSB 9
119 #define UARTCS_UARTSERIATXREADY_LSB 9
120 #define UARTCS_UARTSERIATXREADY_MASK 0x00000200
121 #define UARTCS_UARTSERIATXREADY_GET(x) (((x) & UARTCS_UARTSERIATXREADY_MASK) >> UARTCS_UARTSERIATXREADY_LSB)
122 #define UARTCS_UARTSERIATXREADY_SET(x) (((0 | (x)) << UARTCS_UARTSERIATXREADY_LSB) & UARTCS_UARTSERIATXREADY_MASK)
123 #define UARTCS_UARTSERIATXREADY_RESET 0
124 #define UARTCS_UARTTXREADYORIDE_MSB 8
125 #define UARTCS_UARTTXREADYORIDE_LSB 8
126 #define UARTCS_UARTTXREADYORIDE_MASK 0x00000100
127 #define UARTCS_UARTTXREADYORIDE_GET(x) (((x) & UARTCS_UARTTXREADYORIDE_MASK) >> UARTCS_UARTTXREADYORIDE_LSB)
128 #define UARTCS_UARTTXREADYORIDE_SET(x) (((0 | (x)) << UARTCS_UARTTXREADYORIDE_LSB) & UARTCS_UARTTXREADYORIDE_MASK)
129 #define UARTCS_UARTTXREADYORIDE_RESET 0
130 #define UARTCS_UARTRXREADYORIDE_MSB 7
131 #define UARTCS_UARTRXREADYORIDE_LSB 7
132 #define UARTCS_UARTRXREADYORIDE_MASK 0x00000080
133 #define UARTCS_UARTRXREADYORIDE_GET(x) (((x) & UARTCS_UARTRXREADYORIDE_MASK) >> UARTCS_UARTRXREADYORIDE_LSB)
134 #define UARTCS_UARTRXREADYORIDE_SET(x) (((0 | (x)) << UARTCS_UARTRXREADYORIDE_LSB) & UARTCS_UARTRXREADYORIDE_MASK)
135 #define UARTCS_UARTRXREADYORIDE_RESET 0
136 #define UARTCS_UARTDMAEN_MSB 6
137 #define UARTCS_UARTDMAEN_LSB 6
138 #define UARTCS_UARTDMAEN_MASK 0x00000040
139 #define UARTCS_UARTDMAEN_GET(x) (((x) & UARTCS_UARTDMAEN_MASK) >> UARTCS_UARTDMAEN_LSB)
140 #define UARTCS_UARTDMAEN_SET(x) (((0 | (x)) << UARTCS_UARTDMAEN_LSB) & UARTCS_UARTDMAEN_MASK)
141 #define UARTCS_UARTDMAEN_RESET 0
142 #define UARTCS_UARTFLOWCONTROLMODE_MSB 5
143 #define UARTCS_UARTFLOWCONTROLMODE_LSB 4
144 #define UARTCS_UARTFLOWCONTROLMODE_MASK 0x00000030
145 #define UARTCS_UARTFLOWCONTROLMODE_GET(x) (((x) & UARTCS_UARTFLOWCONTROLMODE_MASK) >> UARTCS_UARTFLOWCONTROLMODE_LSB)
146 #define UARTCS_UARTFLOWCONTROLMODE_SET(x) (((0 | (x)) << UARTCS_UARTFLOWCONTROLMODE_LSB) & UARTCS_UARTFLOWCONTROLMODE_MASK)
147 #define UARTCS_UARTFLOWCONTROLMODE_RESET 0
148 #define UARTCS_UARTINTERFACEMODE_MSB 3
149 #define UARTCS_UARTINTERFACEMODE_LSB 2
150 #define UARTCS_UARTINTERFACEMODE_MASK 0x0000000c
151 #define UARTCS_UARTINTERFACEMODE_GET(x) (((x) & UARTCS_UARTINTERFACEMODE_MASK) >> UARTCS_UARTINTERFACEMODE_LSB)
152 #define UARTCS_UARTINTERFACEMODE_SET(x) (((0 | (x)) << UARTCS_UARTINTERFACEMODE_LSB) & UARTCS_UARTINTERFACEMODE_MASK)
153 #define UARTCS_UARTINTERFACEMODE_RESET 0
154 #define UARTCS_UARTPARITYMODE_MSB 1
155 #define UARTCS_UARTPARITYMODE_LSB 0
156 #define UARTCS_UARTPARITYMODE_MASK 0x00000003
157 #define UARTCS_UARTPARITYMODE_GET(x) (((x) & UARTCS_UARTPARITYMODE_MASK) >> UARTCS_UARTPARITYMODE_LSB)
158 #define UARTCS_UARTPARITYMODE_SET(x) (((0 | (x)) << UARTCS_UARTPARITYMODE_LSB) & UARTCS_UARTPARITYMODE_MASK)
159 #define UARTCS_UARTPARITYMODE_RESET 0
160 #define UARTCS_ADDRESS 0x0004
161 #define UARTCS_HW_MASK 0x0000ffff
162 #define UARTCS_SW_MASK 0x0000ffff
163 #define UARTCS_RSTMASK 0x000029ff
164 #define UARTCS_RESET 0x00000000
165
166 // 0x0008 (UARTCLOCK)
167 #define UARTCLOCK_UARTCLOCKSCALE_MSB 23
168 #define UARTCLOCK_UARTCLOCKSCALE_LSB 16
169 #define UARTCLOCK_UARTCLOCKSCALE_MASK 0x00ff0000
170 #define UARTCLOCK_UARTCLOCKSCALE_GET(x) (((x) & UARTCLOCK_UARTCLOCKSCALE_MASK) >> UARTCLOCK_UARTCLOCKSCALE_LSB)
171 #define UARTCLOCK_UARTCLOCKSCALE_SET(x) (((0 | (x)) << UARTCLOCK_UARTCLOCKSCALE_LSB) & UARTCLOCK_UARTCLOCKSCALE_MASK)
172 #define UARTCLOCK_UARTCLOCKSCALE_RESET 0
173 #define UARTCLOCK_UARTCLOCKSTEP_MSB 15
174 #define UARTCLOCK_UARTCLOCKSTEP_LSB 0
175 #define UARTCLOCK_UARTCLOCKSTEP_MASK 0x0000ffff
176 #define UARTCLOCK_UARTCLOCKSTEP_GET(x) (((x) & UARTCLOCK_UARTCLOCKSTEP_MASK) >> UARTCLOCK_UARTCLOCKSTEP_LSB)
177 #define UARTCLOCK_UARTCLOCKSTEP_SET(x) (((0 | (x)) << UARTCLOCK_UARTCLOCKSTEP_LSB) & UARTCLOCK_UARTCLOCKSTEP_MASK)
178 #define UARTCLOCK_UARTCLOCKSTEP_RESET 0
179 #define UARTCLOCK_ADDRESS 0x0008
180 #define UARTCLOCK_HW_MASK 0x00ffffff
181 #define UARTCLOCK_SW_MASK 0x00ffffff
182 #define UARTCLOCK_RSTMASK 0x00ffffff
183 #define UARTCLOCK_RESET 0x00000000
184
185 // 0x000c (UARTINT)
186 #define UARTINT_UARTTXEMPTYINT_MSB 9
187 #define UARTINT_UARTTXEMPTYINT_LSB 9
188 #define UARTINT_UARTTXEMPTYINT_MASK 0x00000200
189 #define UARTINT_UARTTXEMPTYINT_GET(x) (((x) & UARTINT_UARTTXEMPTYINT_MASK) >> UARTINT_UARTTXEMPTYINT_LSB)
190 #define UARTINT_UARTTXEMPTYINT_SET(x) (((0 | (x)) << UARTINT_UARTTXEMPTYINT_LSB) & UARTINT_UARTTXEMPTYINT_MASK)
191 #define UARTINT_UARTTXEMPTYINT_RESET 0
192 #define UARTINT_UARTRXFULLINT_MSB 8
193 #define UARTINT_UARTRXFULLINT_LSB 8
194 #define UARTINT_UARTRXFULLINT_MASK 0x00000100
195 #define UARTINT_UARTRXFULLINT_GET(x) (((x) & UARTINT_UARTRXFULLINT_MASK) >> UARTINT_UARTRXFULLINT_LSB)
196 #define UARTINT_UARTRXFULLINT_SET(x) (((0 | (x)) << UARTINT_UARTRXFULLINT_LSB) & UARTINT_UARTRXFULLINT_MASK)
197 #define UARTINT_UARTRXFULLINT_RESET 0
198 #define UARTINT_UARTRXBREAKOFFINT_MSB 7
199 #define UARTINT_UARTRXBREAKOFFINT_LSB 7
200 #define UARTINT_UARTRXBREAKOFFINT_MASK 0x00000080
201 #define UARTINT_UARTRXBREAKOFFINT_GET(x) (((x) & UARTINT_UARTRXBREAKOFFINT_MASK) >> UARTINT_UARTRXBREAKOFFINT_LSB)
202 #define UARTINT_UARTRXBREAKOFFINT_SET(x) (((0 | (x)) << UARTINT_UARTRXBREAKOFFINT_LSB) & UARTINT_UARTRXBREAKOFFINT_MASK)
203 #define UARTINT_UARTRXBREAKOFFINT_RESET 0
204 #define UARTINT_UARTRXBREAKONINT_MSB 6
205 #define UARTINT_UARTRXBREAKONINT_LSB 6
206 #define UARTINT_UARTRXBREAKONINT_MASK 0x00000040
207 #define UARTINT_UARTRXBREAKONINT_GET(x) (((x) & UARTINT_UARTRXBREAKONINT_MASK) >> UARTINT_UARTRXBREAKONINT_LSB)
208 #define UARTINT_UARTRXBREAKONINT_SET(x) (((0 | (x)) << UARTINT_UARTRXBREAKONINT_LSB) & UARTINT_UARTRXBREAKONINT_MASK)
209 #define UARTINT_UARTRXBREAKONINT_RESET 0
210 #define UARTINT_UARTRXPARITYERRINT_MSB 5
211 #define UARTINT_UARTRXPARITYERRINT_LSB 5
212 #define UARTINT_UARTRXPARITYERRINT_MASK 0x00000020
213 #define UARTINT_UARTRXPARITYERRINT_GET(x) (((x) & UARTINT_UARTRXPARITYERRINT_MASK) >> UARTINT_UARTRXPARITYERRINT_LSB)
214 #define UARTINT_UARTRXPARITYERRINT_SET(x) (((0 | (x)) << UARTINT_UARTRXPARITYERRINT_LSB) & UARTINT_UARTRXPARITYERRINT_MASK)
215 #define UARTINT_UARTRXPARITYERRINT_RESET 0
216 #define UARTINT_UARTTXOFLOWERRINT_MSB 4
217 #define UARTINT_UARTTXOFLOWERRINT_LSB 4
218 #define UARTINT_UARTTXOFLOWERRINT_MASK 0x00000010
219 #define UARTINT_UARTTXOFLOWERRINT_GET(x) (((x) & UARTINT_UARTTXOFLOWERRINT_MASK) >> UARTINT_UARTTXOFLOWERRINT_LSB)
220 #define UARTINT_UARTTXOFLOWERRINT_SET(x) (((0 | (x)) << UARTINT_UARTTXOFLOWERRINT_LSB) & UARTINT_UARTTXOFLOWERRINT_MASK)
221 #define UARTINT_UARTTXOFLOWERRINT_RESET 0
222 #define UARTINT_UARTRXOFLOWERRINT_MSB 3
223 #define UARTINT_UARTRXOFLOWERRINT_LSB 3
224 #define UARTINT_UARTRXOFLOWERRINT_MASK 0x00000008
225 #define UARTINT_UARTRXOFLOWERRINT_GET(x) (((x) & UARTINT_UARTRXOFLOWERRINT_MASK) >> UARTINT_UARTRXOFLOWERRINT_LSB)
226 #define UARTINT_UARTRXOFLOWERRINT_SET(x) (((0 | (x)) << UARTINT_UARTRXOFLOWERRINT_LSB) & UARTINT_UARTRXOFLOWERRINT_MASK)
227 #define UARTINT_UARTRXOFLOWERRINT_RESET 0
228 #define UARTINT_UARTRXFRAMINGERRINT_MSB 2
229 #define UARTINT_UARTRXFRAMINGERRINT_LSB 2
230 #define UARTINT_UARTRXFRAMINGERRINT_MASK 0x00000004
231 #define UARTINT_UARTRXFRAMINGERRINT_GET(x) (((x) & UARTINT_UARTRXFRAMINGERRINT_MASK) >> UARTINT_UARTRXFRAMINGERRINT_LSB)
232 #define UARTINT_UARTRXFRAMINGERRINT_SET(x) (((0 | (x)) << UARTINT_UARTRXFRAMINGERRINT_LSB) & UARTINT_UARTRXFRAMINGERRINT_MASK)
233 #define UARTINT_UARTRXFRAMINGERRINT_RESET 0
234 #define UARTINT_UARTTXREADYINT_MSB 1
235 #define UARTINT_UARTTXREADYINT_LSB 1
236 #define UARTINT_UARTTXREADYINT_MASK 0x00000002
237 #define UARTINT_UARTTXREADYINT_GET(x) (((x) & UARTINT_UARTTXREADYINT_MASK) >> UARTINT_UARTTXREADYINT_LSB)
238 #define UARTINT_UARTTXREADYINT_SET(x) (((0 | (x)) << UARTINT_UARTTXREADYINT_LSB) & UARTINT_UARTTXREADYINT_MASK)
239 #define UARTINT_UARTTXREADYINT_RESET 0
240 #define UARTINT_UARTRXVALIDINT_MSB 0
241 #define UARTINT_UARTRXVALIDINT_LSB 0
242 #define UARTINT_UARTRXVALIDINT_MASK 0x00000001
243 #define UARTINT_UARTRXVALIDINT_GET(x) (((x) & UARTINT_UARTRXVALIDINT_MASK) >> UARTINT_UARTRXVALIDINT_LSB)
244 #define UARTINT_UARTRXVALIDINT_SET(x) (((0 | (x)) << UARTINT_UARTRXVALIDINT_LSB) & UARTINT_UARTRXVALIDINT_MASK)
245 #define UARTINT_UARTRXVALIDINT_RESET 0
246 #define UARTINT_ADDRESS 0x000c
247 #define UARTINT_HW_MASK 0x000003ff
248 #define UARTINT_SW_MASK 0x000003ff
249 #define UARTINT_RSTMASK 0x000003ff
250 #define UARTINT_RESET 0x00000000
251
252 // 0x0010 (UARTINTEN)
253 #define UARTINTEN_UARTTXEMPTYINTEN_MSB 9
254 #define UARTINTEN_UARTTXEMPTYINTEN_LSB 9
255 #define UARTINTEN_UARTTXEMPTYINTEN_MASK 0x00000200
256 #define UARTINTEN_UARTTXEMPTYINTEN_GET(x) (((x) & UARTINTEN_UARTTXEMPTYINTEN_MASK) >> UARTINTEN_UARTTXEMPTYINTEN_LSB)
257 #define UARTINTEN_UARTTXEMPTYINTEN_SET(x) (((0 | (x)) << UARTINTEN_UARTTXEMPTYINTEN_LSB) & UARTINTEN_UARTTXEMPTYINTEN_MASK)
258 #define UARTINTEN_UARTTXEMPTYINTEN_RESET 0
259 #define UARTINTEN_UARTRXFULLINTEN_MSB 8
260 #define UARTINTEN_UARTRXFULLINTEN_LSB 8
261 #define UARTINTEN_UARTRXFULLINTEN_MASK 0x00000100
262 #define UARTINTEN_UARTRXFULLINTEN_GET(x) (((x) & UARTINTEN_UARTRXFULLINTEN_MASK) >> UARTINTEN_UARTRXFULLINTEN_LSB)
263 #define UARTINTEN_UARTRXFULLINTEN_SET(x) (((0 | (x)) << UARTINTEN_UARTRXFULLINTEN_LSB) & UARTINTEN_UARTRXFULLINTEN_MASK)
264 #define UARTINTEN_UARTRXFULLINTEN_RESET 0
265 #define UARTINTEN_UARTRXBREAKOFFINTEN_MSB 7
266 #define UARTINTEN_UARTRXBREAKOFFINTEN_LSB 7
267 #define UARTINTEN_UARTRXBREAKOFFINTEN_MASK 0x00000080
268 #define UARTINTEN_UARTRXBREAKOFFINTEN_GET(x) (((x) & UARTINTEN_UARTRXBREAKOFFINTEN_MASK) >> UARTINTEN_UARTRXBREAKOFFINTEN_LSB)
269 #define UARTINTEN_UARTRXBREAKOFFINTEN_SET(x) (((0 | (x)) << UARTINTEN_UARTRXBREAKOFFINTEN_LSB) & UARTINTEN_UARTRXBREAKOFFINTEN_MASK)
270 #define UARTINTEN_UARTRXBREAKOFFINTEN_RESET 0
271 #define UARTINTEN_UARTRXBREAKONINTEN_MSB 6
272 #define UARTINTEN_UARTRXBREAKONINTEN_LSB 6
273 #define UARTINTEN_UARTRXBREAKONINTEN_MASK 0x00000040
274 #define UARTINTEN_UARTRXBREAKONINTEN_GET(x) (((x) & UARTINTEN_UARTRXBREAKONINTEN_MASK) >> UARTINTEN_UARTRXBREAKONINTEN_LSB)
275 #define UARTINTEN_UARTRXBREAKONINTEN_SET(x) (((0 | (x)) << UARTINTEN_UARTRXBREAKONINTEN_LSB) & UARTINTEN_UARTRXBREAKONINTEN_MASK)
276 #define UARTINTEN_UARTRXBREAKONINTEN_RESET 0
277 #define UARTINTEN_UARTRXPARITYERRINTEN_MSB 5
278 #define UARTINTEN_UARTRXPARITYERRINTEN_LSB 5
279 #define UARTINTEN_UARTRXPARITYERRINTEN_MASK 0x00000020
280 #define UARTINTEN_UARTRXPARITYERRINTEN_GET(x) (((x) & UARTINTEN_UARTRXPARITYERRINTEN_MASK) >> UARTINTEN_UARTRXPARITYERRINTEN_LSB)
281 #define UARTINTEN_UARTRXPARITYERRINTEN_SET(x) (((0 | (x)) << UARTINTEN_UARTRXPARITYERRINTEN_LSB) & UARTINTEN_UARTRXPARITYERRINTEN_MASK)
282 #define UARTINTEN_UARTRXPARITYERRINTEN_RESET 0
283 #define UARTINTEN_UARTTXOFLOWERRINTEN_MSB 4
284 #define UARTINTEN_UARTTXOFLOWERRINTEN_LSB 4
285 #define UARTINTEN_UARTTXOFLOWERRINTEN_MASK 0x00000010
286 #define UARTINTEN_UARTTXOFLOWERRINTEN_GET(x) (((x) & UARTINTEN_UARTTXOFLOWERRINTEN_MASK) >> UARTINTEN_UARTTXOFLOWERRINTEN_LSB)
287 #define UARTINTEN_UARTTXOFLOWERRINTEN_SET(x) (((0 | (x)) << UARTINTEN_UARTTXOFLOWERRINTEN_LSB) & UARTINTEN_UARTTXOFLOWERRINTEN_MASK)
288 #define UARTINTEN_UARTTXOFLOWERRINTEN_RESET 0
289 #define UARTINTEN_UARTRXOFLOWERRINTEN_MSB 3
290 #define UARTINTEN_UARTRXOFLOWERRINTEN_LSB 3
291 #define UARTINTEN_UARTRXOFLOWERRINTEN_MASK 0x00000008
292 #define UARTINTEN_UARTRXOFLOWERRINTEN_GET(x) (((x) & UARTINTEN_UARTRXOFLOWERRINTEN_MASK) >> UARTINTEN_UARTRXOFLOWERRINTEN_LSB)
293 #define UARTINTEN_UARTRXOFLOWERRINTEN_SET(x) (((0 | (x)) << UARTINTEN_UARTRXOFLOWERRINTEN_LSB) & UARTINTEN_UARTRXOFLOWERRINTEN_MASK)
294 #define UARTINTEN_UARTRXOFLOWERRINTEN_RESET 0
295 #define UARTINTEN_UARTRXFRAMINGERRINTEN_MSB 2
296 #define UARTINTEN_UARTRXFRAMINGERRINTEN_LSB 2
297 #define UARTINTEN_UARTRXFRAMINGERRINTEN_MASK 0x00000004
298 #define UARTINTEN_UARTRXFRAMINGERRINTEN_GET(x) (((x) & UARTINTEN_UARTRXFRAMINGERRINTEN_MASK) >> UARTINTEN_UARTRXFRAMINGERRINTEN_LSB)
299 #define UARTINTEN_UARTRXFRAMINGERRINTEN_SET(x) (((0 | (x)) << UARTINTEN_UARTRXFRAMINGERRINTEN_LSB) & UARTINTEN_UARTRXFRAMINGERRINTEN_MASK)
300 #define UARTINTEN_UARTRXFRAMINGERRINTEN_RESET 0
301 #define UARTINTEN_UARTTXREADYINTEN_MSB 1
302 #define UARTINTEN_UARTTXREADYINTEN_LSB 1
303 #define UARTINTEN_UARTTXREADYINTEN_MASK 0x00000002
304 #define UARTINTEN_UARTTXREADYINTEN_GET(x) (((x) & UARTINTEN_UARTTXREADYINTEN_MASK) >> UARTINTEN_UARTTXREADYINTEN_LSB)
305 #define UARTINTEN_UARTTXREADYINTEN_SET(x) (((0 | (x)) << UARTINTEN_UARTTXREADYINTEN_LSB) & UARTINTEN_UARTTXREADYINTEN_MASK)
306 #define UARTINTEN_UARTTXREADYINTEN_RESET 0
307 #define UARTINTEN_UARTRXVALIDINTEN_MSB 0
308 #define UARTINTEN_UARTRXVALIDINTEN_LSB 0
309 #define UARTINTEN_UARTRXVALIDINTEN_MASK 0x00000001
310 #define UARTINTEN_UARTRXVALIDINTEN_GET(x) (((x) & UARTINTEN_UARTRXVALIDINTEN_MASK) >> UARTINTEN_UARTRXVALIDINTEN_LSB)
311 #define UARTINTEN_UARTRXVALIDINTEN_SET(x) (((0 | (x)) << UARTINTEN_UARTRXVALIDINTEN_LSB) & UARTINTEN_UARTRXVALIDINTEN_MASK)
312 #define UARTINTEN_UARTRXVALIDINTEN_RESET 0
313 #define UARTINTEN_ADDRESS 0x0010
314 #define UARTINTEN_HW_MASK 0x000003ff
315 #define UARTINTEN_SW_MASK 0x000003ff
316 #define UARTINTEN_RSTMASK 0x000003ff
317 #define UARTINTEN_RESET 0x00000000
318
319 /*
320 * uncomment below to enable WAR for EV81847.
321 */
322 //#define AR933X_EV81847_WAR
323
324 static struct uart_driver ar933x_uart_driver;
325
326 /*
327 * Debugging.
328 */
329 #if 0
330 #define DEBUG_AUTOCONF(fmt...) printk(fmt)
331 #else
332 #define DEBUG_AUTOCONF(fmt...) do { } while (0)
333 #endif
334
335 #if 0
336 #define DEBUG_INTR(fmt...) printk(fmt)
337 #else
338 #define DEBUG_INTR(fmt...) do { } while (0)
339 #endif
340
341 /*
342 * We default to IRQ0 for the "no irq" hack. Some
343 * machine types want others as well - they're free
344 * to redefine this in their header file.
345 */
346 #define is_real_interrupt(irq) ((irq) != 0)
347
348 #include <asm/serial.h>
349
350 struct ar933x_uart_port {
351 struct uart_port port;
352 struct timer_list timer; /* "no irq" timer */
353 unsigned char acr;
354 unsigned char ier;
355 unsigned char lcr;
356 unsigned char mcr;
357 };
358
359 static inline int ar933x_ev81847_war(void)
360 {
361 #if defined(AR933X_EV81847_WAR)
362 return 1;
363 #else
364 return 0;
365 #endif
366 }
367
368 static inline unsigned int ar933x_uart_read(struct ar933x_uart_port *up,
369 int offset)
370 {
371 return readl(up->port.membase + offset);
372 }
373
374 static inline void ar933x_uart_write(struct ar933x_uart_port *up,
375 int offset, unsigned int value)
376 {
377 writel(value, up->port.membase + offset);
378 }
379
380 static inline void ar933x_uart_rmw(struct ar933x_uart_port *up,
381 unsigned int offset,
382 unsigned int mask,
383 unsigned int val)
384 {
385 unsigned int t;
386
387 t = ar933x_uart_read(up, offset);
388 t &= ~mask;
389 t |= val;
390 ar933x_uart_write(up, offset, t);
391 }
392
393 static inline void ar933x_uart_rmw_set(struct ar933x_uart_port *up,
394 unsigned int offset,
395 unsigned int val)
396 {
397 ar933x_uart_rmw(up, offset, 0, val);
398 }
399
400 static inline void ar933x_uart_rmw_clear(struct ar933x_uart_port *up,
401 unsigned int offset,
402 unsigned int val)
403 {
404 ar933x_uart_rmw(up, offset, val, 0);
405 }
406
407 static inline void ar933x_uart_start_tx_interrupt(struct ar933x_uart_port *up)
408 {
409 ar933x_uart_rmw_set(up, UARTINTEN_ADDRESS,
410 UARTINTEN_UARTTXEMPTYINTEN_SET(1));
411 }
412
413 static inline void ar933x_uart_stop_tx_interrupt(struct ar933x_uart_port *up)
414 {
415 if (up->ier & UART_IER_THRI) {
416 up->ier &= ~UART_IER_THRI;
417
418 /* FIXME: why this uses RXVALIDINTEN? */
419 ar933x_uart_rmw_clear(up, UARTINTEN_ADDRESS,
420 UARTINTEN_UARTRXVALIDINTEN_SET(1));
421 }
422 }
423
424 static unsigned int ar933x_uart_tx_empty(struct uart_port *port)
425 {
426 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
427 unsigned long flags;
428 unsigned int rdata;
429
430 spin_lock_irqsave(&up->port.lock, flags);
431 rdata = ar933x_uart_read(up, UARTDATA_ADDRESS);
432 spin_unlock_irqrestore(&up->port.lock, flags);
433
434 return (rdata & UARTDATA_UARTTXCSR_MASK) ? 0 : TIOCSER_TEMT;
435 }
436
437 static unsigned int ar933x_uart_get_mctrl(struct uart_port *port)
438 {
439 return TIOCM_CAR;
440 }
441
442 static void ar933x_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
443 {
444 }
445
446 static void ar933x_uart_start_tx(struct uart_port *port)
447 {
448 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
449
450 ar933x_uart_start_tx_interrupt(up);
451 }
452
453 static void ar933x_uart_stop_tx(struct uart_port *port)
454 {
455 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
456
457 ar933x_uart_stop_tx_interrupt(up);
458 }
459
460 static void ar933x_uart_stop_rx(struct uart_port *port)
461 {
462 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
463
464 up->ier &= ~UART_IER_RLSI;
465 up->port.read_status_mask &= ~UART_LSR_DR;
466
467 ar933x_uart_rmw_clear(up, UARTINTEN_ADDRESS,
468 UARTINTEN_UARTRXVALIDINTEN_SET(1));
469 }
470
471 static void ar933x_uart_break_ctl(struct uart_port *port, int break_state)
472 {
473 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
474 unsigned long flags;
475 unsigned long rdata;
476
477 spin_lock_irqsave(&up->port.lock, flags);
478
479 if (break_state == -1)
480 up->lcr |= UART_LCR_SBC;
481 else
482 up->lcr &= ~UART_LCR_SBC;
483
484 rdata = ar933x_uart_read(up, UARTCS_ADDRESS);
485 if (up->lcr & UART_LCR_SBC)
486 rdata |= UARTCS_UARTTXBREAK_SET(1);
487 else
488 rdata &= ~UARTCS_UARTTXBREAK_SET(1);
489
490 ar933x_uart_write(up, UARTCS_ADDRESS, rdata);
491
492 spin_unlock_irqrestore(&up->port.lock, flags);
493 }
494
495 static void ar933x_uart_enable_ms(struct uart_port *port)
496 {
497 }
498
499 static inline unsigned int ar933x_uart_get_divisor(struct uart_port *port,
500 unsigned int baud)
501 {
502 return (port->uartclk / (16 * baud)) - 1;
503 }
504
505 static void ar933x_uart_set_termios(struct uart_port *port,
506 struct ktermios *termios,
507 struct ktermios *old)
508 {
509 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
510 unsigned char cval;
511 unsigned long flags;
512 unsigned int baud, quot;
513
514 switch (termios->c_cflag & CSIZE) {
515 case CS5:
516 cval = UART_LCR_WLEN5;
517 break;
518 case CS6:
519 cval = UART_LCR_WLEN6;
520 break;
521 case CS7:
522 cval = UART_LCR_WLEN7;
523 break;
524 default:
525 case CS8:
526 cval = UART_LCR_WLEN8;
527 break;
528 }
529
530 if (termios->c_cflag & CSTOPB)
531 cval |= UART_LCR_STOP;
532 if (termios->c_cflag & PARENB)
533 cval |= UART_LCR_PARITY;
534 if (!(termios->c_cflag & PARODD))
535 cval |= UART_LCR_EPAR;
536 #ifdef CMSPAR
537 if (termios->c_cflag & CMSPAR)
538 cval |= UART_LCR_SPAR;
539 #endif
540
541 /*
542 * Ask the core to calculate the divisor for us.
543 */
544 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16);
545 quot = ar933x_uart_get_divisor(port, baud);
546
547 #if 0
548 if (up->capabilities & UART_CAP_FIFO && up->port.fifosize > 1) {
549 if (baud < 2400)
550 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1;
551 else
552 fcr = uart_config[up->port.type].fcr;
553 }
554
555 /*
556 * MCR-based auto flow control. When AFE is enabled, RTS will be
557 * deasserted when the receive FIFO contains more characters than
558 * the trigger, or the MCR RTS bit is cleared. In the case where
559 * the remote UART is not using CTS auto flow control, we must
560 * have sufficient FIFO entries for the latency of the remote
561 * UART to respond. IOW, at least 32 bytes of FIFO.
562 */
563 if (up->capabilities & UART_CAP_AFE && up->port.fifosize >= 32) {
564 up->mcr &= ~UART_MCR_AFE;
565 if (termios->c_cflag & CRTSCTS)
566 up->mcr |= UART_MCR_AFE;
567 }
568 #endif
569
570 /*
571 * Ok, we're now changing the port state. Do it with
572 * interrupts disabled.
573 */
574 spin_lock_irqsave(&up->port.lock, flags);
575
576 /*
577 * Update the per-port timeout.
578 */
579 uart_update_timeout(port, termios->c_cflag, baud);
580
581 up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
582 if (termios->c_iflag & INPCK)
583 up->port.read_status_mask |= UART_LSR_FE | UART_LSR_PE;
584 if (termios->c_iflag & (BRKINT | PARMRK))
585 up->port.read_status_mask |= UART_LSR_BI;
586
587 /*
588 * Characteres to ignore
589 */
590 up->port.ignore_status_mask = 0;
591 if (termios->c_iflag & IGNPAR)
592 up->port.ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
593 if (termios->c_iflag & IGNBRK) {
594 up->port.ignore_status_mask |= UART_LSR_BI;
595 /*
596 * If we're ignoring parity and break indicators,
597 * ignore overruns too (for real raw support).
598 */
599 if (termios->c_iflag & IGNPAR)
600 up->port.ignore_status_mask |= UART_LSR_OE;
601 }
602
603 /*
604 * ignore all characters if CREAD is not set
605 */
606 if ((termios->c_cflag & CREAD) == 0)
607 up->port.ignore_status_mask |= UART_LSR_DR;
608
609 /*
610 * CTS flow control flag and modem status interrupts
611 */
612 up->ier &= ~UART_IER_MSI;
613 if (UART_ENABLE_MS(&up->port, termios->c_cflag))
614 up->ier |= UART_IER_MSI;
615
616 ar933x_uart_rmw_set(up, UARTCS_ADDRESS,
617 UARTCS_UARTHOSTINTEN_SET(1));
618
619 /* Save LCR */
620 up->lcr = cval;
621
622 ar933x_uart_set_mctrl(&up->port, up->port.mctrl);
623 spin_unlock_irqrestore(&up->port.lock, flags);
624 }
625
626 static void ar933x_uart_rx_chars(struct ar933x_uart_port *up, int *status)
627 {
628 struct tty_struct *tty = up->port.state->port.tty;
629 unsigned int lsr = *status;
630 unsigned char ch;
631 int max_count = 256;
632 char flag;
633
634 do {
635 ch = (unsigned char)UARTDATA_UARTTXRXDATA_GET(lsr);
636
637 flag = TTY_NORMAL;
638 up->port.icount.rx++;
639
640 lsr = UARTDATA_UARTRXCSR_SET(1);
641 ar933x_uart_write(up, UARTDATA_ADDRESS, lsr);
642
643 if (unlikely(lsr & (UART_LSR_BI | UART_LSR_PE |
644 UART_LSR_FE | UART_LSR_OE))) {
645 /*
646 * For statistics only
647 */
648 if (lsr & UART_LSR_BI) {
649 lsr &= ~(UART_LSR_FE | UART_LSR_PE);
650 up->port.icount.brk++;
651 /*
652 * We do the SysRQ and SAK checking
653 * here because otherwise the break
654 * may get masked by ignore_status_mask
655 * or read_status_mask.
656 */
657 if (uart_handle_break(&up->port))
658 goto ignore_char;
659 } else if (lsr & UART_LSR_PE)
660 up->port.icount.parity++;
661 else if (lsr & UART_LSR_FE)
662 up->port.icount.frame++;
663 if (lsr & UART_LSR_OE)
664 up->port.icount.overrun++;
665
666 /*
667 * Mask off conditions which should be ignored.
668 */
669 lsr &= up->port.read_status_mask;
670
671 if (lsr & UART_LSR_BI) {
672 DEBUG_INTR("handling break....");
673 flag = TTY_BREAK;
674 } else if (lsr & UART_LSR_PE)
675 flag = TTY_PARITY;
676 else if (lsr & UART_LSR_FE)
677 flag = TTY_FRAME;
678 }
679
680 if (uart_handle_sysrq_char(&up->port, ch))
681 goto ignore_char;
682
683 uart_insert_char(&up->port, lsr, UART_LSR_OE, ch, flag);
684
685 ignore_char:
686 lsr = ar933x_uart_read(up, UARTDATA_ADDRESS);
687 } while ((lsr & UARTDATA_UARTRXCSR_MASK) && (max_count-- > 0));
688
689 spin_unlock(&up->port.lock);
690 tty_flip_buffer_push(tty);
691 spin_lock(&up->port.lock);
692
693 *status = lsr;
694 }
695
696 static void ar933x_uart_tx_chars(struct ar933x_uart_port *up)
697 {
698 struct circ_buf *xmit = &up->port.state->xmit;
699 int count;
700 unsigned int rdata;
701
702 rdata = ar933x_uart_read(up, UARTDATA_ADDRESS);
703 if (UARTDATA_UARTTXCSR_GET(rdata) == 0) {
704 ar933x_uart_start_tx_interrupt(up);
705 return;
706 }
707
708 if (up->port.x_char) {
709 rdata = UARTDATA_UARTTXRXDATA_SET((unsigned int)(up->port.x_char));
710 rdata |= UARTDATA_UARTTXCSR_SET(1);
711 ar933x_uart_write(up, UARTDATA_ADDRESS, rdata);
712 up->port.icount.tx++;
713 up->port.x_char = 0;
714 ar933x_uart_start_tx_interrupt(up);
715 return;
716 }
717
718 if (uart_tx_stopped(&up->port)) {
719 ar933x_uart_stop_tx(&up->port);
720 return;
721 }
722
723 if (uart_circ_empty(xmit)) {
724 ar933x_uart_stop_tx_interrupt(up);
725 return;
726 }
727
728 count = up->port.fifosize / 4;
729 do {
730 rdata = ar933x_uart_read(up, UARTDATA_ADDRESS);
731 if (UARTDATA_UARTTXCSR_GET(rdata) == 0) {
732 ar933x_uart_start_tx_interrupt(up);
733 return;
734 }
735
736 rdata = UARTDATA_UARTTXRXDATA_SET((unsigned int)(xmit->buf[xmit->tail]));
737 rdata |= UARTDATA_UARTTXCSR_SET(1);
738 ar933x_uart_write(up, UARTDATA_ADDRESS, rdata);
739
740 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
741 up->port.icount.tx++;
742 if (uart_circ_empty(xmit))
743 break;
744 } while (--count > 0);
745
746 rdata = ar933x_uart_read(up, UARTDATA_ADDRESS);
747 if (UARTDATA_UARTTXCSR_GET(rdata) == 0) {
748 ar933x_uart_start_tx_interrupt(up);
749 return;
750 }
751
752 /* Re-enable TX Empty Interrupt to transmit pending chars */
753 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
754 uart_write_wakeup(&up->port);
755 ar933x_uart_start_tx_interrupt(up);
756 }
757
758 DEBUG_INTR("THRE...");
759
760 if (uart_circ_empty(xmit))
761 ar933x_uart_stop_tx_interrupt(up);
762 else
763 ar933x_uart_start_tx_interrupt(up);
764 }
765
766 /*! Hornet's interrupt status is not read clear, so that we have to...
767 * a. read out the interrupt status
768 * b. clear the interrupt mask to reset the interrupt status
769 * c. enable the interrupt to reactivate interrupt
770 *
771 * Disable and clear the interrupt status
772 */
773 static inline void ar933x_uart_clear_int(struct ar933x_uart_port *up)
774 {
775 #define BIT3 (0x1>>3)
776
777 /* 1. clear MISC interrupt mask */
778 //ar7240_reg_rmw_clear(AR7240_MISC_INT_MASK, BIT3);
779
780 /* 2. clear uartcs hostinten mask, bit13 */
781 ar933x_uart_rmw_clear(up, UARTCS_ADDRESS,
782 UARTCS_UARTHOSTINTEN_SET(1));
783
784 /* 3. clear rx uartint */
785 ar933x_uart_write(up, UARTINT_ADDRESS, UARTINT_UARTRXVALIDINT_SET(1));
786
787 /* 4. clear misc interrupt status */
788 ar7240_reg_rmw_clear(AR7240_MISC_INT_STATUS, BIT3);
789
790 /* 5. clear rx uartinten*/
791 ar933x_uart_rmw_clear(up, UARTINTEN_ADDRESS,
792 UARTINTEN_UARTRXVALIDINTEN_SET(1));
793
794 /* 6. enable rx int*/
795 ar933x_uart_rmw_set(up, UARTINTEN_ADDRESS,
796 UARTINTEN_UARTRXVALIDINTEN_SET(1));
797
798 /* 7. set uartcs hostinten mask */
799 ar933x_uart_rmw_set(up, UARTCS_ADDRESS,
800 UARTCS_UARTHOSTINTEN_SET(1));
801
802 /* 8. set misc int mask */
803 //ar7240_reg_wr(AR7240_MISC_INT_MASK, BIT3);
804 }
805
806 static inline void ar933x_uart_handle_port(struct ar933x_uart_port *up)
807 {
808 unsigned int status;
809 unsigned int int_status;
810 unsigned int en_status;
811 unsigned long flags;
812
813 status = ar933x_uart_read(up, UARTDATA_ADDRESS);
814 int_status = ar933x_uart_read(up, UARTINT_ADDRESS);
815 en_status = ar933x_uart_read(up, UARTINTEN_ADDRESS);
816
817 spin_lock_irqsave(&up->port.lock, flags);
818
819 if( (int_status & en_status) & UARTINT_UARTRXVALIDINT_MASK )
820 ar933x_uart_rx_chars(up, &status);
821
822 if (((int_status & en_status) & UARTINT_UARTTXEMPTYINT_MASK)) {
823 /* clear TX empty interrupts */
824 ar933x_uart_write(up, UARTINT_ADDRESS,
825 UARTINT_UARTTXEMPTYINT_SET(1));
826
827 /* disable TX empty interrupts */
828 ar933x_uart_rmw_clear(up, UARTINTEN_ADDRESS,
829 UARTINTEN_UARTTXEMPTYINTEN_SET(1));
830
831 if (!uart_circ_empty(&up->port.state->xmit))
832 ar933x_uart_tx_chars(up);
833 }
834
835 spin_unlock_irqrestore(&up->port.lock, flags);
836 }
837
838 static irqreturn_t ar933x_uart_interrupt(int irq, void *dev_id)
839 {
840 struct ar933x_uart_port *up;
841 unsigned int iir;
842
843 up = (struct ar933x_uart_port *) dev_id;
844
845 iir = ar933x_uart_read(up, UARTCS_ADDRESS);
846 if ((iir & UARTCS_UARTHOSTINT_MASK) == 0)
847 return IRQ_NONE;
848
849 DEBUG_INTR("ar933x_uart_interrupt(%d)...", irq);
850
851 spin_lock(&up->port.lock);
852 ar933x_uart_handle_port(up);
853 ar933x_uart_clear_int(up);
854 spin_unlock(&up->port.lock);
855
856 DEBUG_INTR("end.\n");
857
858 return IRQ_HANDLED;
859 }
860
861 static void ar933x_uart_timer(unsigned long data)
862 {
863 struct uart_port *port = (void *)data;
864 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
865 unsigned int iir;
866
867 if (ar933x_ev81847_war()) {
868 struct circ_buf *xmit = &up->port.state->xmit;
869 unsigned long flags;
870
871 if (!uart_circ_empty(xmit)) {
872 spin_lock_irqsave(&up->port.lock, flags);
873 ar933x_uart_tx_chars(up);
874 spin_unlock_irqrestore(&up->port.lock, flags);
875 }
876 } else {
877 iir = ar933x_uart_read(up, UARTCS_ADDRESS);
878 if (iir & UARTCS_UARTHOSTINT_MASK) {
879 spin_lock(&up->port.lock);
880 ar933x_uart_handle_port(up);
881 spin_unlock(&up->port.lock);
882 }
883 }
884
885 mod_timer(&up->timer, jiffies + uart_poll_timeout(port));
886 }
887
888 static int ar933x_uart_startup(struct uart_port *port)
889 {
890 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
891 unsigned long flags;
892 int ret;
893
894 ret = request_irq(up->port.irq, ar933x_uart_interrupt,
895 up->port.irqflags, dev_name(up->port.dev), up);
896 if (ret)
897 return ret;
898
899 up->mcr = 0;
900
901 /*
902 * Clear the interrupt registers.
903 */
904 ar933x_uart_read(up, UARTCS_ADDRESS);
905 ar933x_uart_read(up, UARTINT_ADDRESS);
906
907 if (!is_real_interrupt(up->port.irq) || ar933x_ev81847_war()) {
908 setup_timer(&up->timer, ar933x_uart_timer, (unsigned long)port);
909 mod_timer(&up->timer, jiffies + uart_poll_timeout(port));
910 return 0;
911 }
912
913 spin_lock_irqsave(&up->port.lock, flags);
914
915 /*
916 * Enable host interrupts
917 */
918 ar933x_uart_rmw_set(up, UARTCS_ADDRESS,
919 UARTCS_UARTHOSTINTEN_SET(1));
920
921 /*
922 * Enable RX interrupts
923 */
924 up->ier = UART_IER_RLSI | UART_IER_RDI;
925 ar933x_uart_write(up, UARTINTEN_ADDRESS,
926 UARTINTEN_UARTRXVALIDINTEN_SET(1));
927
928 /*
929 * And clear the interrupt registers again for luck.
930 */
931 ar933x_uart_read(up, UARTINT_ADDRESS);
932
933 spin_unlock_irqrestore(&up->port.lock, flags);
934
935 return 0;
936 }
937
938 static void ar933x_uart_shutdown(struct uart_port *port)
939 {
940 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
941 unsigned long flags;
942
943 /*
944 * Disable all interrupts from this port
945 */
946 up->ier = 0;
947 ar933x_uart_write(up, UARTINTEN_ADDRESS, 0);
948
949 spin_lock_irqsave(&up->port.lock, flags);
950 up->port.mctrl &= ~TIOCM_OUT2;
951 ar933x_uart_set_mctrl(&up->port, up->port.mctrl);
952 spin_unlock_irqrestore(&up->port.lock, flags);
953
954 /*
955 * Disable break condition
956 */
957 ar933x_uart_rmw_clear(up, UARTCS_ADDRESS,
958 UARTCS_UARTTXBREAK_SET(1));
959
960 if (!is_real_interrupt(up->port.irq) ||
961 ar933x_ev81847_war())
962 del_timer_sync(&up->timer);
963
964 free_irq(up->port.irq, up);
965 }
966
967 static const char *ar933x_uart_type(struct uart_port *port)
968 {
969 return (port->type == PORT_AR933X) ? "AR933X UART" : NULL;
970 }
971
972 static void ar933x_uart_release_port(struct uart_port *port)
973 {
974 /* Nothing to release ... */
975 }
976
977 static int ar933x_uart_request_port(struct uart_port *port)
978 {
979 /* UARTs always present */
980 return 0;
981 }
982
983 static void ar933x_uart_config_port(struct uart_port *port, int flags)
984 {
985 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
986
987 port->type = PORT_AR933X;
988
989 /* Clear mask, so no surprise interrupts. */
990 ar933x_uart_read(up, UARTCS_ADDRESS);
991 /* Clear interrupts status register */
992 ar933x_uart_read(up, UARTINT_ADDRESS);
993 }
994
995 static int ar933x_uart_verify_port(struct uart_port *port,
996 struct serial_struct *ser)
997 {
998 return -EINVAL;
999 }
1000
1001 static struct uart_ops ar933x_uart_ops = {
1002 .tx_empty = ar933x_uart_tx_empty,
1003 .set_mctrl = ar933x_uart_set_mctrl,
1004 .get_mctrl = ar933x_uart_get_mctrl,
1005 .stop_tx = ar933x_uart_stop_tx,
1006 .start_tx = ar933x_uart_start_tx,
1007 .stop_rx = ar933x_uart_stop_rx,
1008 .enable_ms = ar933x_uart_enable_ms,
1009 .break_ctl = ar933x_uart_break_ctl,
1010 .startup = ar933x_uart_startup,
1011 .shutdown = ar933x_uart_shutdown,
1012 .set_termios = ar933x_uart_set_termios,
1013 .type = ar933x_uart_type,
1014 .release_port = ar933x_uart_release_port,
1015 .request_port = ar933x_uart_request_port,
1016 .config_port = ar933x_uart_config_port,
1017 .verify_port = ar933x_uart_verify_port,
1018 };
1019
1020 #ifdef CONFIG_SERIAL_AR933X_CONSOLE
1021
1022 static struct ar933x_uart_port *ar933x_console_ports[CONFIG_SERIAL_AR933X_NR_UARTS];
1023
1024 static void ar933x_uart_wait_xmitr(struct ar933x_uart_port *up)
1025 {
1026 unsigned int status;
1027 unsigned int timeout = 60000;
1028
1029 /* Wait up to 60ms for the character(s) to be sent. */
1030 do {
1031 status = ar933x_uart_read(up, UARTDATA_ADDRESS);
1032 if (--timeout == 0)
1033 break;
1034 udelay(1);
1035 } while (UARTDATA_UARTTXCSR_GET(status) == 0);
1036 }
1037
1038 static void ar933x_uart_console_putchar(struct uart_port *port, int ch)
1039 {
1040 struct ar933x_uart_port *up = (struct ar933x_uart_port *) port;
1041 unsigned int rdata;
1042
1043 ar933x_uart_wait_xmitr(up);
1044
1045 rdata = UARTDATA_UARTTXRXDATA_SET(ch) |
1046 UARTDATA_UARTTXCSR_SET(1);
1047 ar933x_uart_write(up, UARTDATA_ADDRESS, rdata);
1048 }
1049
1050 static void ar933x_uart_console_write(struct console *co, const char *s,
1051 unsigned int count)
1052 {
1053 struct ar933x_uart_port *up = ar933x_console_ports[co->index];
1054 unsigned long flags;
1055 unsigned int ier;
1056 int locked = 1;
1057
1058 local_irq_save(flags);
1059
1060 if (up->port.sysrq) {
1061 locked = 0;
1062 } else if (oops_in_progress) {
1063 locked = spin_trylock(&up->port.lock);
1064 } else
1065 spin_lock(&up->port.lock);
1066
1067 /*
1068 * First save the IER then disable the interrupts
1069 */
1070 ier = ar933x_uart_read(up, UARTINTEN_ADDRESS);
1071 ar933x_uart_write(up, UARTINTEN_ADDRESS, 0);
1072
1073 uart_console_write(&up->port, s, count, ar933x_uart_console_putchar);
1074
1075 /*
1076 * Finally, wait for transmitter to become empty
1077 * and restore the IER
1078 */
1079 ar933x_uart_wait_xmitr(up);
1080
1081 ar933x_uart_write(up, UARTINTEN_ADDRESS, ier);
1082 ar933x_uart_write(up, UARTINT_ADDRESS, UARTINT_RSTMASK);
1083
1084 if (locked)
1085 spin_unlock(&up->port.lock);
1086
1087 local_irq_restore(flags);
1088 }
1089
1090 static int ar933x_uart_console_setup(struct console *co, char *options)
1091 {
1092 struct ar933x_uart_port *up;
1093 int baud = 115200;
1094 int bits = 8;
1095 int parity = 'n';
1096 int flow = 'n';
1097
1098 if (co->index < 0 || co->index >= CONFIG_SERIAL_AR933X_NR_UARTS)
1099 return -EINVAL;
1100
1101 up = ar933x_console_ports[co->index];
1102 if (!up)
1103 return -ENODEV;
1104
1105 if (options)
1106 uart_parse_options(options, &baud, &parity, &bits, &flow);
1107
1108 return uart_set_options(&up->port, co, baud, parity, bits, flow);
1109 }
1110
1111 static struct console ar933x_uart_console = {
1112 .name = "ttyATH",
1113 .write = ar933x_uart_console_write,
1114 .device = uart_console_device,
1115 .setup = ar933x_uart_console_setup,
1116 .flags = CON_PRINTBUFFER,
1117 .index = -1,
1118 .data = &ar933x_uart_driver,
1119 };
1120
1121 static int __init ar933x_uart_console_init(void)
1122 {
1123 register_console(&ar933x_uart_console);
1124 return 0;
1125 }
1126 console_initcall(ar933x_uart_console_init);
1127
1128 static void ar933x_uart_add_console_port(struct ar933x_uart_port *up)
1129 {
1130 ar933x_console_ports[up->port.line] = up;
1131 }
1132
1133 #define AR933X_SERIAL_CONSOLE &ar933x_uart_console
1134
1135 #else
1136
1137 static inline void ar933x_uart_add_console_port(struct ar933x_uart_port *up) {}
1138
1139 #define AR933X_SERIAL_CONSOLE NULL
1140
1141 #endif /* CONFIG_SERIAL_AR933X_CONSOLE */
1142
1143 static struct uart_driver ar933x_uart_driver = {
1144 .owner = THIS_MODULE,
1145 .driver_name = DRIVER_NAME,
1146 .dev_name = "ttyATH",
1147 .nr = CONFIG_SERIAL_AR933X_NR_UARTS,
1148 .cons = AR933X_SERIAL_CONSOLE,
1149 };
1150
1151 static int __devinit ar933x_uart_probe(struct platform_device *pdev)
1152 {
1153 struct ar933x_uart_platform_data *pdata;
1154 struct ar933x_uart_port *up;
1155 struct uart_port *port;
1156 struct resource *mem_res;
1157 struct resource *irq_res;
1158 int id;
1159 int ret;
1160
1161 pdata = pdev->dev.platform_data;
1162 if (!pdata)
1163 return -EINVAL;
1164
1165 id = pdev->id;
1166 if (id == -1)
1167 id = 0;
1168
1169 if (id > CONFIG_SERIAL_AR933X_NR_UARTS)
1170 return -EINVAL;
1171
1172 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1173 if (!mem_res) {
1174 dev_err(&pdev->dev, "no MEM resource\n");
1175 return -EINVAL;
1176 }
1177
1178 irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1179 if (!irq_res) {
1180 dev_err(&pdev->dev, "no IRQ resource\n");
1181 return -EINVAL;
1182 }
1183
1184 up = kzalloc(sizeof(struct ar933x_uart_port), GFP_KERNEL);
1185 if (!up)
1186 return -ENOMEM;
1187
1188 port = &up->port;
1189 port->mapbase = mem_res->start;
1190
1191 port->membase = ioremap(mem_res->start, AR933X_UART_REGS_SIZE);
1192 if (!port->membase) {
1193 ret = -ENOMEM;
1194 goto err_free_up;
1195 }
1196
1197 port->line = id;
1198 port->irq = irq_res->start;
1199 port->dev = &pdev->dev;
1200 port->type = PORT_AR933X;
1201 port->iotype = UPIO_MEM32;
1202 port->uartclk = pdata->uartclk;
1203
1204 port->regshift = 2;
1205 port->fifosize = AR933X_UART_FIFO_SIZE;
1206 port->ops = &ar933x_uart_ops;
1207
1208 ar933x_uart_add_console_port(up);
1209
1210 ret = uart_add_one_port(&ar933x_uart_driver, &up->port);
1211 if (ret)
1212 goto err_unmap;
1213
1214 platform_set_drvdata(pdev, up);
1215 return 0;
1216
1217 err_unmap:
1218 iounmap(up->port.membase);
1219 err_free_up:
1220 kfree(up);
1221 return ret;
1222 }
1223
1224 static int __devexit ar933x_uart_remove(struct platform_device *pdev)
1225 {
1226 struct ar933x_uart_port *up;
1227
1228 up = platform_get_drvdata(pdev);
1229 platform_set_drvdata(pdev, NULL);
1230
1231 if (up) {
1232 uart_remove_one_port(&ar933x_uart_driver, &up->port);
1233 iounmap(up->port.membase);
1234 kfree(up);
1235 }
1236
1237 return 0;
1238 }
1239
1240 static struct platform_driver ar933x_uart_platform_driver = {
1241 .probe = ar933x_uart_probe,
1242 .remove = __devexit_p(ar933x_uart_remove),
1243 .driver = {
1244 .name = DRIVER_NAME,
1245 .owner = THIS_MODULE,
1246 },
1247 };
1248
1249 static int __init ar933x_uart_init(void)
1250 {
1251 int ret;
1252
1253 ar933x_uart_driver.nr = CONFIG_SERIAL_AR933X_NR_UARTS;
1254 ret = uart_register_driver(&ar933x_uart_driver);
1255 if (ret)
1256 goto err_out;
1257
1258 ret = platform_driver_register(&ar933x_uart_platform_driver);
1259 if (ret)
1260 goto err_unregister_uart_driver;
1261
1262 return 0;
1263
1264 err_unregister_uart_driver:
1265 uart_unregister_driver(&ar933x_uart_driver);
1266 err_out:
1267 return ret;
1268 }
1269
1270 static void __exit ar933x_uart_exit(void)
1271 {
1272 platform_driver_unregister(&ar933x_uart_platform_driver);
1273 uart_unregister_driver(&ar933x_uart_driver);
1274 }
1275
1276 module_init(ar933x_uart_init);
1277 module_exit(ar933x_uart_exit);
1278
1279 MODULE_DESCRIPTION("Atheros AR933X UART driver");
1280 MODULE_AUTHOR("Gabor Juhos <juhosg@openwrt.org>");
1281 MODULE_LICENSE("GPL v2");
1282 MODULE_ALIAS("platform:" DRV_NAME);