1 /*
2  *  Driver for Atmel AT91 / AT32 Serial ports
3  *  Copyright (C) 2003 Rick Bronson
4  *
5  *  Based on drivers/char/serial_sa1100.c, by Deep Blue Solutions Ltd.
6  *  Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
7  *
8  *  DMA support added by Chip Coldwell.
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  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23  *
24  */
25 #include <linux/module.h>
26 #include <linux/tty.h>
27 #include <linux/ioport.h>
28 #include <linux/slab.h>
29 #include <linux/init.h>
30 #include <linux/serial.h>
31 #include <linux/clk.h>
32 #include <linux/console.h>
33 #include <linux/sysrq.h>
34 #include <linux/tty_flip.h>
35 #include <linux/platform_device.h>
36 #include <linux/of.h>
37 #include <linux/of_device.h>
38 #include <linux/of_gpio.h>
39 #include <linux/dma-mapping.h>
40 #include <linux/dmaengine.h>
41 #include <linux/atmel_pdc.h>
42 #include <linux/atmel_serial.h>
43 #include <linux/uaccess.h>
44 #include <linux/platform_data/atmel.h>
45 #include <linux/timer.h>
46 #include <linux/gpio.h>
47 #include <linux/gpio/consumer.h>
48 #include <linux/err.h>
49 #include <linux/irq.h>
50 
51 #include <asm/io.h>
52 #include <asm/ioctls.h>
53 
54 #define PDC_BUFFER_SIZE		512
55 /* Revisit: We should calculate this based on the actual port settings */
56 #define PDC_RX_TIMEOUT		(3 * 10)		/* 3 bytes */
57 
58 #if defined(CONFIG_SERIAL_ATMEL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
59 #define SUPPORT_SYSRQ
60 #endif
61 
62 #include <linux/serial_core.h>
63 
64 #include "serial_mctrl_gpio.h"
65 
66 static void atmel_start_rx(struct uart_port *port);
67 static void atmel_stop_rx(struct uart_port *port);
68 
69 #ifdef CONFIG_SERIAL_ATMEL_TTYAT
70 
71 /* Use device name ttyAT, major 204 and minor 154-169.  This is necessary if we
72  * should coexist with the 8250 driver, such as if we have an external 16C550
73  * UART. */
74 #define SERIAL_ATMEL_MAJOR	204
75 #define MINOR_START		154
76 #define ATMEL_DEVICENAME	"ttyAT"
77 
78 #else
79 
80 /* Use device name ttyS, major 4, minor 64-68.  This is the usual serial port
81  * name, but it is legally reserved for the 8250 driver. */
82 #define SERIAL_ATMEL_MAJOR	TTY_MAJOR
83 #define MINOR_START		64
84 #define ATMEL_DEVICENAME	"ttyS"
85 
86 #endif
87 
88 #define ATMEL_ISR_PASS_LIMIT	256
89 
90 /* UART registers. CR is write-only, hence no GET macro */
91 #define UART_PUT_CR(port,v)	__raw_writel(v, (port)->membase + ATMEL_US_CR)
92 #define UART_GET_MR(port)	__raw_readl((port)->membase + ATMEL_US_MR)
93 #define UART_PUT_MR(port,v)	__raw_writel(v, (port)->membase + ATMEL_US_MR)
94 #define UART_PUT_IER(port,v)	__raw_writel(v, (port)->membase + ATMEL_US_IER)
95 #define UART_PUT_IDR(port,v)	__raw_writel(v, (port)->membase + ATMEL_US_IDR)
96 #define UART_GET_IMR(port)	__raw_readl((port)->membase + ATMEL_US_IMR)
97 #define UART_GET_CSR(port)	__raw_readl((port)->membase + ATMEL_US_CSR)
98 #define UART_GET_CHAR(port)	__raw_readl((port)->membase + ATMEL_US_RHR)
99 #define UART_PUT_CHAR(port,v)	__raw_writel(v, (port)->membase + ATMEL_US_THR)
100 #define UART_GET_BRGR(port)	__raw_readl((port)->membase + ATMEL_US_BRGR)
101 #define UART_PUT_BRGR(port,v)	__raw_writel(v, (port)->membase + ATMEL_US_BRGR)
102 #define UART_PUT_RTOR(port,v)	__raw_writel(v, (port)->membase + ATMEL_US_RTOR)
103 #define UART_PUT_TTGR(port, v)	__raw_writel(v, (port)->membase + ATMEL_US_TTGR)
104 #define UART_GET_IP_NAME(port)	__raw_readl((port)->membase + ATMEL_US_NAME)
105 #define UART_GET_IP_VERSION(port) __raw_readl((port)->membase + ATMEL_US_VERSION)
106 
107  /* PDC registers */
108 #define UART_PUT_PTCR(port,v)	__raw_writel(v, (port)->membase + ATMEL_PDC_PTCR)
109 #define UART_GET_PTSR(port)	__raw_readl((port)->membase + ATMEL_PDC_PTSR)
110 
111 #define UART_PUT_RPR(port,v)	__raw_writel(v, (port)->membase + ATMEL_PDC_RPR)
112 #define UART_GET_RPR(port)	__raw_readl((port)->membase + ATMEL_PDC_RPR)
113 #define UART_PUT_RCR(port,v)	__raw_writel(v, (port)->membase + ATMEL_PDC_RCR)
114 #define UART_PUT_RNPR(port,v)	__raw_writel(v, (port)->membase + ATMEL_PDC_RNPR)
115 #define UART_PUT_RNCR(port,v)	__raw_writel(v, (port)->membase + ATMEL_PDC_RNCR)
116 
117 #define UART_PUT_TPR(port,v)	__raw_writel(v, (port)->membase + ATMEL_PDC_TPR)
118 #define UART_PUT_TCR(port,v)	__raw_writel(v, (port)->membase + ATMEL_PDC_TCR)
119 #define UART_GET_TCR(port)	__raw_readl((port)->membase + ATMEL_PDC_TCR)
120 
121 struct atmel_dma_buffer {
122 	unsigned char	*buf;
123 	dma_addr_t	dma_addr;
124 	unsigned int	dma_size;
125 	unsigned int	ofs;
126 };
127 
128 struct atmel_uart_char {
129 	u16		status;
130 	u16		ch;
131 };
132 
133 #define ATMEL_SERIAL_RINGSIZE 1024
134 
135 /*
136  * We wrap our port structure around the generic uart_port.
137  */
138 struct atmel_uart_port {
139 	struct uart_port	uart;		/* uart */
140 	struct clk		*clk;		/* uart clock */
141 	int			may_wakeup;	/* cached value of device_may_wakeup for times we need to disable it */
142 	u32			backup_imr;	/* IMR saved during suspend */
143 	int			break_active;	/* break being received */
144 
145 	bool			use_dma_rx;	/* enable DMA receiver */
146 	bool			use_pdc_rx;	/* enable PDC receiver */
147 	short			pdc_rx_idx;	/* current PDC RX buffer */
148 	struct atmel_dma_buffer	pdc_rx[2];	/* PDC receier */
149 
150 	bool			use_dma_tx;     /* enable DMA transmitter */
151 	bool			use_pdc_tx;	/* enable PDC transmitter */
152 	struct atmel_dma_buffer	pdc_tx;		/* PDC transmitter */
153 
154 	spinlock_t			lock_tx;	/* port lock */
155 	spinlock_t			lock_rx;	/* port lock */
156 	struct dma_chan			*chan_tx;
157 	struct dma_chan			*chan_rx;
158 	struct dma_async_tx_descriptor	*desc_tx;
159 	struct dma_async_tx_descriptor	*desc_rx;
160 	dma_cookie_t			cookie_tx;
161 	dma_cookie_t			cookie_rx;
162 	struct scatterlist		sg_tx;
163 	struct scatterlist		sg_rx;
164 	struct tasklet_struct	tasklet;
165 	unsigned int		irq_status;
166 	unsigned int		irq_status_prev;
167 
168 	struct circ_buf		rx_ring;
169 
170 	struct mctrl_gpios	*gpios;
171 	int			gpio_irq[UART_GPIO_MAX];
172 	unsigned int		tx_done_mask;
173 	bool			ms_irq_enabled;
174 	bool			is_usart;	/* usart or uart */
175 	struct timer_list	uart_timer;	/* uart timer */
176 	int (*prepare_rx)(struct uart_port *port);
177 	int (*prepare_tx)(struct uart_port *port);
178 	void (*schedule_rx)(struct uart_port *port);
179 	void (*schedule_tx)(struct uart_port *port);
180 	void (*release_rx)(struct uart_port *port);
181 	void (*release_tx)(struct uart_port *port);
182 };
183 
184 static struct atmel_uart_port atmel_ports[ATMEL_MAX_UART];
185 static DECLARE_BITMAP(atmel_ports_in_use, ATMEL_MAX_UART);
186 
187 #ifdef SUPPORT_SYSRQ
188 static struct console atmel_console;
189 #endif
190 
191 #if defined(CONFIG_OF)
192 static const struct of_device_id atmel_serial_dt_ids[] = {
193 	{ .compatible = "atmel,at91rm9200-usart" },
194 	{ .compatible = "atmel,at91sam9260-usart" },
195 	{ /* sentinel */ }
196 };
197 
198 MODULE_DEVICE_TABLE(of, atmel_serial_dt_ids);
199 #endif
200 
201 static inline struct atmel_uart_port *
202 to_atmel_uart_port(struct uart_port *uart)
203 {
204 	return container_of(uart, struct atmel_uart_port, uart);
205 }
206 
207 #ifdef CONFIG_SERIAL_ATMEL_PDC
208 static bool atmel_use_pdc_rx(struct uart_port *port)
209 {
210 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
211 
212 	return atmel_port->use_pdc_rx;
213 }
214 
215 static bool atmel_use_pdc_tx(struct uart_port *port)
216 {
217 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
218 
219 	return atmel_port->use_pdc_tx;
220 }
221 #else
222 static bool atmel_use_pdc_rx(struct uart_port *port)
223 {
224 	return false;
225 }
226 
227 static bool atmel_use_pdc_tx(struct uart_port *port)
228 {
229 	return false;
230 }
231 #endif
232 
233 static bool atmel_use_dma_tx(struct uart_port *port)
234 {
235 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
236 
237 	return atmel_port->use_dma_tx;
238 }
239 
240 static bool atmel_use_dma_rx(struct uart_port *port)
241 {
242 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
243 
244 	return atmel_port->use_dma_rx;
245 }
246 
247 static unsigned int atmel_get_lines_status(struct uart_port *port)
248 {
249 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
250 	unsigned int status, ret = 0;
251 
252 	status = UART_GET_CSR(port);
253 
254 	mctrl_gpio_get(atmel_port->gpios, &ret);
255 
256 	if (!IS_ERR_OR_NULL(mctrl_gpio_to_gpiod(atmel_port->gpios,
257 						UART_GPIO_CTS))) {
258 		if (ret & TIOCM_CTS)
259 			status &= ~ATMEL_US_CTS;
260 		else
261 			status |= ATMEL_US_CTS;
262 	}
263 
264 	if (!IS_ERR_OR_NULL(mctrl_gpio_to_gpiod(atmel_port->gpios,
265 						UART_GPIO_DSR))) {
266 		if (ret & TIOCM_DSR)
267 			status &= ~ATMEL_US_DSR;
268 		else
269 			status |= ATMEL_US_DSR;
270 	}
271 
272 	if (!IS_ERR_OR_NULL(mctrl_gpio_to_gpiod(atmel_port->gpios,
273 						UART_GPIO_RI))) {
274 		if (ret & TIOCM_RI)
275 			status &= ~ATMEL_US_RI;
276 		else
277 			status |= ATMEL_US_RI;
278 	}
279 
280 	if (!IS_ERR_OR_NULL(mctrl_gpio_to_gpiod(atmel_port->gpios,
281 						UART_GPIO_DCD))) {
282 		if (ret & TIOCM_CD)
283 			status &= ~ATMEL_US_DCD;
284 		else
285 			status |= ATMEL_US_DCD;
286 	}
287 
288 	return status;
289 }
290 
291 /* Enable or disable the rs485 support */
292 static int atmel_config_rs485(struct uart_port *port,
293 			      struct serial_rs485 *rs485conf)
294 {
295 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
296 	unsigned int mode;
297 
298 	/* Disable interrupts */
299 	UART_PUT_IDR(port, atmel_port->tx_done_mask);
300 
301 	mode = UART_GET_MR(port);
302 
303 	/* Resetting serial mode to RS232 (0x0) */
304 	mode &= ~ATMEL_US_USMODE;
305 
306 	port->rs485 = *rs485conf;
307 
308 	if (rs485conf->flags & SER_RS485_ENABLED) {
309 		dev_dbg(port->dev, "Setting UART to RS485\n");
310 		atmel_port->tx_done_mask = ATMEL_US_TXEMPTY;
311 		if ((rs485conf->delay_rts_after_send) > 0)
312 			UART_PUT_TTGR(port, rs485conf->delay_rts_after_send);
313 		mode |= ATMEL_US_USMODE_RS485;
314 	} else {
315 		dev_dbg(port->dev, "Setting UART to RS232\n");
316 		if (atmel_use_pdc_tx(port))
317 			atmel_port->tx_done_mask = ATMEL_US_ENDTX |
318 				ATMEL_US_TXBUFE;
319 		else
320 			atmel_port->tx_done_mask = ATMEL_US_TXRDY;
321 	}
322 	UART_PUT_MR(port, mode);
323 
324 	/* Enable interrupts */
325 	UART_PUT_IER(port, atmel_port->tx_done_mask);
326 
327 	return 0;
328 }
329 
330 /*
331  * Return TIOCSER_TEMT when transmitter FIFO and Shift register is empty.
332  */
333 static u_int atmel_tx_empty(struct uart_port *port)
334 {
335 	return (UART_GET_CSR(port) & ATMEL_US_TXEMPTY) ? TIOCSER_TEMT : 0;
336 }
337 
338 /*
339  * Set state of the modem control output lines
340  */
341 static void atmel_set_mctrl(struct uart_port *port, u_int mctrl)
342 {
343 	unsigned int control = 0;
344 	unsigned int mode;
345 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
346 
347 	if (mctrl & TIOCM_RTS)
348 		control |= ATMEL_US_RTSEN;
349 	else
350 		control |= ATMEL_US_RTSDIS;
351 
352 	if (mctrl & TIOCM_DTR)
353 		control |= ATMEL_US_DTREN;
354 	else
355 		control |= ATMEL_US_DTRDIS;
356 
357 	UART_PUT_CR(port, control);
358 
359 	mctrl_gpio_set(atmel_port->gpios, mctrl);
360 
361 	/* Local loopback mode? */
362 	mode = UART_GET_MR(port) & ~ATMEL_US_CHMODE;
363 	if (mctrl & TIOCM_LOOP)
364 		mode |= ATMEL_US_CHMODE_LOC_LOOP;
365 	else
366 		mode |= ATMEL_US_CHMODE_NORMAL;
367 
368 	/* Resetting serial mode to RS232 (0x0) */
369 	mode &= ~ATMEL_US_USMODE;
370 
371 	if (port->rs485.flags & SER_RS485_ENABLED) {
372 		dev_dbg(port->dev, "Setting UART to RS485\n");
373 		if ((port->rs485.delay_rts_after_send) > 0)
374 			UART_PUT_TTGR(port, port->rs485.delay_rts_after_send);
375 		mode |= ATMEL_US_USMODE_RS485;
376 	} else {
377 		dev_dbg(port->dev, "Setting UART to RS232\n");
378 	}
379 	UART_PUT_MR(port, mode);
380 }
381 
382 /*
383  * Get state of the modem control input lines
384  */
385 static u_int atmel_get_mctrl(struct uart_port *port)
386 {
387 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
388 	unsigned int ret = 0, status;
389 
390 	status = UART_GET_CSR(port);
391 
392 	/*
393 	 * The control signals are active low.
394 	 */
395 	if (!(status & ATMEL_US_DCD))
396 		ret |= TIOCM_CD;
397 	if (!(status & ATMEL_US_CTS))
398 		ret |= TIOCM_CTS;
399 	if (!(status & ATMEL_US_DSR))
400 		ret |= TIOCM_DSR;
401 	if (!(status & ATMEL_US_RI))
402 		ret |= TIOCM_RI;
403 
404 	return mctrl_gpio_get(atmel_port->gpios, &ret);
405 }
406 
407 /*
408  * Stop transmitting.
409  */
410 static void atmel_stop_tx(struct uart_port *port)
411 {
412 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
413 
414 	if (atmel_use_pdc_tx(port)) {
415 		/* disable PDC transmit */
416 		UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS);
417 	}
418 	/* Disable interrupts */
419 	UART_PUT_IDR(port, atmel_port->tx_done_mask);
420 
421 	if ((port->rs485.flags & SER_RS485_ENABLED) &&
422 	    !(port->rs485.flags & SER_RS485_RX_DURING_TX))
423 		atmel_start_rx(port);
424 }
425 
426 /*
427  * Start transmitting.
428  */
429 static void atmel_start_tx(struct uart_port *port)
430 {
431 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
432 
433 	if (atmel_use_pdc_tx(port)) {
434 		if (UART_GET_PTSR(port) & ATMEL_PDC_TXTEN)
435 			/* The transmitter is already running.  Yes, we
436 			   really need this.*/
437 			return;
438 
439 		if ((port->rs485.flags & SER_RS485_ENABLED) &&
440 		    !(port->rs485.flags & SER_RS485_RX_DURING_TX))
441 			atmel_stop_rx(port);
442 
443 		/* re-enable PDC transmit */
444 		UART_PUT_PTCR(port, ATMEL_PDC_TXTEN);
445 	}
446 	/* Enable interrupts */
447 	UART_PUT_IER(port, atmel_port->tx_done_mask);
448 }
449 
450 /*
451  * start receiving - port is in process of being opened.
452  */
453 static void atmel_start_rx(struct uart_port *port)
454 {
455 	UART_PUT_CR(port, ATMEL_US_RSTSTA);  /* reset status and receiver */
456 
457 	UART_PUT_CR(port, ATMEL_US_RXEN);
458 
459 	if (atmel_use_pdc_rx(port)) {
460 		/* enable PDC controller */
461 		UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT |
462 			port->read_status_mask);
463 		UART_PUT_PTCR(port, ATMEL_PDC_RXTEN);
464 	} else {
465 		UART_PUT_IER(port, ATMEL_US_RXRDY);
466 	}
467 }
468 
469 /*
470  * Stop receiving - port is in process of being closed.
471  */
472 static void atmel_stop_rx(struct uart_port *port)
473 {
474 	UART_PUT_CR(port, ATMEL_US_RXDIS);
475 
476 	if (atmel_use_pdc_rx(port)) {
477 		/* disable PDC receive */
478 		UART_PUT_PTCR(port, ATMEL_PDC_RXTDIS);
479 		UART_PUT_IDR(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT |
480 			port->read_status_mask);
481 	} else {
482 		UART_PUT_IDR(port, ATMEL_US_RXRDY);
483 	}
484 }
485 
486 /*
487  * Enable modem status interrupts
488  */
489 static void atmel_enable_ms(struct uart_port *port)
490 {
491 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
492 	uint32_t ier = 0;
493 
494 	/*
495 	 * Interrupt should not be enabled twice
496 	 */
497 	if (atmel_port->ms_irq_enabled)
498 		return;
499 
500 	atmel_port->ms_irq_enabled = true;
501 
502 	if (atmel_port->gpio_irq[UART_GPIO_CTS] >= 0)
503 		enable_irq(atmel_port->gpio_irq[UART_GPIO_CTS]);
504 	else
505 		ier |= ATMEL_US_CTSIC;
506 
507 	if (atmel_port->gpio_irq[UART_GPIO_DSR] >= 0)
508 		enable_irq(atmel_port->gpio_irq[UART_GPIO_DSR]);
509 	else
510 		ier |= ATMEL_US_DSRIC;
511 
512 	if (atmel_port->gpio_irq[UART_GPIO_RI] >= 0)
513 		enable_irq(atmel_port->gpio_irq[UART_GPIO_RI]);
514 	else
515 		ier |= ATMEL_US_RIIC;
516 
517 	if (atmel_port->gpio_irq[UART_GPIO_DCD] >= 0)
518 		enable_irq(atmel_port->gpio_irq[UART_GPIO_DCD]);
519 	else
520 		ier |= ATMEL_US_DCDIC;
521 
522 	UART_PUT_IER(port, ier);
523 }
524 
525 /*
526  * Disable modem status interrupts
527  */
528 static void atmel_disable_ms(struct uart_port *port)
529 {
530 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
531 	uint32_t idr = 0;
532 
533 	/*
534 	 * Interrupt should not be disabled twice
535 	 */
536 	if (!atmel_port->ms_irq_enabled)
537 		return;
538 
539 	atmel_port->ms_irq_enabled = false;
540 
541 	if (atmel_port->gpio_irq[UART_GPIO_CTS] >= 0)
542 		disable_irq(atmel_port->gpio_irq[UART_GPIO_CTS]);
543 	else
544 		idr |= ATMEL_US_CTSIC;
545 
546 	if (atmel_port->gpio_irq[UART_GPIO_DSR] >= 0)
547 		disable_irq(atmel_port->gpio_irq[UART_GPIO_DSR]);
548 	else
549 		idr |= ATMEL_US_DSRIC;
550 
551 	if (atmel_port->gpio_irq[UART_GPIO_RI] >= 0)
552 		disable_irq(atmel_port->gpio_irq[UART_GPIO_RI]);
553 	else
554 		idr |= ATMEL_US_RIIC;
555 
556 	if (atmel_port->gpio_irq[UART_GPIO_DCD] >= 0)
557 		disable_irq(atmel_port->gpio_irq[UART_GPIO_DCD]);
558 	else
559 		idr |= ATMEL_US_DCDIC;
560 
561 	UART_PUT_IDR(port, idr);
562 }
563 
564 /*
565  * Control the transmission of a break signal
566  */
567 static void atmel_break_ctl(struct uart_port *port, int break_state)
568 {
569 	if (break_state != 0)
570 		UART_PUT_CR(port, ATMEL_US_STTBRK);	/* start break */
571 	else
572 		UART_PUT_CR(port, ATMEL_US_STPBRK);	/* stop break */
573 }
574 
575 /*
576  * Stores the incoming character in the ring buffer
577  */
578 static void
579 atmel_buffer_rx_char(struct uart_port *port, unsigned int status,
580 		     unsigned int ch)
581 {
582 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
583 	struct circ_buf *ring = &atmel_port->rx_ring;
584 	struct atmel_uart_char *c;
585 
586 	if (!CIRC_SPACE(ring->head, ring->tail, ATMEL_SERIAL_RINGSIZE))
587 		/* Buffer overflow, ignore char */
588 		return;
589 
590 	c = &((struct atmel_uart_char *)ring->buf)[ring->head];
591 	c->status	= status;
592 	c->ch		= ch;
593 
594 	/* Make sure the character is stored before we update head. */
595 	smp_wmb();
596 
597 	ring->head = (ring->head + 1) & (ATMEL_SERIAL_RINGSIZE - 1);
598 }
599 
600 /*
601  * Deal with parity, framing and overrun errors.
602  */
603 static void atmel_pdc_rxerr(struct uart_port *port, unsigned int status)
604 {
605 	/* clear error */
606 	UART_PUT_CR(port, ATMEL_US_RSTSTA);
607 
608 	if (status & ATMEL_US_RXBRK) {
609 		/* ignore side-effect */
610 		status &= ~(ATMEL_US_PARE | ATMEL_US_FRAME);
611 		port->icount.brk++;
612 	}
613 	if (status & ATMEL_US_PARE)
614 		port->icount.parity++;
615 	if (status & ATMEL_US_FRAME)
616 		port->icount.frame++;
617 	if (status & ATMEL_US_OVRE)
618 		port->icount.overrun++;
619 }
620 
621 /*
622  * Characters received (called from interrupt handler)
623  */
624 static void atmel_rx_chars(struct uart_port *port)
625 {
626 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
627 	unsigned int status, ch;
628 
629 	status = UART_GET_CSR(port);
630 	while (status & ATMEL_US_RXRDY) {
631 		ch = UART_GET_CHAR(port);
632 
633 		/*
634 		 * note that the error handling code is
635 		 * out of the main execution path
636 		 */
637 		if (unlikely(status & (ATMEL_US_PARE | ATMEL_US_FRAME
638 				       | ATMEL_US_OVRE | ATMEL_US_RXBRK)
639 			     || atmel_port->break_active)) {
640 
641 			/* clear error */
642 			UART_PUT_CR(port, ATMEL_US_RSTSTA);
643 
644 			if (status & ATMEL_US_RXBRK
645 			    && !atmel_port->break_active) {
646 				atmel_port->break_active = 1;
647 				UART_PUT_IER(port, ATMEL_US_RXBRK);
648 			} else {
649 				/*
650 				 * This is either the end-of-break
651 				 * condition or we've received at
652 				 * least one character without RXBRK
653 				 * being set. In both cases, the next
654 				 * RXBRK will indicate start-of-break.
655 				 */
656 				UART_PUT_IDR(port, ATMEL_US_RXBRK);
657 				status &= ~ATMEL_US_RXBRK;
658 				atmel_port->break_active = 0;
659 			}
660 		}
661 
662 		atmel_buffer_rx_char(port, status, ch);
663 		status = UART_GET_CSR(port);
664 	}
665 
666 	tasklet_schedule(&atmel_port->tasklet);
667 }
668 
669 /*
670  * Transmit characters (called from tasklet with TXRDY interrupt
671  * disabled)
672  */
673 static void atmel_tx_chars(struct uart_port *port)
674 {
675 	struct circ_buf *xmit = &port->state->xmit;
676 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
677 
678 	if (port->x_char && UART_GET_CSR(port) & atmel_port->tx_done_mask) {
679 		UART_PUT_CHAR(port, port->x_char);
680 		port->icount.tx++;
681 		port->x_char = 0;
682 	}
683 	if (uart_circ_empty(xmit) || uart_tx_stopped(port))
684 		return;
685 
686 	while (UART_GET_CSR(port) & atmel_port->tx_done_mask) {
687 		UART_PUT_CHAR(port, xmit->buf[xmit->tail]);
688 		xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
689 		port->icount.tx++;
690 		if (uart_circ_empty(xmit))
691 			break;
692 	}
693 
694 	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
695 		uart_write_wakeup(port);
696 
697 	if (!uart_circ_empty(xmit))
698 		/* Enable interrupts */
699 		UART_PUT_IER(port, atmel_port->tx_done_mask);
700 }
701 
702 static void atmel_complete_tx_dma(void *arg)
703 {
704 	struct atmel_uart_port *atmel_port = arg;
705 	struct uart_port *port = &atmel_port->uart;
706 	struct circ_buf *xmit = &port->state->xmit;
707 	struct dma_chan *chan = atmel_port->chan_tx;
708 	unsigned long flags;
709 
710 	spin_lock_irqsave(&port->lock, flags);
711 
712 	if (chan)
713 		dmaengine_terminate_all(chan);
714 	xmit->tail += sg_dma_len(&atmel_port->sg_tx);
715 	xmit->tail &= UART_XMIT_SIZE - 1;
716 
717 	port->icount.tx += sg_dma_len(&atmel_port->sg_tx);
718 
719 	spin_lock_irq(&atmel_port->lock_tx);
720 	async_tx_ack(atmel_port->desc_tx);
721 	atmel_port->cookie_tx = -EINVAL;
722 	atmel_port->desc_tx = NULL;
723 	spin_unlock_irq(&atmel_port->lock_tx);
724 
725 	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
726 		uart_write_wakeup(port);
727 
728 	/* Do we really need this? */
729 	if (!uart_circ_empty(xmit))
730 		tasklet_schedule(&atmel_port->tasklet);
731 
732 	spin_unlock_irqrestore(&port->lock, flags);
733 }
734 
735 static void atmel_release_tx_dma(struct uart_port *port)
736 {
737 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
738 	struct dma_chan *chan = atmel_port->chan_tx;
739 
740 	if (chan) {
741 		dmaengine_terminate_all(chan);
742 		dma_release_channel(chan);
743 		dma_unmap_sg(port->dev, &atmel_port->sg_tx, 1,
744 				DMA_TO_DEVICE);
745 	}
746 
747 	atmel_port->desc_tx = NULL;
748 	atmel_port->chan_tx = NULL;
749 	atmel_port->cookie_tx = -EINVAL;
750 }
751 
752 /*
753  * Called from tasklet with TXRDY interrupt is disabled.
754  */
755 static void atmel_tx_dma(struct uart_port *port)
756 {
757 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
758 	struct circ_buf *xmit = &port->state->xmit;
759 	struct dma_chan *chan = atmel_port->chan_tx;
760 	struct dma_async_tx_descriptor *desc;
761 	struct scatterlist *sg = &atmel_port->sg_tx;
762 
763 	/* Make sure we have an idle channel */
764 	if (atmel_port->desc_tx != NULL)
765 		return;
766 
767 	if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) {
768 		/*
769 		 * DMA is idle now.
770 		 * Port xmit buffer is already mapped,
771 		 * and it is one page... Just adjust
772 		 * offsets and lengths. Since it is a circular buffer,
773 		 * we have to transmit till the end, and then the rest.
774 		 * Take the port lock to get a
775 		 * consistent xmit buffer state.
776 		 */
777 		sg->offset = xmit->tail & (UART_XMIT_SIZE - 1);
778 		sg_dma_address(sg) = (sg_dma_address(sg) &
779 					~(UART_XMIT_SIZE - 1))
780 					+ sg->offset;
781 		sg_dma_len(sg) = CIRC_CNT_TO_END(xmit->head,
782 						xmit->tail,
783 						UART_XMIT_SIZE);
784 		BUG_ON(!sg_dma_len(sg));
785 
786 		desc = dmaengine_prep_slave_sg(chan,
787 						sg,
788 						1,
789 						DMA_MEM_TO_DEV,
790 						DMA_PREP_INTERRUPT |
791 						DMA_CTRL_ACK);
792 		if (!desc) {
793 			dev_err(port->dev, "Failed to send via dma!\n");
794 			return;
795 		}
796 
797 		dma_sync_sg_for_device(port->dev, sg, 1, DMA_MEM_TO_DEV);
798 
799 		atmel_port->desc_tx = desc;
800 		desc->callback = atmel_complete_tx_dma;
801 		desc->callback_param = atmel_port;
802 		atmel_port->cookie_tx = dmaengine_submit(desc);
803 
804 	} else {
805 		if (port->rs485.flags & SER_RS485_ENABLED) {
806 			/* DMA done, stop TX, start RX for RS485 */
807 			atmel_start_rx(port);
808 		}
809 	}
810 
811 	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
812 		uart_write_wakeup(port);
813 }
814 
815 static int atmel_prepare_tx_dma(struct uart_port *port)
816 {
817 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
818 	dma_cap_mask_t		mask;
819 	struct dma_slave_config config;
820 	int ret, nent;
821 
822 	dma_cap_zero(mask);
823 	dma_cap_set(DMA_SLAVE, mask);
824 
825 	atmel_port->chan_tx = dma_request_slave_channel(port->dev, "tx");
826 	if (atmel_port->chan_tx == NULL)
827 		goto chan_err;
828 	dev_info(port->dev, "using %s for tx DMA transfers\n",
829 		dma_chan_name(atmel_port->chan_tx));
830 
831 	spin_lock_init(&atmel_port->lock_tx);
832 	sg_init_table(&atmel_port->sg_tx, 1);
833 	/* UART circular tx buffer is an aligned page. */
834 	BUG_ON((int)port->state->xmit.buf & ~PAGE_MASK);
835 	sg_set_page(&atmel_port->sg_tx,
836 			virt_to_page(port->state->xmit.buf),
837 			UART_XMIT_SIZE,
838 			(int)port->state->xmit.buf & ~PAGE_MASK);
839 	nent = dma_map_sg(port->dev,
840 				&atmel_port->sg_tx,
841 				1,
842 				DMA_TO_DEVICE);
843 
844 	if (!nent) {
845 		dev_dbg(port->dev, "need to release resource of dma\n");
846 		goto chan_err;
847 	} else {
848 		dev_dbg(port->dev, "%s: mapped %d@%p to %x\n", __func__,
849 			sg_dma_len(&atmel_port->sg_tx),
850 			port->state->xmit.buf,
851 			sg_dma_address(&atmel_port->sg_tx));
852 	}
853 
854 	/* Configure the slave DMA */
855 	memset(&config, 0, sizeof(config));
856 	config.direction = DMA_MEM_TO_DEV;
857 	config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
858 	config.dst_addr = port->mapbase + ATMEL_US_THR;
859 
860 	ret = dmaengine_slave_config(atmel_port->chan_tx,
861 				     &config);
862 	if (ret) {
863 		dev_err(port->dev, "DMA tx slave configuration failed\n");
864 		goto chan_err;
865 	}
866 
867 	return 0;
868 
869 chan_err:
870 	dev_err(port->dev, "TX channel not available, switch to pio\n");
871 	atmel_port->use_dma_tx = 0;
872 	if (atmel_port->chan_tx)
873 		atmel_release_tx_dma(port);
874 	return -EINVAL;
875 }
876 
877 static void atmel_complete_rx_dma(void *arg)
878 {
879 	struct uart_port *port = arg;
880 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
881 
882 	tasklet_schedule(&atmel_port->tasklet);
883 }
884 
885 static void atmel_release_rx_dma(struct uart_port *port)
886 {
887 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
888 	struct dma_chan *chan = atmel_port->chan_rx;
889 
890 	if (chan) {
891 		dmaengine_terminate_all(chan);
892 		dma_release_channel(chan);
893 		dma_unmap_sg(port->dev, &atmel_port->sg_rx, 1,
894 				DMA_FROM_DEVICE);
895 	}
896 
897 	atmel_port->desc_rx = NULL;
898 	atmel_port->chan_rx = NULL;
899 	atmel_port->cookie_rx = -EINVAL;
900 }
901 
902 static void atmel_rx_from_dma(struct uart_port *port)
903 {
904 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
905 	struct tty_port *tport = &port->state->port;
906 	struct circ_buf *ring = &atmel_port->rx_ring;
907 	struct dma_chan *chan = atmel_port->chan_rx;
908 	struct dma_tx_state state;
909 	enum dma_status dmastat;
910 	size_t count;
911 
912 
913 	/* Reset the UART timeout early so that we don't miss one */
914 	UART_PUT_CR(port, ATMEL_US_STTTO);
915 	dmastat = dmaengine_tx_status(chan,
916 				atmel_port->cookie_rx,
917 				&state);
918 	/* Restart a new tasklet if DMA status is error */
919 	if (dmastat == DMA_ERROR) {
920 		dev_dbg(port->dev, "Get residue error, restart tasklet\n");
921 		UART_PUT_IER(port, ATMEL_US_TIMEOUT);
922 		tasklet_schedule(&atmel_port->tasklet);
923 		return;
924 	}
925 
926 	/* CPU claims ownership of RX DMA buffer */
927 	dma_sync_sg_for_cpu(port->dev,
928 			    &atmel_port->sg_rx,
929 			    1,
930 			    DMA_DEV_TO_MEM);
931 
932 	/*
933 	 * ring->head points to the end of data already written by the DMA.
934 	 * ring->tail points to the beginning of data to be read by the
935 	 * framework.
936 	 * The current transfer size should not be larger than the dma buffer
937 	 * length.
938 	 */
939 	ring->head = sg_dma_len(&atmel_port->sg_rx) - state.residue;
940 	BUG_ON(ring->head > sg_dma_len(&atmel_port->sg_rx));
941 	/*
942 	 * At this point ring->head may point to the first byte right after the
943 	 * last byte of the dma buffer:
944 	 * 0 <= ring->head <= sg_dma_len(&atmel_port->sg_rx)
945 	 *
946 	 * However ring->tail must always points inside the dma buffer:
947 	 * 0 <= ring->tail <= sg_dma_len(&atmel_port->sg_rx) - 1
948 	 *
949 	 * Since we use a ring buffer, we have to handle the case
950 	 * where head is lower than tail. In such a case, we first read from
951 	 * tail to the end of the buffer then reset tail.
952 	 */
953 	if (ring->head < ring->tail) {
954 		count = sg_dma_len(&atmel_port->sg_rx) - ring->tail;
955 
956 		tty_insert_flip_string(tport, ring->buf + ring->tail, count);
957 		ring->tail = 0;
958 		port->icount.rx += count;
959 	}
960 
961 	/* Finally we read data from tail to head */
962 	if (ring->tail < ring->head) {
963 		count = ring->head - ring->tail;
964 
965 		tty_insert_flip_string(tport, ring->buf + ring->tail, count);
966 		/* Wrap ring->head if needed */
967 		if (ring->head >= sg_dma_len(&atmel_port->sg_rx))
968 			ring->head = 0;
969 		ring->tail = ring->head;
970 		port->icount.rx += count;
971 	}
972 
973 	/* USART retreives ownership of RX DMA buffer */
974 	dma_sync_sg_for_device(port->dev,
975 			       &atmel_port->sg_rx,
976 			       1,
977 			       DMA_DEV_TO_MEM);
978 
979 	/*
980 	 * Drop the lock here since it might end up calling
981 	 * uart_start(), which takes the lock.
982 	 */
983 	spin_unlock(&port->lock);
984 	tty_flip_buffer_push(tport);
985 	spin_lock(&port->lock);
986 
987 	UART_PUT_IER(port, ATMEL_US_TIMEOUT);
988 }
989 
990 static int atmel_prepare_rx_dma(struct uart_port *port)
991 {
992 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
993 	struct dma_async_tx_descriptor *desc;
994 	dma_cap_mask_t		mask;
995 	struct dma_slave_config config;
996 	struct circ_buf		*ring;
997 	int ret, nent;
998 
999 	ring = &atmel_port->rx_ring;
1000 
1001 	dma_cap_zero(mask);
1002 	dma_cap_set(DMA_CYCLIC, mask);
1003 
1004 	atmel_port->chan_rx = dma_request_slave_channel(port->dev, "rx");
1005 	if (atmel_port->chan_rx == NULL)
1006 		goto chan_err;
1007 	dev_info(port->dev, "using %s for rx DMA transfers\n",
1008 		dma_chan_name(atmel_port->chan_rx));
1009 
1010 	spin_lock_init(&atmel_port->lock_rx);
1011 	sg_init_table(&atmel_port->sg_rx, 1);
1012 	/* UART circular rx buffer is an aligned page. */
1013 	BUG_ON((int)port->state->xmit.buf & ~PAGE_MASK);
1014 	sg_set_page(&atmel_port->sg_rx,
1015 			virt_to_page(ring->buf),
1016 			ATMEL_SERIAL_RINGSIZE,
1017 			(int)ring->buf & ~PAGE_MASK);
1018 			nent = dma_map_sg(port->dev,
1019 					&atmel_port->sg_rx,
1020 					1,
1021 					DMA_FROM_DEVICE);
1022 
1023 	if (!nent) {
1024 		dev_dbg(port->dev, "need to release resource of dma\n");
1025 		goto chan_err;
1026 	} else {
1027 		dev_dbg(port->dev, "%s: mapped %d@%p to %x\n", __func__,
1028 			sg_dma_len(&atmel_port->sg_rx),
1029 			ring->buf,
1030 			sg_dma_address(&atmel_port->sg_rx));
1031 	}
1032 
1033 	/* Configure the slave DMA */
1034 	memset(&config, 0, sizeof(config));
1035 	config.direction = DMA_DEV_TO_MEM;
1036 	config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
1037 	config.src_addr = port->mapbase + ATMEL_US_RHR;
1038 
1039 	ret = dmaengine_slave_config(atmel_port->chan_rx,
1040 				     &config);
1041 	if (ret) {
1042 		dev_err(port->dev, "DMA rx slave configuration failed\n");
1043 		goto chan_err;
1044 	}
1045 	/*
1046 	 * Prepare a cyclic dma transfer, assign 2 descriptors,
1047 	 * each one is half ring buffer size
1048 	 */
1049 	desc = dmaengine_prep_dma_cyclic(atmel_port->chan_rx,
1050 				sg_dma_address(&atmel_port->sg_rx),
1051 				sg_dma_len(&atmel_port->sg_rx),
1052 				sg_dma_len(&atmel_port->sg_rx)/2,
1053 				DMA_DEV_TO_MEM,
1054 				DMA_PREP_INTERRUPT);
1055 	desc->callback = atmel_complete_rx_dma;
1056 	desc->callback_param = port;
1057 	atmel_port->desc_rx = desc;
1058 	atmel_port->cookie_rx = dmaengine_submit(desc);
1059 
1060 	return 0;
1061 
1062 chan_err:
1063 	dev_err(port->dev, "RX channel not available, switch to pio\n");
1064 	atmel_port->use_dma_rx = 0;
1065 	if (atmel_port->chan_rx)
1066 		atmel_release_rx_dma(port);
1067 	return -EINVAL;
1068 }
1069 
1070 static void atmel_uart_timer_callback(unsigned long data)
1071 {
1072 	struct uart_port *port = (void *)data;
1073 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1074 
1075 	tasklet_schedule(&atmel_port->tasklet);
1076 	mod_timer(&atmel_port->uart_timer, jiffies + uart_poll_timeout(port));
1077 }
1078 
1079 /*
1080  * receive interrupt handler.
1081  */
1082 static void
1083 atmel_handle_receive(struct uart_port *port, unsigned int pending)
1084 {
1085 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1086 
1087 	if (atmel_use_pdc_rx(port)) {
1088 		/*
1089 		 * PDC receive. Just schedule the tasklet and let it
1090 		 * figure out the details.
1091 		 *
1092 		 * TODO: We're not handling error flags correctly at
1093 		 * the moment.
1094 		 */
1095 		if (pending & (ATMEL_US_ENDRX | ATMEL_US_TIMEOUT)) {
1096 			UART_PUT_IDR(port, (ATMEL_US_ENDRX
1097 						| ATMEL_US_TIMEOUT));
1098 			tasklet_schedule(&atmel_port->tasklet);
1099 		}
1100 
1101 		if (pending & (ATMEL_US_RXBRK | ATMEL_US_OVRE |
1102 				ATMEL_US_FRAME | ATMEL_US_PARE))
1103 			atmel_pdc_rxerr(port, pending);
1104 	}
1105 
1106 	if (atmel_use_dma_rx(port)) {
1107 		if (pending & ATMEL_US_TIMEOUT) {
1108 			UART_PUT_IDR(port, ATMEL_US_TIMEOUT);
1109 			tasklet_schedule(&atmel_port->tasklet);
1110 		}
1111 	}
1112 
1113 	/* Interrupt receive */
1114 	if (pending & ATMEL_US_RXRDY)
1115 		atmel_rx_chars(port);
1116 	else if (pending & ATMEL_US_RXBRK) {
1117 		/*
1118 		 * End of break detected. If it came along with a
1119 		 * character, atmel_rx_chars will handle it.
1120 		 */
1121 		UART_PUT_CR(port, ATMEL_US_RSTSTA);
1122 		UART_PUT_IDR(port, ATMEL_US_RXBRK);
1123 		atmel_port->break_active = 0;
1124 	}
1125 }
1126 
1127 /*
1128  * transmit interrupt handler. (Transmit is IRQF_NODELAY safe)
1129  */
1130 static void
1131 atmel_handle_transmit(struct uart_port *port, unsigned int pending)
1132 {
1133 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1134 
1135 	if (pending & atmel_port->tx_done_mask) {
1136 		/* Either PDC or interrupt transmission */
1137 		UART_PUT_IDR(port, atmel_port->tx_done_mask);
1138 		tasklet_schedule(&atmel_port->tasklet);
1139 	}
1140 }
1141 
1142 /*
1143  * status flags interrupt handler.
1144  */
1145 static void
1146 atmel_handle_status(struct uart_port *port, unsigned int pending,
1147 		    unsigned int status)
1148 {
1149 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1150 
1151 	if (pending & (ATMEL_US_RIIC | ATMEL_US_DSRIC | ATMEL_US_DCDIC
1152 				| ATMEL_US_CTSIC)) {
1153 		atmel_port->irq_status = status;
1154 		tasklet_schedule(&atmel_port->tasklet);
1155 	}
1156 }
1157 
1158 /*
1159  * Interrupt handler
1160  */
1161 static irqreturn_t atmel_interrupt(int irq, void *dev_id)
1162 {
1163 	struct uart_port *port = dev_id;
1164 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1165 	unsigned int status, pending, pass_counter = 0;
1166 	bool gpio_handled = false;
1167 
1168 	do {
1169 		status = atmel_get_lines_status(port);
1170 		pending = status & UART_GET_IMR(port);
1171 		if (!gpio_handled) {
1172 			/*
1173 			 * Dealing with GPIO interrupt
1174 			 */
1175 			if (irq == atmel_port->gpio_irq[UART_GPIO_CTS])
1176 				pending |= ATMEL_US_CTSIC;
1177 
1178 			if (irq == atmel_port->gpio_irq[UART_GPIO_DSR])
1179 				pending |= ATMEL_US_DSRIC;
1180 
1181 			if (irq == atmel_port->gpio_irq[UART_GPIO_RI])
1182 				pending |= ATMEL_US_RIIC;
1183 
1184 			if (irq == atmel_port->gpio_irq[UART_GPIO_DCD])
1185 				pending |= ATMEL_US_DCDIC;
1186 
1187 			gpio_handled = true;
1188 		}
1189 		if (!pending)
1190 			break;
1191 
1192 		atmel_handle_receive(port, pending);
1193 		atmel_handle_status(port, pending, status);
1194 		atmel_handle_transmit(port, pending);
1195 	} while (pass_counter++ < ATMEL_ISR_PASS_LIMIT);
1196 
1197 	return pass_counter ? IRQ_HANDLED : IRQ_NONE;
1198 }
1199 
1200 static void atmel_release_tx_pdc(struct uart_port *port)
1201 {
1202 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1203 	struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
1204 
1205 	dma_unmap_single(port->dev,
1206 			 pdc->dma_addr,
1207 			 pdc->dma_size,
1208 			 DMA_TO_DEVICE);
1209 }
1210 
1211 /*
1212  * Called from tasklet with ENDTX and TXBUFE interrupts disabled.
1213  */
1214 static void atmel_tx_pdc(struct uart_port *port)
1215 {
1216 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1217 	struct circ_buf *xmit = &port->state->xmit;
1218 	struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
1219 	int count;
1220 
1221 	/* nothing left to transmit? */
1222 	if (UART_GET_TCR(port))
1223 		return;
1224 
1225 	xmit->tail += pdc->ofs;
1226 	xmit->tail &= UART_XMIT_SIZE - 1;
1227 
1228 	port->icount.tx += pdc->ofs;
1229 	pdc->ofs = 0;
1230 
1231 	/* more to transmit - setup next transfer */
1232 
1233 	/* disable PDC transmit */
1234 	UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS);
1235 
1236 	if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) {
1237 		dma_sync_single_for_device(port->dev,
1238 					   pdc->dma_addr,
1239 					   pdc->dma_size,
1240 					   DMA_TO_DEVICE);
1241 
1242 		count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
1243 		pdc->ofs = count;
1244 
1245 		UART_PUT_TPR(port, pdc->dma_addr + xmit->tail);
1246 		UART_PUT_TCR(port, count);
1247 		/* re-enable PDC transmit */
1248 		UART_PUT_PTCR(port, ATMEL_PDC_TXTEN);
1249 		/* Enable interrupts */
1250 		UART_PUT_IER(port, atmel_port->tx_done_mask);
1251 	} else {
1252 		if ((port->rs485.flags & SER_RS485_ENABLED) &&
1253 		    !(port->rs485.flags & SER_RS485_RX_DURING_TX)) {
1254 			/* DMA done, stop TX, start RX for RS485 */
1255 			atmel_start_rx(port);
1256 		}
1257 	}
1258 
1259 	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
1260 		uart_write_wakeup(port);
1261 }
1262 
1263 static int atmel_prepare_tx_pdc(struct uart_port *port)
1264 {
1265 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1266 	struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
1267 	struct circ_buf *xmit = &port->state->xmit;
1268 
1269 	pdc->buf = xmit->buf;
1270 	pdc->dma_addr = dma_map_single(port->dev,
1271 					pdc->buf,
1272 					UART_XMIT_SIZE,
1273 					DMA_TO_DEVICE);
1274 	pdc->dma_size = UART_XMIT_SIZE;
1275 	pdc->ofs = 0;
1276 
1277 	return 0;
1278 }
1279 
1280 static void atmel_rx_from_ring(struct uart_port *port)
1281 {
1282 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1283 	struct circ_buf *ring = &atmel_port->rx_ring;
1284 	unsigned int flg;
1285 	unsigned int status;
1286 
1287 	while (ring->head != ring->tail) {
1288 		struct atmel_uart_char c;
1289 
1290 		/* Make sure c is loaded after head. */
1291 		smp_rmb();
1292 
1293 		c = ((struct atmel_uart_char *)ring->buf)[ring->tail];
1294 
1295 		ring->tail = (ring->tail + 1) & (ATMEL_SERIAL_RINGSIZE - 1);
1296 
1297 		port->icount.rx++;
1298 		status = c.status;
1299 		flg = TTY_NORMAL;
1300 
1301 		/*
1302 		 * note that the error handling code is
1303 		 * out of the main execution path
1304 		 */
1305 		if (unlikely(status & (ATMEL_US_PARE | ATMEL_US_FRAME
1306 				       | ATMEL_US_OVRE | ATMEL_US_RXBRK))) {
1307 			if (status & ATMEL_US_RXBRK) {
1308 				/* ignore side-effect */
1309 				status &= ~(ATMEL_US_PARE | ATMEL_US_FRAME);
1310 
1311 				port->icount.brk++;
1312 				if (uart_handle_break(port))
1313 					continue;
1314 			}
1315 			if (status & ATMEL_US_PARE)
1316 				port->icount.parity++;
1317 			if (status & ATMEL_US_FRAME)
1318 				port->icount.frame++;
1319 			if (status & ATMEL_US_OVRE)
1320 				port->icount.overrun++;
1321 
1322 			status &= port->read_status_mask;
1323 
1324 			if (status & ATMEL_US_RXBRK)
1325 				flg = TTY_BREAK;
1326 			else if (status & ATMEL_US_PARE)
1327 				flg = TTY_PARITY;
1328 			else if (status & ATMEL_US_FRAME)
1329 				flg = TTY_FRAME;
1330 		}
1331 
1332 
1333 		if (uart_handle_sysrq_char(port, c.ch))
1334 			continue;
1335 
1336 		uart_insert_char(port, status, ATMEL_US_OVRE, c.ch, flg);
1337 	}
1338 
1339 	/*
1340 	 * Drop the lock here since it might end up calling
1341 	 * uart_start(), which takes the lock.
1342 	 */
1343 	spin_unlock(&port->lock);
1344 	tty_flip_buffer_push(&port->state->port);
1345 	spin_lock(&port->lock);
1346 }
1347 
1348 static void atmel_release_rx_pdc(struct uart_port *port)
1349 {
1350 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1351 	int i;
1352 
1353 	for (i = 0; i < 2; i++) {
1354 		struct atmel_dma_buffer *pdc = &atmel_port->pdc_rx[i];
1355 
1356 		dma_unmap_single(port->dev,
1357 				 pdc->dma_addr,
1358 				 pdc->dma_size,
1359 				 DMA_FROM_DEVICE);
1360 		kfree(pdc->buf);
1361 	}
1362 }
1363 
1364 static void atmel_rx_from_pdc(struct uart_port *port)
1365 {
1366 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1367 	struct tty_port *tport = &port->state->port;
1368 	struct atmel_dma_buffer *pdc;
1369 	int rx_idx = atmel_port->pdc_rx_idx;
1370 	unsigned int head;
1371 	unsigned int tail;
1372 	unsigned int count;
1373 
1374 	do {
1375 		/* Reset the UART timeout early so that we don't miss one */
1376 		UART_PUT_CR(port, ATMEL_US_STTTO);
1377 
1378 		pdc = &atmel_port->pdc_rx[rx_idx];
1379 		head = UART_GET_RPR(port) - pdc->dma_addr;
1380 		tail = pdc->ofs;
1381 
1382 		/* If the PDC has switched buffers, RPR won't contain
1383 		 * any address within the current buffer. Since head
1384 		 * is unsigned, we just need a one-way comparison to
1385 		 * find out.
1386 		 *
1387 		 * In this case, we just need to consume the entire
1388 		 * buffer and resubmit it for DMA. This will clear the
1389 		 * ENDRX bit as well, so that we can safely re-enable
1390 		 * all interrupts below.
1391 		 */
1392 		head = min(head, pdc->dma_size);
1393 
1394 		if (likely(head != tail)) {
1395 			dma_sync_single_for_cpu(port->dev, pdc->dma_addr,
1396 					pdc->dma_size, DMA_FROM_DEVICE);
1397 
1398 			/*
1399 			 * head will only wrap around when we recycle
1400 			 * the DMA buffer, and when that happens, we
1401 			 * explicitly set tail to 0. So head will
1402 			 * always be greater than tail.
1403 			 */
1404 			count = head - tail;
1405 
1406 			tty_insert_flip_string(tport, pdc->buf + pdc->ofs,
1407 						count);
1408 
1409 			dma_sync_single_for_device(port->dev, pdc->dma_addr,
1410 					pdc->dma_size, DMA_FROM_DEVICE);
1411 
1412 			port->icount.rx += count;
1413 			pdc->ofs = head;
1414 		}
1415 
1416 		/*
1417 		 * If the current buffer is full, we need to check if
1418 		 * the next one contains any additional data.
1419 		 */
1420 		if (head >= pdc->dma_size) {
1421 			pdc->ofs = 0;
1422 			UART_PUT_RNPR(port, pdc->dma_addr);
1423 			UART_PUT_RNCR(port, pdc->dma_size);
1424 
1425 			rx_idx = !rx_idx;
1426 			atmel_port->pdc_rx_idx = rx_idx;
1427 		}
1428 	} while (head >= pdc->dma_size);
1429 
1430 	/*
1431 	 * Drop the lock here since it might end up calling
1432 	 * uart_start(), which takes the lock.
1433 	 */
1434 	spin_unlock(&port->lock);
1435 	tty_flip_buffer_push(tport);
1436 	spin_lock(&port->lock);
1437 
1438 	UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT);
1439 }
1440 
1441 static int atmel_prepare_rx_pdc(struct uart_port *port)
1442 {
1443 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1444 	int i;
1445 
1446 	for (i = 0; i < 2; i++) {
1447 		struct atmel_dma_buffer *pdc = &atmel_port->pdc_rx[i];
1448 
1449 		pdc->buf = kmalloc(PDC_BUFFER_SIZE, GFP_KERNEL);
1450 		if (pdc->buf == NULL) {
1451 			if (i != 0) {
1452 				dma_unmap_single(port->dev,
1453 					atmel_port->pdc_rx[0].dma_addr,
1454 					PDC_BUFFER_SIZE,
1455 					DMA_FROM_DEVICE);
1456 				kfree(atmel_port->pdc_rx[0].buf);
1457 			}
1458 			atmel_port->use_pdc_rx = 0;
1459 			return -ENOMEM;
1460 		}
1461 		pdc->dma_addr = dma_map_single(port->dev,
1462 						pdc->buf,
1463 						PDC_BUFFER_SIZE,
1464 						DMA_FROM_DEVICE);
1465 		pdc->dma_size = PDC_BUFFER_SIZE;
1466 		pdc->ofs = 0;
1467 	}
1468 
1469 	atmel_port->pdc_rx_idx = 0;
1470 
1471 	UART_PUT_RPR(port, atmel_port->pdc_rx[0].dma_addr);
1472 	UART_PUT_RCR(port, PDC_BUFFER_SIZE);
1473 
1474 	UART_PUT_RNPR(port, atmel_port->pdc_rx[1].dma_addr);
1475 	UART_PUT_RNCR(port, PDC_BUFFER_SIZE);
1476 
1477 	return 0;
1478 }
1479 
1480 /*
1481  * tasklet handling tty stuff outside the interrupt handler.
1482  */
1483 static void atmel_tasklet_func(unsigned long data)
1484 {
1485 	struct uart_port *port = (struct uart_port *)data;
1486 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1487 	unsigned int status;
1488 	unsigned int status_change;
1489 
1490 	/* The interrupt handler does not take the lock */
1491 	spin_lock(&port->lock);
1492 
1493 	atmel_port->schedule_tx(port);
1494 
1495 	status = atmel_port->irq_status;
1496 	status_change = status ^ atmel_port->irq_status_prev;
1497 
1498 	if (status_change & (ATMEL_US_RI | ATMEL_US_DSR
1499 				| ATMEL_US_DCD | ATMEL_US_CTS)) {
1500 		/* TODO: All reads to CSR will clear these interrupts! */
1501 		if (status_change & ATMEL_US_RI)
1502 			port->icount.rng++;
1503 		if (status_change & ATMEL_US_DSR)
1504 			port->icount.dsr++;
1505 		if (status_change & ATMEL_US_DCD)
1506 			uart_handle_dcd_change(port, !(status & ATMEL_US_DCD));
1507 		if (status_change & ATMEL_US_CTS)
1508 			uart_handle_cts_change(port, !(status & ATMEL_US_CTS));
1509 
1510 		wake_up_interruptible(&port->state->port.delta_msr_wait);
1511 
1512 		atmel_port->irq_status_prev = status;
1513 	}
1514 
1515 	atmel_port->schedule_rx(port);
1516 
1517 	spin_unlock(&port->lock);
1518 }
1519 
1520 static int atmel_init_property(struct atmel_uart_port *atmel_port,
1521 				struct platform_device *pdev)
1522 {
1523 	struct device_node *np = pdev->dev.of_node;
1524 	struct atmel_uart_data *pdata = dev_get_platdata(&pdev->dev);
1525 
1526 	if (np) {
1527 		/* DMA/PDC usage specification */
1528 		if (of_get_property(np, "atmel,use-dma-rx", NULL)) {
1529 			if (of_get_property(np, "dmas", NULL)) {
1530 				atmel_port->use_dma_rx  = true;
1531 				atmel_port->use_pdc_rx  = false;
1532 			} else {
1533 				atmel_port->use_dma_rx  = false;
1534 				atmel_port->use_pdc_rx  = true;
1535 			}
1536 		} else {
1537 			atmel_port->use_dma_rx  = false;
1538 			atmel_port->use_pdc_rx  = false;
1539 		}
1540 
1541 		if (of_get_property(np, "atmel,use-dma-tx", NULL)) {
1542 			if (of_get_property(np, "dmas", NULL)) {
1543 				atmel_port->use_dma_tx  = true;
1544 				atmel_port->use_pdc_tx  = false;
1545 			} else {
1546 				atmel_port->use_dma_tx  = false;
1547 				atmel_port->use_pdc_tx  = true;
1548 			}
1549 		} else {
1550 			atmel_port->use_dma_tx  = false;
1551 			atmel_port->use_pdc_tx  = false;
1552 		}
1553 
1554 	} else {
1555 		atmel_port->use_pdc_rx  = pdata->use_dma_rx;
1556 		atmel_port->use_pdc_tx  = pdata->use_dma_tx;
1557 		atmel_port->use_dma_rx  = false;
1558 		atmel_port->use_dma_tx  = false;
1559 	}
1560 
1561 	return 0;
1562 }
1563 
1564 static void atmel_init_rs485(struct uart_port *port,
1565 				struct platform_device *pdev)
1566 {
1567 	struct device_node *np = pdev->dev.of_node;
1568 	struct atmel_uart_data *pdata = dev_get_platdata(&pdev->dev);
1569 
1570 	if (np) {
1571 		u32 rs485_delay[2];
1572 		/* rs485 properties */
1573 		if (of_property_read_u32_array(np, "rs485-rts-delay",
1574 					rs485_delay, 2) == 0) {
1575 			struct serial_rs485 *rs485conf = &port->rs485;
1576 
1577 			rs485conf->delay_rts_before_send = rs485_delay[0];
1578 			rs485conf->delay_rts_after_send = rs485_delay[1];
1579 			rs485conf->flags = 0;
1580 
1581 		if (of_get_property(np, "rs485-rx-during-tx", NULL))
1582 			rs485conf->flags |= SER_RS485_RX_DURING_TX;
1583 
1584 		if (of_get_property(np, "linux,rs485-enabled-at-boot-time",
1585 								NULL))
1586 			rs485conf->flags |= SER_RS485_ENABLED;
1587 		}
1588 	} else {
1589 		port->rs485       = pdata->rs485;
1590 	}
1591 
1592 }
1593 
1594 static void atmel_set_ops(struct uart_port *port)
1595 {
1596 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1597 
1598 	if (atmel_use_dma_rx(port)) {
1599 		atmel_port->prepare_rx = &atmel_prepare_rx_dma;
1600 		atmel_port->schedule_rx = &atmel_rx_from_dma;
1601 		atmel_port->release_rx = &atmel_release_rx_dma;
1602 	} else if (atmel_use_pdc_rx(port)) {
1603 		atmel_port->prepare_rx = &atmel_prepare_rx_pdc;
1604 		atmel_port->schedule_rx = &atmel_rx_from_pdc;
1605 		atmel_port->release_rx = &atmel_release_rx_pdc;
1606 	} else {
1607 		atmel_port->prepare_rx = NULL;
1608 		atmel_port->schedule_rx = &atmel_rx_from_ring;
1609 		atmel_port->release_rx = NULL;
1610 	}
1611 
1612 	if (atmel_use_dma_tx(port)) {
1613 		atmel_port->prepare_tx = &atmel_prepare_tx_dma;
1614 		atmel_port->schedule_tx = &atmel_tx_dma;
1615 		atmel_port->release_tx = &atmel_release_tx_dma;
1616 	} else if (atmel_use_pdc_tx(port)) {
1617 		atmel_port->prepare_tx = &atmel_prepare_tx_pdc;
1618 		atmel_port->schedule_tx = &atmel_tx_pdc;
1619 		atmel_port->release_tx = &atmel_release_tx_pdc;
1620 	} else {
1621 		atmel_port->prepare_tx = NULL;
1622 		atmel_port->schedule_tx = &atmel_tx_chars;
1623 		atmel_port->release_tx = NULL;
1624 	}
1625 }
1626 
1627 /*
1628  * Get ip name usart or uart
1629  */
1630 static void atmel_get_ip_name(struct uart_port *port)
1631 {
1632 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1633 	int name = UART_GET_IP_NAME(port);
1634 	u32 version;
1635 	int usart, uart;
1636 	/* usart and uart ascii */
1637 	usart = 0x55534152;
1638 	uart = 0x44424755;
1639 
1640 	atmel_port->is_usart = false;
1641 
1642 	if (name == usart) {
1643 		dev_dbg(port->dev, "This is usart\n");
1644 		atmel_port->is_usart = true;
1645 	} else if (name == uart) {
1646 		dev_dbg(port->dev, "This is uart\n");
1647 		atmel_port->is_usart = false;
1648 	} else {
1649 		/* fallback for older SoCs: use version field */
1650 		version = UART_GET_IP_VERSION(port);
1651 		switch (version) {
1652 		case 0x302:
1653 		case 0x10213:
1654 			dev_dbg(port->dev, "This version is usart\n");
1655 			atmel_port->is_usart = true;
1656 			break;
1657 		case 0x203:
1658 		case 0x10202:
1659 			dev_dbg(port->dev, "This version is uart\n");
1660 			atmel_port->is_usart = false;
1661 			break;
1662 		default:
1663 			dev_err(port->dev, "Not supported ip name nor version, set to uart\n");
1664 		}
1665 	}
1666 }
1667 
1668 static void atmel_free_gpio_irq(struct uart_port *port)
1669 {
1670 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1671 	enum mctrl_gpio_idx i;
1672 
1673 	for (i = 0; i < UART_GPIO_MAX; i++)
1674 		if (atmel_port->gpio_irq[i] >= 0)
1675 			free_irq(atmel_port->gpio_irq[i], port);
1676 }
1677 
1678 static int atmel_request_gpio_irq(struct uart_port *port)
1679 {
1680 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1681 	int *irq = atmel_port->gpio_irq;
1682 	enum mctrl_gpio_idx i;
1683 	int err = 0;
1684 
1685 	for (i = 0; (i < UART_GPIO_MAX) && !err; i++) {
1686 		if (irq[i] < 0)
1687 			continue;
1688 
1689 		irq_set_status_flags(irq[i], IRQ_NOAUTOEN);
1690 		err = request_irq(irq[i], atmel_interrupt, IRQ_TYPE_EDGE_BOTH,
1691 				  "atmel_serial", port);
1692 		if (err)
1693 			dev_err(port->dev, "atmel_startup - Can't get %d irq\n",
1694 				irq[i]);
1695 	}
1696 
1697 	/*
1698 	 * If something went wrong, rollback.
1699 	 */
1700 	while (err && (--i >= 0))
1701 		if (irq[i] >= 0)
1702 			free_irq(irq[i], port);
1703 
1704 	return err;
1705 }
1706 
1707 /*
1708  * Perform initialization and enable port for reception
1709  */
1710 static int atmel_startup(struct uart_port *port)
1711 {
1712 	struct platform_device *pdev = to_platform_device(port->dev);
1713 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1714 	struct tty_struct *tty = port->state->port.tty;
1715 	int retval;
1716 
1717 	/*
1718 	 * Ensure that no interrupts are enabled otherwise when
1719 	 * request_irq() is called we could get stuck trying to
1720 	 * handle an unexpected interrupt
1721 	 */
1722 	UART_PUT_IDR(port, -1);
1723 	atmel_port->ms_irq_enabled = false;
1724 
1725 	/*
1726 	 * Allocate the IRQ
1727 	 */
1728 	retval = request_irq(port->irq, atmel_interrupt, IRQF_SHARED,
1729 			tty ? tty->name : "atmel_serial", port);
1730 	if (retval) {
1731 		dev_err(port->dev, "atmel_startup - Can't get irq\n");
1732 		return retval;
1733 	}
1734 
1735 	/*
1736 	 * Get the GPIO lines IRQ
1737 	 */
1738 	retval = atmel_request_gpio_irq(port);
1739 	if (retval)
1740 		goto free_irq;
1741 
1742 	/*
1743 	 * Initialize DMA (if necessary)
1744 	 */
1745 	atmel_init_property(atmel_port, pdev);
1746 
1747 	if (atmel_port->prepare_rx) {
1748 		retval = atmel_port->prepare_rx(port);
1749 		if (retval < 0)
1750 			atmel_set_ops(port);
1751 	}
1752 
1753 	if (atmel_port->prepare_tx) {
1754 		retval = atmel_port->prepare_tx(port);
1755 		if (retval < 0)
1756 			atmel_set_ops(port);
1757 	}
1758 
1759 	/* Save current CSR for comparison in atmel_tasklet_func() */
1760 	atmel_port->irq_status_prev = atmel_get_lines_status(port);
1761 	atmel_port->irq_status = atmel_port->irq_status_prev;
1762 
1763 	/*
1764 	 * Finally, enable the serial port
1765 	 */
1766 	UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);
1767 	/* enable xmit & rcvr */
1768 	UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN);
1769 
1770 	setup_timer(&atmel_port->uart_timer,
1771 			atmel_uart_timer_callback,
1772 			(unsigned long)port);
1773 
1774 	if (atmel_use_pdc_rx(port)) {
1775 		/* set UART timeout */
1776 		if (!atmel_port->is_usart) {
1777 			mod_timer(&atmel_port->uart_timer,
1778 					jiffies + uart_poll_timeout(port));
1779 		/* set USART timeout */
1780 		} else {
1781 			UART_PUT_RTOR(port, PDC_RX_TIMEOUT);
1782 			UART_PUT_CR(port, ATMEL_US_STTTO);
1783 
1784 			UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT);
1785 		}
1786 		/* enable PDC controller */
1787 		UART_PUT_PTCR(port, ATMEL_PDC_RXTEN);
1788 	} else if (atmel_use_dma_rx(port)) {
1789 		/* set UART timeout */
1790 		if (!atmel_port->is_usart) {
1791 			mod_timer(&atmel_port->uart_timer,
1792 					jiffies + uart_poll_timeout(port));
1793 		/* set USART timeout */
1794 		} else {
1795 			UART_PUT_RTOR(port, PDC_RX_TIMEOUT);
1796 			UART_PUT_CR(port, ATMEL_US_STTTO);
1797 
1798 			UART_PUT_IER(port, ATMEL_US_TIMEOUT);
1799 		}
1800 	} else {
1801 		/* enable receive only */
1802 		UART_PUT_IER(port, ATMEL_US_RXRDY);
1803 	}
1804 
1805 	return 0;
1806 
1807 free_irq:
1808 	free_irq(port->irq, port);
1809 
1810 	return retval;
1811 }
1812 
1813 /*
1814  * Flush any TX data submitted for DMA. Called when the TX circular
1815  * buffer is reset.
1816  */
1817 static void atmel_flush_buffer(struct uart_port *port)
1818 {
1819 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1820 
1821 	if (atmel_use_pdc_tx(port)) {
1822 		UART_PUT_TCR(port, 0);
1823 		atmel_port->pdc_tx.ofs = 0;
1824 	}
1825 }
1826 
1827 /*
1828  * Disable the port
1829  */
1830 static void atmel_shutdown(struct uart_port *port)
1831 {
1832 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1833 
1834 	/*
1835 	 * Prevent any tasklets being scheduled during
1836 	 * cleanup
1837 	 */
1838 	del_timer_sync(&atmel_port->uart_timer);
1839 
1840 	/*
1841 	 * Clear out any scheduled tasklets before
1842 	 * we destroy the buffers
1843 	 */
1844 	tasklet_kill(&atmel_port->tasklet);
1845 
1846 	/*
1847 	 * Ensure everything is stopped and
1848 	 * disable all interrupts, port and break condition.
1849 	 */
1850 	atmel_stop_rx(port);
1851 	atmel_stop_tx(port);
1852 
1853 	UART_PUT_CR(port, ATMEL_US_RSTSTA);
1854 	UART_PUT_IDR(port, -1);
1855 
1856 
1857 	/*
1858 	 * Shut-down the DMA.
1859 	 */
1860 	if (atmel_port->release_rx)
1861 		atmel_port->release_rx(port);
1862 	if (atmel_port->release_tx)
1863 		atmel_port->release_tx(port);
1864 
1865 	/*
1866 	 * Reset ring buffer pointers
1867 	 */
1868 	atmel_port->rx_ring.head = 0;
1869 	atmel_port->rx_ring.tail = 0;
1870 
1871 	/*
1872 	 * Free the interrupts
1873 	 */
1874 	free_irq(port->irq, port);
1875 	atmel_free_gpio_irq(port);
1876 
1877 	atmel_port->ms_irq_enabled = false;
1878 
1879 	atmel_flush_buffer(port);
1880 }
1881 
1882 /*
1883  * Power / Clock management.
1884  */
1885 static void atmel_serial_pm(struct uart_port *port, unsigned int state,
1886 			    unsigned int oldstate)
1887 {
1888 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
1889 
1890 	switch (state) {
1891 	case 0:
1892 		/*
1893 		 * Enable the peripheral clock for this serial port.
1894 		 * This is called on uart_open() or a resume event.
1895 		 */
1896 		clk_prepare_enable(atmel_port->clk);
1897 
1898 		/* re-enable interrupts if we disabled some on suspend */
1899 		UART_PUT_IER(port, atmel_port->backup_imr);
1900 		break;
1901 	case 3:
1902 		/* Back up the interrupt mask and disable all interrupts */
1903 		atmel_port->backup_imr = UART_GET_IMR(port);
1904 		UART_PUT_IDR(port, -1);
1905 
1906 		/*
1907 		 * Disable the peripheral clock for this serial port.
1908 		 * This is called on uart_close() or a suspend event.
1909 		 */
1910 		clk_disable_unprepare(atmel_port->clk);
1911 		break;
1912 	default:
1913 		dev_err(port->dev, "atmel_serial: unknown pm %d\n", state);
1914 	}
1915 }
1916 
1917 /*
1918  * Change the port parameters
1919  */
1920 static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
1921 			      struct ktermios *old)
1922 {
1923 	unsigned long flags;
1924 	unsigned int mode, imr, quot, baud;
1925 
1926 	/* Get current mode register */
1927 	mode = UART_GET_MR(port) & ~(ATMEL_US_USCLKS | ATMEL_US_CHRL
1928 					| ATMEL_US_NBSTOP | ATMEL_US_PAR
1929 					| ATMEL_US_USMODE);
1930 
1931 	baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16);
1932 	quot = uart_get_divisor(port, baud);
1933 
1934 	if (quot > 65535) {	/* BRGR is 16-bit, so switch to slower clock */
1935 		quot /= 8;
1936 		mode |= ATMEL_US_USCLKS_MCK_DIV8;
1937 	}
1938 
1939 	/* byte size */
1940 	switch (termios->c_cflag & CSIZE) {
1941 	case CS5:
1942 		mode |= ATMEL_US_CHRL_5;
1943 		break;
1944 	case CS6:
1945 		mode |= ATMEL_US_CHRL_6;
1946 		break;
1947 	case CS7:
1948 		mode |= ATMEL_US_CHRL_7;
1949 		break;
1950 	default:
1951 		mode |= ATMEL_US_CHRL_8;
1952 		break;
1953 	}
1954 
1955 	/* stop bits */
1956 	if (termios->c_cflag & CSTOPB)
1957 		mode |= ATMEL_US_NBSTOP_2;
1958 
1959 	/* parity */
1960 	if (termios->c_cflag & PARENB) {
1961 		/* Mark or Space parity */
1962 		if (termios->c_cflag & CMSPAR) {
1963 			if (termios->c_cflag & PARODD)
1964 				mode |= ATMEL_US_PAR_MARK;
1965 			else
1966 				mode |= ATMEL_US_PAR_SPACE;
1967 		} else if (termios->c_cflag & PARODD)
1968 			mode |= ATMEL_US_PAR_ODD;
1969 		else
1970 			mode |= ATMEL_US_PAR_EVEN;
1971 	} else
1972 		mode |= ATMEL_US_PAR_NONE;
1973 
1974 	/* hardware handshake (RTS/CTS) */
1975 	if (termios->c_cflag & CRTSCTS)
1976 		mode |= ATMEL_US_USMODE_HWHS;
1977 	else
1978 		mode |= ATMEL_US_USMODE_NORMAL;
1979 
1980 	spin_lock_irqsave(&port->lock, flags);
1981 
1982 	port->read_status_mask = ATMEL_US_OVRE;
1983 	if (termios->c_iflag & INPCK)
1984 		port->read_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE);
1985 	if (termios->c_iflag & (IGNBRK | BRKINT | PARMRK))
1986 		port->read_status_mask |= ATMEL_US_RXBRK;
1987 
1988 	if (atmel_use_pdc_rx(port))
1989 		/* need to enable error interrupts */
1990 		UART_PUT_IER(port, port->read_status_mask);
1991 
1992 	/*
1993 	 * Characters to ignore
1994 	 */
1995 	port->ignore_status_mask = 0;
1996 	if (termios->c_iflag & IGNPAR)
1997 		port->ignore_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE);
1998 	if (termios->c_iflag & IGNBRK) {
1999 		port->ignore_status_mask |= ATMEL_US_RXBRK;
2000 		/*
2001 		 * If we're ignoring parity and break indicators,
2002 		 * ignore overruns too (for real raw support).
2003 		 */
2004 		if (termios->c_iflag & IGNPAR)
2005 			port->ignore_status_mask |= ATMEL_US_OVRE;
2006 	}
2007 	/* TODO: Ignore all characters if CREAD is set.*/
2008 
2009 	/* update the per-port timeout */
2010 	uart_update_timeout(port, termios->c_cflag, baud);
2011 
2012 	/*
2013 	 * save/disable interrupts. The tty layer will ensure that the
2014 	 * transmitter is empty if requested by the caller, so there's
2015 	 * no need to wait for it here.
2016 	 */
2017 	imr = UART_GET_IMR(port);
2018 	UART_PUT_IDR(port, -1);
2019 
2020 	/* disable receiver and transmitter */
2021 	UART_PUT_CR(port, ATMEL_US_TXDIS | ATMEL_US_RXDIS);
2022 
2023 	/* Resetting serial mode to RS232 (0x0) */
2024 	mode &= ~ATMEL_US_USMODE;
2025 
2026 	if (port->rs485.flags & SER_RS485_ENABLED) {
2027 		if ((port->rs485.delay_rts_after_send) > 0)
2028 			UART_PUT_TTGR(port, port->rs485.delay_rts_after_send);
2029 		mode |= ATMEL_US_USMODE_RS485;
2030 	}
2031 
2032 	/* set the parity, stop bits and data size */
2033 	UART_PUT_MR(port, mode);
2034 
2035 	/* set the baud rate */
2036 	UART_PUT_BRGR(port, quot);
2037 	UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);
2038 	UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN);
2039 
2040 	/* restore interrupts */
2041 	UART_PUT_IER(port, imr);
2042 
2043 	/* CTS flow-control and modem-status interrupts */
2044 	if (UART_ENABLE_MS(port, termios->c_cflag))
2045 		atmel_enable_ms(port);
2046 	else
2047 		atmel_disable_ms(port);
2048 
2049 	spin_unlock_irqrestore(&port->lock, flags);
2050 }
2051 
2052 static void atmel_set_ldisc(struct uart_port *port, struct ktermios *termios)
2053 {
2054 	if (termios->c_line == N_PPS) {
2055 		port->flags |= UPF_HARDPPS_CD;
2056 		spin_lock_irq(&port->lock);
2057 		atmel_enable_ms(port);
2058 		spin_unlock_irq(&port->lock);
2059 	} else {
2060 		port->flags &= ~UPF_HARDPPS_CD;
2061 		if (!UART_ENABLE_MS(port, termios->c_cflag)) {
2062 			spin_lock_irq(&port->lock);
2063 			atmel_disable_ms(port);
2064 			spin_unlock_irq(&port->lock);
2065 		}
2066 	}
2067 }
2068 
2069 /*
2070  * Return string describing the specified port
2071  */
2072 static const char *atmel_type(struct uart_port *port)
2073 {
2074 	return (port->type == PORT_ATMEL) ? "ATMEL_SERIAL" : NULL;
2075 }
2076 
2077 /*
2078  * Release the memory region(s) being used by 'port'.
2079  */
2080 static void atmel_release_port(struct uart_port *port)
2081 {
2082 	struct platform_device *pdev = to_platform_device(port->dev);
2083 	int size = pdev->resource[0].end - pdev->resource[0].start + 1;
2084 
2085 	release_mem_region(port->mapbase, size);
2086 
2087 	if (port->flags & UPF_IOREMAP) {
2088 		iounmap(port->membase);
2089 		port->membase = NULL;
2090 	}
2091 }
2092 
2093 /*
2094  * Request the memory region(s) being used by 'port'.
2095  */
2096 static int atmel_request_port(struct uart_port *port)
2097 {
2098 	struct platform_device *pdev = to_platform_device(port->dev);
2099 	int size = pdev->resource[0].end - pdev->resource[0].start + 1;
2100 
2101 	if (!request_mem_region(port->mapbase, size, "atmel_serial"))
2102 		return -EBUSY;
2103 
2104 	if (port->flags & UPF_IOREMAP) {
2105 		port->membase = ioremap(port->mapbase, size);
2106 		if (port->membase == NULL) {
2107 			release_mem_region(port->mapbase, size);
2108 			return -ENOMEM;
2109 		}
2110 	}
2111 
2112 	return 0;
2113 }
2114 
2115 /*
2116  * Configure/autoconfigure the port.
2117  */
2118 static void atmel_config_port(struct uart_port *port, int flags)
2119 {
2120 	if (flags & UART_CONFIG_TYPE) {
2121 		port->type = PORT_ATMEL;
2122 		atmel_request_port(port);
2123 	}
2124 }
2125 
2126 /*
2127  * Verify the new serial_struct (for TIOCSSERIAL).
2128  */
2129 static int atmel_verify_port(struct uart_port *port, struct serial_struct *ser)
2130 {
2131 	int ret = 0;
2132 	if (ser->type != PORT_UNKNOWN && ser->type != PORT_ATMEL)
2133 		ret = -EINVAL;
2134 	if (port->irq != ser->irq)
2135 		ret = -EINVAL;
2136 	if (ser->io_type != SERIAL_IO_MEM)
2137 		ret = -EINVAL;
2138 	if (port->uartclk / 16 != ser->baud_base)
2139 		ret = -EINVAL;
2140 	if ((void *)port->mapbase != ser->iomem_base)
2141 		ret = -EINVAL;
2142 	if (port->iobase != ser->port)
2143 		ret = -EINVAL;
2144 	if (ser->hub6 != 0)
2145 		ret = -EINVAL;
2146 	return ret;
2147 }
2148 
2149 #ifdef CONFIG_CONSOLE_POLL
2150 static int atmel_poll_get_char(struct uart_port *port)
2151 {
2152 	while (!(UART_GET_CSR(port) & ATMEL_US_RXRDY))
2153 		cpu_relax();
2154 
2155 	return UART_GET_CHAR(port);
2156 }
2157 
2158 static void atmel_poll_put_char(struct uart_port *port, unsigned char ch)
2159 {
2160 	while (!(UART_GET_CSR(port) & ATMEL_US_TXRDY))
2161 		cpu_relax();
2162 
2163 	UART_PUT_CHAR(port, ch);
2164 }
2165 #endif
2166 
2167 static struct uart_ops atmel_pops = {
2168 	.tx_empty	= atmel_tx_empty,
2169 	.set_mctrl	= atmel_set_mctrl,
2170 	.get_mctrl	= atmel_get_mctrl,
2171 	.stop_tx	= atmel_stop_tx,
2172 	.start_tx	= atmel_start_tx,
2173 	.stop_rx	= atmel_stop_rx,
2174 	.enable_ms	= atmel_enable_ms,
2175 	.break_ctl	= atmel_break_ctl,
2176 	.startup	= atmel_startup,
2177 	.shutdown	= atmel_shutdown,
2178 	.flush_buffer	= atmel_flush_buffer,
2179 	.set_termios	= atmel_set_termios,
2180 	.set_ldisc	= atmel_set_ldisc,
2181 	.type		= atmel_type,
2182 	.release_port	= atmel_release_port,
2183 	.request_port	= atmel_request_port,
2184 	.config_port	= atmel_config_port,
2185 	.verify_port	= atmel_verify_port,
2186 	.pm		= atmel_serial_pm,
2187 #ifdef CONFIG_CONSOLE_POLL
2188 	.poll_get_char	= atmel_poll_get_char,
2189 	.poll_put_char	= atmel_poll_put_char,
2190 #endif
2191 };
2192 
2193 /*
2194  * Configure the port from the platform device resource info.
2195  */
2196 static int atmel_init_port(struct atmel_uart_port *atmel_port,
2197 				      struct platform_device *pdev)
2198 {
2199 	int ret;
2200 	struct uart_port *port = &atmel_port->uart;
2201 	struct atmel_uart_data *pdata = dev_get_platdata(&pdev->dev);
2202 
2203 	if (!atmel_init_property(atmel_port, pdev))
2204 		atmel_set_ops(port);
2205 
2206 	atmel_init_rs485(port, pdev);
2207 
2208 	port->iotype		= UPIO_MEM;
2209 	port->flags		= UPF_BOOT_AUTOCONF;
2210 	port->ops		= &atmel_pops;
2211 	port->fifosize		= 1;
2212 	port->dev		= &pdev->dev;
2213 	port->mapbase	= pdev->resource[0].start;
2214 	port->irq	= pdev->resource[1].start;
2215 	port->rs485_config	= atmel_config_rs485;
2216 
2217 	tasklet_init(&atmel_port->tasklet, atmel_tasklet_func,
2218 			(unsigned long)port);
2219 
2220 	memset(&atmel_port->rx_ring, 0, sizeof(atmel_port->rx_ring));
2221 
2222 	if (pdata && pdata->regs) {
2223 		/* Already mapped by setup code */
2224 		port->membase = pdata->regs;
2225 	} else {
2226 		port->flags	|= UPF_IOREMAP;
2227 		port->membase	= NULL;
2228 	}
2229 
2230 	/* for console, the clock could already be configured */
2231 	if (!atmel_port->clk) {
2232 		atmel_port->clk = clk_get(&pdev->dev, "usart");
2233 		if (IS_ERR(atmel_port->clk)) {
2234 			ret = PTR_ERR(atmel_port->clk);
2235 			atmel_port->clk = NULL;
2236 			return ret;
2237 		}
2238 		ret = clk_prepare_enable(atmel_port->clk);
2239 		if (ret) {
2240 			clk_put(atmel_port->clk);
2241 			atmel_port->clk = NULL;
2242 			return ret;
2243 		}
2244 		port->uartclk = clk_get_rate(atmel_port->clk);
2245 		clk_disable_unprepare(atmel_port->clk);
2246 		/* only enable clock when USART is in use */
2247 	}
2248 
2249 	/* Use TXEMPTY for interrupt when rs485 else TXRDY or ENDTX|TXBUFE */
2250 	if (port->rs485.flags & SER_RS485_ENABLED)
2251 		atmel_port->tx_done_mask = ATMEL_US_TXEMPTY;
2252 	else if (atmel_use_pdc_tx(port)) {
2253 		port->fifosize = PDC_BUFFER_SIZE;
2254 		atmel_port->tx_done_mask = ATMEL_US_ENDTX | ATMEL_US_TXBUFE;
2255 	} else {
2256 		atmel_port->tx_done_mask = ATMEL_US_TXRDY;
2257 	}
2258 
2259 	return 0;
2260 }
2261 
2262 struct platform_device *atmel_default_console_device;	/* the serial console device */
2263 
2264 #ifdef CONFIG_SERIAL_ATMEL_CONSOLE
2265 static void atmel_console_putchar(struct uart_port *port, int ch)
2266 {
2267 	while (!(UART_GET_CSR(port) & ATMEL_US_TXRDY))
2268 		cpu_relax();
2269 	UART_PUT_CHAR(port, ch);
2270 }
2271 
2272 /*
2273  * Interrupts are disabled on entering
2274  */
2275 static void atmel_console_write(struct console *co, const char *s, u_int count)
2276 {
2277 	struct uart_port *port = &atmel_ports[co->index].uart;
2278 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
2279 	unsigned int status, imr;
2280 	unsigned int pdc_tx;
2281 
2282 	/*
2283 	 * First, save IMR and then disable interrupts
2284 	 */
2285 	imr = UART_GET_IMR(port);
2286 	UART_PUT_IDR(port, ATMEL_US_RXRDY | atmel_port->tx_done_mask);
2287 
2288 	/* Store PDC transmit status and disable it */
2289 	pdc_tx = UART_GET_PTSR(port) & ATMEL_PDC_TXTEN;
2290 	UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS);
2291 
2292 	uart_console_write(port, s, count, atmel_console_putchar);
2293 
2294 	/*
2295 	 * Finally, wait for transmitter to become empty
2296 	 * and restore IMR
2297 	 */
2298 	do {
2299 		status = UART_GET_CSR(port);
2300 	} while (!(status & ATMEL_US_TXRDY));
2301 
2302 	/* Restore PDC transmit status */
2303 	if (pdc_tx)
2304 		UART_PUT_PTCR(port, ATMEL_PDC_TXTEN);
2305 
2306 	/* set interrupts back the way they were */
2307 	UART_PUT_IER(port, imr);
2308 }
2309 
2310 /*
2311  * If the port was already initialised (eg, by a boot loader),
2312  * try to determine the current setup.
2313  */
2314 static void __init atmel_console_get_options(struct uart_port *port, int *baud,
2315 					     int *parity, int *bits)
2316 {
2317 	unsigned int mr, quot;
2318 
2319 	/*
2320 	 * If the baud rate generator isn't running, the port wasn't
2321 	 * initialized by the boot loader.
2322 	 */
2323 	quot = UART_GET_BRGR(port) & ATMEL_US_CD;
2324 	if (!quot)
2325 		return;
2326 
2327 	mr = UART_GET_MR(port) & ATMEL_US_CHRL;
2328 	if (mr == ATMEL_US_CHRL_8)
2329 		*bits = 8;
2330 	else
2331 		*bits = 7;
2332 
2333 	mr = UART_GET_MR(port) & ATMEL_US_PAR;
2334 	if (mr == ATMEL_US_PAR_EVEN)
2335 		*parity = 'e';
2336 	else if (mr == ATMEL_US_PAR_ODD)
2337 		*parity = 'o';
2338 
2339 	/*
2340 	 * The serial core only rounds down when matching this to a
2341 	 * supported baud rate. Make sure we don't end up slightly
2342 	 * lower than one of those, as it would make us fall through
2343 	 * to a much lower baud rate than we really want.
2344 	 */
2345 	*baud = port->uartclk / (16 * (quot - 1));
2346 }
2347 
2348 static int __init atmel_console_setup(struct console *co, char *options)
2349 {
2350 	int ret;
2351 	struct uart_port *port = &atmel_ports[co->index].uart;
2352 	int baud = 115200;
2353 	int bits = 8;
2354 	int parity = 'n';
2355 	int flow = 'n';
2356 
2357 	if (port->membase == NULL) {
2358 		/* Port not initialized yet - delay setup */
2359 		return -ENODEV;
2360 	}
2361 
2362 	ret = clk_prepare_enable(atmel_ports[co->index].clk);
2363 	if (ret)
2364 		return ret;
2365 
2366 	UART_PUT_IDR(port, -1);
2367 	UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);
2368 	UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN);
2369 
2370 	if (options)
2371 		uart_parse_options(options, &baud, &parity, &bits, &flow);
2372 	else
2373 		atmel_console_get_options(port, &baud, &parity, &bits);
2374 
2375 	return uart_set_options(port, co, baud, parity, bits, flow);
2376 }
2377 
2378 static struct uart_driver atmel_uart;
2379 
2380 static struct console atmel_console = {
2381 	.name		= ATMEL_DEVICENAME,
2382 	.write		= atmel_console_write,
2383 	.device		= uart_console_device,
2384 	.setup		= atmel_console_setup,
2385 	.flags		= CON_PRINTBUFFER,
2386 	.index		= -1,
2387 	.data		= &atmel_uart,
2388 };
2389 
2390 #define ATMEL_CONSOLE_DEVICE	(&atmel_console)
2391 
2392 /*
2393  * Early console initialization (before VM subsystem initialized).
2394  */
2395 static int __init atmel_console_init(void)
2396 {
2397 	int ret;
2398 	if (atmel_default_console_device) {
2399 		struct atmel_uart_data *pdata =
2400 			dev_get_platdata(&atmel_default_console_device->dev);
2401 		int id = pdata->num;
2402 		struct atmel_uart_port *port = &atmel_ports[id];
2403 
2404 		port->backup_imr = 0;
2405 		port->uart.line = id;
2406 
2407 		add_preferred_console(ATMEL_DEVICENAME, id, NULL);
2408 		ret = atmel_init_port(port, atmel_default_console_device);
2409 		if (ret)
2410 			return ret;
2411 		register_console(&atmel_console);
2412 	}
2413 
2414 	return 0;
2415 }
2416 
2417 console_initcall(atmel_console_init);
2418 
2419 /*
2420  * Late console initialization.
2421  */
2422 static int __init atmel_late_console_init(void)
2423 {
2424 	if (atmel_default_console_device
2425 	    && !(atmel_console.flags & CON_ENABLED))
2426 		register_console(&atmel_console);
2427 
2428 	return 0;
2429 }
2430 
2431 core_initcall(atmel_late_console_init);
2432 
2433 static inline bool atmel_is_console_port(struct uart_port *port)
2434 {
2435 	return port->cons && port->cons->index == port->line;
2436 }
2437 
2438 #else
2439 #define ATMEL_CONSOLE_DEVICE	NULL
2440 
2441 static inline bool atmel_is_console_port(struct uart_port *port)
2442 {
2443 	return false;
2444 }
2445 #endif
2446 
2447 static struct uart_driver atmel_uart = {
2448 	.owner		= THIS_MODULE,
2449 	.driver_name	= "atmel_serial",
2450 	.dev_name	= ATMEL_DEVICENAME,
2451 	.major		= SERIAL_ATMEL_MAJOR,
2452 	.minor		= MINOR_START,
2453 	.nr		= ATMEL_MAX_UART,
2454 	.cons		= ATMEL_CONSOLE_DEVICE,
2455 };
2456 
2457 #ifdef CONFIG_PM
2458 static bool atmel_serial_clk_will_stop(void)
2459 {
2460 #ifdef CONFIG_ARCH_AT91
2461 	return at91_suspend_entering_slow_clock();
2462 #else
2463 	return false;
2464 #endif
2465 }
2466 
2467 static int atmel_serial_suspend(struct platform_device *pdev,
2468 				pm_message_t state)
2469 {
2470 	struct uart_port *port = platform_get_drvdata(pdev);
2471 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
2472 
2473 	if (atmel_is_console_port(port) && console_suspend_enabled) {
2474 		/* Drain the TX shifter */
2475 		while (!(UART_GET_CSR(port) & ATMEL_US_TXEMPTY))
2476 			cpu_relax();
2477 	}
2478 
2479 	/* we can not wake up if we're running on slow clock */
2480 	atmel_port->may_wakeup = device_may_wakeup(&pdev->dev);
2481 	if (atmel_serial_clk_will_stop())
2482 		device_set_wakeup_enable(&pdev->dev, 0);
2483 
2484 	uart_suspend_port(&atmel_uart, port);
2485 
2486 	return 0;
2487 }
2488 
2489 static int atmel_serial_resume(struct platform_device *pdev)
2490 {
2491 	struct uart_port *port = platform_get_drvdata(pdev);
2492 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
2493 
2494 	uart_resume_port(&atmel_uart, port);
2495 	device_set_wakeup_enable(&pdev->dev, atmel_port->may_wakeup);
2496 
2497 	return 0;
2498 }
2499 #else
2500 #define atmel_serial_suspend NULL
2501 #define atmel_serial_resume NULL
2502 #endif
2503 
2504 static int atmel_init_gpios(struct atmel_uart_port *p, struct device *dev)
2505 {
2506 	enum mctrl_gpio_idx i;
2507 	struct gpio_desc *gpiod;
2508 
2509 	p->gpios = mctrl_gpio_init(dev, 0);
2510 	if (IS_ERR_OR_NULL(p->gpios))
2511 		return -1;
2512 
2513 	for (i = 0; i < UART_GPIO_MAX; i++) {
2514 		gpiod = mctrl_gpio_to_gpiod(p->gpios, i);
2515 		if (gpiod && (gpiod_get_direction(gpiod) == GPIOF_DIR_IN))
2516 			p->gpio_irq[i] = gpiod_to_irq(gpiod);
2517 		else
2518 			p->gpio_irq[i] = -EINVAL;
2519 	}
2520 
2521 	return 0;
2522 }
2523 
2524 static int atmel_serial_probe(struct platform_device *pdev)
2525 {
2526 	struct atmel_uart_port *port;
2527 	struct device_node *np = pdev->dev.of_node;
2528 	struct atmel_uart_data *pdata = dev_get_platdata(&pdev->dev);
2529 	void *data;
2530 	int ret = -ENODEV;
2531 	bool rs485_enabled;
2532 
2533 	BUILD_BUG_ON(ATMEL_SERIAL_RINGSIZE & (ATMEL_SERIAL_RINGSIZE - 1));
2534 
2535 	if (np)
2536 		ret = of_alias_get_id(np, "serial");
2537 	else
2538 		if (pdata)
2539 			ret = pdata->num;
2540 
2541 	if (ret < 0)
2542 		/* port id not found in platform data nor device-tree aliases:
2543 		 * auto-enumerate it */
2544 		ret = find_first_zero_bit(atmel_ports_in_use, ATMEL_MAX_UART);
2545 
2546 	if (ret >= ATMEL_MAX_UART) {
2547 		ret = -ENODEV;
2548 		goto err;
2549 	}
2550 
2551 	if (test_and_set_bit(ret, atmel_ports_in_use)) {
2552 		/* port already in use */
2553 		ret = -EBUSY;
2554 		goto err;
2555 	}
2556 
2557 	port = &atmel_ports[ret];
2558 	port->backup_imr = 0;
2559 	port->uart.line = ret;
2560 
2561 	ret = atmel_init_gpios(port, &pdev->dev);
2562 	if (ret < 0)
2563 		dev_err(&pdev->dev, "%s",
2564 			"Failed to initialize GPIOs. The serial port may not work as expected");
2565 
2566 	ret = atmel_init_port(port, pdev);
2567 	if (ret)
2568 		goto err;
2569 
2570 	if (!atmel_use_pdc_rx(&port->uart)) {
2571 		ret = -ENOMEM;
2572 		data = kmalloc(sizeof(struct atmel_uart_char)
2573 				* ATMEL_SERIAL_RINGSIZE, GFP_KERNEL);
2574 		if (!data)
2575 			goto err_alloc_ring;
2576 		port->rx_ring.buf = data;
2577 	}
2578 
2579 	rs485_enabled = port->uart.rs485.flags & SER_RS485_ENABLED;
2580 
2581 	ret = uart_add_one_port(&atmel_uart, &port->uart);
2582 	if (ret)
2583 		goto err_add_port;
2584 
2585 #ifdef CONFIG_SERIAL_ATMEL_CONSOLE
2586 	if (atmel_is_console_port(&port->uart)
2587 			&& ATMEL_CONSOLE_DEVICE->flags & CON_ENABLED) {
2588 		/*
2589 		 * The serial core enabled the clock for us, so undo
2590 		 * the clk_prepare_enable() in atmel_console_setup()
2591 		 */
2592 		clk_disable_unprepare(port->clk);
2593 	}
2594 #endif
2595 
2596 	device_init_wakeup(&pdev->dev, 1);
2597 	platform_set_drvdata(pdev, port);
2598 
2599 	if (rs485_enabled) {
2600 		UART_PUT_MR(&port->uart, ATMEL_US_USMODE_NORMAL);
2601 		UART_PUT_CR(&port->uart, ATMEL_US_RTSEN);
2602 	}
2603 
2604 	/*
2605 	 * Get port name of usart or uart
2606 	 */
2607 	atmel_get_ip_name(&port->uart);
2608 
2609 	return 0;
2610 
2611 err_add_port:
2612 	kfree(port->rx_ring.buf);
2613 	port->rx_ring.buf = NULL;
2614 err_alloc_ring:
2615 	if (!atmel_is_console_port(&port->uart)) {
2616 		clk_put(port->clk);
2617 		port->clk = NULL;
2618 	}
2619 err:
2620 	return ret;
2621 }
2622 
2623 static int atmel_serial_remove(struct platform_device *pdev)
2624 {
2625 	struct uart_port *port = platform_get_drvdata(pdev);
2626 	struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
2627 	int ret = 0;
2628 
2629 	tasklet_kill(&atmel_port->tasklet);
2630 
2631 	device_init_wakeup(&pdev->dev, 0);
2632 
2633 	ret = uart_remove_one_port(&atmel_uart, port);
2634 
2635 	kfree(atmel_port->rx_ring.buf);
2636 
2637 	/* "port" is allocated statically, so we shouldn't free it */
2638 
2639 	clear_bit(port->line, atmel_ports_in_use);
2640 
2641 	clk_put(atmel_port->clk);
2642 
2643 	return ret;
2644 }
2645 
2646 static struct platform_driver atmel_serial_driver = {
2647 	.probe		= atmel_serial_probe,
2648 	.remove		= atmel_serial_remove,
2649 	.suspend	= atmel_serial_suspend,
2650 	.resume		= atmel_serial_resume,
2651 	.driver		= {
2652 		.name	= "atmel_usart",
2653 		.of_match_table	= of_match_ptr(atmel_serial_dt_ids),
2654 	},
2655 };
2656 
2657 static int __init atmel_serial_init(void)
2658 {
2659 	int ret;
2660 
2661 	ret = uart_register_driver(&atmel_uart);
2662 	if (ret)
2663 		return ret;
2664 
2665 	ret = platform_driver_register(&atmel_serial_driver);
2666 	if (ret)
2667 		uart_unregister_driver(&atmel_uart);
2668 
2669 	return ret;
2670 }
2671 
2672 static void __exit atmel_serial_exit(void)
2673 {
2674 	platform_driver_unregister(&atmel_serial_driver);
2675 	uart_unregister_driver(&atmel_uart);
2676 }
2677 
2678 module_init(atmel_serial_init);
2679 module_exit(atmel_serial_exit);
2680 
2681 MODULE_AUTHOR("Rick Bronson");
2682 MODULE_DESCRIPTION("Atmel AT91 / AT32 serial port driver");
2683 MODULE_LICENSE("GPL");
2684 MODULE_ALIAS("platform:atmel_usart");
2685