1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * serial_tegra.c
4  *
5  * High-speed serial driver for NVIDIA Tegra SoCs
6  *
7  * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
8  *
9  * Author: Laxman Dewangan <ldewangan@nvidia.com>
10  */
11 
12 #include <linux/clk.h>
13 #include <linux/debugfs.h>
14 #include <linux/delay.h>
15 #include <linux/dmaengine.h>
16 #include <linux/dma-mapping.h>
17 #include <linux/dmapool.h>
18 #include <linux/err.h>
19 #include <linux/io.h>
20 #include <linux/irq.h>
21 #include <linux/module.h>
22 #include <linux/of.h>
23 #include <linux/of_device.h>
24 #include <linux/pagemap.h>
25 #include <linux/platform_device.h>
26 #include <linux/reset.h>
27 #include <linux/serial.h>
28 #include <linux/serial_8250.h>
29 #include <linux/serial_core.h>
30 #include <linux/serial_reg.h>
31 #include <linux/slab.h>
32 #include <linux/string.h>
33 #include <linux/termios.h>
34 #include <linux/tty.h>
35 #include <linux/tty_flip.h>
36 
37 #define TEGRA_UART_TYPE				"TEGRA_UART"
38 #define TX_EMPTY_STATUS				(UART_LSR_TEMT | UART_LSR_THRE)
39 #define BYTES_TO_ALIGN(x)			((unsigned long)(x) & 0x3)
40 
41 #define TEGRA_UART_RX_DMA_BUFFER_SIZE		4096
42 #define TEGRA_UART_LSR_TXFIFO_FULL		0x100
43 #define TEGRA_UART_IER_EORD			0x20
44 #define TEGRA_UART_MCR_RTS_EN			0x40
45 #define TEGRA_UART_MCR_CTS_EN			0x20
46 #define TEGRA_UART_LSR_ANY			(UART_LSR_OE | UART_LSR_BI | \
47 						UART_LSR_PE | UART_LSR_FE)
48 #define TEGRA_UART_IRDA_CSR			0x08
49 #define TEGRA_UART_SIR_ENABLED			0x80
50 
51 #define TEGRA_UART_TX_PIO			1
52 #define TEGRA_UART_TX_DMA			2
53 #define TEGRA_UART_MIN_DMA			16
54 #define TEGRA_UART_FIFO_SIZE			32
55 
56 /*
57  * Tx fifo trigger level setting in tegra uart is in
58  * reverse way then conventional uart.
59  */
60 #define TEGRA_UART_TX_TRIG_16B			0x00
61 #define TEGRA_UART_TX_TRIG_8B			0x10
62 #define TEGRA_UART_TX_TRIG_4B			0x20
63 #define TEGRA_UART_TX_TRIG_1B			0x30
64 
65 #define TEGRA_UART_MAXIMUM			5
66 
67 /* Default UART setting when started: 115200 no parity, stop, 8 data bits */
68 #define TEGRA_UART_DEFAULT_BAUD			115200
69 #define TEGRA_UART_DEFAULT_LSR			UART_LCR_WLEN8
70 
71 /* Tx transfer mode */
72 #define TEGRA_TX_PIO				1
73 #define TEGRA_TX_DMA				2
74 
75 /**
76  * tegra_uart_chip_data: SOC specific data.
77  *
78  * @tx_fifo_full_status: Status flag available for checking tx fifo full.
79  * @allow_txfifo_reset_fifo_mode: allow_tx fifo reset with fifo mode or not.
80  *			Tegra30 does not allow this.
81  * @support_clk_src_div: Clock source support the clock divider.
82  */
83 struct tegra_uart_chip_data {
84 	bool	tx_fifo_full_status;
85 	bool	allow_txfifo_reset_fifo_mode;
86 	bool	support_clk_src_div;
87 };
88 
89 struct tegra_uart_port {
90 	struct uart_port			uport;
91 	const struct tegra_uart_chip_data	*cdata;
92 
93 	struct clk				*uart_clk;
94 	struct reset_control			*rst;
95 	unsigned int				current_baud;
96 
97 	/* Register shadow */
98 	unsigned long				fcr_shadow;
99 	unsigned long				mcr_shadow;
100 	unsigned long				lcr_shadow;
101 	unsigned long				ier_shadow;
102 	bool					rts_active;
103 
104 	int					tx_in_progress;
105 	unsigned int				tx_bytes;
106 
107 	bool					enable_modem_interrupt;
108 
109 	bool					rx_timeout;
110 	int					rx_in_progress;
111 	int					symb_bit;
112 
113 	struct dma_chan				*rx_dma_chan;
114 	struct dma_chan				*tx_dma_chan;
115 	dma_addr_t				rx_dma_buf_phys;
116 	dma_addr_t				tx_dma_buf_phys;
117 	unsigned char				*rx_dma_buf_virt;
118 	unsigned char				*tx_dma_buf_virt;
119 	struct dma_async_tx_descriptor		*tx_dma_desc;
120 	struct dma_async_tx_descriptor		*rx_dma_desc;
121 	dma_cookie_t				tx_cookie;
122 	dma_cookie_t				rx_cookie;
123 	unsigned int				tx_bytes_requested;
124 	unsigned int				rx_bytes_requested;
125 };
126 
127 static void tegra_uart_start_next_tx(struct tegra_uart_port *tup);
128 static int tegra_uart_start_rx_dma(struct tegra_uart_port *tup);
129 
tegra_uart_read(struct tegra_uart_port * tup,unsigned long reg)130 static inline unsigned long tegra_uart_read(struct tegra_uart_port *tup,
131 		unsigned long reg)
132 {
133 	return readl(tup->uport.membase + (reg << tup->uport.regshift));
134 }
135 
tegra_uart_write(struct tegra_uart_port * tup,unsigned val,unsigned long reg)136 static inline void tegra_uart_write(struct tegra_uart_port *tup, unsigned val,
137 	unsigned long reg)
138 {
139 	writel(val, tup->uport.membase + (reg << tup->uport.regshift));
140 }
141 
to_tegra_uport(struct uart_port * u)142 static inline struct tegra_uart_port *to_tegra_uport(struct uart_port *u)
143 {
144 	return container_of(u, struct tegra_uart_port, uport);
145 }
146 
tegra_uart_get_mctrl(struct uart_port * u)147 static unsigned int tegra_uart_get_mctrl(struct uart_port *u)
148 {
149 	struct tegra_uart_port *tup = to_tegra_uport(u);
150 
151 	/*
152 	 * RI - Ring detector is active
153 	 * CD/DCD/CAR - Carrier detect is always active. For some reason
154 	 *	linux has different names for carrier detect.
155 	 * DSR - Data Set ready is active as the hardware doesn't support it.
156 	 *	Don't know if the linux support this yet?
157 	 * CTS - Clear to send. Always set to active, as the hardware handles
158 	 *	CTS automatically.
159 	 */
160 	if (tup->enable_modem_interrupt)
161 		return TIOCM_RI | TIOCM_CD | TIOCM_DSR | TIOCM_CTS;
162 	return TIOCM_CTS;
163 }
164 
set_rts(struct tegra_uart_port * tup,bool active)165 static void set_rts(struct tegra_uart_port *tup, bool active)
166 {
167 	unsigned long mcr;
168 
169 	mcr = tup->mcr_shadow;
170 	if (active)
171 		mcr |= TEGRA_UART_MCR_RTS_EN;
172 	else
173 		mcr &= ~TEGRA_UART_MCR_RTS_EN;
174 	if (mcr != tup->mcr_shadow) {
175 		tegra_uart_write(tup, mcr, UART_MCR);
176 		tup->mcr_shadow = mcr;
177 	}
178 }
179 
set_dtr(struct tegra_uart_port * tup,bool active)180 static void set_dtr(struct tegra_uart_port *tup, bool active)
181 {
182 	unsigned long mcr;
183 
184 	mcr = tup->mcr_shadow;
185 	if (active)
186 		mcr |= UART_MCR_DTR;
187 	else
188 		mcr &= ~UART_MCR_DTR;
189 	if (mcr != tup->mcr_shadow) {
190 		tegra_uart_write(tup, mcr, UART_MCR);
191 		tup->mcr_shadow = mcr;
192 	}
193 }
194 
tegra_uart_set_mctrl(struct uart_port * u,unsigned int mctrl)195 static void tegra_uart_set_mctrl(struct uart_port *u, unsigned int mctrl)
196 {
197 	struct tegra_uart_port *tup = to_tegra_uport(u);
198 	int dtr_enable;
199 
200 	tup->rts_active = !!(mctrl & TIOCM_RTS);
201 	set_rts(tup, tup->rts_active);
202 
203 	dtr_enable = !!(mctrl & TIOCM_DTR);
204 	set_dtr(tup, dtr_enable);
205 }
206 
tegra_uart_break_ctl(struct uart_port * u,int break_ctl)207 static void tegra_uart_break_ctl(struct uart_port *u, int break_ctl)
208 {
209 	struct tegra_uart_port *tup = to_tegra_uport(u);
210 	unsigned long lcr;
211 
212 	lcr = tup->lcr_shadow;
213 	if (break_ctl)
214 		lcr |= UART_LCR_SBC;
215 	else
216 		lcr &= ~UART_LCR_SBC;
217 	tegra_uart_write(tup, lcr, UART_LCR);
218 	tup->lcr_shadow = lcr;
219 }
220 
221 /**
222  * tegra_uart_wait_cycle_time: Wait for N UART clock periods
223  *
224  * @tup:	Tegra serial port data structure.
225  * @cycles:	Number of clock periods to wait.
226  *
227  * Tegra UARTs are clocked at 16X the baud/bit rate and hence the UART
228  * clock speed is 16X the current baud rate.
229  */
tegra_uart_wait_cycle_time(struct tegra_uart_port * tup,unsigned int cycles)230 static void tegra_uart_wait_cycle_time(struct tegra_uart_port *tup,
231 				       unsigned int cycles)
232 {
233 	if (tup->current_baud)
234 		udelay(DIV_ROUND_UP(cycles * 1000000, tup->current_baud * 16));
235 }
236 
237 /* Wait for a symbol-time. */
tegra_uart_wait_sym_time(struct tegra_uart_port * tup,unsigned int syms)238 static void tegra_uart_wait_sym_time(struct tegra_uart_port *tup,
239 		unsigned int syms)
240 {
241 	if (tup->current_baud)
242 		udelay(DIV_ROUND_UP(syms * tup->symb_bit * 1000000,
243 			tup->current_baud));
244 }
245 
tegra_uart_fifo_reset(struct tegra_uart_port * tup,u8 fcr_bits)246 static void tegra_uart_fifo_reset(struct tegra_uart_port *tup, u8 fcr_bits)
247 {
248 	unsigned long fcr = tup->fcr_shadow;
249 
250 	if (tup->cdata->allow_txfifo_reset_fifo_mode) {
251 		fcr |= fcr_bits & (UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
252 		tegra_uart_write(tup, fcr, UART_FCR);
253 	} else {
254 		fcr &= ~UART_FCR_ENABLE_FIFO;
255 		tegra_uart_write(tup, fcr, UART_FCR);
256 		udelay(60);
257 		fcr |= fcr_bits & (UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
258 		tegra_uart_write(tup, fcr, UART_FCR);
259 		fcr |= UART_FCR_ENABLE_FIFO;
260 		tegra_uart_write(tup, fcr, UART_FCR);
261 	}
262 
263 	/* Dummy read to ensure the write is posted */
264 	tegra_uart_read(tup, UART_SCR);
265 
266 	/*
267 	 * For all tegra devices (up to t210), there is a hardware issue that
268 	 * requires software to wait for 32 UART clock periods for the flush
269 	 * to propagate, otherwise data could be lost.
270 	 */
271 	tegra_uart_wait_cycle_time(tup, 32);
272 }
273 
tegra_set_baudrate(struct tegra_uart_port * tup,unsigned int baud)274 static int tegra_set_baudrate(struct tegra_uart_port *tup, unsigned int baud)
275 {
276 	unsigned long rate;
277 	unsigned int divisor;
278 	unsigned long lcr;
279 	int ret;
280 
281 	if (tup->current_baud == baud)
282 		return 0;
283 
284 	if (tup->cdata->support_clk_src_div) {
285 		rate = baud * 16;
286 		ret = clk_set_rate(tup->uart_clk, rate);
287 		if (ret < 0) {
288 			dev_err(tup->uport.dev,
289 				"clk_set_rate() failed for rate %lu\n", rate);
290 			return ret;
291 		}
292 		divisor = 1;
293 	} else {
294 		rate = clk_get_rate(tup->uart_clk);
295 		divisor = DIV_ROUND_CLOSEST(rate, baud * 16);
296 	}
297 
298 	lcr = tup->lcr_shadow;
299 	lcr |= UART_LCR_DLAB;
300 	tegra_uart_write(tup, lcr, UART_LCR);
301 
302 	tegra_uart_write(tup, divisor & 0xFF, UART_TX);
303 	tegra_uart_write(tup, ((divisor >> 8) & 0xFF), UART_IER);
304 
305 	lcr &= ~UART_LCR_DLAB;
306 	tegra_uart_write(tup, lcr, UART_LCR);
307 
308 	/* Dummy read to ensure the write is posted */
309 	tegra_uart_read(tup, UART_SCR);
310 
311 	tup->current_baud = baud;
312 
313 	/* wait two character intervals at new rate */
314 	tegra_uart_wait_sym_time(tup, 2);
315 	return 0;
316 }
317 
tegra_uart_decode_rx_error(struct tegra_uart_port * tup,unsigned long lsr)318 static char tegra_uart_decode_rx_error(struct tegra_uart_port *tup,
319 			unsigned long lsr)
320 {
321 	char flag = TTY_NORMAL;
322 
323 	if (unlikely(lsr & TEGRA_UART_LSR_ANY)) {
324 		if (lsr & UART_LSR_OE) {
325 			/* Overrrun error */
326 			flag = TTY_OVERRUN;
327 			tup->uport.icount.overrun++;
328 			dev_err(tup->uport.dev, "Got overrun errors\n");
329 		} else if (lsr & UART_LSR_PE) {
330 			/* Parity error */
331 			flag = TTY_PARITY;
332 			tup->uport.icount.parity++;
333 			dev_err(tup->uport.dev, "Got Parity errors\n");
334 		} else if (lsr & UART_LSR_FE) {
335 			flag = TTY_FRAME;
336 			tup->uport.icount.frame++;
337 			dev_err(tup->uport.dev, "Got frame errors\n");
338 		} else if (lsr & UART_LSR_BI) {
339 			dev_err(tup->uport.dev, "Got Break\n");
340 			tup->uport.icount.brk++;
341 			/* If FIFO read error without any data, reset Rx FIFO */
342 			if (!(lsr & UART_LSR_DR) && (lsr & UART_LSR_FIFOE))
343 				tegra_uart_fifo_reset(tup, UART_FCR_CLEAR_RCVR);
344 		}
345 	}
346 	return flag;
347 }
348 
tegra_uart_request_port(struct uart_port * u)349 static int tegra_uart_request_port(struct uart_port *u)
350 {
351 	return 0;
352 }
353 
tegra_uart_release_port(struct uart_port * u)354 static void tegra_uart_release_port(struct uart_port *u)
355 {
356 	/* Nothing to do here */
357 }
358 
tegra_uart_fill_tx_fifo(struct tegra_uart_port * tup,int max_bytes)359 static void tegra_uart_fill_tx_fifo(struct tegra_uart_port *tup, int max_bytes)
360 {
361 	struct circ_buf *xmit = &tup->uport.state->xmit;
362 	int i;
363 
364 	for (i = 0; i < max_bytes; i++) {
365 		BUG_ON(uart_circ_empty(xmit));
366 		if (tup->cdata->tx_fifo_full_status) {
367 			unsigned long lsr = tegra_uart_read(tup, UART_LSR);
368 			if ((lsr & TEGRA_UART_LSR_TXFIFO_FULL))
369 				break;
370 		}
371 		tegra_uart_write(tup, xmit->buf[xmit->tail], UART_TX);
372 		xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
373 		tup->uport.icount.tx++;
374 	}
375 }
376 
tegra_uart_start_pio_tx(struct tegra_uart_port * tup,unsigned int bytes)377 static void tegra_uart_start_pio_tx(struct tegra_uart_port *tup,
378 		unsigned int bytes)
379 {
380 	if (bytes > TEGRA_UART_MIN_DMA)
381 		bytes = TEGRA_UART_MIN_DMA;
382 
383 	tup->tx_in_progress = TEGRA_UART_TX_PIO;
384 	tup->tx_bytes = bytes;
385 	tup->ier_shadow |= UART_IER_THRI;
386 	tegra_uart_write(tup, tup->ier_shadow, UART_IER);
387 }
388 
tegra_uart_tx_dma_complete(void * args)389 static void tegra_uart_tx_dma_complete(void *args)
390 {
391 	struct tegra_uart_port *tup = args;
392 	struct circ_buf *xmit = &tup->uport.state->xmit;
393 	struct dma_tx_state state;
394 	unsigned long flags;
395 	unsigned int count;
396 
397 	dmaengine_tx_status(tup->tx_dma_chan, tup->tx_cookie, &state);
398 	count = tup->tx_bytes_requested - state.residue;
399 	async_tx_ack(tup->tx_dma_desc);
400 	spin_lock_irqsave(&tup->uport.lock, flags);
401 	xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
402 	tup->tx_in_progress = 0;
403 	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
404 		uart_write_wakeup(&tup->uport);
405 	tegra_uart_start_next_tx(tup);
406 	spin_unlock_irqrestore(&tup->uport.lock, flags);
407 }
408 
tegra_uart_start_tx_dma(struct tegra_uart_port * tup,unsigned long count)409 static int tegra_uart_start_tx_dma(struct tegra_uart_port *tup,
410 		unsigned long count)
411 {
412 	struct circ_buf *xmit = &tup->uport.state->xmit;
413 	dma_addr_t tx_phys_addr;
414 
415 	dma_sync_single_for_device(tup->uport.dev, tup->tx_dma_buf_phys,
416 				UART_XMIT_SIZE, DMA_TO_DEVICE);
417 
418 	tup->tx_bytes = count & ~(0xF);
419 	tx_phys_addr = tup->tx_dma_buf_phys + xmit->tail;
420 	tup->tx_dma_desc = dmaengine_prep_slave_single(tup->tx_dma_chan,
421 				tx_phys_addr, tup->tx_bytes, DMA_MEM_TO_DEV,
422 				DMA_PREP_INTERRUPT);
423 	if (!tup->tx_dma_desc) {
424 		dev_err(tup->uport.dev, "Not able to get desc for Tx\n");
425 		return -EIO;
426 	}
427 
428 	tup->tx_dma_desc->callback = tegra_uart_tx_dma_complete;
429 	tup->tx_dma_desc->callback_param = tup;
430 	tup->tx_in_progress = TEGRA_UART_TX_DMA;
431 	tup->tx_bytes_requested = tup->tx_bytes;
432 	tup->tx_cookie = dmaengine_submit(tup->tx_dma_desc);
433 	dma_async_issue_pending(tup->tx_dma_chan);
434 	return 0;
435 }
436 
tegra_uart_start_next_tx(struct tegra_uart_port * tup)437 static void tegra_uart_start_next_tx(struct tegra_uart_port *tup)
438 {
439 	unsigned long tail;
440 	unsigned long count;
441 	struct circ_buf *xmit = &tup->uport.state->xmit;
442 
443 	tail = (unsigned long)&xmit->buf[xmit->tail];
444 	count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
445 	if (!count)
446 		return;
447 
448 	if (count < TEGRA_UART_MIN_DMA)
449 		tegra_uart_start_pio_tx(tup, count);
450 	else if (BYTES_TO_ALIGN(tail) > 0)
451 		tegra_uart_start_pio_tx(tup, BYTES_TO_ALIGN(tail));
452 	else
453 		tegra_uart_start_tx_dma(tup, count);
454 }
455 
456 /* Called by serial core driver with u->lock taken. */
tegra_uart_start_tx(struct uart_port * u)457 static void tegra_uart_start_tx(struct uart_port *u)
458 {
459 	struct tegra_uart_port *tup = to_tegra_uport(u);
460 	struct circ_buf *xmit = &u->state->xmit;
461 
462 	if (!uart_circ_empty(xmit) && !tup->tx_in_progress)
463 		tegra_uart_start_next_tx(tup);
464 }
465 
tegra_uart_tx_empty(struct uart_port * u)466 static unsigned int tegra_uart_tx_empty(struct uart_port *u)
467 {
468 	struct tegra_uart_port *tup = to_tegra_uport(u);
469 	unsigned int ret = 0;
470 	unsigned long flags;
471 
472 	spin_lock_irqsave(&u->lock, flags);
473 	if (!tup->tx_in_progress) {
474 		unsigned long lsr = tegra_uart_read(tup, UART_LSR);
475 		if ((lsr & TX_EMPTY_STATUS) == TX_EMPTY_STATUS)
476 			ret = TIOCSER_TEMT;
477 	}
478 	spin_unlock_irqrestore(&u->lock, flags);
479 	return ret;
480 }
481 
tegra_uart_stop_tx(struct uart_port * u)482 static void tegra_uart_stop_tx(struct uart_port *u)
483 {
484 	struct tegra_uart_port *tup = to_tegra_uport(u);
485 	struct circ_buf *xmit = &tup->uport.state->xmit;
486 	struct dma_tx_state state;
487 	unsigned int count;
488 
489 	if (tup->tx_in_progress != TEGRA_UART_TX_DMA)
490 		return;
491 
492 	dmaengine_terminate_all(tup->tx_dma_chan);
493 	dmaengine_tx_status(tup->tx_dma_chan, tup->tx_cookie, &state);
494 	count = tup->tx_bytes_requested - state.residue;
495 	async_tx_ack(tup->tx_dma_desc);
496 	xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
497 	tup->tx_in_progress = 0;
498 }
499 
tegra_uart_handle_tx_pio(struct tegra_uart_port * tup)500 static void tegra_uart_handle_tx_pio(struct tegra_uart_port *tup)
501 {
502 	struct circ_buf *xmit = &tup->uport.state->xmit;
503 
504 	tegra_uart_fill_tx_fifo(tup, tup->tx_bytes);
505 	tup->tx_in_progress = 0;
506 	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
507 		uart_write_wakeup(&tup->uport);
508 	tegra_uart_start_next_tx(tup);
509 }
510 
tegra_uart_handle_rx_pio(struct tegra_uart_port * tup,struct tty_port * tty)511 static void tegra_uart_handle_rx_pio(struct tegra_uart_port *tup,
512 		struct tty_port *tty)
513 {
514 	do {
515 		char flag = TTY_NORMAL;
516 		unsigned long lsr = 0;
517 		unsigned char ch;
518 
519 		lsr = tegra_uart_read(tup, UART_LSR);
520 		if (!(lsr & UART_LSR_DR))
521 			break;
522 
523 		flag = tegra_uart_decode_rx_error(tup, lsr);
524 		ch = (unsigned char) tegra_uart_read(tup, UART_RX);
525 		tup->uport.icount.rx++;
526 
527 		if (!uart_handle_sysrq_char(&tup->uport, ch) && tty)
528 			tty_insert_flip_char(tty, ch, flag);
529 	} while (1);
530 }
531 
tegra_uart_copy_rx_to_tty(struct tegra_uart_port * tup,struct tty_port * tty,unsigned int count)532 static void tegra_uart_copy_rx_to_tty(struct tegra_uart_port *tup,
533 				      struct tty_port *tty,
534 				      unsigned int count)
535 {
536 	int copied;
537 
538 	/* If count is zero, then there is no data to be copied */
539 	if (!count)
540 		return;
541 
542 	tup->uport.icount.rx += count;
543 	if (!tty) {
544 		dev_err(tup->uport.dev, "No tty port\n");
545 		return;
546 	}
547 	dma_sync_single_for_cpu(tup->uport.dev, tup->rx_dma_buf_phys,
548 				TEGRA_UART_RX_DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
549 	copied = tty_insert_flip_string(tty,
550 			((unsigned char *)(tup->rx_dma_buf_virt)), count);
551 	if (copied != count) {
552 		WARN_ON(1);
553 		dev_err(tup->uport.dev, "RxData copy to tty layer failed\n");
554 	}
555 	dma_sync_single_for_device(tup->uport.dev, tup->rx_dma_buf_phys,
556 				TEGRA_UART_RX_DMA_BUFFER_SIZE, DMA_TO_DEVICE);
557 }
558 
tegra_uart_rx_buffer_push(struct tegra_uart_port * tup,unsigned int residue)559 static void tegra_uart_rx_buffer_push(struct tegra_uart_port *tup,
560 				      unsigned int residue)
561 {
562 	struct tty_port *port = &tup->uport.state->port;
563 	struct tty_struct *tty = tty_port_tty_get(port);
564 	unsigned int count;
565 
566 	async_tx_ack(tup->rx_dma_desc);
567 	count = tup->rx_bytes_requested - residue;
568 
569 	/* If we are here, DMA is stopped */
570 	tegra_uart_copy_rx_to_tty(tup, port, count);
571 
572 	tegra_uart_handle_rx_pio(tup, port);
573 	if (tty) {
574 		tty_flip_buffer_push(port);
575 		tty_kref_put(tty);
576 	}
577 }
578 
tegra_uart_rx_dma_complete(void * args)579 static void tegra_uart_rx_dma_complete(void *args)
580 {
581 	struct tegra_uart_port *tup = args;
582 	struct uart_port *u = &tup->uport;
583 	unsigned long flags;
584 	struct dma_tx_state state;
585 	enum dma_status status;
586 
587 	spin_lock_irqsave(&u->lock, flags);
588 
589 	status = dmaengine_tx_status(tup->rx_dma_chan, tup->rx_cookie, &state);
590 
591 	if (status == DMA_IN_PROGRESS) {
592 		dev_dbg(tup->uport.dev, "RX DMA is in progress\n");
593 		goto done;
594 	}
595 
596 	/* Deactivate flow control to stop sender */
597 	if (tup->rts_active)
598 		set_rts(tup, false);
599 
600 	tegra_uart_rx_buffer_push(tup, 0);
601 	tegra_uart_start_rx_dma(tup);
602 
603 	/* Activate flow control to start transfer */
604 	if (tup->rts_active)
605 		set_rts(tup, true);
606 
607 done:
608 	spin_unlock_irqrestore(&u->lock, flags);
609 }
610 
tegra_uart_handle_rx_dma(struct tegra_uart_port * tup)611 static void tegra_uart_handle_rx_dma(struct tegra_uart_port *tup)
612 {
613 	struct dma_tx_state state;
614 
615 	/* Deactivate flow control to stop sender */
616 	if (tup->rts_active)
617 		set_rts(tup, false);
618 
619 	dmaengine_terminate_all(tup->rx_dma_chan);
620 	dmaengine_tx_status(tup->rx_dma_chan, tup->rx_cookie, &state);
621 	tegra_uart_rx_buffer_push(tup, state.residue);
622 	tegra_uart_start_rx_dma(tup);
623 
624 	if (tup->rts_active)
625 		set_rts(tup, true);
626 }
627 
tegra_uart_start_rx_dma(struct tegra_uart_port * tup)628 static int tegra_uart_start_rx_dma(struct tegra_uart_port *tup)
629 {
630 	unsigned int count = TEGRA_UART_RX_DMA_BUFFER_SIZE;
631 
632 	tup->rx_dma_desc = dmaengine_prep_slave_single(tup->rx_dma_chan,
633 				tup->rx_dma_buf_phys, count, DMA_DEV_TO_MEM,
634 				DMA_PREP_INTERRUPT);
635 	if (!tup->rx_dma_desc) {
636 		dev_err(tup->uport.dev, "Not able to get desc for Rx\n");
637 		return -EIO;
638 	}
639 
640 	tup->rx_dma_desc->callback = tegra_uart_rx_dma_complete;
641 	tup->rx_dma_desc->callback_param = tup;
642 	dma_sync_single_for_device(tup->uport.dev, tup->rx_dma_buf_phys,
643 				count, DMA_TO_DEVICE);
644 	tup->rx_bytes_requested = count;
645 	tup->rx_cookie = dmaengine_submit(tup->rx_dma_desc);
646 	dma_async_issue_pending(tup->rx_dma_chan);
647 	return 0;
648 }
649 
tegra_uart_handle_modem_signal_change(struct uart_port * u)650 static void tegra_uart_handle_modem_signal_change(struct uart_port *u)
651 {
652 	struct tegra_uart_port *tup = to_tegra_uport(u);
653 	unsigned long msr;
654 
655 	msr = tegra_uart_read(tup, UART_MSR);
656 	if (!(msr & UART_MSR_ANY_DELTA))
657 		return;
658 
659 	if (msr & UART_MSR_TERI)
660 		tup->uport.icount.rng++;
661 	if (msr & UART_MSR_DDSR)
662 		tup->uport.icount.dsr++;
663 	/* We may only get DDCD when HW init and reset */
664 	if (msr & UART_MSR_DDCD)
665 		uart_handle_dcd_change(&tup->uport, msr & UART_MSR_DCD);
666 	/* Will start/stop_tx accordingly */
667 	if (msr & UART_MSR_DCTS)
668 		uart_handle_cts_change(&tup->uport, msr & UART_MSR_CTS);
669 }
670 
tegra_uart_isr(int irq,void * data)671 static irqreturn_t tegra_uart_isr(int irq, void *data)
672 {
673 	struct tegra_uart_port *tup = data;
674 	struct uart_port *u = &tup->uport;
675 	unsigned long iir;
676 	unsigned long ier;
677 	bool is_rx_int = false;
678 	unsigned long flags;
679 
680 	spin_lock_irqsave(&u->lock, flags);
681 	while (1) {
682 		iir = tegra_uart_read(tup, UART_IIR);
683 		if (iir & UART_IIR_NO_INT) {
684 			if (is_rx_int) {
685 				tegra_uart_handle_rx_dma(tup);
686 				if (tup->rx_in_progress) {
687 					ier = tup->ier_shadow;
688 					ier |= (UART_IER_RLSI | UART_IER_RTOIE |
689 						TEGRA_UART_IER_EORD);
690 					tup->ier_shadow = ier;
691 					tegra_uart_write(tup, ier, UART_IER);
692 				}
693 			}
694 			spin_unlock_irqrestore(&u->lock, flags);
695 			return IRQ_HANDLED;
696 		}
697 
698 		switch ((iir >> 1) & 0x7) {
699 		case 0: /* Modem signal change interrupt */
700 			tegra_uart_handle_modem_signal_change(u);
701 			break;
702 
703 		case 1: /* Transmit interrupt only triggered when using PIO */
704 			tup->ier_shadow &= ~UART_IER_THRI;
705 			tegra_uart_write(tup, tup->ier_shadow, UART_IER);
706 			tegra_uart_handle_tx_pio(tup);
707 			break;
708 
709 		case 4: /* End of data */
710 		case 6: /* Rx timeout */
711 		case 2: /* Receive */
712 			if (!is_rx_int) {
713 				is_rx_int = true;
714 				/* Disable Rx interrupts */
715 				ier = tup->ier_shadow;
716 				ier |= UART_IER_RDI;
717 				tegra_uart_write(tup, ier, UART_IER);
718 				ier &= ~(UART_IER_RDI | UART_IER_RLSI |
719 					UART_IER_RTOIE | TEGRA_UART_IER_EORD);
720 				tup->ier_shadow = ier;
721 				tegra_uart_write(tup, ier, UART_IER);
722 			}
723 			break;
724 
725 		case 3: /* Receive error */
726 			tegra_uart_decode_rx_error(tup,
727 					tegra_uart_read(tup, UART_LSR));
728 			break;
729 
730 		case 5: /* break nothing to handle */
731 		case 7: /* break nothing to handle */
732 			break;
733 		}
734 	}
735 }
736 
tegra_uart_stop_rx(struct uart_port * u)737 static void tegra_uart_stop_rx(struct uart_port *u)
738 {
739 	struct tegra_uart_port *tup = to_tegra_uport(u);
740 	struct dma_tx_state state;
741 	unsigned long ier;
742 
743 	if (tup->rts_active)
744 		set_rts(tup, false);
745 
746 	if (!tup->rx_in_progress)
747 		return;
748 
749 	tegra_uart_wait_sym_time(tup, 1); /* wait a character interval */
750 
751 	ier = tup->ier_shadow;
752 	ier &= ~(UART_IER_RDI | UART_IER_RLSI | UART_IER_RTOIE |
753 					TEGRA_UART_IER_EORD);
754 	tup->ier_shadow = ier;
755 	tegra_uart_write(tup, ier, UART_IER);
756 	tup->rx_in_progress = 0;
757 	dmaengine_terminate_all(tup->rx_dma_chan);
758 	dmaengine_tx_status(tup->rx_dma_chan, tup->rx_cookie, &state);
759 	tegra_uart_rx_buffer_push(tup, state.residue);
760 }
761 
tegra_uart_hw_deinit(struct tegra_uart_port * tup)762 static void tegra_uart_hw_deinit(struct tegra_uart_port *tup)
763 {
764 	unsigned long flags;
765 	unsigned long char_time = DIV_ROUND_UP(10000000, tup->current_baud);
766 	unsigned long fifo_empty_time = tup->uport.fifosize * char_time;
767 	unsigned long wait_time;
768 	unsigned long lsr;
769 	unsigned long msr;
770 	unsigned long mcr;
771 
772 	/* Disable interrupts */
773 	tegra_uart_write(tup, 0, UART_IER);
774 
775 	lsr = tegra_uart_read(tup, UART_LSR);
776 	if ((lsr & UART_LSR_TEMT) != UART_LSR_TEMT) {
777 		msr = tegra_uart_read(tup, UART_MSR);
778 		mcr = tegra_uart_read(tup, UART_MCR);
779 		if ((mcr & TEGRA_UART_MCR_CTS_EN) && (msr & UART_MSR_CTS))
780 			dev_err(tup->uport.dev,
781 				"Tx Fifo not empty, CTS disabled, waiting\n");
782 
783 		/* Wait for Tx fifo to be empty */
784 		while ((lsr & UART_LSR_TEMT) != UART_LSR_TEMT) {
785 			wait_time = min(fifo_empty_time, 100lu);
786 			udelay(wait_time);
787 			fifo_empty_time -= wait_time;
788 			if (!fifo_empty_time) {
789 				msr = tegra_uart_read(tup, UART_MSR);
790 				mcr = tegra_uart_read(tup, UART_MCR);
791 				if ((mcr & TEGRA_UART_MCR_CTS_EN) &&
792 					(msr & UART_MSR_CTS))
793 					dev_err(tup->uport.dev,
794 						"Slave not ready\n");
795 				break;
796 			}
797 			lsr = tegra_uart_read(tup, UART_LSR);
798 		}
799 	}
800 
801 	spin_lock_irqsave(&tup->uport.lock, flags);
802 	/* Reset the Rx and Tx FIFOs */
803 	tegra_uart_fifo_reset(tup, UART_FCR_CLEAR_XMIT | UART_FCR_CLEAR_RCVR);
804 	tup->current_baud = 0;
805 	spin_unlock_irqrestore(&tup->uport.lock, flags);
806 
807 	clk_disable_unprepare(tup->uart_clk);
808 }
809 
tegra_uart_hw_init(struct tegra_uart_port * tup)810 static int tegra_uart_hw_init(struct tegra_uart_port *tup)
811 {
812 	int ret;
813 
814 	tup->fcr_shadow = 0;
815 	tup->mcr_shadow = 0;
816 	tup->lcr_shadow = 0;
817 	tup->ier_shadow = 0;
818 	tup->current_baud = 0;
819 
820 	clk_prepare_enable(tup->uart_clk);
821 
822 	/* Reset the UART controller to clear all previous status.*/
823 	reset_control_assert(tup->rst);
824 	udelay(10);
825 	reset_control_deassert(tup->rst);
826 
827 	tup->rx_in_progress = 0;
828 	tup->tx_in_progress = 0;
829 
830 	/*
831 	 * Set the trigger level
832 	 *
833 	 * For PIO mode:
834 	 *
835 	 * For receive, this will interrupt the CPU after that many number of
836 	 * bytes are received, for the remaining bytes the receive timeout
837 	 * interrupt is received. Rx high watermark is set to 4.
838 	 *
839 	 * For transmit, if the trasnmit interrupt is enabled, this will
840 	 * interrupt the CPU when the number of entries in the FIFO reaches the
841 	 * low watermark. Tx low watermark is set to 16 bytes.
842 	 *
843 	 * For DMA mode:
844 	 *
845 	 * Set the Tx trigger to 16. This should match the DMA burst size that
846 	 * programmed in the DMA registers.
847 	 */
848 	tup->fcr_shadow = UART_FCR_ENABLE_FIFO;
849 	tup->fcr_shadow |= UART_FCR_R_TRIG_01;
850 	tup->fcr_shadow |= TEGRA_UART_TX_TRIG_16B;
851 	tegra_uart_write(tup, tup->fcr_shadow, UART_FCR);
852 
853 	/* Dummy read to ensure the write is posted */
854 	tegra_uart_read(tup, UART_SCR);
855 
856 	/*
857 	 * For all tegra devices (up to t210), there is a hardware issue that
858 	 * requires software to wait for 3 UART clock periods after enabling
859 	 * the TX fifo, otherwise data could be lost.
860 	 */
861 	tegra_uart_wait_cycle_time(tup, 3);
862 
863 	/*
864 	 * Initialize the UART with default configuration
865 	 * (115200, N, 8, 1) so that the receive DMA buffer may be
866 	 * enqueued
867 	 */
868 	tup->lcr_shadow = TEGRA_UART_DEFAULT_LSR;
869 	tegra_set_baudrate(tup, TEGRA_UART_DEFAULT_BAUD);
870 	tup->fcr_shadow |= UART_FCR_DMA_SELECT;
871 	tegra_uart_write(tup, tup->fcr_shadow, UART_FCR);
872 
873 	ret = tegra_uart_start_rx_dma(tup);
874 	if (ret < 0) {
875 		dev_err(tup->uport.dev, "Not able to start Rx DMA\n");
876 		return ret;
877 	}
878 	tup->rx_in_progress = 1;
879 
880 	/*
881 	 * Enable IE_RXS for the receive status interrupts like line errros.
882 	 * Enable IE_RX_TIMEOUT to get the bytes which cannot be DMA'd.
883 	 *
884 	 * If using DMA mode, enable EORD instead of receive interrupt which
885 	 * will interrupt after the UART is done with the receive instead of
886 	 * the interrupt when the FIFO "threshold" is reached.
887 	 *
888 	 * EORD is different interrupt than RX_TIMEOUT - RX_TIMEOUT occurs when
889 	 * the DATA is sitting in the FIFO and couldn't be transferred to the
890 	 * DMA as the DMA size alignment(4 bytes) is not met. EORD will be
891 	 * triggered when there is a pause of the incomming data stream for 4
892 	 * characters long.
893 	 *
894 	 * For pauses in the data which is not aligned to 4 bytes, we get
895 	 * both the EORD as well as RX_TIMEOUT - SW sees RX_TIMEOUT first
896 	 * then the EORD.
897 	 */
898 	tup->ier_shadow = UART_IER_RLSI | UART_IER_RTOIE | TEGRA_UART_IER_EORD;
899 	tegra_uart_write(tup, tup->ier_shadow, UART_IER);
900 	return 0;
901 }
902 
tegra_uart_dma_channel_free(struct tegra_uart_port * tup,bool dma_to_memory)903 static void tegra_uart_dma_channel_free(struct tegra_uart_port *tup,
904 		bool dma_to_memory)
905 {
906 	if (dma_to_memory) {
907 		dmaengine_terminate_all(tup->rx_dma_chan);
908 		dma_release_channel(tup->rx_dma_chan);
909 		dma_free_coherent(tup->uport.dev, TEGRA_UART_RX_DMA_BUFFER_SIZE,
910 				tup->rx_dma_buf_virt, tup->rx_dma_buf_phys);
911 		tup->rx_dma_chan = NULL;
912 		tup->rx_dma_buf_phys = 0;
913 		tup->rx_dma_buf_virt = NULL;
914 	} else {
915 		dmaengine_terminate_all(tup->tx_dma_chan);
916 		dma_release_channel(tup->tx_dma_chan);
917 		dma_unmap_single(tup->uport.dev, tup->tx_dma_buf_phys,
918 			UART_XMIT_SIZE, DMA_TO_DEVICE);
919 		tup->tx_dma_chan = NULL;
920 		tup->tx_dma_buf_phys = 0;
921 		tup->tx_dma_buf_virt = NULL;
922 	}
923 }
924 
tegra_uart_dma_channel_allocate(struct tegra_uart_port * tup,bool dma_to_memory)925 static int tegra_uart_dma_channel_allocate(struct tegra_uart_port *tup,
926 			bool dma_to_memory)
927 {
928 	struct dma_chan *dma_chan;
929 	unsigned char *dma_buf;
930 	dma_addr_t dma_phys;
931 	int ret;
932 	struct dma_slave_config dma_sconfig;
933 
934 	dma_chan = dma_request_slave_channel_reason(tup->uport.dev,
935 						dma_to_memory ? "rx" : "tx");
936 	if (IS_ERR(dma_chan)) {
937 		ret = PTR_ERR(dma_chan);
938 		dev_err(tup->uport.dev,
939 			"DMA channel alloc failed: %d\n", ret);
940 		return ret;
941 	}
942 
943 	if (dma_to_memory) {
944 		dma_buf = dma_alloc_coherent(tup->uport.dev,
945 				TEGRA_UART_RX_DMA_BUFFER_SIZE,
946 				 &dma_phys, GFP_KERNEL);
947 		if (!dma_buf) {
948 			dev_err(tup->uport.dev,
949 				"Not able to allocate the dma buffer\n");
950 			dma_release_channel(dma_chan);
951 			return -ENOMEM;
952 		}
953 		dma_sconfig.src_addr = tup->uport.mapbase;
954 		dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
955 		dma_sconfig.src_maxburst = 4;
956 		tup->rx_dma_chan = dma_chan;
957 		tup->rx_dma_buf_virt = dma_buf;
958 		tup->rx_dma_buf_phys = dma_phys;
959 	} else {
960 		dma_phys = dma_map_single(tup->uport.dev,
961 			tup->uport.state->xmit.buf, UART_XMIT_SIZE,
962 			DMA_TO_DEVICE);
963 		if (dma_mapping_error(tup->uport.dev, dma_phys)) {
964 			dev_err(tup->uport.dev, "dma_map_single tx failed\n");
965 			dma_release_channel(dma_chan);
966 			return -ENOMEM;
967 		}
968 		dma_buf = tup->uport.state->xmit.buf;
969 		dma_sconfig.dst_addr = tup->uport.mapbase;
970 		dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
971 		dma_sconfig.dst_maxburst = 16;
972 		tup->tx_dma_chan = dma_chan;
973 		tup->tx_dma_buf_virt = dma_buf;
974 		tup->tx_dma_buf_phys = dma_phys;
975 	}
976 
977 	ret = dmaengine_slave_config(dma_chan, &dma_sconfig);
978 	if (ret < 0) {
979 		dev_err(tup->uport.dev,
980 			"Dma slave config failed, err = %d\n", ret);
981 		tegra_uart_dma_channel_free(tup, dma_to_memory);
982 		return ret;
983 	}
984 
985 	return 0;
986 }
987 
tegra_uart_startup(struct uart_port * u)988 static int tegra_uart_startup(struct uart_port *u)
989 {
990 	struct tegra_uart_port *tup = to_tegra_uport(u);
991 	int ret;
992 
993 	ret = tegra_uart_dma_channel_allocate(tup, false);
994 	if (ret < 0) {
995 		dev_err(u->dev, "Tx Dma allocation failed, err = %d\n", ret);
996 		return ret;
997 	}
998 
999 	ret = tegra_uart_dma_channel_allocate(tup, true);
1000 	if (ret < 0) {
1001 		dev_err(u->dev, "Rx Dma allocation failed, err = %d\n", ret);
1002 		goto fail_rx_dma;
1003 	}
1004 
1005 	ret = tegra_uart_hw_init(tup);
1006 	if (ret < 0) {
1007 		dev_err(u->dev, "Uart HW init failed, err = %d\n", ret);
1008 		goto fail_hw_init;
1009 	}
1010 
1011 	ret = request_irq(u->irq, tegra_uart_isr, 0,
1012 				dev_name(u->dev), tup);
1013 	if (ret < 0) {
1014 		dev_err(u->dev, "Failed to register ISR for IRQ %d\n", u->irq);
1015 		goto fail_hw_init;
1016 	}
1017 	return 0;
1018 
1019 fail_hw_init:
1020 	tegra_uart_dma_channel_free(tup, true);
1021 fail_rx_dma:
1022 	tegra_uart_dma_channel_free(tup, false);
1023 	return ret;
1024 }
1025 
1026 /*
1027  * Flush any TX data submitted for DMA and PIO. Called when the
1028  * TX circular buffer is reset.
1029  */
tegra_uart_flush_buffer(struct uart_port * u)1030 static void tegra_uart_flush_buffer(struct uart_port *u)
1031 {
1032 	struct tegra_uart_port *tup = to_tegra_uport(u);
1033 
1034 	tup->tx_bytes = 0;
1035 	if (tup->tx_dma_chan)
1036 		dmaengine_terminate_all(tup->tx_dma_chan);
1037 }
1038 
tegra_uart_shutdown(struct uart_port * u)1039 static void tegra_uart_shutdown(struct uart_port *u)
1040 {
1041 	struct tegra_uart_port *tup = to_tegra_uport(u);
1042 
1043 	tegra_uart_hw_deinit(tup);
1044 
1045 	tup->rx_in_progress = 0;
1046 	tup->tx_in_progress = 0;
1047 
1048 	tegra_uart_dma_channel_free(tup, true);
1049 	tegra_uart_dma_channel_free(tup, false);
1050 	free_irq(u->irq, tup);
1051 }
1052 
tegra_uart_enable_ms(struct uart_port * u)1053 static void tegra_uart_enable_ms(struct uart_port *u)
1054 {
1055 	struct tegra_uart_port *tup = to_tegra_uport(u);
1056 
1057 	if (tup->enable_modem_interrupt) {
1058 		tup->ier_shadow |= UART_IER_MSI;
1059 		tegra_uart_write(tup, tup->ier_shadow, UART_IER);
1060 	}
1061 }
1062 
tegra_uart_set_termios(struct uart_port * u,struct ktermios * termios,struct ktermios * oldtermios)1063 static void tegra_uart_set_termios(struct uart_port *u,
1064 		struct ktermios *termios, struct ktermios *oldtermios)
1065 {
1066 	struct tegra_uart_port *tup = to_tegra_uport(u);
1067 	unsigned int baud;
1068 	unsigned long flags;
1069 	unsigned int lcr;
1070 	int symb_bit = 1;
1071 	struct clk *parent_clk = clk_get_parent(tup->uart_clk);
1072 	unsigned long parent_clk_rate = clk_get_rate(parent_clk);
1073 	int max_divider = (tup->cdata->support_clk_src_div) ? 0x7FFF : 0xFFFF;
1074 
1075 	max_divider *= 16;
1076 	spin_lock_irqsave(&u->lock, flags);
1077 
1078 	/* Changing configuration, it is safe to stop any rx now */
1079 	if (tup->rts_active)
1080 		set_rts(tup, false);
1081 
1082 	/* Clear all interrupts as configuration is going to be change */
1083 	tegra_uart_write(tup, tup->ier_shadow | UART_IER_RDI, UART_IER);
1084 	tegra_uart_read(tup, UART_IER);
1085 	tegra_uart_write(tup, 0, UART_IER);
1086 	tegra_uart_read(tup, UART_IER);
1087 
1088 	/* Parity */
1089 	lcr = tup->lcr_shadow;
1090 	lcr &= ~UART_LCR_PARITY;
1091 
1092 	/* CMSPAR isn't supported by this driver */
1093 	termios->c_cflag &= ~CMSPAR;
1094 
1095 	if ((termios->c_cflag & PARENB) == PARENB) {
1096 		symb_bit++;
1097 		if (termios->c_cflag & PARODD) {
1098 			lcr |= UART_LCR_PARITY;
1099 			lcr &= ~UART_LCR_EPAR;
1100 			lcr &= ~UART_LCR_SPAR;
1101 		} else {
1102 			lcr |= UART_LCR_PARITY;
1103 			lcr |= UART_LCR_EPAR;
1104 			lcr &= ~UART_LCR_SPAR;
1105 		}
1106 	}
1107 
1108 	lcr &= ~UART_LCR_WLEN8;
1109 	switch (termios->c_cflag & CSIZE) {
1110 	case CS5:
1111 		lcr |= UART_LCR_WLEN5;
1112 		symb_bit += 5;
1113 		break;
1114 	case CS6:
1115 		lcr |= UART_LCR_WLEN6;
1116 		symb_bit += 6;
1117 		break;
1118 	case CS7:
1119 		lcr |= UART_LCR_WLEN7;
1120 		symb_bit += 7;
1121 		break;
1122 	default:
1123 		lcr |= UART_LCR_WLEN8;
1124 		symb_bit += 8;
1125 		break;
1126 	}
1127 
1128 	/* Stop bits */
1129 	if (termios->c_cflag & CSTOPB) {
1130 		lcr |= UART_LCR_STOP;
1131 		symb_bit += 2;
1132 	} else {
1133 		lcr &= ~UART_LCR_STOP;
1134 		symb_bit++;
1135 	}
1136 
1137 	tegra_uart_write(tup, lcr, UART_LCR);
1138 	tup->lcr_shadow = lcr;
1139 	tup->symb_bit = symb_bit;
1140 
1141 	/* Baud rate. */
1142 	baud = uart_get_baud_rate(u, termios, oldtermios,
1143 			parent_clk_rate/max_divider,
1144 			parent_clk_rate/16);
1145 	spin_unlock_irqrestore(&u->lock, flags);
1146 	tegra_set_baudrate(tup, baud);
1147 	if (tty_termios_baud_rate(termios))
1148 		tty_termios_encode_baud_rate(termios, baud, baud);
1149 	spin_lock_irqsave(&u->lock, flags);
1150 
1151 	/* Flow control */
1152 	if (termios->c_cflag & CRTSCTS)	{
1153 		tup->mcr_shadow |= TEGRA_UART_MCR_CTS_EN;
1154 		tup->mcr_shadow &= ~TEGRA_UART_MCR_RTS_EN;
1155 		tegra_uart_write(tup, tup->mcr_shadow, UART_MCR);
1156 		/* if top layer has asked to set rts active then do so here */
1157 		if (tup->rts_active)
1158 			set_rts(tup, true);
1159 	} else {
1160 		tup->mcr_shadow &= ~TEGRA_UART_MCR_CTS_EN;
1161 		tup->mcr_shadow &= ~TEGRA_UART_MCR_RTS_EN;
1162 		tegra_uart_write(tup, tup->mcr_shadow, UART_MCR);
1163 	}
1164 
1165 	/* update the port timeout based on new settings */
1166 	uart_update_timeout(u, termios->c_cflag, baud);
1167 
1168 	/* Make sure all write has completed */
1169 	tegra_uart_read(tup, UART_IER);
1170 
1171 	/* Reenable interrupt */
1172 	tegra_uart_write(tup, tup->ier_shadow, UART_IER);
1173 	tegra_uart_read(tup, UART_IER);
1174 
1175 	spin_unlock_irqrestore(&u->lock, flags);
1176 }
1177 
tegra_uart_type(struct uart_port * u)1178 static const char *tegra_uart_type(struct uart_port *u)
1179 {
1180 	return TEGRA_UART_TYPE;
1181 }
1182 
1183 static const struct uart_ops tegra_uart_ops = {
1184 	.tx_empty	= tegra_uart_tx_empty,
1185 	.set_mctrl	= tegra_uart_set_mctrl,
1186 	.get_mctrl	= tegra_uart_get_mctrl,
1187 	.stop_tx	= tegra_uart_stop_tx,
1188 	.start_tx	= tegra_uart_start_tx,
1189 	.stop_rx	= tegra_uart_stop_rx,
1190 	.flush_buffer	= tegra_uart_flush_buffer,
1191 	.enable_ms	= tegra_uart_enable_ms,
1192 	.break_ctl	= tegra_uart_break_ctl,
1193 	.startup	= tegra_uart_startup,
1194 	.shutdown	= tegra_uart_shutdown,
1195 	.set_termios	= tegra_uart_set_termios,
1196 	.type		= tegra_uart_type,
1197 	.request_port	= tegra_uart_request_port,
1198 	.release_port	= tegra_uart_release_port,
1199 };
1200 
1201 static struct uart_driver tegra_uart_driver = {
1202 	.owner		= THIS_MODULE,
1203 	.driver_name	= "tegra_hsuart",
1204 	.dev_name	= "ttyTHS",
1205 	.cons		= NULL,
1206 	.nr		= TEGRA_UART_MAXIMUM,
1207 };
1208 
tegra_uart_parse_dt(struct platform_device * pdev,struct tegra_uart_port * tup)1209 static int tegra_uart_parse_dt(struct platform_device *pdev,
1210 	struct tegra_uart_port *tup)
1211 {
1212 	struct device_node *np = pdev->dev.of_node;
1213 	int port;
1214 
1215 	port = of_alias_get_id(np, "serial");
1216 	if (port < 0) {
1217 		dev_err(&pdev->dev, "failed to get alias id, errno %d\n", port);
1218 		return port;
1219 	}
1220 	tup->uport.line = port;
1221 
1222 	tup->enable_modem_interrupt = of_property_read_bool(np,
1223 					"nvidia,enable-modem-interrupt");
1224 	return 0;
1225 }
1226 
1227 static struct tegra_uart_chip_data tegra20_uart_chip_data = {
1228 	.tx_fifo_full_status		= false,
1229 	.allow_txfifo_reset_fifo_mode	= true,
1230 	.support_clk_src_div		= false,
1231 };
1232 
1233 static struct tegra_uart_chip_data tegra30_uart_chip_data = {
1234 	.tx_fifo_full_status		= true,
1235 	.allow_txfifo_reset_fifo_mode	= false,
1236 	.support_clk_src_div		= true,
1237 };
1238 
1239 static const struct of_device_id tegra_uart_of_match[] = {
1240 	{
1241 		.compatible	= "nvidia,tegra30-hsuart",
1242 		.data		= &tegra30_uart_chip_data,
1243 	}, {
1244 		.compatible	= "nvidia,tegra20-hsuart",
1245 		.data		= &tegra20_uart_chip_data,
1246 	}, {
1247 	},
1248 };
1249 MODULE_DEVICE_TABLE(of, tegra_uart_of_match);
1250 
tegra_uart_probe(struct platform_device * pdev)1251 static int tegra_uart_probe(struct platform_device *pdev)
1252 {
1253 	struct tegra_uart_port *tup;
1254 	struct uart_port *u;
1255 	struct resource *resource;
1256 	int ret;
1257 	const struct tegra_uart_chip_data *cdata;
1258 	const struct of_device_id *match;
1259 
1260 	match = of_match_device(tegra_uart_of_match, &pdev->dev);
1261 	if (!match) {
1262 		dev_err(&pdev->dev, "Error: No device match found\n");
1263 		return -ENODEV;
1264 	}
1265 	cdata = match->data;
1266 
1267 	tup = devm_kzalloc(&pdev->dev, sizeof(*tup), GFP_KERNEL);
1268 	if (!tup) {
1269 		dev_err(&pdev->dev, "Failed to allocate memory for tup\n");
1270 		return -ENOMEM;
1271 	}
1272 
1273 	ret = tegra_uart_parse_dt(pdev, tup);
1274 	if (ret < 0)
1275 		return ret;
1276 
1277 	u = &tup->uport;
1278 	u->dev = &pdev->dev;
1279 	u->ops = &tegra_uart_ops;
1280 	u->type = PORT_TEGRA;
1281 	u->fifosize = 32;
1282 	tup->cdata = cdata;
1283 
1284 	platform_set_drvdata(pdev, tup);
1285 	resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1286 	if (!resource) {
1287 		dev_err(&pdev->dev, "No IO memory resource\n");
1288 		return -ENODEV;
1289 	}
1290 
1291 	u->mapbase = resource->start;
1292 	u->membase = devm_ioremap_resource(&pdev->dev, resource);
1293 	if (IS_ERR(u->membase))
1294 		return PTR_ERR(u->membase);
1295 
1296 	tup->uart_clk = devm_clk_get(&pdev->dev, NULL);
1297 	if (IS_ERR(tup->uart_clk)) {
1298 		dev_err(&pdev->dev, "Couldn't get the clock\n");
1299 		return PTR_ERR(tup->uart_clk);
1300 	}
1301 
1302 	tup->rst = devm_reset_control_get_exclusive(&pdev->dev, "serial");
1303 	if (IS_ERR(tup->rst)) {
1304 		dev_err(&pdev->dev, "Couldn't get the reset\n");
1305 		return PTR_ERR(tup->rst);
1306 	}
1307 
1308 	u->iotype = UPIO_MEM32;
1309 	ret = platform_get_irq(pdev, 0);
1310 	if (ret < 0) {
1311 		dev_err(&pdev->dev, "Couldn't get IRQ\n");
1312 		return ret;
1313 	}
1314 	u->irq = ret;
1315 	u->regshift = 2;
1316 	ret = uart_add_one_port(&tegra_uart_driver, u);
1317 	if (ret < 0) {
1318 		dev_err(&pdev->dev, "Failed to add uart port, err %d\n", ret);
1319 		return ret;
1320 	}
1321 	return ret;
1322 }
1323 
tegra_uart_remove(struct platform_device * pdev)1324 static int tegra_uart_remove(struct platform_device *pdev)
1325 {
1326 	struct tegra_uart_port *tup = platform_get_drvdata(pdev);
1327 	struct uart_port *u = &tup->uport;
1328 
1329 	uart_remove_one_port(&tegra_uart_driver, u);
1330 	return 0;
1331 }
1332 
1333 #ifdef CONFIG_PM_SLEEP
tegra_uart_suspend(struct device * dev)1334 static int tegra_uart_suspend(struct device *dev)
1335 {
1336 	struct tegra_uart_port *tup = dev_get_drvdata(dev);
1337 	struct uart_port *u = &tup->uport;
1338 
1339 	return uart_suspend_port(&tegra_uart_driver, u);
1340 }
1341 
tegra_uart_resume(struct device * dev)1342 static int tegra_uart_resume(struct device *dev)
1343 {
1344 	struct tegra_uart_port *tup = dev_get_drvdata(dev);
1345 	struct uart_port *u = &tup->uport;
1346 
1347 	return uart_resume_port(&tegra_uart_driver, u);
1348 }
1349 #endif
1350 
1351 static const struct dev_pm_ops tegra_uart_pm_ops = {
1352 	SET_SYSTEM_SLEEP_PM_OPS(tegra_uart_suspend, tegra_uart_resume)
1353 };
1354 
1355 static struct platform_driver tegra_uart_platform_driver = {
1356 	.probe		= tegra_uart_probe,
1357 	.remove		= tegra_uart_remove,
1358 	.driver		= {
1359 		.name	= "serial-tegra",
1360 		.of_match_table = tegra_uart_of_match,
1361 		.pm	= &tegra_uart_pm_ops,
1362 	},
1363 };
1364 
tegra_uart_init(void)1365 static int __init tegra_uart_init(void)
1366 {
1367 	int ret;
1368 
1369 	ret = uart_register_driver(&tegra_uart_driver);
1370 	if (ret < 0) {
1371 		pr_err("Could not register %s driver\n",
1372 			tegra_uart_driver.driver_name);
1373 		return ret;
1374 	}
1375 
1376 	ret = platform_driver_register(&tegra_uart_platform_driver);
1377 	if (ret < 0) {
1378 		pr_err("Uart platform driver register failed, e = %d\n", ret);
1379 		uart_unregister_driver(&tegra_uart_driver);
1380 		return ret;
1381 	}
1382 	return 0;
1383 }
1384 
tegra_uart_exit(void)1385 static void __exit tegra_uart_exit(void)
1386 {
1387 	pr_info("Unloading tegra uart driver\n");
1388 	platform_driver_unregister(&tegra_uart_platform_driver);
1389 	uart_unregister_driver(&tegra_uart_driver);
1390 }
1391 
1392 module_init(tegra_uart_init);
1393 module_exit(tegra_uart_exit);
1394 
1395 MODULE_ALIAS("platform:serial-tegra");
1396 MODULE_DESCRIPTION("High speed UART driver for tegra chipset");
1397 MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
1398 MODULE_LICENSE("GPL v2");
1399