Lines Matching refs:port

67 static void atmel_start_rx(struct uart_port *port);
68 static void atmel_stop_rx(struct uart_port *port);
92 #define UART_PUT_CR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_CR) argument
93 #define UART_GET_MR(port) __raw_readl((port)->membase + ATMEL_US_MR) argument
94 #define UART_PUT_MR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_MR) argument
95 #define UART_PUT_IER(port,v) __raw_writel(v, (port)->membase + ATMEL_US_IER) argument
96 #define UART_PUT_IDR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_IDR) argument
97 #define UART_GET_IMR(port) __raw_readl((port)->membase + ATMEL_US_IMR) argument
98 #define UART_GET_CSR(port) __raw_readl((port)->membase + ATMEL_US_CSR) argument
99 #define UART_GET_CHAR(port) __raw_readl((port)->membase + ATMEL_US_RHR) argument
100 #define UART_PUT_CHAR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_THR) argument
101 #define UART_GET_BRGR(port) __raw_readl((port)->membase + ATMEL_US_BRGR) argument
102 #define UART_PUT_BRGR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_BRGR) argument
103 #define UART_PUT_RTOR(port,v) __raw_writel(v, (port)->membase + ATMEL_US_RTOR) argument
104 #define UART_PUT_TTGR(port, v) __raw_writel(v, (port)->membase + ATMEL_US_TTGR) argument
105 #define UART_GET_IP_NAME(port) __raw_readl((port)->membase + ATMEL_US_NAME) argument
106 #define UART_GET_IP_VERSION(port) __raw_readl((port)->membase + ATMEL_US_VERSION) argument
109 #define UART_PUT_PTCR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_PTCR) argument
110 #define UART_GET_PTSR(port) __raw_readl((port)->membase + ATMEL_PDC_PTSR) argument
112 #define UART_PUT_RPR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_RPR) argument
113 #define UART_GET_RPR(port) __raw_readl((port)->membase + ATMEL_PDC_RPR) argument
114 #define UART_PUT_RCR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_RCR) argument
115 #define UART_PUT_RNPR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_RNPR) argument
116 #define UART_PUT_RNCR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_RNCR) argument
118 #define UART_PUT_TPR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_TPR) argument
119 #define UART_PUT_TCR(port,v) __raw_writel(v, (port)->membase + ATMEL_PDC_TCR) argument
120 #define UART_GET_TCR(port) __raw_readl((port)->membase + ATMEL_PDC_TCR) argument
183 int (*prepare_rx)(struct uart_port *port);
184 int (*prepare_tx)(struct uart_port *port);
185 void (*schedule_rx)(struct uart_port *port);
186 void (*schedule_tx)(struct uart_port *port);
187 void (*release_rx)(struct uart_port *port);
188 void (*release_tx)(struct uart_port *port);
215 static bool atmel_use_pdc_rx(struct uart_port *port) in atmel_use_pdc_rx() argument
217 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_pdc_rx()
222 static bool atmel_use_pdc_tx(struct uart_port *port) in atmel_use_pdc_tx() argument
224 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_pdc_tx()
229 static bool atmel_use_pdc_rx(struct uart_port *port) in atmel_use_pdc_rx() argument
234 static bool atmel_use_pdc_tx(struct uart_port *port) in atmel_use_pdc_tx() argument
240 static bool atmel_use_dma_tx(struct uart_port *port) in atmel_use_dma_tx() argument
242 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_tx()
247 static bool atmel_use_dma_rx(struct uart_port *port) in atmel_use_dma_rx() argument
249 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_use_dma_rx()
254 static unsigned int atmel_get_lines_status(struct uart_port *port) in atmel_get_lines_status() argument
256 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_lines_status()
259 status = UART_GET_CSR(port); in atmel_get_lines_status()
299 static int atmel_config_rs485(struct uart_port *port, in atmel_config_rs485() argument
302 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_config_rs485()
306 UART_PUT_IDR(port, atmel_port->tx_done_mask); in atmel_config_rs485()
308 mode = UART_GET_MR(port); in atmel_config_rs485()
313 port->rs485 = *rs485conf; in atmel_config_rs485()
316 dev_dbg(port->dev, "Setting UART to RS485\n"); in atmel_config_rs485()
318 UART_PUT_TTGR(port, rs485conf->delay_rts_after_send); in atmel_config_rs485()
321 dev_dbg(port->dev, "Setting UART to RS232\n"); in atmel_config_rs485()
322 if (atmel_use_pdc_tx(port)) in atmel_config_rs485()
328 UART_PUT_MR(port, mode); in atmel_config_rs485()
331 UART_PUT_IER(port, atmel_port->tx_done_mask); in atmel_config_rs485()
339 static u_int atmel_tx_empty(struct uart_port *port) in atmel_tx_empty() argument
341 return (UART_GET_CSR(port) & ATMEL_US_TXEMPTY) ? TIOCSER_TEMT : 0; in atmel_tx_empty()
347 static void atmel_set_mctrl(struct uart_port *port, u_int mctrl) in atmel_set_mctrl() argument
350 unsigned int mode = UART_GET_MR(port); in atmel_set_mctrl()
352 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_mctrl()
355 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_set_mctrl()
356 UART_PUT_TTGR(port, port->rs485.delay_rts_after_send); in atmel_set_mctrl()
386 UART_PUT_CR(port, control); in atmel_set_mctrl()
397 UART_PUT_MR(port, mode); in atmel_set_mctrl()
403 static u_int atmel_get_mctrl(struct uart_port *port) in atmel_get_mctrl() argument
405 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_mctrl()
408 status = UART_GET_CSR(port); in atmel_get_mctrl()
428 static void atmel_stop_tx(struct uart_port *port) in atmel_stop_tx() argument
430 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_stop_tx()
432 if (atmel_use_pdc_tx(port)) { in atmel_stop_tx()
434 UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); in atmel_stop_tx()
437 UART_PUT_IDR(port, atmel_port->tx_done_mask); in atmel_stop_tx()
439 if ((port->rs485.flags & SER_RS485_ENABLED) && in atmel_stop_tx()
440 !(port->rs485.flags & SER_RS485_RX_DURING_TX)) in atmel_stop_tx()
441 atmel_start_rx(port); in atmel_stop_tx()
447 static void atmel_start_tx(struct uart_port *port) in atmel_start_tx() argument
449 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_start_tx()
451 if (atmel_use_pdc_tx(port)) { in atmel_start_tx()
452 if (UART_GET_PTSR(port) & ATMEL_PDC_TXTEN) in atmel_start_tx()
457 if ((port->rs485.flags & SER_RS485_ENABLED) && in atmel_start_tx()
458 !(port->rs485.flags & SER_RS485_RX_DURING_TX)) in atmel_start_tx()
459 atmel_stop_rx(port); in atmel_start_tx()
462 UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); in atmel_start_tx()
465 UART_PUT_IER(port, atmel_port->tx_done_mask); in atmel_start_tx()
471 static void atmel_start_rx(struct uart_port *port) in atmel_start_rx() argument
473 UART_PUT_CR(port, ATMEL_US_RSTSTA); /* reset status and receiver */ in atmel_start_rx()
475 UART_PUT_CR(port, ATMEL_US_RXEN); in atmel_start_rx()
477 if (atmel_use_pdc_rx(port)) { in atmel_start_rx()
479 UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT | in atmel_start_rx()
480 port->read_status_mask); in atmel_start_rx()
481 UART_PUT_PTCR(port, ATMEL_PDC_RXTEN); in atmel_start_rx()
483 UART_PUT_IER(port, ATMEL_US_RXRDY); in atmel_start_rx()
490 static void atmel_stop_rx(struct uart_port *port) in atmel_stop_rx() argument
492 UART_PUT_CR(port, ATMEL_US_RXDIS); in atmel_stop_rx()
494 if (atmel_use_pdc_rx(port)) { in atmel_stop_rx()
496 UART_PUT_PTCR(port, ATMEL_PDC_RXTDIS); in atmel_stop_rx()
497 UART_PUT_IDR(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT | in atmel_stop_rx()
498 port->read_status_mask); in atmel_stop_rx()
500 UART_PUT_IDR(port, ATMEL_US_RXRDY); in atmel_stop_rx()
507 static void atmel_enable_ms(struct uart_port *port) in atmel_enable_ms() argument
509 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_enable_ms()
540 UART_PUT_IER(port, ier); in atmel_enable_ms()
546 static void atmel_disable_ms(struct uart_port *port) in atmel_disable_ms() argument
548 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_disable_ms()
579 UART_PUT_IDR(port, idr); in atmel_disable_ms()
585 static void atmel_break_ctl(struct uart_port *port, int break_state) in atmel_break_ctl() argument
588 UART_PUT_CR(port, ATMEL_US_STTBRK); /* start break */ in atmel_break_ctl()
590 UART_PUT_CR(port, ATMEL_US_STPBRK); /* stop break */ in atmel_break_ctl()
597 atmel_buffer_rx_char(struct uart_port *port, unsigned int status, in atmel_buffer_rx_char() argument
600 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_buffer_rx_char()
621 static void atmel_pdc_rxerr(struct uart_port *port, unsigned int status) in atmel_pdc_rxerr() argument
624 UART_PUT_CR(port, ATMEL_US_RSTSTA); in atmel_pdc_rxerr()
629 port->icount.brk++; in atmel_pdc_rxerr()
632 port->icount.parity++; in atmel_pdc_rxerr()
634 port->icount.frame++; in atmel_pdc_rxerr()
636 port->icount.overrun++; in atmel_pdc_rxerr()
642 static void atmel_rx_chars(struct uart_port *port) in atmel_rx_chars() argument
644 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_chars()
647 status = UART_GET_CSR(port); in atmel_rx_chars()
649 ch = UART_GET_CHAR(port); in atmel_rx_chars()
660 UART_PUT_CR(port, ATMEL_US_RSTSTA); in atmel_rx_chars()
665 UART_PUT_IER(port, ATMEL_US_RXBRK); in atmel_rx_chars()
674 UART_PUT_IDR(port, ATMEL_US_RXBRK); in atmel_rx_chars()
680 atmel_buffer_rx_char(port, status, ch); in atmel_rx_chars()
681 status = UART_GET_CSR(port); in atmel_rx_chars()
691 static void atmel_tx_chars(struct uart_port *port) in atmel_tx_chars() argument
693 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_chars()
694 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_chars()
696 if (port->x_char && UART_GET_CSR(port) & atmel_port->tx_done_mask) { in atmel_tx_chars()
697 UART_PUT_CHAR(port, port->x_char); in atmel_tx_chars()
698 port->icount.tx++; in atmel_tx_chars()
699 port->x_char = 0; in atmel_tx_chars()
701 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) in atmel_tx_chars()
704 while (UART_GET_CSR(port) & atmel_port->tx_done_mask) { in atmel_tx_chars()
705 UART_PUT_CHAR(port, xmit->buf[xmit->tail]); in atmel_tx_chars()
707 port->icount.tx++; in atmel_tx_chars()
713 uart_write_wakeup(port); in atmel_tx_chars()
717 UART_PUT_IER(port, atmel_port->tx_done_mask); in atmel_tx_chars()
723 struct uart_port *port = &atmel_port->uart; in atmel_complete_tx_dma() local
724 struct circ_buf *xmit = &port->state->xmit; in atmel_complete_tx_dma()
728 spin_lock_irqsave(&port->lock, flags); in atmel_complete_tx_dma()
735 port->icount.tx += sg_dma_len(&atmel_port->sg_tx); in atmel_complete_tx_dma()
744 uart_write_wakeup(port); in atmel_complete_tx_dma()
754 spin_unlock_irqrestore(&port->lock, flags); in atmel_complete_tx_dma()
757 static void atmel_release_tx_dma(struct uart_port *port) in atmel_release_tx_dma() argument
759 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_tx_dma()
765 dma_unmap_sg(port->dev, &atmel_port->sg_tx, 1, in atmel_release_tx_dma()
777 static void atmel_tx_dma(struct uart_port *port) in atmel_tx_dma() argument
779 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_dma()
780 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_dma()
789 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { in atmel_tx_dma()
815 dev_err(port->dev, "Failed to send via dma!\n"); in atmel_tx_dma()
819 dma_sync_sg_for_device(port->dev, sg, 1, DMA_TO_DEVICE); in atmel_tx_dma()
827 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_tx_dma()
829 atmel_start_rx(port); in atmel_tx_dma()
834 uart_write_wakeup(port); in atmel_tx_dma()
837 static int atmel_prepare_tx_dma(struct uart_port *port) in atmel_prepare_tx_dma() argument
839 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_tx_dma()
847 atmel_port->chan_tx = dma_request_slave_channel(port->dev, "tx"); in atmel_prepare_tx_dma()
850 dev_info(port->dev, "using %s for tx DMA transfers\n", in atmel_prepare_tx_dma()
856 BUG_ON(!PAGE_ALIGNED(port->state->xmit.buf)); in atmel_prepare_tx_dma()
858 virt_to_page(port->state->xmit.buf), in atmel_prepare_tx_dma()
860 (int)port->state->xmit.buf & ~PAGE_MASK); in atmel_prepare_tx_dma()
861 nent = dma_map_sg(port->dev, in atmel_prepare_tx_dma()
867 dev_dbg(port->dev, "need to release resource of dma\n"); in atmel_prepare_tx_dma()
870 dev_dbg(port->dev, "%s: mapped %d@%p to %x\n", __func__, in atmel_prepare_tx_dma()
872 port->state->xmit.buf, in atmel_prepare_tx_dma()
880 config.dst_addr = port->mapbase + ATMEL_US_THR; in atmel_prepare_tx_dma()
886 dev_err(port->dev, "DMA tx slave configuration failed\n"); in atmel_prepare_tx_dma()
893 dev_err(port->dev, "TX channel not available, switch to pio\n"); in atmel_prepare_tx_dma()
896 atmel_release_tx_dma(port); in atmel_prepare_tx_dma()
902 struct uart_port *port = arg; in atmel_complete_rx_dma() local
903 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_complete_rx_dma()
908 static void atmel_release_rx_dma(struct uart_port *port) in atmel_release_rx_dma() argument
910 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_rx_dma()
916 dma_unmap_sg(port->dev, &atmel_port->sg_rx, 1, in atmel_release_rx_dma()
925 static void atmel_rx_from_dma(struct uart_port *port) in atmel_rx_from_dma() argument
927 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_dma()
928 struct tty_port *tport = &port->state->port; in atmel_rx_from_dma()
937 UART_PUT_CR(port, ATMEL_US_STTTO); in atmel_rx_from_dma()
943 dev_dbg(port->dev, "Get residue error, restart tasklet\n"); in atmel_rx_from_dma()
944 UART_PUT_IER(port, ATMEL_US_TIMEOUT); in atmel_rx_from_dma()
950 dma_sync_sg_for_cpu(port->dev, in atmel_rx_from_dma()
981 port->icount.rx += count; in atmel_rx_from_dma()
993 port->icount.rx += count; in atmel_rx_from_dma()
997 dma_sync_sg_for_device(port->dev, in atmel_rx_from_dma()
1006 spin_unlock(&port->lock); in atmel_rx_from_dma()
1008 spin_lock(&port->lock); in atmel_rx_from_dma()
1010 UART_PUT_IER(port, ATMEL_US_TIMEOUT); in atmel_rx_from_dma()
1013 static int atmel_prepare_rx_dma(struct uart_port *port) in atmel_prepare_rx_dma() argument
1015 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_rx_dma()
1027 atmel_port->chan_rx = dma_request_slave_channel(port->dev, "rx"); in atmel_prepare_rx_dma()
1030 dev_info(port->dev, "using %s for rx DMA transfers\n", in atmel_prepare_rx_dma()
1041 nent = dma_map_sg(port->dev, in atmel_prepare_rx_dma()
1047 dev_dbg(port->dev, "need to release resource of dma\n"); in atmel_prepare_rx_dma()
1050 dev_dbg(port->dev, "%s: mapped %d@%p to %x\n", __func__, in atmel_prepare_rx_dma()
1060 config.src_addr = port->mapbase + ATMEL_US_RHR; in atmel_prepare_rx_dma()
1066 dev_err(port->dev, "DMA rx slave configuration failed\n"); in atmel_prepare_rx_dma()
1080 desc->callback_param = port; in atmel_prepare_rx_dma()
1087 dev_err(port->dev, "RX channel not available, switch to pio\n"); in atmel_prepare_rx_dma()
1090 atmel_release_rx_dma(port); in atmel_prepare_rx_dma()
1096 struct uart_port *port = (void *)data; in atmel_uart_timer_callback() local
1097 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_uart_timer_callback()
1100 mod_timer(&atmel_port->uart_timer, jiffies + uart_poll_timeout(port)); in atmel_uart_timer_callback()
1107 atmel_handle_receive(struct uart_port *port, unsigned int pending) in atmel_handle_receive() argument
1109 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_receive()
1111 if (atmel_use_pdc_rx(port)) { in atmel_handle_receive()
1120 UART_PUT_IDR(port, (ATMEL_US_ENDRX in atmel_handle_receive()
1127 atmel_pdc_rxerr(port, pending); in atmel_handle_receive()
1130 if (atmel_use_dma_rx(port)) { in atmel_handle_receive()
1132 UART_PUT_IDR(port, ATMEL_US_TIMEOUT); in atmel_handle_receive()
1139 atmel_rx_chars(port); in atmel_handle_receive()
1145 UART_PUT_CR(port, ATMEL_US_RSTSTA); in atmel_handle_receive()
1146 UART_PUT_IDR(port, ATMEL_US_RXBRK); in atmel_handle_receive()
1155 atmel_handle_transmit(struct uart_port *port, unsigned int pending) in atmel_handle_transmit() argument
1157 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_transmit()
1161 UART_PUT_IDR(port, atmel_port->tx_done_mask); in atmel_handle_transmit()
1170 atmel_handle_status(struct uart_port *port, unsigned int pending, in atmel_handle_status() argument
1173 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_handle_status()
1187 struct uart_port *port = dev_id; in atmel_interrupt() local
1188 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_interrupt()
1195 status = atmel_get_lines_status(port); in atmel_interrupt()
1196 mask = UART_GET_IMR(port); in atmel_interrupt()
1222 UART_PUT_IDR(port, mask); in atmel_interrupt()
1227 atmel_handle_receive(port, pending); in atmel_interrupt()
1228 atmel_handle_status(port, pending, status); in atmel_interrupt()
1229 atmel_handle_transmit(port, pending); in atmel_interrupt()
1237 static void atmel_release_tx_pdc(struct uart_port *port) in atmel_release_tx_pdc() argument
1239 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_tx_pdc()
1242 dma_unmap_single(port->dev, in atmel_release_tx_pdc()
1251 static void atmel_tx_pdc(struct uart_port *port) in atmel_tx_pdc() argument
1253 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tx_pdc()
1254 struct circ_buf *xmit = &port->state->xmit; in atmel_tx_pdc()
1259 if (UART_GET_TCR(port)) in atmel_tx_pdc()
1265 port->icount.tx += pdc->ofs; in atmel_tx_pdc()
1271 UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); in atmel_tx_pdc()
1273 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { in atmel_tx_pdc()
1274 dma_sync_single_for_device(port->dev, in atmel_tx_pdc()
1282 UART_PUT_TPR(port, pdc->dma_addr + xmit->tail); in atmel_tx_pdc()
1283 UART_PUT_TCR(port, count); in atmel_tx_pdc()
1285 UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); in atmel_tx_pdc()
1287 UART_PUT_IER(port, atmel_port->tx_done_mask); in atmel_tx_pdc()
1289 if ((port->rs485.flags & SER_RS485_ENABLED) && in atmel_tx_pdc()
1290 !(port->rs485.flags & SER_RS485_RX_DURING_TX)) { in atmel_tx_pdc()
1292 atmel_start_rx(port); in atmel_tx_pdc()
1297 uart_write_wakeup(port); in atmel_tx_pdc()
1300 static int atmel_prepare_tx_pdc(struct uart_port *port) in atmel_prepare_tx_pdc() argument
1302 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_tx_pdc()
1304 struct circ_buf *xmit = &port->state->xmit; in atmel_prepare_tx_pdc()
1307 pdc->dma_addr = dma_map_single(port->dev, in atmel_prepare_tx_pdc()
1317 static void atmel_rx_from_ring(struct uart_port *port) in atmel_rx_from_ring() argument
1319 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_ring()
1334 port->icount.rx++; in atmel_rx_from_ring()
1348 port->icount.brk++; in atmel_rx_from_ring()
1349 if (uart_handle_break(port)) in atmel_rx_from_ring()
1353 port->icount.parity++; in atmel_rx_from_ring()
1355 port->icount.frame++; in atmel_rx_from_ring()
1357 port->icount.overrun++; in atmel_rx_from_ring()
1359 status &= port->read_status_mask; in atmel_rx_from_ring()
1370 if (uart_handle_sysrq_char(port, c.ch)) in atmel_rx_from_ring()
1373 uart_insert_char(port, status, ATMEL_US_OVRE, c.ch, flg); in atmel_rx_from_ring()
1380 spin_unlock(&port->lock); in atmel_rx_from_ring()
1381 tty_flip_buffer_push(&port->state->port); in atmel_rx_from_ring()
1382 spin_lock(&port->lock); in atmel_rx_from_ring()
1385 static void atmel_release_rx_pdc(struct uart_port *port) in atmel_release_rx_pdc() argument
1387 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_release_rx_pdc()
1393 dma_unmap_single(port->dev, in atmel_release_rx_pdc()
1401 static void atmel_rx_from_pdc(struct uart_port *port) in atmel_rx_from_pdc() argument
1403 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_rx_from_pdc()
1404 struct tty_port *tport = &port->state->port; in atmel_rx_from_pdc()
1413 UART_PUT_CR(port, ATMEL_US_STTTO); in atmel_rx_from_pdc()
1416 head = UART_GET_RPR(port) - pdc->dma_addr; in atmel_rx_from_pdc()
1432 dma_sync_single_for_cpu(port->dev, pdc->dma_addr, in atmel_rx_from_pdc()
1446 dma_sync_single_for_device(port->dev, pdc->dma_addr, in atmel_rx_from_pdc()
1449 port->icount.rx += count; in atmel_rx_from_pdc()
1459 UART_PUT_RNPR(port, pdc->dma_addr); in atmel_rx_from_pdc()
1460 UART_PUT_RNCR(port, pdc->dma_size); in atmel_rx_from_pdc()
1471 spin_unlock(&port->lock); in atmel_rx_from_pdc()
1473 spin_lock(&port->lock); in atmel_rx_from_pdc()
1475 UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT); in atmel_rx_from_pdc()
1478 static int atmel_prepare_rx_pdc(struct uart_port *port) in atmel_prepare_rx_pdc() argument
1480 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_prepare_rx_pdc()
1489 dma_unmap_single(port->dev, in atmel_prepare_rx_pdc()
1498 pdc->dma_addr = dma_map_single(port->dev, in atmel_prepare_rx_pdc()
1508 UART_PUT_RPR(port, atmel_port->pdc_rx[0].dma_addr); in atmel_prepare_rx_pdc()
1509 UART_PUT_RCR(port, PDC_BUFFER_SIZE); in atmel_prepare_rx_pdc()
1511 UART_PUT_RNPR(port, atmel_port->pdc_rx[1].dma_addr); in atmel_prepare_rx_pdc()
1512 UART_PUT_RNCR(port, PDC_BUFFER_SIZE); in atmel_prepare_rx_pdc()
1522 struct uart_port *port = (struct uart_port *)data; in atmel_tasklet_func() local
1523 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_tasklet_func()
1528 spin_lock(&port->lock); in atmel_tasklet_func()
1530 atmel_port->schedule_tx(port); in atmel_tasklet_func()
1539 port->icount.rng++; in atmel_tasklet_func()
1541 port->icount.dsr++; in atmel_tasklet_func()
1543 uart_handle_dcd_change(port, !(status & ATMEL_US_DCD)); in atmel_tasklet_func()
1545 uart_handle_cts_change(port, !(status & ATMEL_US_CTS)); in atmel_tasklet_func()
1547 wake_up_interruptible(&port->state->port.delta_msr_wait); in atmel_tasklet_func()
1552 atmel_port->schedule_rx(port); in atmel_tasklet_func()
1554 spin_unlock(&port->lock); in atmel_tasklet_func()
1600 static void atmel_init_rs485(struct uart_port *port, in atmel_init_rs485() argument
1611 struct serial_rs485 *rs485conf = &port->rs485; in atmel_init_rs485()
1625 port->rs485 = pdata->rs485; in atmel_init_rs485()
1630 static void atmel_set_ops(struct uart_port *port) in atmel_set_ops() argument
1632 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_set_ops()
1634 if (atmel_use_dma_rx(port)) { in atmel_set_ops()
1638 } else if (atmel_use_pdc_rx(port)) { in atmel_set_ops()
1648 if (atmel_use_dma_tx(port)) { in atmel_set_ops()
1652 } else if (atmel_use_pdc_tx(port)) { in atmel_set_ops()
1666 static void atmel_get_ip_name(struct uart_port *port) in atmel_get_ip_name() argument
1668 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_get_ip_name()
1669 int name = UART_GET_IP_NAME(port); in atmel_get_ip_name()
1679 dev_dbg(port->dev, "This is usart\n"); in atmel_get_ip_name()
1682 dev_dbg(port->dev, "This is uart\n"); in atmel_get_ip_name()
1686 version = UART_GET_IP_VERSION(port); in atmel_get_ip_name()
1690 dev_dbg(port->dev, "This version is usart\n"); in atmel_get_ip_name()
1695 dev_dbg(port->dev, "This version is uart\n"); in atmel_get_ip_name()
1699 dev_err(port->dev, "Not supported ip name nor version, set to uart\n"); in atmel_get_ip_name()
1704 static void atmel_free_gpio_irq(struct uart_port *port) in atmel_free_gpio_irq() argument
1706 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_free_gpio_irq()
1711 free_irq(atmel_port->gpio_irq[i], port); in atmel_free_gpio_irq()
1714 static int atmel_request_gpio_irq(struct uart_port *port) in atmel_request_gpio_irq() argument
1716 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_request_gpio_irq()
1727 "atmel_serial", port); in atmel_request_gpio_irq()
1729 dev_err(port->dev, "atmel_startup - Can't get %d irq\n", in atmel_request_gpio_irq()
1738 free_irq(irq[i], port); in atmel_request_gpio_irq()
1746 static int atmel_startup(struct uart_port *port) in atmel_startup() argument
1748 struct platform_device *pdev = to_platform_device(port->dev); in atmel_startup()
1749 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_startup()
1750 struct tty_struct *tty = port->state->port.tty; in atmel_startup()
1758 UART_PUT_IDR(port, -1); in atmel_startup()
1764 retval = request_irq(port->irq, atmel_interrupt, in atmel_startup()
1766 tty ? tty->name : "atmel_serial", port); in atmel_startup()
1768 dev_err(port->dev, "atmel_startup - Can't get irq\n"); in atmel_startup()
1775 retval = atmel_request_gpio_irq(port); in atmel_startup()
1785 atmel_set_ops(port); in atmel_startup()
1788 retval = atmel_port->prepare_rx(port); in atmel_startup()
1790 atmel_set_ops(port); in atmel_startup()
1794 retval = atmel_port->prepare_tx(port); in atmel_startup()
1796 atmel_set_ops(port); in atmel_startup()
1800 atmel_port->irq_status_prev = atmel_get_lines_status(port); in atmel_startup()
1806 UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_startup()
1808 UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_startup()
1812 (unsigned long)port); in atmel_startup()
1814 if (atmel_use_pdc_rx(port)) { in atmel_startup()
1818 jiffies + uart_poll_timeout(port)); in atmel_startup()
1821 UART_PUT_RTOR(port, PDC_RX_TIMEOUT); in atmel_startup()
1822 UART_PUT_CR(port, ATMEL_US_STTTO); in atmel_startup()
1824 UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT); in atmel_startup()
1827 UART_PUT_PTCR(port, ATMEL_PDC_RXTEN); in atmel_startup()
1828 } else if (atmel_use_dma_rx(port)) { in atmel_startup()
1832 jiffies + uart_poll_timeout(port)); in atmel_startup()
1835 UART_PUT_RTOR(port, PDC_RX_TIMEOUT); in atmel_startup()
1836 UART_PUT_CR(port, ATMEL_US_STTTO); in atmel_startup()
1838 UART_PUT_IER(port, ATMEL_US_TIMEOUT); in atmel_startup()
1842 UART_PUT_IER(port, ATMEL_US_RXRDY); in atmel_startup()
1848 free_irq(port->irq, port); in atmel_startup()
1857 static void atmel_flush_buffer(struct uart_port *port) in atmel_flush_buffer() argument
1859 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_flush_buffer()
1861 if (atmel_use_pdc_tx(port)) { in atmel_flush_buffer()
1862 UART_PUT_TCR(port, 0); in atmel_flush_buffer()
1870 static void atmel_shutdown(struct uart_port *port) in atmel_shutdown() argument
1872 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_shutdown()
1891 atmel_stop_rx(port); in atmel_shutdown()
1892 atmel_stop_tx(port); in atmel_shutdown()
1894 UART_PUT_CR(port, ATMEL_US_RSTSTA); in atmel_shutdown()
1895 UART_PUT_IDR(port, -1); in atmel_shutdown()
1902 atmel_port->release_rx(port); in atmel_shutdown()
1904 atmel_port->release_tx(port); in atmel_shutdown()
1915 free_irq(port->irq, port); in atmel_shutdown()
1916 atmel_free_gpio_irq(port); in atmel_shutdown()
1920 atmel_flush_buffer(port); in atmel_shutdown()
1926 static void atmel_serial_pm(struct uart_port *port, unsigned int state, in atmel_serial_pm() argument
1929 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_pm()
1940 UART_PUT_IER(port, atmel_port->backup_imr); in atmel_serial_pm()
1944 atmel_port->backup_imr = UART_GET_IMR(port); in atmel_serial_pm()
1945 UART_PUT_IDR(port, -1); in atmel_serial_pm()
1954 dev_err(port->dev, "atmel_serial: unknown pm %d\n", state); in atmel_serial_pm()
1961 static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, in atmel_set_termios() argument
1968 mode = old_mode = UART_GET_MR(port); in atmel_set_termios()
1974 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16); in atmel_set_termios()
1975 quot = uart_get_divisor(port, baud); in atmel_set_termios()
2017 spin_lock_irqsave(&port->lock, flags); in atmel_set_termios()
2019 port->read_status_mask = ATMEL_US_OVRE; in atmel_set_termios()
2021 port->read_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE); in atmel_set_termios()
2023 port->read_status_mask |= ATMEL_US_RXBRK; in atmel_set_termios()
2025 if (atmel_use_pdc_rx(port)) in atmel_set_termios()
2027 UART_PUT_IER(port, port->read_status_mask); in atmel_set_termios()
2032 port->ignore_status_mask = 0; in atmel_set_termios()
2034 port->ignore_status_mask |= (ATMEL_US_FRAME | ATMEL_US_PARE); in atmel_set_termios()
2036 port->ignore_status_mask |= ATMEL_US_RXBRK; in atmel_set_termios()
2042 port->ignore_status_mask |= ATMEL_US_OVRE; in atmel_set_termios()
2047 uart_update_timeout(port, termios->c_cflag, baud); in atmel_set_termios()
2054 imr = UART_GET_IMR(port); in atmel_set_termios()
2055 UART_PUT_IDR(port, -1); in atmel_set_termios()
2058 UART_PUT_CR(port, ATMEL_US_TXDIS | ATMEL_US_RXDIS); in atmel_set_termios()
2061 if (port->rs485.flags & SER_RS485_ENABLED) { in atmel_set_termios()
2062 UART_PUT_TTGR(port, port->rs485.delay_rts_after_send); in atmel_set_termios()
2073 UART_PUT_MR(port, mode); in atmel_set_termios()
2090 UART_PUT_CR(port, rts_state); in atmel_set_termios()
2094 UART_PUT_BRGR(port, quot); in atmel_set_termios()
2095 UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_set_termios()
2096 UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_set_termios()
2099 UART_PUT_IER(port, imr); in atmel_set_termios()
2102 if (UART_ENABLE_MS(port, termios->c_cflag)) in atmel_set_termios()
2103 atmel_enable_ms(port); in atmel_set_termios()
2105 atmel_disable_ms(port); in atmel_set_termios()
2107 spin_unlock_irqrestore(&port->lock, flags); in atmel_set_termios()
2110 static void atmel_set_ldisc(struct uart_port *port, struct ktermios *termios) in atmel_set_ldisc() argument
2113 port->flags |= UPF_HARDPPS_CD; in atmel_set_ldisc()
2114 spin_lock_irq(&port->lock); in atmel_set_ldisc()
2115 atmel_enable_ms(port); in atmel_set_ldisc()
2116 spin_unlock_irq(&port->lock); in atmel_set_ldisc()
2118 port->flags &= ~UPF_HARDPPS_CD; in atmel_set_ldisc()
2119 if (!UART_ENABLE_MS(port, termios->c_cflag)) { in atmel_set_ldisc()
2120 spin_lock_irq(&port->lock); in atmel_set_ldisc()
2121 atmel_disable_ms(port); in atmel_set_ldisc()
2122 spin_unlock_irq(&port->lock); in atmel_set_ldisc()
2130 static const char *atmel_type(struct uart_port *port) in atmel_type() argument
2132 return (port->type == PORT_ATMEL) ? "ATMEL_SERIAL" : NULL; in atmel_type()
2138 static void atmel_release_port(struct uart_port *port) in atmel_release_port() argument
2140 struct platform_device *pdev = to_platform_device(port->dev); in atmel_release_port()
2143 release_mem_region(port->mapbase, size); in atmel_release_port()
2145 if (port->flags & UPF_IOREMAP) { in atmel_release_port()
2146 iounmap(port->membase); in atmel_release_port()
2147 port->membase = NULL; in atmel_release_port()
2154 static int atmel_request_port(struct uart_port *port) in atmel_request_port() argument
2156 struct platform_device *pdev = to_platform_device(port->dev); in atmel_request_port()
2159 if (!request_mem_region(port->mapbase, size, "atmel_serial")) in atmel_request_port()
2162 if (port->flags & UPF_IOREMAP) { in atmel_request_port()
2163 port->membase = ioremap(port->mapbase, size); in atmel_request_port()
2164 if (port->membase == NULL) { in atmel_request_port()
2165 release_mem_region(port->mapbase, size); in atmel_request_port()
2176 static void atmel_config_port(struct uart_port *port, int flags) in atmel_config_port() argument
2179 port->type = PORT_ATMEL; in atmel_config_port()
2180 atmel_request_port(port); in atmel_config_port()
2187 static int atmel_verify_port(struct uart_port *port, struct serial_struct *ser) in atmel_verify_port() argument
2192 if (port->irq != ser->irq) in atmel_verify_port()
2196 if (port->uartclk / 16 != ser->baud_base) in atmel_verify_port()
2198 if ((void *)port->mapbase != ser->iomem_base) in atmel_verify_port()
2200 if (port->iobase != ser->port) in atmel_verify_port()
2208 static int atmel_poll_get_char(struct uart_port *port) in atmel_poll_get_char() argument
2210 while (!(UART_GET_CSR(port) & ATMEL_US_RXRDY)) in atmel_poll_get_char()
2213 return UART_GET_CHAR(port); in atmel_poll_get_char()
2216 static void atmel_poll_put_char(struct uart_port *port, unsigned char ch) in atmel_poll_put_char() argument
2218 while (!(UART_GET_CSR(port) & ATMEL_US_TXRDY)) in atmel_poll_put_char()
2221 UART_PUT_CHAR(port, ch); in atmel_poll_put_char()
2258 struct uart_port *port = &atmel_port->uart; in atmel_init_port() local
2262 atmel_set_ops(port); in atmel_init_port()
2264 atmel_init_rs485(port, pdev); in atmel_init_port()
2266 port->iotype = UPIO_MEM; in atmel_init_port()
2267 port->flags = UPF_BOOT_AUTOCONF; in atmel_init_port()
2268 port->ops = &atmel_pops; in atmel_init_port()
2269 port->fifosize = 1; in atmel_init_port()
2270 port->dev = &pdev->dev; in atmel_init_port()
2271 port->mapbase = pdev->resource[0].start; in atmel_init_port()
2272 port->irq = pdev->resource[1].start; in atmel_init_port()
2273 port->rs485_config = atmel_config_rs485; in atmel_init_port()
2276 (unsigned long)port); in atmel_init_port()
2283 port->membase = pdata->regs; in atmel_init_port()
2285 port->flags |= UPF_IOREMAP; in atmel_init_port()
2286 port->membase = NULL; in atmel_init_port()
2303 port->uartclk = clk_get_rate(atmel_port->clk); in atmel_init_port()
2309 if (port->rs485.flags & SER_RS485_ENABLED) in atmel_init_port()
2311 else if (atmel_use_pdc_tx(port)) { in atmel_init_port()
2312 port->fifosize = PDC_BUFFER_SIZE; in atmel_init_port()
2324 static void atmel_console_putchar(struct uart_port *port, int ch) in atmel_console_putchar() argument
2326 while (!(UART_GET_CSR(port) & ATMEL_US_TXRDY)) in atmel_console_putchar()
2328 UART_PUT_CHAR(port, ch); in atmel_console_putchar()
2336 struct uart_port *port = &atmel_ports[co->index].uart; in atmel_console_write() local
2337 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_console_write()
2344 imr = UART_GET_IMR(port); in atmel_console_write()
2345 UART_PUT_IDR(port, ATMEL_US_RXRDY | atmel_port->tx_done_mask); in atmel_console_write()
2348 pdc_tx = UART_GET_PTSR(port) & ATMEL_PDC_TXTEN; in atmel_console_write()
2349 UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); in atmel_console_write()
2351 uart_console_write(port, s, count, atmel_console_putchar); in atmel_console_write()
2358 status = UART_GET_CSR(port); in atmel_console_write()
2363 UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); in atmel_console_write()
2366 UART_PUT_IER(port, imr); in atmel_console_write()
2373 static void __init atmel_console_get_options(struct uart_port *port, int *baud, in atmel_console_get_options() argument
2382 quot = UART_GET_BRGR(port) & ATMEL_US_CD; in atmel_console_get_options()
2386 mr = UART_GET_MR(port) & ATMEL_US_CHRL; in atmel_console_get_options()
2392 mr = UART_GET_MR(port) & ATMEL_US_PAR; in atmel_console_get_options()
2404 *baud = port->uartclk / (16 * (quot - 1)); in atmel_console_get_options()
2410 struct uart_port *port = &atmel_ports[co->index].uart; in atmel_console_setup() local
2416 if (port->membase == NULL) { in atmel_console_setup()
2425 UART_PUT_IDR(port, -1); in atmel_console_setup()
2426 UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); in atmel_console_setup()
2427 UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN); in atmel_console_setup()
2432 atmel_console_get_options(port, &baud, &parity, &bits); in atmel_console_setup()
2434 return uart_set_options(port, co, baud, parity, bits, flow); in atmel_console_setup()
2461 struct atmel_uart_port *port = &atmel_ports[id]; in atmel_console_init() local
2463 port->backup_imr = 0; in atmel_console_init()
2464 port->uart.line = id; in atmel_console_init()
2467 ret = atmel_init_port(port, atmel_default_console_device); in atmel_console_init()
2492 static inline bool atmel_is_console_port(struct uart_port *port) in atmel_is_console_port() argument
2494 return port->cons && port->cons->index == port->line; in atmel_is_console_port()
2500 static inline bool atmel_is_console_port(struct uart_port *port) in atmel_is_console_port() argument
2529 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_suspend() local
2530 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_suspend()
2532 if (atmel_is_console_port(port) && console_suspend_enabled) { in atmel_serial_suspend()
2534 while (!(UART_GET_CSR(port) & ATMEL_US_TXEMPTY)) in atmel_serial_suspend()
2549 uart_suspend_port(&atmel_uart, port); in atmel_serial_suspend()
2556 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_resume() local
2557 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_resume()
2562 atmel_handle_receive(port, atmel_port->pending); in atmel_serial_resume()
2563 atmel_handle_status(port, atmel_port->pending, in atmel_serial_resume()
2565 atmel_handle_transmit(port, atmel_port->pending); in atmel_serial_resume()
2571 uart_resume_port(&atmel_uart, port); in atmel_serial_resume()
2603 struct atmel_uart_port *port; in atmel_serial_probe() local
2634 port = &atmel_ports[ret]; in atmel_serial_probe()
2635 port->backup_imr = 0; in atmel_serial_probe()
2636 port->uart.line = ret; in atmel_serial_probe()
2638 spin_lock_init(&port->lock_suspended); in atmel_serial_probe()
2640 ret = atmel_init_gpios(port, &pdev->dev); in atmel_serial_probe()
2646 ret = atmel_init_port(port, pdev); in atmel_serial_probe()
2650 if (!atmel_use_pdc_rx(&port->uart)) { in atmel_serial_probe()
2656 port->rx_ring.buf = data; in atmel_serial_probe()
2659 rs485_enabled = port->uart.rs485.flags & SER_RS485_ENABLED; in atmel_serial_probe()
2661 ret = uart_add_one_port(&atmel_uart, &port->uart); in atmel_serial_probe()
2666 if (atmel_is_console_port(&port->uart) in atmel_serial_probe()
2672 clk_disable_unprepare(port->clk); in atmel_serial_probe()
2677 platform_set_drvdata(pdev, port); in atmel_serial_probe()
2683 clk_prepare_enable(port->clk); in atmel_serial_probe()
2686 UART_PUT_MR(&port->uart, ATMEL_US_USMODE_NORMAL); in atmel_serial_probe()
2687 UART_PUT_CR(&port->uart, ATMEL_US_RTSEN); in atmel_serial_probe()
2693 atmel_get_ip_name(&port->uart); in atmel_serial_probe()
2699 clk_disable_unprepare(port->clk); in atmel_serial_probe()
2704 kfree(port->rx_ring.buf); in atmel_serial_probe()
2705 port->rx_ring.buf = NULL; in atmel_serial_probe()
2707 if (!atmel_is_console_port(&port->uart)) { in atmel_serial_probe()
2708 clk_put(port->clk); in atmel_serial_probe()
2709 port->clk = NULL; in atmel_serial_probe()
2712 clear_bit(port->uart.line, atmel_ports_in_use); in atmel_serial_probe()
2719 struct uart_port *port = platform_get_drvdata(pdev); in atmel_serial_remove() local
2720 struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); in atmel_serial_remove()
2727 ret = uart_remove_one_port(&atmel_uart, port); in atmel_serial_remove()
2733 clear_bit(port->line, atmel_ports_in_use); in atmel_serial_remove()