Lines Matching refs:port
35 sirfsoc_uart_pio_rx_chars(struct uart_port *port, unsigned int max_rx_count);
39 static void sirfsoc_uart_start_next_rx_dma(struct uart_port *port);
64 .port = {
71 .port = {
78 .port = {
85 .port = {
92 .port = {
99 .port = {
107 static inline struct sirfsoc_uart_port *to_sirfport(struct uart_port *port) in to_sirfport() argument
109 return container_of(port, struct sirfsoc_uart_port, port); in to_sirfport()
112 static inline unsigned int sirfsoc_uart_tx_empty(struct uart_port *port) in sirfsoc_uart_tx_empty() argument
115 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_tx_empty()
118 reg = rd_regl(port, ureg->sirfsoc_tx_fifo_status); in sirfsoc_uart_tx_empty()
120 return (reg & ufifo_st->ff_empty(port->line)) ? TIOCSER_TEMT : 0; in sirfsoc_uart_tx_empty()
123 static unsigned int sirfsoc_uart_get_mctrl(struct uart_port *port) in sirfsoc_uart_get_mctrl() argument
125 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_get_mctrl()
130 if (!(rd_regl(port, ureg->sirfsoc_afc_ctrl) & in sirfsoc_uart_get_mctrl()
147 static void sirfsoc_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) in sirfsoc_uart_set_mctrl() argument
149 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_set_mctrl()
158 current_val = rd_regl(port, ureg->sirfsoc_afc_ctrl) & ~0xFF; in sirfsoc_uart_set_mctrl()
160 wr_regl(port, ureg->sirfsoc_afc_ctrl, val); in sirfsoc_uart_set_mctrl()
169 static void sirfsoc_uart_stop_tx(struct uart_port *port) in sirfsoc_uart_stop_tx() argument
171 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_stop_tx()
181 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_stop_tx()
182 rd_regl(port, ureg->sirfsoc_int_en_reg) & in sirfsoc_uart_stop_tx()
185 wr_regl(port, SIRFUART_INT_EN_CLR, in sirfsoc_uart_stop_tx()
190 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_stop_tx()
191 rd_regl(port, ureg->sirfsoc_int_en_reg) & in sirfsoc_uart_stop_tx()
194 wr_regl(port, SIRFUART_INT_EN_CLR, in sirfsoc_uart_stop_tx()
201 struct uart_port *port = &sirfport->port; in sirfsoc_uart_tx_with_dma() local
204 struct circ_buf *xmit = &port->state->xmit; in sirfsoc_uart_tx_with_dma()
211 if (uart_circ_empty(xmit) || uart_tx_stopped(port) || in sirfsoc_uart_tx_with_dma()
221 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_tx_with_dma()
222 rd_regl(port, ureg->sirfsoc_int_en_reg)& in sirfsoc_uart_tx_with_dma()
225 wr_regl(port, SIRFUART_INT_EN_CLR, in sirfsoc_uart_tx_with_dma()
236 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_STOP); in sirfsoc_uart_tx_with_dma()
237 wr_regl(port, ureg->sirfsoc_tx_dma_io_ctrl, in sirfsoc_uart_tx_with_dma()
238 rd_regl(port, ureg->sirfsoc_tx_dma_io_ctrl)| in sirfsoc_uart_tx_with_dma()
248 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_tx_with_dma()
249 rd_regl(port, ureg->sirfsoc_int_en_reg)| in sirfsoc_uart_tx_with_dma()
252 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_tx_with_dma()
254 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_START); in sirfsoc_uart_tx_with_dma()
257 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_STOP); in sirfsoc_uart_tx_with_dma()
258 wr_regl(port, ureg->sirfsoc_tx_dma_io_ctrl, in sirfsoc_uart_tx_with_dma()
259 rd_regl(port, ureg->sirfsoc_tx_dma_io_ctrl)& in sirfsoc_uart_tx_with_dma()
261 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_START); in sirfsoc_uart_tx_with_dma()
264 sirfport->tx_dma_addr = dma_map_single(port->dev, in sirfsoc_uart_tx_with_dma()
271 dev_err(port->dev, "DMA prep slave single fail\n"); in sirfsoc_uart_tx_with_dma()
285 static void sirfsoc_uart_start_tx(struct uart_port *port) in sirfsoc_uart_start_tx() argument
287 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_start_tx()
295 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_START); in sirfsoc_uart_start_tx()
297 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_start_tx()
298 rd_regl(port, ureg->sirfsoc_int_en_reg)| in sirfsoc_uart_start_tx()
301 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_start_tx()
306 static void sirfsoc_uart_stop_rx(struct uart_port *port) in sirfsoc_uart_stop_rx() argument
308 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_stop_rx()
312 wr_regl(port, ureg->sirfsoc_rx_fifo_op, 0); in sirfsoc_uart_stop_rx()
315 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_stop_rx()
316 rd_regl(port, ureg->sirfsoc_int_en_reg) & in sirfsoc_uart_stop_rx()
317 ~(SIRFUART_RX_DMA_INT_EN(port, uint_en) | in sirfsoc_uart_stop_rx()
320 wr_regl(port, SIRFUART_INT_EN_CLR, in sirfsoc_uart_stop_rx()
321 SIRFUART_RX_DMA_INT_EN(port, uint_en)| in sirfsoc_uart_stop_rx()
326 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_stop_rx()
327 rd_regl(port, ureg->sirfsoc_int_en_reg)& in sirfsoc_uart_stop_rx()
328 ~(SIRFUART_RX_IO_INT_EN(port, uint_en))); in sirfsoc_uart_stop_rx()
330 wr_regl(port, SIRFUART_INT_EN_CLR, in sirfsoc_uart_stop_rx()
331 SIRFUART_RX_IO_INT_EN(port, uint_en)); in sirfsoc_uart_stop_rx()
335 static void sirfsoc_uart_disable_ms(struct uart_port *port) in sirfsoc_uart_disable_ms() argument
337 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_disable_ms()
345 wr_regl(port, ureg->sirfsoc_afc_ctrl, in sirfsoc_uart_disable_ms()
346 rd_regl(port, ureg->sirfsoc_afc_ctrl) & ~0x3FF); in sirfsoc_uart_disable_ms()
348 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_disable_ms()
349 rd_regl(port, ureg->sirfsoc_int_en_reg)& in sirfsoc_uart_disable_ms()
352 wr_regl(port, SIRFUART_INT_EN_CLR, in sirfsoc_uart_disable_ms()
361 struct uart_port *port = &sirfport->port; in sirfsoc_uart_usp_cts_handler() local
362 spin_lock(&port->lock); in sirfsoc_uart_usp_cts_handler()
364 uart_handle_cts_change(port, in sirfsoc_uart_usp_cts_handler()
366 spin_unlock(&port->lock); in sirfsoc_uart_usp_cts_handler()
370 static void sirfsoc_uart_enable_ms(struct uart_port *port) in sirfsoc_uart_enable_ms() argument
372 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_enable_ms()
380 wr_regl(port, ureg->sirfsoc_afc_ctrl, in sirfsoc_uart_enable_ms()
381 rd_regl(port, ureg->sirfsoc_afc_ctrl) | in sirfsoc_uart_enable_ms()
384 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_enable_ms()
385 rd_regl(port, ureg->sirfsoc_int_en_reg) in sirfsoc_uart_enable_ms()
388 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_enable_ms()
394 static void sirfsoc_uart_break_ctl(struct uart_port *port, int break_state) in sirfsoc_uart_break_ctl() argument
396 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_break_ctl()
399 unsigned long ulcon = rd_regl(port, ureg->sirfsoc_line_ctrl); in sirfsoc_uart_break_ctl()
404 wr_regl(port, ureg->sirfsoc_line_ctrl, ulcon); in sirfsoc_uart_break_ctl()
409 sirfsoc_uart_pio_rx_chars(struct uart_port *port, unsigned int max_rx_count) in sirfsoc_uart_pio_rx_chars() argument
411 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_pio_rx_chars()
416 tty = tty_port_tty_get(&port->state->port); in sirfsoc_uart_pio_rx_chars()
419 while (!(rd_regl(port, ureg->sirfsoc_rx_fifo_status) & in sirfsoc_uart_pio_rx_chars()
420 ufifo_st->ff_empty(port->line))) { in sirfsoc_uart_pio_rx_chars()
421 ch = rd_regl(port, ureg->sirfsoc_rx_fifo_data) | in sirfsoc_uart_pio_rx_chars()
423 if (unlikely(uart_handle_sysrq_char(port, ch))) in sirfsoc_uart_pio_rx_chars()
425 uart_insert_char(port, 0, 0, ch, TTY_NORMAL); in sirfsoc_uart_pio_rx_chars()
432 port->icount.rx += rx_count; in sirfsoc_uart_pio_rx_chars()
440 struct uart_port *port = &sirfport->port; in sirfsoc_uart_pio_tx_chars() local
443 struct circ_buf *xmit = &port->state->xmit; in sirfsoc_uart_pio_tx_chars()
446 !(rd_regl(port, ureg->sirfsoc_tx_fifo_status) & in sirfsoc_uart_pio_tx_chars()
447 ufifo_st->ff_full(port->line)) && in sirfsoc_uart_pio_tx_chars()
449 wr_regl(port, ureg->sirfsoc_tx_fifo_data, in sirfsoc_uart_pio_tx_chars()
452 port->icount.tx++; in sirfsoc_uart_pio_tx_chars()
456 uart_write_wakeup(port); in sirfsoc_uart_pio_tx_chars()
463 struct uart_port *port = &sirfport->port; in sirfsoc_uart_tx_dma_complete_callback() local
464 struct circ_buf *xmit = &port->state->xmit; in sirfsoc_uart_tx_dma_complete_callback()
467 spin_lock_irqsave(&port->lock, flags); in sirfsoc_uart_tx_dma_complete_callback()
470 port->icount.tx += sirfport->transfer_size; in sirfsoc_uart_tx_dma_complete_callback()
472 uart_write_wakeup(port); in sirfsoc_uart_tx_dma_complete_callback()
474 dma_unmap_single(port->dev, sirfport->tx_dma_addr, in sirfsoc_uart_tx_dma_complete_callback()
478 spin_unlock_irqrestore(&port->lock, flags); in sirfsoc_uart_tx_dma_complete_callback()
484 struct uart_port *port = &sirfport->port; in sirfsoc_uart_insert_rx_buf_to_tty() local
485 struct tty_port *tport = &port->state->port; in sirfsoc_uart_insert_rx_buf_to_tty()
490 port->icount.rx += inserted; in sirfsoc_uart_insert_rx_buf_to_tty()
493 static void sirfsoc_rx_submit_one_dma_desc(struct uart_port *port, int index) in sirfsoc_rx_submit_one_dma_desc() argument
495 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_rx_submit_one_dma_desc()
504 dev_err(port->dev, "DMA slave single fail\n"); in sirfsoc_rx_submit_one_dma_desc()
518 struct uart_port *port = &sirfport->port; in sirfsoc_rx_tmo_process_tl() local
526 spin_lock_irqsave(&port->lock, flags); in sirfsoc_rx_tmo_process_tl()
539 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_rx_tmo_process_tl()
540 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) | in sirfsoc_rx_tmo_process_tl()
542 sirfsoc_uart_pio_rx_chars(port, 4 - sirfport->rx_io_count); in sirfsoc_rx_tmo_process_tl()
545 wr_regl(port, ureg->sirfsoc_int_st_reg, in sirfsoc_rx_tmo_process_tl()
548 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_rx_tmo_process_tl()
549 rd_regl(port, ureg->sirfsoc_int_en_reg) & in sirfsoc_rx_tmo_process_tl()
552 wr_regl(port, SIRFUART_INT_EN_CLR, in sirfsoc_rx_tmo_process_tl()
554 sirfsoc_uart_start_next_rx_dma(port); in sirfsoc_rx_tmo_process_tl()
556 wr_regl(port, ureg->sirfsoc_int_st_reg, in sirfsoc_rx_tmo_process_tl()
559 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_rx_tmo_process_tl()
560 rd_regl(port, ureg->sirfsoc_int_en_reg) | in sirfsoc_rx_tmo_process_tl()
563 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_rx_tmo_process_tl()
566 spin_unlock_irqrestore(&port->lock, flags); in sirfsoc_rx_tmo_process_tl()
567 tty_flip_buffer_push(&port->state->port); in sirfsoc_rx_tmo_process_tl()
572 struct uart_port *port = &sirfport->port; in sirfsoc_uart_handle_rx_tmo() local
582 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_handle_rx_tmo()
583 rd_regl(port, ureg->sirfsoc_int_en_reg) & in sirfsoc_uart_handle_rx_tmo()
586 wr_regl(port, SIRFUART_INT_EN_CLR, in sirfsoc_uart_handle_rx_tmo()
593 struct uart_port *port = &sirfport->port; in sirfsoc_uart_handle_rx_done() local
598 sirfsoc_uart_pio_rx_chars(port, 4 - sirfport->rx_io_count); in sirfsoc_uart_handle_rx_done()
602 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_handle_rx_done()
603 rd_regl(port, ureg->sirfsoc_int_en_reg) & in sirfsoc_uart_handle_rx_done()
606 wr_regl(port, SIRFUART_INT_EN_CLR, in sirfsoc_uart_handle_rx_done()
608 wr_regl(port, ureg->sirfsoc_int_st_reg, in sirfsoc_uart_handle_rx_done()
610 sirfsoc_uart_start_next_rx_dma(port); in sirfsoc_uart_handle_rx_done()
620 struct uart_port *port = &sirfport->port; in sirfsoc_uart_isr() local
625 struct uart_state *state = port->state; in sirfsoc_uart_isr()
626 struct circ_buf *xmit = &port->state->xmit; in sirfsoc_uart_isr()
627 spin_lock(&port->lock); in sirfsoc_uart_isr()
628 intr_status = rd_regl(port, ureg->sirfsoc_int_st_reg); in sirfsoc_uart_isr()
629 wr_regl(port, ureg->sirfsoc_int_st_reg, intr_status); in sirfsoc_uart_isr()
630 intr_status &= rd_regl(port, ureg->sirfsoc_int_en_reg); in sirfsoc_uart_isr()
631 if (unlikely(intr_status & (SIRFUART_ERR_INT_STAT(port, uint_st)))) { in sirfsoc_uart_isr()
633 port->icount.brk++; in sirfsoc_uart_isr()
634 if (uart_handle_break(port)) in sirfsoc_uart_isr()
638 port->icount.overrun++; in sirfsoc_uart_isr()
640 port->icount.frame++; in sirfsoc_uart_isr()
645 wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_RESET); in sirfsoc_uart_isr()
646 wr_regl(port, ureg->sirfsoc_rx_fifo_op, 0); in sirfsoc_uart_isr()
647 wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_START); in sirfsoc_uart_isr()
648 intr_status &= port->read_status_mask; in sirfsoc_uart_isr()
649 uart_insert_char(port, intr_status, in sirfsoc_uart_isr()
656 cts_status = rd_regl(port, ureg->sirfsoc_afc_ctrl) & in sirfsoc_uart_isr()
662 uart_handle_cts_change(port, cts_status); in sirfsoc_uart_isr()
663 wake_up_interruptible(&state->port.delta_msr_wait); in sirfsoc_uart_isr()
672 sirfsoc_uart_pio_rx_chars(port, in sirfsoc_uart_isr()
675 spin_unlock(&port->lock); in sirfsoc_uart_isr()
676 tty_flip_buffer_push(&state->port); in sirfsoc_uart_isr()
677 spin_lock(&port->lock); in sirfsoc_uart_isr()
682 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { in sirfsoc_uart_isr()
683 spin_unlock(&port->lock); in sirfsoc_uart_isr()
689 (rd_regl(port, ureg->sirfsoc_tx_fifo_status) & in sirfsoc_uart_isr()
690 ufifo_st->ff_empty(port->line))) in sirfsoc_uart_isr()
691 sirfsoc_uart_stop_tx(port); in sirfsoc_uart_isr()
695 spin_unlock(&port->lock); in sirfsoc_uart_isr()
703 struct uart_port *port = &sirfport->port; in sirfsoc_uart_rx_dma_complete_tl() local
708 spin_lock_irqsave(&port->lock, flags); in sirfsoc_uart_rx_dma_complete_tl()
713 if (rd_regl(port, ureg->sirfsoc_int_en_reg) & in sirfsoc_uart_rx_dma_complete_tl()
715 sirfsoc_rx_submit_one_dma_desc(port, in sirfsoc_uart_rx_dma_complete_tl()
721 spin_unlock_irqrestore(&port->lock, flags); in sirfsoc_uart_rx_dma_complete_tl()
722 tty_flip_buffer_push(&port->state->port); in sirfsoc_uart_rx_dma_complete_tl()
730 spin_lock_irqsave(&sirfport->port.lock, flags); in sirfsoc_uart_rx_dma_complete_callback()
734 spin_unlock_irqrestore(&sirfport->port.lock, flags); in sirfsoc_uart_rx_dma_complete_callback()
738 static void sirfsoc_uart_start_next_rx_dma(struct uart_port *port) in sirfsoc_uart_start_next_rx_dma() argument
740 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_start_next_rx_dma()
745 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_uart_start_next_rx_dma()
746 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) & in sirfsoc_uart_start_next_rx_dma()
749 sirfsoc_rx_submit_one_dma_desc(port, i); in sirfsoc_uart_start_next_rx_dma()
752 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_start_next_rx_dma()
753 rd_regl(port, ureg->sirfsoc_int_en_reg) | in sirfsoc_uart_start_next_rx_dma()
754 SIRFUART_RX_DMA_INT_EN(port, uint_en)); in sirfsoc_uart_start_next_rx_dma()
756 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_start_next_rx_dma()
757 SIRFUART_RX_DMA_INT_EN(port, uint_en)); in sirfsoc_uart_start_next_rx_dma()
760 static void sirfsoc_uart_start_rx(struct uart_port *port) in sirfsoc_uart_start_rx() argument
762 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_start_rx()
767 wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_RESET); in sirfsoc_uart_start_rx()
768 wr_regl(port, ureg->sirfsoc_rx_fifo_op, 0); in sirfsoc_uart_start_rx()
769 wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_START); in sirfsoc_uart_start_rx()
771 sirfsoc_uart_start_next_rx_dma(port); in sirfsoc_uart_start_rx()
774 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_start_rx()
775 rd_regl(port, ureg->sirfsoc_int_en_reg) | in sirfsoc_uart_start_rx()
776 SIRFUART_RX_IO_INT_EN(port, uint_en)); in sirfsoc_uart_start_rx()
778 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_start_rx()
779 SIRFUART_RX_IO_INT_EN(port, uint_en)); in sirfsoc_uart_start_rx()
844 static void sirfsoc_uart_set_termios(struct uart_port *port, in sirfsoc_uart_set_termios() argument
848 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_set_termios()
862 ioclk_rate = port->uartclk; in sirfsoc_uart_set_termios()
889 spin_lock_irqsave(&port->lock, flags); in sirfsoc_uart_set_termios()
890 port->read_status_mask = uint_en->sirfsoc_rx_oflow_en; in sirfsoc_uart_set_termios()
891 port->ignore_status_mask = 0; in sirfsoc_uart_set_termios()
894 port->read_status_mask |= uint_en->sirfsoc_frm_err_en | in sirfsoc_uart_set_termios()
898 port->read_status_mask |= uint_en->sirfsoc_frm_err_en; in sirfsoc_uart_set_termios()
901 port->read_status_mask |= uint_en->sirfsoc_rxd_brk_en; in sirfsoc_uart_set_termios()
904 port->ignore_status_mask |= in sirfsoc_uart_set_termios()
921 port->ignore_status_mask |= in sirfsoc_uart_set_termios()
924 dev_warn(port->dev, in sirfsoc_uart_set_termios()
928 port->ignore_status_mask |= in sirfsoc_uart_set_termios()
931 port->ignore_status_mask |= in sirfsoc_uart_set_termios()
935 port->ignore_status_mask |= SIRFUART_DUMMY_READ; in sirfsoc_uart_set_termios()
937 if (UART_ENABLE_MS(port, termios->c_cflag)) { in sirfsoc_uart_set_termios()
939 sirfsoc_uart_enable_ms(port); in sirfsoc_uart_set_termios()
942 sirfsoc_uart_disable_ms(port); in sirfsoc_uart_set_termios()
944 baud_rate = uart_get_baud_rate(port, termios, old, 0, 4000000); in sirfsoc_uart_set_termios()
955 wr_regl(port, ureg->sirfsoc_divisor, clk_div_reg); in sirfsoc_uart_set_termios()
967 wr_regl(port, ureg->sirfsoc_mode2, len_val); in sirfsoc_uart_set_termios()
974 txfifo_op_reg = rd_regl(port, ureg->sirfsoc_tx_fifo_op); in sirfsoc_uart_set_termios()
975 wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_STOP); in sirfsoc_uart_set_termios()
976 wr_regl(port, ureg->sirfsoc_tx_fifo_op, in sirfsoc_uart_set_termios()
979 config_reg |= SIRFUART_RECV_TIMEOUT(port, rx_time_out); in sirfsoc_uart_set_termios()
980 wr_regl(port, ureg->sirfsoc_line_ctrl, config_reg); in sirfsoc_uart_set_termios()
990 wr_regl(port, ureg->sirfsoc_tx_frame_ctrl, len_val); in sirfsoc_uart_set_termios()
999 wr_regl(port, ureg->sirfsoc_rx_frame_ctrl, len_val); in sirfsoc_uart_set_termios()
1001 wr_regl(port, ureg->sirfsoc_async_param_reg, in sirfsoc_uart_set_termios()
1002 (SIRFUART_RECV_TIMEOUT(port, rx_time_out)) | in sirfsoc_uart_set_termios()
1007 wr_regl(port, ureg->sirfsoc_tx_dma_io_ctrl, SIRFUART_DMA_MODE); in sirfsoc_uart_set_termios()
1009 wr_regl(port, ureg->sirfsoc_tx_dma_io_ctrl, SIRFUART_IO_MODE); in sirfsoc_uart_set_termios()
1011 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, SIRFUART_DMA_MODE); in sirfsoc_uart_set_termios()
1013 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, SIRFUART_IO_MODE); in sirfsoc_uart_set_termios()
1019 wr_regl(port, ureg->sirfsoc_tx_fifo_ctrl, in sirfsoc_uart_set_termios()
1020 SIRFUART_FIFO_THD(port) / threshold_div); in sirfsoc_uart_set_termios()
1021 wr_regl(port, ureg->sirfsoc_rx_fifo_ctrl, in sirfsoc_uart_set_termios()
1022 SIRFUART_FIFO_THD(port) / threshold_div); in sirfsoc_uart_set_termios()
1024 wr_regl(port, ureg->sirfsoc_tx_fifo_op, txfifo_op_reg); in sirfsoc_uart_set_termios()
1025 uart_update_timeout(port, termios->c_cflag, set_baud); in sirfsoc_uart_set_termios()
1026 sirfsoc_uart_start_rx(port); in sirfsoc_uart_set_termios()
1027 wr_regl(port, ureg->sirfsoc_tx_rx_en, SIRFUART_TX_EN | SIRFUART_RX_EN); in sirfsoc_uart_set_termios()
1028 spin_unlock_irqrestore(&port->lock, flags); in sirfsoc_uart_set_termios()
1031 static void sirfsoc_uart_pm(struct uart_port *port, unsigned int state, in sirfsoc_uart_pm() argument
1034 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_pm()
1050 static int sirfsoc_uart_startup(struct uart_port *port) in sirfsoc_uart_startup() argument
1052 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_startup()
1054 unsigned int index = port->line; in sirfsoc_uart_startup()
1056 set_irq_flags(port->irq, IRQF_VALID | IRQF_NOAUTOEN); in sirfsoc_uart_startup()
1057 ret = request_irq(port->irq, in sirfsoc_uart_startup()
1063 dev_err(port->dev, "UART%d request IRQ line (%d) failed.\n", in sirfsoc_uart_startup()
1064 index, port->irq); in sirfsoc_uart_startup()
1069 wr_regl(port, ureg->sirfsoc_tx_dma_io_ctrl, in sirfsoc_uart_startup()
1070 rd_regl(port, ureg->sirfsoc_tx_dma_io_ctrl) | in sirfsoc_uart_startup()
1072 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_uart_startup()
1073 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) | in sirfsoc_uart_startup()
1075 wr_regl(port, ureg->sirfsoc_tx_dma_io_len, 0); in sirfsoc_uart_startup()
1076 wr_regl(port, ureg->sirfsoc_rx_dma_io_len, 0); in sirfsoc_uart_startup()
1077 wr_regl(port, ureg->sirfsoc_tx_rx_en, SIRFUART_RX_EN | SIRFUART_TX_EN); in sirfsoc_uart_startup()
1079 wr_regl(port, ureg->sirfsoc_mode1, in sirfsoc_uart_startup()
1082 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_RESET); in sirfsoc_uart_startup()
1083 wr_regl(port, ureg->sirfsoc_tx_fifo_op, 0); in sirfsoc_uart_startup()
1084 wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_RESET); in sirfsoc_uart_startup()
1085 wr_regl(port, ureg->sirfsoc_rx_fifo_op, 0); in sirfsoc_uart_startup()
1086 wr_regl(port, ureg->sirfsoc_tx_fifo_ctrl, SIRFUART_FIFO_THD(port)); in sirfsoc_uart_startup()
1087 wr_regl(port, ureg->sirfsoc_rx_fifo_ctrl, SIRFUART_FIFO_THD(port)); in sirfsoc_uart_startup()
1089 wr_regl(port, ureg->sirfsoc_rx_fifo_level_chk, in sirfsoc_uart_startup()
1090 SIRFUART_RX_FIFO_CHK_SC(port->line, 0x4) | in sirfsoc_uart_startup()
1091 SIRFUART_RX_FIFO_CHK_LC(port->line, 0xe) | in sirfsoc_uart_startup()
1092 SIRFUART_RX_FIFO_CHK_HC(port->line, 0x1b)); in sirfsoc_uart_startup()
1095 wr_regl(port, ureg->sirfsoc_tx_fifo_level_chk, in sirfsoc_uart_startup()
1096 SIRFUART_TX_FIFO_CHK_SC(port->line, 0x1b) | in sirfsoc_uart_startup()
1097 SIRFUART_TX_FIFO_CHK_LC(port->line, 0xe) | in sirfsoc_uart_startup()
1098 SIRFUART_TX_FIFO_CHK_HC(port->line, 0x4)); in sirfsoc_uart_startup()
1109 dev_err(port->dev, "UART-USP:request gpio irq fail\n"); in sirfsoc_uart_startup()
1114 enable_irq(port->irq); in sirfsoc_uart_startup()
1118 free_irq(port->irq, sirfport); in sirfsoc_uart_startup()
1123 static void sirfsoc_uart_shutdown(struct uart_port *port) in sirfsoc_uart_shutdown() argument
1125 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_shutdown()
1128 wr_regl(port, ureg->sirfsoc_int_en_reg, 0); in sirfsoc_uart_shutdown()
1130 wr_regl(port, SIRFUART_INT_EN_CLR, ~0UL); in sirfsoc_uart_shutdown()
1132 free_irq(port->irq, sirfport); in sirfsoc_uart_shutdown()
1134 sirfsoc_uart_disable_ms(port); in sirfsoc_uart_shutdown()
1144 static const char *sirfsoc_uart_type(struct uart_port *port) in sirfsoc_uart_type() argument
1146 return port->type == SIRFSOC_PORT_TYPE ? SIRFUART_PORT_NAME : NULL; in sirfsoc_uart_type()
1149 static int sirfsoc_uart_request_port(struct uart_port *port) in sirfsoc_uart_request_port() argument
1151 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_request_port()
1154 ret = request_mem_region(port->mapbase, in sirfsoc_uart_request_port()
1159 static void sirfsoc_uart_release_port(struct uart_port *port) in sirfsoc_uart_release_port() argument
1161 release_mem_region(port->mapbase, SIRFUART_MAP_SIZE); in sirfsoc_uart_release_port()
1164 static void sirfsoc_uart_config_port(struct uart_port *port, int flags) in sirfsoc_uart_config_port() argument
1167 port->type = SIRFSOC_PORT_TYPE; in sirfsoc_uart_config_port()
1168 sirfsoc_uart_request_port(port); in sirfsoc_uart_config_port()
1199 struct uart_port *port = &sirfsoc_uart_ports[co->index].port; in sirfsoc_uart_console_setup() local
1200 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_console_setup()
1205 if (!port->mapbase) in sirfsoc_uart_console_setup()
1210 wr_regl(port, ureg->sirfsoc_mode1, SIRFSOC_USP_EN | in sirfsoc_uart_console_setup()
1214 port->cons = co; in sirfsoc_uart_console_setup()
1219 return uart_set_options(port, co, baud, parity, bits, flow); in sirfsoc_uart_console_setup()
1222 static void sirfsoc_uart_console_putchar(struct uart_port *port, int ch) in sirfsoc_uart_console_putchar() argument
1224 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_console_putchar()
1227 while (rd_regl(port, in sirfsoc_uart_console_putchar()
1228 ureg->sirfsoc_tx_fifo_status) & ufifo_st->ff_full(port->line)) in sirfsoc_uart_console_putchar()
1230 wr_regl(port, ureg->sirfsoc_tx_fifo_data, ch); in sirfsoc_uart_console_putchar()
1236 struct uart_port *port = &sirfsoc_uart_ports[co->index].port; in sirfsoc_uart_console_write() local
1237 uart_console_write(port, s, count, sirfsoc_uart_console_putchar); in sirfsoc_uart_console_write()
1283 struct uart_port *port; in sirfsoc_uart_probe() local
1306 port = &sirfport->port; in sirfsoc_uart_probe()
1307 port->dev = &pdev->dev; in sirfsoc_uart_probe()
1308 port->private_data = sirfport; in sirfsoc_uart_probe()
1358 &port->fifosize)) { in sirfsoc_uart_probe()
1375 port->mapbase = res->start; in sirfsoc_uart_probe()
1376 port->membase = devm_ioremap(&pdev->dev, res->start, resource_size(res)); in sirfsoc_uart_probe()
1377 if (!port->membase) { in sirfsoc_uart_probe()
1388 port->irq = res->start; in sirfsoc_uart_probe()
1395 port->uartclk = clk_get_rate(sirfport->clk); in sirfsoc_uart_probe()
1411 port->ops = &sirfsoc_uart_ops; in sirfsoc_uart_probe()
1412 spin_lock_init(&port->lock); in sirfsoc_uart_probe()
1415 ret = uart_add_one_port(&sirfsoc_uart_drv, port); in sirfsoc_uart_probe()
1421 sirfport->rx_dma_chan = dma_request_slave_channel(port->dev, "rx"); in sirfsoc_uart_probe()
1424 dma_alloc_coherent(port->dev, SIRFSOC_RX_DMA_BUF_SIZE, in sirfsoc_uart_probe()
1427 dev_err(port->dev, "Uart alloc bufa failed\n"); in sirfsoc_uart_probe()
1436 sirfport->tx_dma_chan = dma_request_slave_channel(port->dev, "tx"); in sirfsoc_uart_probe()
1443 dma_free_coherent(port->dev, SIRFSOC_RX_DMA_BUF_SIZE, in sirfsoc_uart_probe()
1454 struct uart_port *port = &sirfport->port; in sirfsoc_uart_remove() local
1455 uart_remove_one_port(&sirfsoc_uart_drv, port); in sirfsoc_uart_remove()
1461 dma_free_coherent(port->dev, SIRFSOC_RX_DMA_BUF_SIZE, in sirfsoc_uart_remove()
1477 struct uart_port *port = &sirfport->port; in sirfsoc_uart_suspend() local
1478 uart_suspend_port(&sirfsoc_uart_drv, port); in sirfsoc_uart_suspend()
1485 struct uart_port *port = &sirfport->port; in sirfsoc_uart_resume() local
1486 uart_resume_port(&sirfsoc_uart_drv, port); in sirfsoc_uart_resume()