1 // SPDX-License-Identifier: GPL-2.0
5 * High-speed serial driver for NVIDIA Tegra SoCs
7 * Copyright (c) 2012-2019, NVIDIA CORPORATION. All rights reserved.
9 * Author: Laxman Dewangan <ldewangan@nvidia.com>
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>
20 #include <linux/irq.h>
21 #include <linux/module.h>
23 #include <linux/pagemap.h>
24 #include <linux/platform_device.h>
25 #include <linux/reset.h>
26 #include <linux/serial.h>
27 #include <linux/serial_8250.h>
28 #include <linux/serial_core.h>
29 #include <linux/serial_reg.h>
30 #include <linux/slab.h>
31 #include <linux/string.h>
32 #include <linux/termios.h>
33 #include <linux/tty.h>
34 #include <linux/tty_flip.h>
36 #define TEGRA_UART_TYPE "TEGRA_UART"
37 #define TX_EMPTY_STATUS (UART_LSR_TEMT | UART_LSR_THRE)
38 #define BYTES_TO_ALIGN(x) ((unsigned long)(x) & 0x3)
40 #define TEGRA_UART_RX_DMA_BUFFER_SIZE 4096
41 #define TEGRA_UART_LSR_TXFIFO_FULL 0x100
42 #define TEGRA_UART_IER_EORD 0x20
43 #define TEGRA_UART_MCR_RTS_EN 0x40
44 #define TEGRA_UART_MCR_CTS_EN 0x20
45 #define TEGRA_UART_LSR_ANY (UART_LSR_OE | UART_LSR_BI | \
46 UART_LSR_PE | UART_LSR_FE)
47 #define TEGRA_UART_IRDA_CSR 0x08
48 #define TEGRA_UART_SIR_ENABLED 0x80
50 #define TEGRA_UART_TX_PIO 1
51 #define TEGRA_UART_TX_DMA 2
52 #define TEGRA_UART_MIN_DMA 16
53 #define TEGRA_UART_FIFO_SIZE 32
56 * Tx fifo trigger level setting in tegra uart is in
57 * reverse way then conventional uart.
59 #define TEGRA_UART_TX_TRIG_16B 0x00
60 #define TEGRA_UART_TX_TRIG_8B 0x10
61 #define TEGRA_UART_TX_TRIG_4B 0x20
62 #define TEGRA_UART_TX_TRIG_1B 0x30
64 #define TEGRA_UART_MAXIMUM 8
66 /* Default UART setting when started: 115200 no parity, stop, 8 data bits */
67 #define TEGRA_UART_DEFAULT_BAUD 115200
68 #define TEGRA_UART_DEFAULT_LSR UART_LCR_WLEN8
70 /* Tx transfer mode */
71 #define TEGRA_TX_PIO 1
72 #define TEGRA_TX_DMA 2
74 #define TEGRA_UART_FCR_IIR_FIFO_EN 0x40
77 * struct tegra_uart_chip_data: SOC specific data.
79 * @tx_fifo_full_status: Status flag available for checking tx fifo full.
80 * @allow_txfifo_reset_fifo_mode: allow_tx fifo reset with fifo mode or not.
81 * Tegra30 does not allow this.
82 * @support_clk_src_div: Clock source support the clock divider.
83 * @fifo_mode_enable_status: Is FIFO mode enabled?
84 * @uart_max_port: Maximum number of UART ports
85 * @max_dma_burst_bytes: Maximum size of DMA bursts
86 * @error_tolerance_low_range: Lowest number in the error tolerance range
87 * @error_tolerance_high_range: Highest number in the error tolerance range
89 struct tegra_uart_chip_data
{
90 bool tx_fifo_full_status
;
91 bool allow_txfifo_reset_fifo_mode
;
92 bool support_clk_src_div
;
93 bool fifo_mode_enable_status
;
95 int max_dma_burst_bytes
;
96 int error_tolerance_low_range
;
97 int error_tolerance_high_range
;
100 struct tegra_baud_tolerance
{
101 u32 lower_range_baud
;
102 u32 upper_range_baud
;
106 struct tegra_uart_port
{
107 struct uart_port uport
;
108 const struct tegra_uart_chip_data
*cdata
;
110 struct clk
*uart_clk
;
111 struct reset_control
*rst
;
112 unsigned int current_baud
;
114 /* Register shadow */
115 unsigned long fcr_shadow
;
116 unsigned long mcr_shadow
;
117 unsigned long lcr_shadow
;
118 unsigned long ier_shadow
;
122 unsigned int tx_bytes
;
124 bool enable_modem_interrupt
;
130 struct dma_chan
*rx_dma_chan
;
131 struct dma_chan
*tx_dma_chan
;
132 dma_addr_t rx_dma_buf_phys
;
133 dma_addr_t tx_dma_buf_phys
;
134 unsigned char *rx_dma_buf_virt
;
135 unsigned char *tx_dma_buf_virt
;
136 struct dma_async_tx_descriptor
*tx_dma_desc
;
137 struct dma_async_tx_descriptor
*rx_dma_desc
;
138 dma_cookie_t tx_cookie
;
139 dma_cookie_t rx_cookie
;
140 unsigned int tx_bytes_requested
;
141 unsigned int rx_bytes_requested
;
142 struct tegra_baud_tolerance
*baud_tolerance
;
143 int n_adjustable_baud_rates
;
151 static void tegra_uart_start_next_tx(struct tegra_uart_port
*tup
);
152 static int tegra_uart_start_rx_dma(struct tegra_uart_port
*tup
);
153 static void tegra_uart_dma_channel_free(struct tegra_uart_port
*tup
,
156 static inline unsigned long tegra_uart_read(struct tegra_uart_port
*tup
,
159 return readl(tup
->uport
.membase
+ (reg
<< tup
->uport
.regshift
));
162 static inline void tegra_uart_write(struct tegra_uart_port
*tup
, unsigned val
,
165 writel(val
, tup
->uport
.membase
+ (reg
<< tup
->uport
.regshift
));
168 static inline struct tegra_uart_port
*to_tegra_uport(struct uart_port
*u
)
170 return container_of(u
, struct tegra_uart_port
, uport
);
173 static unsigned int tegra_uart_get_mctrl(struct uart_port
*u
)
175 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
178 * RI - Ring detector is active
179 * CD/DCD/CAR - Carrier detect is always active. For some reason
180 * linux has different names for carrier detect.
181 * DSR - Data Set ready is active as the hardware doesn't support it.
182 * Don't know if the linux support this yet?
183 * CTS - Clear to send. Always set to active, as the hardware handles
186 if (tup
->enable_modem_interrupt
)
187 return TIOCM_RI
| TIOCM_CD
| TIOCM_DSR
| TIOCM_CTS
;
191 static void set_rts(struct tegra_uart_port
*tup
, bool active
)
195 mcr
= tup
->mcr_shadow
;
197 mcr
|= TEGRA_UART_MCR_RTS_EN
;
199 mcr
&= ~TEGRA_UART_MCR_RTS_EN
;
200 if (mcr
!= tup
->mcr_shadow
) {
201 tegra_uart_write(tup
, mcr
, UART_MCR
);
202 tup
->mcr_shadow
= mcr
;
206 static void set_dtr(struct tegra_uart_port
*tup
, bool active
)
210 mcr
= tup
->mcr_shadow
;
214 mcr
&= ~UART_MCR_DTR
;
215 if (mcr
!= tup
->mcr_shadow
) {
216 tegra_uart_write(tup
, mcr
, UART_MCR
);
217 tup
->mcr_shadow
= mcr
;
221 static void set_loopbk(struct tegra_uart_port
*tup
, bool active
)
223 unsigned long mcr
= tup
->mcr_shadow
;
226 mcr
|= UART_MCR_LOOP
;
228 mcr
&= ~UART_MCR_LOOP
;
230 if (mcr
!= tup
->mcr_shadow
) {
231 tegra_uart_write(tup
, mcr
, UART_MCR
);
232 tup
->mcr_shadow
= mcr
;
236 static void tegra_uart_set_mctrl(struct uart_port
*u
, unsigned int mctrl
)
238 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
241 tup
->rts_active
= !!(mctrl
& TIOCM_RTS
);
242 set_rts(tup
, tup
->rts_active
);
244 enable
= !!(mctrl
& TIOCM_DTR
);
245 set_dtr(tup
, enable
);
247 enable
= !!(mctrl
& TIOCM_LOOP
);
248 set_loopbk(tup
, enable
);
251 static void tegra_uart_break_ctl(struct uart_port
*u
, int break_ctl
)
253 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
256 lcr
= tup
->lcr_shadow
;
260 lcr
&= ~UART_LCR_SBC
;
261 tegra_uart_write(tup
, lcr
, UART_LCR
);
262 tup
->lcr_shadow
= lcr
;
266 * tegra_uart_wait_cycle_time: Wait for N UART clock periods
268 * @tup: Tegra serial port data structure.
269 * @cycles: Number of clock periods to wait.
271 * Tegra UARTs are clocked at 16X the baud/bit rate and hence the UART
272 * clock speed is 16X the current baud rate.
274 static void tegra_uart_wait_cycle_time(struct tegra_uart_port
*tup
,
277 if (tup
->current_baud
)
278 udelay(DIV_ROUND_UP(cycles
* 1000000, tup
->current_baud
* 16));
281 /* Wait for a symbol-time. */
282 static void tegra_uart_wait_sym_time(struct tegra_uart_port
*tup
,
285 if (tup
->current_baud
)
286 udelay(DIV_ROUND_UP(syms
* tup
->symb_bit
* 1000000,
290 static int tegra_uart_wait_fifo_mode_enabled(struct tegra_uart_port
*tup
)
293 unsigned int tmout
= 100;
296 iir
= tegra_uart_read(tup
, UART_IIR
);
297 if (iir
& TEGRA_UART_FCR_IIR_FIFO_EN
)
305 static void tegra_uart_fifo_reset(struct tegra_uart_port
*tup
, u8 fcr_bits
)
307 unsigned long fcr
= tup
->fcr_shadow
;
308 unsigned int lsr
, tmout
= 10000;
313 if (tup
->cdata
->allow_txfifo_reset_fifo_mode
) {
314 fcr
|= fcr_bits
& (UART_FCR_CLEAR_RCVR
| UART_FCR_CLEAR_XMIT
);
315 tegra_uart_write(tup
, fcr
, UART_FCR
);
317 fcr
&= ~UART_FCR_ENABLE_FIFO
;
318 tegra_uart_write(tup
, fcr
, UART_FCR
);
320 fcr
|= fcr_bits
& (UART_FCR_CLEAR_RCVR
| UART_FCR_CLEAR_XMIT
);
321 tegra_uart_write(tup
, fcr
, UART_FCR
);
322 fcr
|= UART_FCR_ENABLE_FIFO
;
323 tegra_uart_write(tup
, fcr
, UART_FCR
);
324 if (tup
->cdata
->fifo_mode_enable_status
)
325 tegra_uart_wait_fifo_mode_enabled(tup
);
328 /* Dummy read to ensure the write is posted */
329 tegra_uart_read(tup
, UART_SCR
);
332 * For all tegra devices (up to t210), there is a hardware issue that
333 * requires software to wait for 32 UART clock periods for the flush
334 * to propagate, otherwise data could be lost.
336 tegra_uart_wait_cycle_time(tup
, 32);
339 lsr
= tegra_uart_read(tup
, UART_LSR
);
340 if ((lsr
& UART_LSR_TEMT
) && !(lsr
& UART_LSR_DR
))
349 static long tegra_get_tolerance_rate(struct tegra_uart_port
*tup
,
350 unsigned int baud
, long rate
)
354 for (i
= 0; i
< tup
->n_adjustable_baud_rates
; ++i
) {
355 if (baud
>= tup
->baud_tolerance
[i
].lower_range_baud
&&
356 baud
<= tup
->baud_tolerance
[i
].upper_range_baud
)
357 return (rate
+ (rate
*
358 tup
->baud_tolerance
[i
].tolerance
) / 10000);
364 static int tegra_check_rate_in_range(struct tegra_uart_port
*tup
)
368 diff
= ((long)(tup
->configured_rate
- tup
->required_rate
) * 10000)
369 / tup
->required_rate
;
370 if (diff
< (tup
->cdata
->error_tolerance_low_range
* 100) ||
371 diff
> (tup
->cdata
->error_tolerance_high_range
* 100)) {
372 dev_err(tup
->uport
.dev
,
373 "configured baud rate is out of range by %ld", diff
);
380 static int tegra_set_baudrate(struct tegra_uart_port
*tup
, unsigned int baud
)
383 unsigned int divisor
;
388 if (tup
->current_baud
== baud
)
391 if (tup
->cdata
->support_clk_src_div
) {
393 tup
->required_rate
= rate
;
395 if (tup
->n_adjustable_baud_rates
)
396 rate
= tegra_get_tolerance_rate(tup
, baud
, rate
);
398 ret
= clk_set_rate(tup
->uart_clk
, rate
);
400 dev_err(tup
->uport
.dev
,
401 "clk_set_rate() failed for rate %lu\n", rate
);
404 tup
->configured_rate
= clk_get_rate(tup
->uart_clk
);
406 ret
= tegra_check_rate_in_range(tup
);
410 rate
= clk_get_rate(tup
->uart_clk
);
411 divisor
= DIV_ROUND_CLOSEST(rate
, baud
* 16);
414 uart_port_lock_irqsave(&tup
->uport
, &flags
);
415 lcr
= tup
->lcr_shadow
;
416 lcr
|= UART_LCR_DLAB
;
417 tegra_uart_write(tup
, lcr
, UART_LCR
);
419 tegra_uart_write(tup
, divisor
& 0xFF, UART_TX
);
420 tegra_uart_write(tup
, ((divisor
>> 8) & 0xFF), UART_IER
);
422 lcr
&= ~UART_LCR_DLAB
;
423 tegra_uart_write(tup
, lcr
, UART_LCR
);
425 /* Dummy read to ensure the write is posted */
426 tegra_uart_read(tup
, UART_SCR
);
427 uart_port_unlock_irqrestore(&tup
->uport
, flags
);
429 tup
->current_baud
= baud
;
431 /* wait two character intervals at new rate */
432 tegra_uart_wait_sym_time(tup
, 2);
436 static u8
tegra_uart_decode_rx_error(struct tegra_uart_port
*tup
,
439 u8 flag
= TTY_NORMAL
;
441 if (unlikely(lsr
& TEGRA_UART_LSR_ANY
)) {
442 if (lsr
& UART_LSR_OE
) {
445 tup
->uport
.icount
.overrun
++;
446 dev_dbg(tup
->uport
.dev
, "Got overrun errors\n");
447 } else if (lsr
& UART_LSR_PE
) {
450 tup
->uport
.icount
.parity
++;
451 dev_dbg(tup
->uport
.dev
, "Got Parity errors\n");
452 } else if (lsr
& UART_LSR_FE
) {
454 tup
->uport
.icount
.frame
++;
455 dev_dbg(tup
->uport
.dev
, "Got frame errors\n");
456 } else if (lsr
& UART_LSR_BI
) {
459 * If FIFO read error without any data, reset Rx FIFO
461 if (!(lsr
& UART_LSR_DR
) && (lsr
& UART_LSR_FIFOE
))
462 tegra_uart_fifo_reset(tup
, UART_FCR_CLEAR_RCVR
);
463 if (tup
->uport
.ignore_status_mask
& UART_LSR_BI
)
466 tup
->uport
.icount
.brk
++;
467 dev_dbg(tup
->uport
.dev
, "Got Break\n");
469 uart_insert_char(&tup
->uport
, lsr
, UART_LSR_OE
, 0, flag
);
475 static int tegra_uart_request_port(struct uart_port
*u
)
480 static void tegra_uart_release_port(struct uart_port
*u
)
482 /* Nothing to do here */
485 static void tegra_uart_fill_tx_fifo(struct tegra_uart_port
*tup
, int max_bytes
)
490 for (i
= 0; i
< max_bytes
; i
++) {
491 if (tup
->cdata
->tx_fifo_full_status
) {
492 unsigned long lsr
= tegra_uart_read(tup
, UART_LSR
);
493 if ((lsr
& TEGRA_UART_LSR_TXFIFO_FULL
))
496 if (WARN_ON_ONCE(!uart_fifo_get(&tup
->uport
, &ch
)))
498 tegra_uart_write(tup
, ch
, UART_TX
);
502 static void tegra_uart_start_pio_tx(struct tegra_uart_port
*tup
,
505 if (bytes
> TEGRA_UART_MIN_DMA
)
506 bytes
= TEGRA_UART_MIN_DMA
;
508 tup
->tx_in_progress
= TEGRA_UART_TX_PIO
;
509 tup
->tx_bytes
= bytes
;
510 tup
->ier_shadow
|= UART_IER_THRI
;
511 tegra_uart_write(tup
, tup
->ier_shadow
, UART_IER
);
514 static void tegra_uart_tx_dma_complete(void *args
)
516 struct tegra_uart_port
*tup
= args
;
517 struct tty_port
*tport
= &tup
->uport
.state
->port
;
518 struct dma_tx_state state
;
522 dmaengine_tx_status(tup
->tx_dma_chan
, tup
->tx_cookie
, &state
);
523 count
= tup
->tx_bytes_requested
- state
.residue
;
524 async_tx_ack(tup
->tx_dma_desc
);
525 uart_port_lock_irqsave(&tup
->uport
, &flags
);
526 uart_xmit_advance(&tup
->uport
, count
);
527 tup
->tx_in_progress
= 0;
528 if (kfifo_len(&tport
->xmit_fifo
) < WAKEUP_CHARS
)
529 uart_write_wakeup(&tup
->uport
);
530 tegra_uart_start_next_tx(tup
);
531 uart_port_unlock_irqrestore(&tup
->uport
, flags
);
534 static int tegra_uart_start_tx_dma(struct tegra_uart_port
*tup
,
537 struct tty_port
*tport
= &tup
->uport
.state
->port
;
538 dma_addr_t tx_phys_addr
;
541 tup
->tx_bytes
= count
& ~(0xF);
542 WARN_ON_ONCE(kfifo_out_linear(&tport
->xmit_fifo
, &tail
,
543 UART_XMIT_SIZE
) < count
);
544 tx_phys_addr
= tup
->tx_dma_buf_phys
+ tail
;
546 dma_sync_single_for_device(tup
->uport
.dev
, tx_phys_addr
,
547 tup
->tx_bytes
, DMA_TO_DEVICE
);
549 tup
->tx_dma_desc
= dmaengine_prep_slave_single(tup
->tx_dma_chan
,
550 tx_phys_addr
, tup
->tx_bytes
, DMA_MEM_TO_DEV
,
552 if (!tup
->tx_dma_desc
) {
553 dev_err(tup
->uport
.dev
, "Not able to get desc for Tx\n");
557 tup
->tx_dma_desc
->callback
= tegra_uart_tx_dma_complete
;
558 tup
->tx_dma_desc
->callback_param
= tup
;
559 tup
->tx_in_progress
= TEGRA_UART_TX_DMA
;
560 tup
->tx_bytes_requested
= tup
->tx_bytes
;
561 tup
->tx_cookie
= dmaengine_submit(tup
->tx_dma_desc
);
562 dma_async_issue_pending(tup
->tx_dma_chan
);
566 static void tegra_uart_start_next_tx(struct tegra_uart_port
*tup
)
568 struct tty_port
*tport
= &tup
->uport
.state
->port
;
569 unsigned char *tail_ptr
;
573 if (!tup
->current_baud
)
576 count
= kfifo_out_linear_ptr(&tport
->xmit_fifo
, &tail_ptr
,
581 tail
= (unsigned long)tail_ptr
;
583 if (tup
->use_tx_pio
|| count
< TEGRA_UART_MIN_DMA
)
584 tegra_uart_start_pio_tx(tup
, count
);
585 else if (BYTES_TO_ALIGN(tail
) > 0)
586 tegra_uart_start_pio_tx(tup
, BYTES_TO_ALIGN(tail
));
588 tegra_uart_start_tx_dma(tup
, count
);
591 /* Called by serial core driver with u->lock taken. */
592 static void tegra_uart_start_tx(struct uart_port
*u
)
594 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
595 struct tty_port
*tport
= &u
->state
->port
;
597 if (!kfifo_is_empty(&tport
->xmit_fifo
) && !tup
->tx_in_progress
)
598 tegra_uart_start_next_tx(tup
);
601 static unsigned int tegra_uart_tx_empty(struct uart_port
*u
)
603 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
604 unsigned int ret
= 0;
607 uart_port_lock_irqsave(u
, &flags
);
608 if (!tup
->tx_in_progress
) {
609 unsigned long lsr
= tegra_uart_read(tup
, UART_LSR
);
610 if ((lsr
& TX_EMPTY_STATUS
) == TX_EMPTY_STATUS
)
613 uart_port_unlock_irqrestore(u
, flags
);
617 static void tegra_uart_stop_tx(struct uart_port
*u
)
619 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
620 struct dma_tx_state state
;
623 if (tup
->tx_in_progress
!= TEGRA_UART_TX_DMA
)
626 dmaengine_pause(tup
->tx_dma_chan
);
627 dmaengine_tx_status(tup
->tx_dma_chan
, tup
->tx_cookie
, &state
);
628 dmaengine_terminate_all(tup
->tx_dma_chan
);
629 count
= tup
->tx_bytes_requested
- state
.residue
;
630 async_tx_ack(tup
->tx_dma_desc
);
631 uart_xmit_advance(&tup
->uport
, count
);
632 tup
->tx_in_progress
= 0;
635 static void tegra_uart_handle_tx_pio(struct tegra_uart_port
*tup
)
637 struct tty_port
*tport
= &tup
->uport
.state
->port
;
639 tegra_uart_fill_tx_fifo(tup
, tup
->tx_bytes
);
640 tup
->tx_in_progress
= 0;
641 if (kfifo_len(&tport
->xmit_fifo
) < WAKEUP_CHARS
)
642 uart_write_wakeup(&tup
->uport
);
643 tegra_uart_start_next_tx(tup
);
646 static void tegra_uart_handle_rx_pio(struct tegra_uart_port
*tup
,
647 struct tty_port
*port
)
650 unsigned long lsr
= 0;
651 u8 ch
, flag
= TTY_NORMAL
;
653 lsr
= tegra_uart_read(tup
, UART_LSR
);
654 if (!(lsr
& UART_LSR_DR
))
657 flag
= tegra_uart_decode_rx_error(tup
, lsr
);
658 if (flag
!= TTY_NORMAL
)
661 ch
= (unsigned char) tegra_uart_read(tup
, UART_RX
);
662 tup
->uport
.icount
.rx
++;
664 if (uart_handle_sysrq_char(&tup
->uport
, ch
))
667 if (tup
->uport
.ignore_status_mask
& UART_LSR_DR
)
670 tty_insert_flip_char(port
, ch
, flag
);
674 static void tegra_uart_copy_rx_to_tty(struct tegra_uart_port
*tup
,
675 struct tty_port
*port
,
680 /* If count is zero, then there is no data to be copied */
684 tup
->uport
.icount
.rx
+= count
;
686 if (tup
->uport
.ignore_status_mask
& UART_LSR_DR
)
689 dma_sync_single_for_cpu(tup
->uport
.dev
, tup
->rx_dma_buf_phys
,
690 count
, DMA_FROM_DEVICE
);
691 copied
= tty_insert_flip_string(port
,
692 ((unsigned char *)(tup
->rx_dma_buf_virt
)), count
);
693 if (copied
!= count
) {
695 dev_err(tup
->uport
.dev
, "RxData copy to tty layer failed\n");
697 dma_sync_single_for_device(tup
->uport
.dev
, tup
->rx_dma_buf_phys
,
698 count
, DMA_TO_DEVICE
);
701 static void do_handle_rx_pio(struct tegra_uart_port
*tup
)
703 struct tty_struct
*tty
= tty_port_tty_get(&tup
->uport
.state
->port
);
704 struct tty_port
*port
= &tup
->uport
.state
->port
;
706 tegra_uart_handle_rx_pio(tup
, port
);
708 tty_flip_buffer_push(port
);
713 static void tegra_uart_rx_buffer_push(struct tegra_uart_port
*tup
,
714 unsigned int residue
)
716 struct tty_port
*port
= &tup
->uport
.state
->port
;
719 async_tx_ack(tup
->rx_dma_desc
);
720 count
= tup
->rx_bytes_requested
- residue
;
722 /* If we are here, DMA is stopped */
723 tegra_uart_copy_rx_to_tty(tup
, port
, count
);
725 do_handle_rx_pio(tup
);
728 static void tegra_uart_rx_dma_complete(void *args
)
730 struct tegra_uart_port
*tup
= args
;
731 struct uart_port
*u
= &tup
->uport
;
733 struct dma_tx_state state
;
734 enum dma_status status
;
736 uart_port_lock_irqsave(u
, &flags
);
738 status
= dmaengine_tx_status(tup
->rx_dma_chan
, tup
->rx_cookie
, &state
);
740 if (status
== DMA_IN_PROGRESS
) {
741 dev_dbg(tup
->uport
.dev
, "RX DMA is in progress\n");
745 /* Deactivate flow control to stop sender */
749 tup
->rx_dma_active
= false;
750 tegra_uart_rx_buffer_push(tup
, 0);
751 tegra_uart_start_rx_dma(tup
);
753 /* Activate flow control to start transfer */
758 uart_port_unlock_irqrestore(u
, flags
);
761 static void tegra_uart_terminate_rx_dma(struct tegra_uart_port
*tup
)
763 struct dma_tx_state state
;
765 if (!tup
->rx_dma_active
) {
766 do_handle_rx_pio(tup
);
770 dmaengine_pause(tup
->rx_dma_chan
);
771 dmaengine_tx_status(tup
->rx_dma_chan
, tup
->rx_cookie
, &state
);
772 dmaengine_terminate_all(tup
->rx_dma_chan
);
774 tegra_uart_rx_buffer_push(tup
, state
.residue
);
775 tup
->rx_dma_active
= false;
778 static void tegra_uart_handle_rx_dma(struct tegra_uart_port
*tup
)
780 /* Deactivate flow control to stop sender */
784 tegra_uart_terminate_rx_dma(tup
);
790 static int tegra_uart_start_rx_dma(struct tegra_uart_port
*tup
)
792 unsigned int count
= TEGRA_UART_RX_DMA_BUFFER_SIZE
;
794 if (tup
->rx_dma_active
)
797 tup
->rx_dma_desc
= dmaengine_prep_slave_single(tup
->rx_dma_chan
,
798 tup
->rx_dma_buf_phys
, count
, DMA_DEV_TO_MEM
,
800 if (!tup
->rx_dma_desc
) {
801 dev_err(tup
->uport
.dev
, "Not able to get desc for Rx\n");
805 tup
->rx_dma_active
= true;
806 tup
->rx_dma_desc
->callback
= tegra_uart_rx_dma_complete
;
807 tup
->rx_dma_desc
->callback_param
= tup
;
808 tup
->rx_bytes_requested
= count
;
809 tup
->rx_cookie
= dmaengine_submit(tup
->rx_dma_desc
);
810 dma_async_issue_pending(tup
->rx_dma_chan
);
814 static void tegra_uart_handle_modem_signal_change(struct uart_port
*u
)
816 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
819 msr
= tegra_uart_read(tup
, UART_MSR
);
820 if (!(msr
& UART_MSR_ANY_DELTA
))
823 if (msr
& UART_MSR_TERI
)
824 tup
->uport
.icount
.rng
++;
825 if (msr
& UART_MSR_DDSR
)
826 tup
->uport
.icount
.dsr
++;
827 /* We may only get DDCD when HW init and reset */
828 if (msr
& UART_MSR_DDCD
)
829 uart_handle_dcd_change(&tup
->uport
, msr
& UART_MSR_DCD
);
830 /* Will start/stop_tx accordingly */
831 if (msr
& UART_MSR_DCTS
)
832 uart_handle_cts_change(&tup
->uport
, msr
& UART_MSR_CTS
);
835 static irqreturn_t
tegra_uart_isr(int irq
, void *data
)
837 struct tegra_uart_port
*tup
= data
;
838 struct uart_port
*u
= &tup
->uport
;
841 bool is_rx_start
= false;
842 bool is_rx_int
= false;
845 uart_port_lock_irqsave(u
, &flags
);
847 iir
= tegra_uart_read(tup
, UART_IIR
);
848 if (iir
& UART_IIR_NO_INT
) {
849 if (!tup
->use_rx_pio
&& is_rx_int
) {
850 tegra_uart_handle_rx_dma(tup
);
851 if (tup
->rx_in_progress
) {
852 ier
= tup
->ier_shadow
;
853 ier
|= (UART_IER_RLSI
| UART_IER_RTOIE
|
854 TEGRA_UART_IER_EORD
| UART_IER_RDI
);
855 tup
->ier_shadow
= ier
;
856 tegra_uart_write(tup
, ier
, UART_IER
);
858 } else if (is_rx_start
) {
859 tegra_uart_start_rx_dma(tup
);
861 uart_port_unlock_irqrestore(u
, flags
);
865 switch ((iir
>> 1) & 0x7) {
866 case 0: /* Modem signal change interrupt */
867 tegra_uart_handle_modem_signal_change(u
);
870 case 1: /* Transmit interrupt only triggered when using PIO */
871 tup
->ier_shadow
&= ~UART_IER_THRI
;
872 tegra_uart_write(tup
, tup
->ier_shadow
, UART_IER
);
873 tegra_uart_handle_tx_pio(tup
);
876 case 4: /* End of data */
877 case 6: /* Rx timeout */
878 if (!tup
->use_rx_pio
) {
879 is_rx_int
= tup
->rx_in_progress
;
880 /* Disable Rx interrupts */
881 ier
= tup
->ier_shadow
;
882 ier
&= ~(UART_IER_RDI
| UART_IER_RLSI
|
883 UART_IER_RTOIE
| TEGRA_UART_IER_EORD
);
884 tup
->ier_shadow
= ier
;
885 tegra_uart_write(tup
, ier
, UART_IER
);
889 case 2: /* Receive */
890 if (!tup
->use_rx_pio
) {
891 is_rx_start
= tup
->rx_in_progress
;
892 tup
->ier_shadow
&= ~UART_IER_RDI
;
893 tegra_uart_write(tup
, tup
->ier_shadow
,
896 do_handle_rx_pio(tup
);
900 case 3: /* Receive error */
901 tegra_uart_decode_rx_error(tup
,
902 tegra_uart_read(tup
, UART_LSR
));
905 case 5: /* break nothing to handle */
906 case 7: /* break nothing to handle */
912 static void tegra_uart_stop_rx(struct uart_port
*u
)
914 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
915 struct tty_port
*port
= &tup
->uport
.state
->port
;
921 if (!tup
->rx_in_progress
)
924 tegra_uart_wait_sym_time(tup
, 1); /* wait one character interval */
926 ier
= tup
->ier_shadow
;
927 ier
&= ~(UART_IER_RDI
| UART_IER_RLSI
| UART_IER_RTOIE
|
928 TEGRA_UART_IER_EORD
);
929 tup
->ier_shadow
= ier
;
930 tegra_uart_write(tup
, ier
, UART_IER
);
931 tup
->rx_in_progress
= 0;
933 if (!tup
->use_rx_pio
)
934 tegra_uart_terminate_rx_dma(tup
);
936 tegra_uart_handle_rx_pio(tup
, port
);
939 static void tegra_uart_hw_deinit(struct tegra_uart_port
*tup
)
942 unsigned long char_time
= DIV_ROUND_UP(10000000, tup
->current_baud
);
943 unsigned long fifo_empty_time
= tup
->uport
.fifosize
* char_time
;
944 unsigned long wait_time
;
949 /* Disable interrupts */
950 tegra_uart_write(tup
, 0, UART_IER
);
952 lsr
= tegra_uart_read(tup
, UART_LSR
);
953 if ((lsr
& UART_LSR_TEMT
) != UART_LSR_TEMT
) {
954 msr
= tegra_uart_read(tup
, UART_MSR
);
955 mcr
= tegra_uart_read(tup
, UART_MCR
);
956 if ((mcr
& TEGRA_UART_MCR_CTS_EN
) && (msr
& UART_MSR_CTS
))
957 dev_err(tup
->uport
.dev
,
958 "Tx Fifo not empty, CTS disabled, waiting\n");
960 /* Wait for Tx fifo to be empty */
961 while ((lsr
& UART_LSR_TEMT
) != UART_LSR_TEMT
) {
962 wait_time
= min(fifo_empty_time
, 100lu);
964 fifo_empty_time
-= wait_time
;
965 if (!fifo_empty_time
) {
966 msr
= tegra_uart_read(tup
, UART_MSR
);
967 mcr
= tegra_uart_read(tup
, UART_MCR
);
968 if ((mcr
& TEGRA_UART_MCR_CTS_EN
) &&
969 (msr
& UART_MSR_CTS
))
970 dev_err(tup
->uport
.dev
,
971 "Slave not ready\n");
974 lsr
= tegra_uart_read(tup
, UART_LSR
);
978 uart_port_lock_irqsave(&tup
->uport
, &flags
);
979 /* Reset the Rx and Tx FIFOs */
980 tegra_uart_fifo_reset(tup
, UART_FCR_CLEAR_XMIT
| UART_FCR_CLEAR_RCVR
);
981 tup
->current_baud
= 0;
982 uart_port_unlock_irqrestore(&tup
->uport
, flags
);
984 tup
->rx_in_progress
= 0;
985 tup
->tx_in_progress
= 0;
987 if (!tup
->use_rx_pio
)
988 tegra_uart_dma_channel_free(tup
, true);
989 if (!tup
->use_tx_pio
)
990 tegra_uart_dma_channel_free(tup
, false);
992 clk_disable_unprepare(tup
->uart_clk
);
995 static int tegra_uart_hw_init(struct tegra_uart_port
*tup
)
1000 tup
->mcr_shadow
= 0;
1001 tup
->lcr_shadow
= 0;
1002 tup
->ier_shadow
= 0;
1003 tup
->current_baud
= 0;
1005 ret
= clk_prepare_enable(tup
->uart_clk
);
1007 dev_err(tup
->uport
.dev
, "could not enable clk\n");
1011 /* Reset the UART controller to clear all previous status.*/
1012 reset_control_assert(tup
->rst
);
1014 reset_control_deassert(tup
->rst
);
1016 tup
->rx_in_progress
= 0;
1017 tup
->tx_in_progress
= 0;
1020 * Set the trigger level
1024 * For receive, this will interrupt the CPU after that many number of
1025 * bytes are received, for the remaining bytes the receive timeout
1026 * interrupt is received. Rx high watermark is set to 4.
1028 * For transmit, if the trasnmit interrupt is enabled, this will
1029 * interrupt the CPU when the number of entries in the FIFO reaches the
1030 * low watermark. Tx low watermark is set to 16 bytes.
1034 * Set the Tx trigger to 16. This should match the DMA burst size that
1035 * programmed in the DMA registers.
1037 tup
->fcr_shadow
= UART_FCR_ENABLE_FIFO
;
1039 if (tup
->use_rx_pio
) {
1040 tup
->fcr_shadow
|= UART_FCR_R_TRIG_11
;
1042 if (tup
->cdata
->max_dma_burst_bytes
== 8)
1043 tup
->fcr_shadow
|= UART_FCR_R_TRIG_10
;
1045 tup
->fcr_shadow
|= UART_FCR_R_TRIG_01
;
1048 tup
->fcr_shadow
|= TEGRA_UART_TX_TRIG_16B
;
1049 tegra_uart_write(tup
, tup
->fcr_shadow
, UART_FCR
);
1051 /* Dummy read to ensure the write is posted */
1052 tegra_uart_read(tup
, UART_SCR
);
1054 if (tup
->cdata
->fifo_mode_enable_status
) {
1055 ret
= tegra_uart_wait_fifo_mode_enabled(tup
);
1057 clk_disable_unprepare(tup
->uart_clk
);
1058 dev_err(tup
->uport
.dev
,
1059 "Failed to enable FIFO mode: %d\n", ret
);
1064 * For all tegra devices (up to t210), there is a hardware
1065 * issue that requires software to wait for 3 UART clock
1066 * periods after enabling the TX fifo, otherwise data could
1069 tegra_uart_wait_cycle_time(tup
, 3);
1073 * Initialize the UART with default configuration
1074 * (115200, N, 8, 1) so that the receive DMA buffer may be
1077 ret
= tegra_set_baudrate(tup
, TEGRA_UART_DEFAULT_BAUD
);
1079 clk_disable_unprepare(tup
->uart_clk
);
1080 dev_err(tup
->uport
.dev
, "Failed to set baud rate\n");
1083 if (!tup
->use_rx_pio
) {
1084 tup
->lcr_shadow
= TEGRA_UART_DEFAULT_LSR
;
1085 tup
->fcr_shadow
|= UART_FCR_DMA_SELECT
;
1086 tegra_uart_write(tup
, tup
->fcr_shadow
, UART_FCR
);
1088 tegra_uart_write(tup
, tup
->fcr_shadow
, UART_FCR
);
1090 tup
->rx_in_progress
= 1;
1093 * Enable IE_RXS for the receive status interrupts like line errors.
1094 * Enable IE_RX_TIMEOUT to get the bytes which cannot be DMA'd.
1096 * EORD is different interrupt than RX_TIMEOUT - RX_TIMEOUT occurs when
1097 * the DATA is sitting in the FIFO and couldn't be transferred to the
1098 * DMA as the DMA size alignment (4 bytes) is not met. EORD will be
1099 * triggered when there is a pause of the incomming data stream for 4
1102 * For pauses in the data which is not aligned to 4 bytes, we get
1103 * both the EORD as well as RX_TIMEOUT - SW sees RX_TIMEOUT first
1106 tup
->ier_shadow
= UART_IER_RLSI
| UART_IER_RTOIE
| UART_IER_RDI
;
1109 * If using DMA mode, enable EORD interrupt to notify about RX
1112 if (!tup
->use_rx_pio
)
1113 tup
->ier_shadow
|= TEGRA_UART_IER_EORD
;
1115 tegra_uart_write(tup
, tup
->ier_shadow
, UART_IER
);
1119 static void tegra_uart_dma_channel_free(struct tegra_uart_port
*tup
,
1122 if (dma_to_memory
) {
1123 dmaengine_terminate_all(tup
->rx_dma_chan
);
1124 dma_release_channel(tup
->rx_dma_chan
);
1125 dma_free_coherent(tup
->uport
.dev
, TEGRA_UART_RX_DMA_BUFFER_SIZE
,
1126 tup
->rx_dma_buf_virt
, tup
->rx_dma_buf_phys
);
1127 tup
->rx_dma_chan
= NULL
;
1128 tup
->rx_dma_buf_phys
= 0;
1129 tup
->rx_dma_buf_virt
= NULL
;
1131 dmaengine_terminate_all(tup
->tx_dma_chan
);
1132 dma_release_channel(tup
->tx_dma_chan
);
1133 dma_unmap_single(tup
->uport
.dev
, tup
->tx_dma_buf_phys
,
1134 UART_XMIT_SIZE
, DMA_TO_DEVICE
);
1135 tup
->tx_dma_chan
= NULL
;
1136 tup
->tx_dma_buf_phys
= 0;
1137 tup
->tx_dma_buf_virt
= NULL
;
1141 static int tegra_uart_dma_channel_allocate(struct tegra_uart_port
*tup
,
1144 struct dma_chan
*dma_chan
;
1145 unsigned char *dma_buf
;
1146 dma_addr_t dma_phys
;
1148 struct dma_slave_config dma_sconfig
;
1150 dma_chan
= dma_request_chan(tup
->uport
.dev
, dma_to_memory
? "rx" : "tx");
1151 if (IS_ERR(dma_chan
)) {
1152 ret
= PTR_ERR(dma_chan
);
1153 dev_err(tup
->uport
.dev
,
1154 "DMA channel alloc failed: %d\n", ret
);
1158 if (dma_to_memory
) {
1159 dma_buf
= dma_alloc_coherent(tup
->uport
.dev
,
1160 TEGRA_UART_RX_DMA_BUFFER_SIZE
,
1161 &dma_phys
, GFP_KERNEL
);
1163 dev_err(tup
->uport
.dev
,
1164 "Not able to allocate the dma buffer\n");
1165 dma_release_channel(dma_chan
);
1168 dma_sync_single_for_device(tup
->uport
.dev
, dma_phys
,
1169 TEGRA_UART_RX_DMA_BUFFER_SIZE
,
1171 dma_sconfig
.src_addr
= tup
->uport
.mapbase
;
1172 dma_sconfig
.src_addr_width
= DMA_SLAVE_BUSWIDTH_1_BYTE
;
1173 dma_sconfig
.src_maxburst
= tup
->cdata
->max_dma_burst_bytes
;
1174 tup
->rx_dma_chan
= dma_chan
;
1175 tup
->rx_dma_buf_virt
= dma_buf
;
1176 tup
->rx_dma_buf_phys
= dma_phys
;
1178 dma_buf
= tup
->uport
.state
->port
.xmit_buf
;
1179 dma_phys
= dma_map_single(tup
->uport
.dev
,
1180 dma_buf
, UART_XMIT_SIZE
, DMA_TO_DEVICE
);
1181 if (dma_mapping_error(tup
->uport
.dev
, dma_phys
)) {
1182 dev_err(tup
->uport
.dev
, "dma_map_single tx failed\n");
1183 dma_release_channel(dma_chan
);
1186 dma_sconfig
.dst_addr
= tup
->uport
.mapbase
;
1187 dma_sconfig
.dst_addr_width
= DMA_SLAVE_BUSWIDTH_1_BYTE
;
1188 dma_sconfig
.dst_maxburst
= 16;
1189 tup
->tx_dma_chan
= dma_chan
;
1190 tup
->tx_dma_buf_virt
= dma_buf
;
1191 tup
->tx_dma_buf_phys
= dma_phys
;
1194 ret
= dmaengine_slave_config(dma_chan
, &dma_sconfig
);
1196 dev_err(tup
->uport
.dev
,
1197 "Dma slave config failed, err = %d\n", ret
);
1198 tegra_uart_dma_channel_free(tup
, dma_to_memory
);
1205 static int tegra_uart_startup(struct uart_port
*u
)
1207 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
1210 if (!tup
->use_tx_pio
) {
1211 ret
= tegra_uart_dma_channel_allocate(tup
, false);
1213 dev_err(u
->dev
, "Tx Dma allocation failed, err = %d\n",
1219 if (!tup
->use_rx_pio
) {
1220 ret
= tegra_uart_dma_channel_allocate(tup
, true);
1222 dev_err(u
->dev
, "Rx Dma allocation failed, err = %d\n",
1228 ret
= tegra_uart_hw_init(tup
);
1230 dev_err(u
->dev
, "Uart HW init failed, err = %d\n", ret
);
1234 ret
= request_irq(u
->irq
, tegra_uart_isr
, 0,
1235 dev_name(u
->dev
), tup
);
1237 dev_err(u
->dev
, "Failed to register ISR for IRQ %d\n", u
->irq
);
1238 goto fail_request_irq
;
1243 /* tup->uart_clk is already enabled in tegra_uart_hw_init */
1244 clk_disable_unprepare(tup
->uart_clk
);
1246 if (!tup
->use_rx_pio
)
1247 tegra_uart_dma_channel_free(tup
, true);
1249 if (!tup
->use_tx_pio
)
1250 tegra_uart_dma_channel_free(tup
, false);
1255 * Flush any TX data submitted for DMA and PIO. Called when the
1256 * TX circular buffer is reset.
1258 static void tegra_uart_flush_buffer(struct uart_port
*u
)
1260 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
1263 if (tup
->tx_dma_chan
)
1264 dmaengine_terminate_all(tup
->tx_dma_chan
);
1267 static void tegra_uart_shutdown(struct uart_port
*u
)
1269 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
1271 tegra_uart_hw_deinit(tup
);
1272 free_irq(u
->irq
, tup
);
1275 static void tegra_uart_enable_ms(struct uart_port
*u
)
1277 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
1279 if (tup
->enable_modem_interrupt
) {
1280 tup
->ier_shadow
|= UART_IER_MSI
;
1281 tegra_uart_write(tup
, tup
->ier_shadow
, UART_IER
);
1285 static void tegra_uart_set_termios(struct uart_port
*u
,
1286 struct ktermios
*termios
,
1287 const struct ktermios
*oldtermios
)
1289 struct tegra_uart_port
*tup
= to_tegra_uport(u
);
1291 unsigned long flags
;
1293 unsigned char char_bits
;
1294 struct clk
*parent_clk
= clk_get_parent(tup
->uart_clk
);
1295 unsigned long parent_clk_rate
= clk_get_rate(parent_clk
);
1296 int max_divider
= (tup
->cdata
->support_clk_src_div
) ? 0x7FFF : 0xFFFF;
1300 uart_port_lock_irqsave(u
, &flags
);
1302 /* Changing configuration, it is safe to stop any rx now */
1303 if (tup
->rts_active
)
1304 set_rts(tup
, false);
1306 /* Clear all interrupts as configuration is going to be changed */
1307 tegra_uart_write(tup
, tup
->ier_shadow
| UART_IER_RDI
, UART_IER
);
1308 tegra_uart_read(tup
, UART_IER
);
1309 tegra_uart_write(tup
, 0, UART_IER
);
1310 tegra_uart_read(tup
, UART_IER
);
1313 lcr
= tup
->lcr_shadow
;
1314 lcr
&= ~UART_LCR_PARITY
;
1316 /* CMSPAR isn't supported by this driver */
1317 termios
->c_cflag
&= ~CMSPAR
;
1319 if ((termios
->c_cflag
& PARENB
) == PARENB
) {
1320 if (termios
->c_cflag
& PARODD
) {
1321 lcr
|= UART_LCR_PARITY
;
1322 lcr
&= ~UART_LCR_EPAR
;
1323 lcr
&= ~UART_LCR_SPAR
;
1325 lcr
|= UART_LCR_PARITY
;
1326 lcr
|= UART_LCR_EPAR
;
1327 lcr
&= ~UART_LCR_SPAR
;
1331 char_bits
= tty_get_char_size(termios
->c_cflag
);
1332 lcr
&= ~UART_LCR_WLEN8
;
1333 lcr
|= UART_LCR_WLEN(char_bits
);
1336 if (termios
->c_cflag
& CSTOPB
)
1337 lcr
|= UART_LCR_STOP
;
1339 lcr
&= ~UART_LCR_STOP
;
1341 tegra_uart_write(tup
, lcr
, UART_LCR
);
1342 tup
->lcr_shadow
= lcr
;
1343 tup
->symb_bit
= tty_get_frame_size(termios
->c_cflag
);
1346 baud
= uart_get_baud_rate(u
, termios
, oldtermios
,
1347 parent_clk_rate
/max_divider
,
1348 parent_clk_rate
/16);
1349 uart_port_unlock_irqrestore(u
, flags
);
1350 ret
= tegra_set_baudrate(tup
, baud
);
1352 dev_err(tup
->uport
.dev
, "Failed to set baud rate\n");
1355 if (tty_termios_baud_rate(termios
))
1356 tty_termios_encode_baud_rate(termios
, baud
, baud
);
1357 uart_port_lock_irqsave(u
, &flags
);
1360 if (termios
->c_cflag
& CRTSCTS
) {
1361 tup
->mcr_shadow
|= TEGRA_UART_MCR_CTS_EN
;
1362 tup
->mcr_shadow
&= ~TEGRA_UART_MCR_RTS_EN
;
1363 tegra_uart_write(tup
, tup
->mcr_shadow
, UART_MCR
);
1364 /* if top layer has asked to set rts active then do so here */
1365 if (tup
->rts_active
)
1368 tup
->mcr_shadow
&= ~TEGRA_UART_MCR_CTS_EN
;
1369 tup
->mcr_shadow
&= ~TEGRA_UART_MCR_RTS_EN
;
1370 tegra_uart_write(tup
, tup
->mcr_shadow
, UART_MCR
);
1373 /* update the port timeout based on new settings */
1374 uart_update_timeout(u
, termios
->c_cflag
, baud
);
1376 /* Make sure all writes have completed */
1377 tegra_uart_read(tup
, UART_IER
);
1379 /* Re-enable interrupt */
1380 tegra_uart_write(tup
, tup
->ier_shadow
, UART_IER
);
1381 tegra_uart_read(tup
, UART_IER
);
1383 tup
->uport
.ignore_status_mask
= 0;
1384 /* Ignore all characters if CREAD is not set */
1385 if ((termios
->c_cflag
& CREAD
) == 0)
1386 tup
->uport
.ignore_status_mask
|= UART_LSR_DR
;
1387 if (termios
->c_iflag
& IGNBRK
)
1388 tup
->uport
.ignore_status_mask
|= UART_LSR_BI
;
1390 uart_port_unlock_irqrestore(u
, flags
);
1393 static const char *tegra_uart_type(struct uart_port
*u
)
1395 return TEGRA_UART_TYPE
;
1398 static const struct uart_ops tegra_uart_ops
= {
1399 .tx_empty
= tegra_uart_tx_empty
,
1400 .set_mctrl
= tegra_uart_set_mctrl
,
1401 .get_mctrl
= tegra_uart_get_mctrl
,
1402 .stop_tx
= tegra_uart_stop_tx
,
1403 .start_tx
= tegra_uart_start_tx
,
1404 .stop_rx
= tegra_uart_stop_rx
,
1405 .flush_buffer
= tegra_uart_flush_buffer
,
1406 .enable_ms
= tegra_uart_enable_ms
,
1407 .break_ctl
= tegra_uart_break_ctl
,
1408 .startup
= tegra_uart_startup
,
1409 .shutdown
= tegra_uart_shutdown
,
1410 .set_termios
= tegra_uart_set_termios
,
1411 .type
= tegra_uart_type
,
1412 .request_port
= tegra_uart_request_port
,
1413 .release_port
= tegra_uart_release_port
,
1416 static struct uart_driver tegra_uart_driver
= {
1417 .owner
= THIS_MODULE
,
1418 .driver_name
= "tegra_hsuart",
1419 .dev_name
= "ttyTHS",
1421 .nr
= TEGRA_UART_MAXIMUM
,
1424 static int tegra_uart_parse_dt(struct platform_device
*pdev
,
1425 struct tegra_uart_port
*tup
)
1427 struct device_node
*np
= pdev
->dev
.of_node
;
1435 port
= of_alias_get_id(np
, "serial");
1437 dev_err(&pdev
->dev
, "failed to get alias id, errno %d\n", port
);
1440 tup
->uport
.line
= port
;
1442 tup
->enable_modem_interrupt
= of_property_read_bool(np
,
1443 "nvidia,enable-modem-interrupt");
1445 index
= of_property_match_string(np
, "dma-names", "rx");
1447 tup
->use_rx_pio
= true;
1448 dev_info(&pdev
->dev
, "RX in PIO mode\n");
1450 index
= of_property_match_string(np
, "dma-names", "tx");
1452 tup
->use_tx_pio
= true;
1453 dev_info(&pdev
->dev
, "TX in PIO mode\n");
1456 n_entries
= of_property_count_u32_elems(np
, "nvidia,adjust-baud-rates");
1457 if (n_entries
> 0) {
1458 tup
->n_adjustable_baud_rates
= n_entries
/ 3;
1459 tup
->baud_tolerance
=
1460 devm_kzalloc(&pdev
->dev
, (tup
->n_adjustable_baud_rates
) *
1461 sizeof(*tup
->baud_tolerance
), GFP_KERNEL
);
1462 if (!tup
->baud_tolerance
)
1464 for (count
= 0, index
= 0; count
< n_entries
; count
+= 3,
1467 of_property_read_u32_index(np
,
1468 "nvidia,adjust-baud-rates",
1471 tup
->baud_tolerance
[index
].lower_range_baud
=
1474 of_property_read_u32_index(np
,
1475 "nvidia,adjust-baud-rates",
1478 tup
->baud_tolerance
[index
].upper_range_baud
=
1481 of_property_read_u32_index(np
,
1482 "nvidia,adjust-baud-rates",
1485 tup
->baud_tolerance
[index
].tolerance
=
1489 tup
->n_adjustable_baud_rates
= 0;
1495 static struct tegra_uart_chip_data tegra20_uart_chip_data
= {
1496 .tx_fifo_full_status
= false,
1497 .allow_txfifo_reset_fifo_mode
= true,
1498 .support_clk_src_div
= false,
1499 .fifo_mode_enable_status
= false,
1501 .max_dma_burst_bytes
= 4,
1502 .error_tolerance_low_range
= -4,
1503 .error_tolerance_high_range
= 4,
1506 static struct tegra_uart_chip_data tegra30_uart_chip_data
= {
1507 .tx_fifo_full_status
= true,
1508 .allow_txfifo_reset_fifo_mode
= false,
1509 .support_clk_src_div
= true,
1510 .fifo_mode_enable_status
= false,
1512 .max_dma_burst_bytes
= 4,
1513 .error_tolerance_low_range
= -4,
1514 .error_tolerance_high_range
= 4,
1517 static struct tegra_uart_chip_data tegra186_uart_chip_data
= {
1518 .tx_fifo_full_status
= true,
1519 .allow_txfifo_reset_fifo_mode
= false,
1520 .support_clk_src_div
= true,
1521 .fifo_mode_enable_status
= true,
1523 .max_dma_burst_bytes
= 8,
1524 .error_tolerance_low_range
= 0,
1525 .error_tolerance_high_range
= 4,
1528 static struct tegra_uart_chip_data tegra194_uart_chip_data
= {
1529 .tx_fifo_full_status
= true,
1530 .allow_txfifo_reset_fifo_mode
= false,
1531 .support_clk_src_div
= true,
1532 .fifo_mode_enable_status
= true,
1534 .max_dma_burst_bytes
= 8,
1535 .error_tolerance_low_range
= -2,
1536 .error_tolerance_high_range
= 2,
1539 static const struct of_device_id tegra_uart_of_match
[] = {
1541 .compatible
= "nvidia,tegra30-hsuart",
1542 .data
= &tegra30_uart_chip_data
,
1544 .compatible
= "nvidia,tegra20-hsuart",
1545 .data
= &tegra20_uart_chip_data
,
1547 .compatible
= "nvidia,tegra186-hsuart",
1548 .data
= &tegra186_uart_chip_data
,
1550 .compatible
= "nvidia,tegra194-hsuart",
1551 .data
= &tegra194_uart_chip_data
,
1555 MODULE_DEVICE_TABLE(of
, tegra_uart_of_match
);
1557 static int tegra_uart_probe(struct platform_device
*pdev
)
1559 struct tegra_uart_port
*tup
;
1560 struct uart_port
*u
;
1561 struct resource
*resource
;
1563 const struct tegra_uart_chip_data
*cdata
;
1565 cdata
= of_device_get_match_data(&pdev
->dev
);
1567 dev_err(&pdev
->dev
, "Error: No device match found\n");
1571 tup
= devm_kzalloc(&pdev
->dev
, sizeof(*tup
), GFP_KERNEL
);
1573 dev_err(&pdev
->dev
, "Failed to allocate memory for tup\n");
1577 ret
= tegra_uart_parse_dt(pdev
, tup
);
1582 u
->dev
= &pdev
->dev
;
1583 u
->ops
= &tegra_uart_ops
;
1584 u
->type
= PORT_TEGRA
;
1588 platform_set_drvdata(pdev
, tup
);
1590 u
->membase
= devm_platform_get_and_ioremap_resource(pdev
, 0, &resource
);
1591 if (IS_ERR(u
->membase
))
1592 return PTR_ERR(u
->membase
);
1593 u
->mapbase
= resource
->start
;
1595 tup
->uart_clk
= devm_clk_get(&pdev
->dev
, NULL
);
1596 if (IS_ERR(tup
->uart_clk
))
1597 return dev_err_probe(&pdev
->dev
, PTR_ERR(tup
->uart_clk
), "Couldn't get the clock");
1599 tup
->rst
= devm_reset_control_get_exclusive(&pdev
->dev
, "serial");
1600 if (IS_ERR(tup
->rst
)) {
1601 dev_err(&pdev
->dev
, "Couldn't get the reset\n");
1602 return PTR_ERR(tup
->rst
);
1605 u
->iotype
= UPIO_MEM32
;
1606 ret
= platform_get_irq(pdev
, 0);
1611 ret
= uart_add_one_port(&tegra_uart_driver
, u
);
1613 dev_err(&pdev
->dev
, "Failed to add uart port, err %d\n", ret
);
1619 static void tegra_uart_remove(struct platform_device
*pdev
)
1621 struct tegra_uart_port
*tup
= platform_get_drvdata(pdev
);
1622 struct uart_port
*u
= &tup
->uport
;
1624 uart_remove_one_port(&tegra_uart_driver
, u
);
1627 #ifdef CONFIG_PM_SLEEP
1628 static int tegra_uart_suspend(struct device
*dev
)
1630 struct tegra_uart_port
*tup
= dev_get_drvdata(dev
);
1631 struct uart_port
*u
= &tup
->uport
;
1633 return uart_suspend_port(&tegra_uart_driver
, u
);
1636 static int tegra_uart_resume(struct device
*dev
)
1638 struct tegra_uart_port
*tup
= dev_get_drvdata(dev
);
1639 struct uart_port
*u
= &tup
->uport
;
1641 return uart_resume_port(&tegra_uart_driver
, u
);
1645 static const struct dev_pm_ops tegra_uart_pm_ops
= {
1646 SET_SYSTEM_SLEEP_PM_OPS(tegra_uart_suspend
, tegra_uart_resume
)
1649 static struct platform_driver tegra_uart_platform_driver
= {
1650 .probe
= tegra_uart_probe
,
1651 .remove
= tegra_uart_remove
,
1653 .name
= "serial-tegra",
1654 .of_match_table
= tegra_uart_of_match
,
1655 .pm
= &tegra_uart_pm_ops
,
1659 static int __init
tegra_uart_init(void)
1662 struct device_node
*node
;
1663 const struct of_device_id
*match
= NULL
;
1664 const struct tegra_uart_chip_data
*cdata
= NULL
;
1666 node
= of_find_matching_node(NULL
, tegra_uart_of_match
);
1668 match
= of_match_node(tegra_uart_of_match
, node
);
1671 cdata
= match
->data
;
1673 tegra_uart_driver
.nr
= cdata
->uart_max_port
;
1675 ret
= uart_register_driver(&tegra_uart_driver
);
1677 pr_err("Could not register %s driver\n",
1678 tegra_uart_driver
.driver_name
);
1682 ret
= platform_driver_register(&tegra_uart_platform_driver
);
1684 pr_err("Uart platform driver register failed, e = %d\n", ret
);
1685 uart_unregister_driver(&tegra_uart_driver
);
1691 static void __exit
tegra_uart_exit(void)
1693 pr_info("Unloading tegra uart driver\n");
1694 platform_driver_unregister(&tegra_uart_platform_driver
);
1695 uart_unregister_driver(&tegra_uart_driver
);
1698 module_init(tegra_uart_init
);
1699 module_exit(tegra_uart_exit
);
1701 MODULE_ALIAS("platform:serial-tegra");
1702 MODULE_DESCRIPTION("High speed UART driver for tegra chipset");
1703 MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
1704 MODULE_LICENSE("GPL v2");