Lines Matching refs:port
35 sirfsoc_uart_pio_rx_chars(struct uart_port *port, unsigned int max_rx_count);
62 static inline struct sirfsoc_uart_port *to_sirfport(struct uart_port *port) in to_sirfport() argument
64 return container_of(port, struct sirfsoc_uart_port, port); in to_sirfport()
67 static inline unsigned int sirfsoc_uart_tx_empty(struct uart_port *port) in sirfsoc_uart_tx_empty() argument
70 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_tx_empty()
73 reg = rd_regl(port, ureg->sirfsoc_tx_fifo_status); in sirfsoc_uart_tx_empty()
74 return (reg & ufifo_st->ff_empty(port)) ? TIOCSER_TEMT : 0; in sirfsoc_uart_tx_empty()
77 static unsigned int sirfsoc_uart_get_mctrl(struct uart_port *port) in sirfsoc_uart_get_mctrl() argument
79 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_get_mctrl()
84 if (!(rd_regl(port, ureg->sirfsoc_afc_ctrl) & in sirfsoc_uart_get_mctrl()
101 static void sirfsoc_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) in sirfsoc_uart_set_mctrl() argument
103 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_set_mctrl()
111 wr_regl(port, ureg->sirfsoc_line_ctrl, in sirfsoc_uart_set_mctrl()
112 rd_regl(port, ureg->sirfsoc_line_ctrl) | in sirfsoc_uart_set_mctrl()
115 wr_regl(port, ureg->sirfsoc_mode1, in sirfsoc_uart_set_mctrl()
116 rd_regl(port, ureg->sirfsoc_mode1) | in sirfsoc_uart_set_mctrl()
120 wr_regl(port, ureg->sirfsoc_line_ctrl, in sirfsoc_uart_set_mctrl()
121 rd_regl(port, ureg->sirfsoc_line_ctrl) & in sirfsoc_uart_set_mctrl()
124 wr_regl(port, ureg->sirfsoc_mode1, in sirfsoc_uart_set_mctrl()
125 rd_regl(port, ureg->sirfsoc_mode1) & in sirfsoc_uart_set_mctrl()
132 current_val = rd_regl(port, ureg->sirfsoc_afc_ctrl) & ~0xFF; in sirfsoc_uart_set_mctrl()
134 wr_regl(port, ureg->sirfsoc_afc_ctrl, val); in sirfsoc_uart_set_mctrl()
143 static void sirfsoc_uart_stop_tx(struct uart_port *port) in sirfsoc_uart_stop_tx() argument
145 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_stop_tx()
155 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_stop_tx()
156 rd_regl(port, ureg->sirfsoc_int_en_reg) & in sirfsoc_uart_stop_tx()
159 wr_regl(port, ureg->sirfsoc_int_en_clr_reg, in sirfsoc_uart_stop_tx()
164 wr_regl(port, ureg->sirfsoc_tx_rx_en, rd_regl(port, in sirfsoc_uart_stop_tx()
167 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_stop_tx()
168 rd_regl(port, ureg->sirfsoc_int_en_reg) & in sirfsoc_uart_stop_tx()
171 wr_regl(port, ureg->sirfsoc_int_en_clr_reg, in sirfsoc_uart_stop_tx()
178 struct uart_port *port = &sirfport->port; in sirfsoc_uart_tx_with_dma() local
181 struct circ_buf *xmit = &port->state->xmit; in sirfsoc_uart_tx_with_dma()
188 if (uart_circ_empty(xmit) || uart_tx_stopped(port) || in sirfsoc_uart_tx_with_dma()
198 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_tx_with_dma()
199 rd_regl(port, ureg->sirfsoc_int_en_reg)& in sirfsoc_uart_tx_with_dma()
202 wr_regl(port, ureg->sirfsoc_int_en_clr_reg, in sirfsoc_uart_tx_with_dma()
213 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_STOP); in sirfsoc_uart_tx_with_dma()
214 wr_regl(port, ureg->sirfsoc_tx_dma_io_ctrl, in sirfsoc_uart_tx_with_dma()
215 rd_regl(port, ureg->sirfsoc_tx_dma_io_ctrl)| in sirfsoc_uart_tx_with_dma()
225 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_tx_with_dma()
226 rd_regl(port, ureg->sirfsoc_int_en_reg)| in sirfsoc_uart_tx_with_dma()
229 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_tx_with_dma()
231 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_START); in sirfsoc_uart_tx_with_dma()
234 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_STOP); in sirfsoc_uart_tx_with_dma()
235 wr_regl(port, ureg->sirfsoc_tx_dma_io_ctrl, in sirfsoc_uart_tx_with_dma()
236 rd_regl(port, ureg->sirfsoc_tx_dma_io_ctrl)& in sirfsoc_uart_tx_with_dma()
238 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_START); in sirfsoc_uart_tx_with_dma()
241 sirfport->tx_dma_addr = dma_map_single(port->dev, in sirfsoc_uart_tx_with_dma()
248 dev_err(port->dev, "DMA prep slave single fail\n"); in sirfsoc_uart_tx_with_dma()
262 static void sirfsoc_uart_start_tx(struct uart_port *port) in sirfsoc_uart_start_tx() argument
264 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_start_tx()
271 wr_regl(port, ureg->sirfsoc_tx_rx_en, rd_regl(port, in sirfsoc_uart_start_tx()
273 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_STOP); in sirfsoc_uart_start_tx()
274 sirfsoc_uart_pio_tx_chars(sirfport, port->fifosize); in sirfsoc_uart_start_tx()
275 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_START); in sirfsoc_uart_start_tx()
277 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_start_tx()
278 rd_regl(port, ureg->sirfsoc_int_en_reg)| in sirfsoc_uart_start_tx()
281 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_start_tx()
286 static void sirfsoc_uart_stop_rx(struct uart_port *port) in sirfsoc_uart_stop_rx() argument
288 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_stop_rx()
292 wr_regl(port, ureg->sirfsoc_rx_fifo_op, 0); in sirfsoc_uart_stop_rx()
295 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_stop_rx()
296 rd_regl(port, ureg->sirfsoc_int_en_reg) & in sirfsoc_uart_stop_rx()
301 wr_regl(port, ureg->sirfsoc_int_en_clr_reg, in sirfsoc_uart_stop_rx()
308 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_stop_rx()
309 rd_regl(port, ureg->sirfsoc_int_en_reg)& in sirfsoc_uart_stop_rx()
313 wr_regl(port, ureg->sirfsoc_int_en_clr_reg, in sirfsoc_uart_stop_rx()
319 static void sirfsoc_uart_disable_ms(struct uart_port *port) in sirfsoc_uart_disable_ms() argument
321 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_disable_ms()
329 wr_regl(port, ureg->sirfsoc_afc_ctrl, in sirfsoc_uart_disable_ms()
330 rd_regl(port, ureg->sirfsoc_afc_ctrl) & ~0x3FF); in sirfsoc_uart_disable_ms()
332 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_disable_ms()
333 rd_regl(port, ureg->sirfsoc_int_en_reg)& in sirfsoc_uart_disable_ms()
336 wr_regl(port, ureg->sirfsoc_int_en_clr_reg, in sirfsoc_uart_disable_ms()
345 struct uart_port *port = &sirfport->port; in sirfsoc_uart_usp_cts_handler() local
346 spin_lock(&port->lock); in sirfsoc_uart_usp_cts_handler()
348 uart_handle_cts_change(port, in sirfsoc_uart_usp_cts_handler()
350 spin_unlock(&port->lock); in sirfsoc_uart_usp_cts_handler()
354 static void sirfsoc_uart_enable_ms(struct uart_port *port) in sirfsoc_uart_enable_ms() argument
356 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_enable_ms()
364 wr_regl(port, ureg->sirfsoc_afc_ctrl, in sirfsoc_uart_enable_ms()
365 rd_regl(port, ureg->sirfsoc_afc_ctrl) | in sirfsoc_uart_enable_ms()
369 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_enable_ms()
370 rd_regl(port, ureg->sirfsoc_int_en_reg) in sirfsoc_uart_enable_ms()
373 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_enable_ms()
379 static void sirfsoc_uart_break_ctl(struct uart_port *port, int break_state) in sirfsoc_uart_break_ctl() argument
381 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_break_ctl()
384 unsigned long ulcon = rd_regl(port, ureg->sirfsoc_line_ctrl); in sirfsoc_uart_break_ctl()
389 wr_regl(port, ureg->sirfsoc_line_ctrl, ulcon); in sirfsoc_uart_break_ctl()
394 sirfsoc_uart_pio_rx_chars(struct uart_port *port, unsigned int max_rx_count) in sirfsoc_uart_pio_rx_chars() argument
396 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_pio_rx_chars()
401 tty = tty_port_tty_get(&port->state->port); in sirfsoc_uart_pio_rx_chars()
404 while (!(rd_regl(port, ureg->sirfsoc_rx_fifo_status) & in sirfsoc_uart_pio_rx_chars()
405 ufifo_st->ff_empty(port))) { in sirfsoc_uart_pio_rx_chars()
406 ch = rd_regl(port, ureg->sirfsoc_rx_fifo_data) | in sirfsoc_uart_pio_rx_chars()
408 if (unlikely(uart_handle_sysrq_char(port, ch))) in sirfsoc_uart_pio_rx_chars()
410 uart_insert_char(port, 0, 0, ch, TTY_NORMAL); in sirfsoc_uart_pio_rx_chars()
416 port->icount.rx += rx_count; in sirfsoc_uart_pio_rx_chars()
424 struct uart_port *port = &sirfport->port; in sirfsoc_uart_pio_tx_chars() local
427 struct circ_buf *xmit = &port->state->xmit; in sirfsoc_uart_pio_tx_chars()
430 !(rd_regl(port, ureg->sirfsoc_tx_fifo_status) & in sirfsoc_uart_pio_tx_chars()
431 ufifo_st->ff_full(port)) && in sirfsoc_uart_pio_tx_chars()
433 wr_regl(port, ureg->sirfsoc_tx_fifo_data, in sirfsoc_uart_pio_tx_chars()
436 port->icount.tx++; in sirfsoc_uart_pio_tx_chars()
440 uart_write_wakeup(port); in sirfsoc_uart_pio_tx_chars()
447 struct uart_port *port = &sirfport->port; in sirfsoc_uart_tx_dma_complete_callback() local
448 struct circ_buf *xmit = &port->state->xmit; in sirfsoc_uart_tx_dma_complete_callback()
451 spin_lock_irqsave(&port->lock, flags); in sirfsoc_uart_tx_dma_complete_callback()
454 port->icount.tx += sirfport->transfer_size; in sirfsoc_uart_tx_dma_complete_callback()
456 uart_write_wakeup(port); in sirfsoc_uart_tx_dma_complete_callback()
458 dma_unmap_single(port->dev, sirfport->tx_dma_addr, in sirfsoc_uart_tx_dma_complete_callback()
462 spin_unlock_irqrestore(&port->lock, flags); in sirfsoc_uart_tx_dma_complete_callback()
471 struct uart_port *port = &sirfport->port; in sirfsoc_uart_isr() local
476 struct uart_state *state = port->state; in sirfsoc_uart_isr()
477 struct circ_buf *xmit = &port->state->xmit; in sirfsoc_uart_isr()
478 spin_lock(&port->lock); in sirfsoc_uart_isr()
479 intr_status = rd_regl(port, ureg->sirfsoc_int_st_reg); in sirfsoc_uart_isr()
480 wr_regl(port, ureg->sirfsoc_int_st_reg, intr_status); in sirfsoc_uart_isr()
481 intr_status &= rd_regl(port, ureg->sirfsoc_int_en_reg); in sirfsoc_uart_isr()
485 port->icount.brk++; in sirfsoc_uart_isr()
486 if (uart_handle_break(port)) in sirfsoc_uart_isr()
490 port->icount.overrun++; in sirfsoc_uart_isr()
494 port->icount.frame++; in sirfsoc_uart_isr()
498 port->icount.parity++; in sirfsoc_uart_isr()
501 wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_RESET); in sirfsoc_uart_isr()
502 wr_regl(port, ureg->sirfsoc_rx_fifo_op, 0); in sirfsoc_uart_isr()
503 wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_START); in sirfsoc_uart_isr()
504 intr_status &= port->read_status_mask; in sirfsoc_uart_isr()
505 uart_insert_char(port, intr_status, in sirfsoc_uart_isr()
512 cts_status = rd_regl(port, ureg->sirfsoc_afc_ctrl) & in sirfsoc_uart_isr()
518 uart_handle_cts_change(port, cts_status); in sirfsoc_uart_isr()
519 wake_up_interruptible(&state->port.delta_msr_wait); in sirfsoc_uart_isr()
535 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_isr()
536 rd_regl(port, ureg->sirfsoc_int_en_reg) in sirfsoc_uart_isr()
538 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_isr()
539 rd_regl(port, ureg->sirfsoc_int_en_reg) in sirfsoc_uart_isr()
542 wr_regl(port, ureg->sirfsoc_int_en_clr_reg, in sirfsoc_uart_isr()
544 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_isr()
550 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_isr()
551 rd_regl(port, ureg->sirfsoc_int_en_reg) in sirfsoc_uart_isr()
553 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_isr()
554 rd_regl(port, ureg->sirfsoc_int_en_reg) in sirfsoc_uart_isr()
557 wr_regl(port, in sirfsoc_uart_isr()
560 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_isr()
564 sirfsoc_uart_pio_rx_chars(port, port->fifosize); in sirfsoc_uart_isr()
567 spin_unlock(&port->lock); in sirfsoc_uart_isr()
568 tty_flip_buffer_push(&state->port); in sirfsoc_uart_isr()
569 spin_lock(&port->lock); in sirfsoc_uart_isr()
574 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { in sirfsoc_uart_isr()
575 spin_unlock(&port->lock); in sirfsoc_uart_isr()
579 port->fifosize); in sirfsoc_uart_isr()
581 (rd_regl(port, ureg->sirfsoc_tx_fifo_status) & in sirfsoc_uart_isr()
582 ufifo_st->ff_empty(port))) in sirfsoc_uart_isr()
583 sirfsoc_uart_stop_tx(port); in sirfsoc_uart_isr()
587 spin_unlock(&port->lock); in sirfsoc_uart_isr()
597 static void sirfsoc_uart_start_next_rx_dma(struct uart_port *port) in sirfsoc_uart_start_next_rx_dma() argument
599 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_start_next_rx_dma()
602 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_uart_start_next_rx_dma()
603 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) & in sirfsoc_uart_start_next_rx_dma()
613 dev_err(port->dev, "DMA slave single fail\n"); in sirfsoc_uart_start_next_rx_dma()
623 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_start_next_rx_dma()
624 rd_regl(port, ureg->sirfsoc_int_en_reg) | in sirfsoc_uart_start_next_rx_dma()
628 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_start_next_rx_dma()
694 static void sirfsoc_uart_set_termios(struct uart_port *port, in sirfsoc_uart_set_termios() argument
698 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_set_termios()
712 ioclk_rate = port->uartclk; in sirfsoc_uart_set_termios()
739 spin_lock_irqsave(&port->lock, flags); in sirfsoc_uart_set_termios()
740 port->read_status_mask = uint_en->sirfsoc_rx_oflow_en; in sirfsoc_uart_set_termios()
741 port->ignore_status_mask = 0; in sirfsoc_uart_set_termios()
744 port->read_status_mask |= uint_en->sirfsoc_frm_err_en | in sirfsoc_uart_set_termios()
748 port->read_status_mask |= uint_en->sirfsoc_frm_err_en; in sirfsoc_uart_set_termios()
751 port->read_status_mask |= uint_en->sirfsoc_rxd_brk_en; in sirfsoc_uart_set_termios()
754 port->ignore_status_mask |= in sirfsoc_uart_set_termios()
772 port->ignore_status_mask |= in sirfsoc_uart_set_termios()
775 dev_warn(port->dev, in sirfsoc_uart_set_termios()
779 port->ignore_status_mask |= in sirfsoc_uart_set_termios()
782 port->ignore_status_mask |= in sirfsoc_uart_set_termios()
786 port->ignore_status_mask |= SIRFUART_DUMMY_READ; in sirfsoc_uart_set_termios()
788 if (UART_ENABLE_MS(port, termios->c_cflag)) { in sirfsoc_uart_set_termios()
790 sirfsoc_uart_enable_ms(port); in sirfsoc_uart_set_termios()
793 sirfsoc_uart_disable_ms(port); in sirfsoc_uart_set_termios()
795 baud_rate = uart_get_baud_rate(port, termios, old, 0, 4000000); in sirfsoc_uart_set_termios()
806 wr_regl(port, ureg->sirfsoc_divisor, clk_div_reg); in sirfsoc_uart_set_termios()
818 wr_regl(port, ureg->sirfsoc_mode2, len_val); in sirfsoc_uart_set_termios()
825 txfifo_op_reg = rd_regl(port, ureg->sirfsoc_tx_fifo_op); in sirfsoc_uart_set_termios()
826 wr_regl(port, ureg->sirfsoc_tx_fifo_op, in sirfsoc_uart_set_termios()
830 wr_regl(port, ureg->sirfsoc_line_ctrl, config_reg); in sirfsoc_uart_set_termios()
840 wr_regl(port, ureg->sirfsoc_tx_frame_ctrl, len_val); in sirfsoc_uart_set_termios()
849 wr_regl(port, ureg->sirfsoc_rx_frame_ctrl, len_val); in sirfsoc_uart_set_termios()
851 wr_regl(port, ureg->sirfsoc_async_param_reg, in sirfsoc_uart_set_termios()
857 wr_regl(port, ureg->sirfsoc_tx_dma_io_ctrl, SIRFUART_DMA_MODE); in sirfsoc_uart_set_termios()
859 wr_regl(port, ureg->sirfsoc_tx_dma_io_ctrl, SIRFUART_IO_MODE); in sirfsoc_uart_set_termios()
861 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_uart_set_termios()
862 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) & in sirfsoc_uart_set_termios()
865 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_uart_set_termios()
866 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) | in sirfsoc_uart_set_termios()
874 wr_regl(port, ureg->sirfsoc_tx_fifo_ctrl, in sirfsoc_uart_set_termios()
875 SIRFUART_FIFO_THD(port) / threshold_div); in sirfsoc_uart_set_termios()
876 wr_regl(port, ureg->sirfsoc_rx_fifo_ctrl, in sirfsoc_uart_set_termios()
877 SIRFUART_FIFO_THD(port) / threshold_div); in sirfsoc_uart_set_termios()
879 wr_regl(port, ureg->sirfsoc_tx_fifo_op, txfifo_op_reg); in sirfsoc_uart_set_termios()
880 uart_update_timeout(port, termios->c_cflag, set_baud); in sirfsoc_uart_set_termios()
881 wr_regl(port, ureg->sirfsoc_tx_rx_en, SIRFUART_TX_EN | SIRFUART_RX_EN); in sirfsoc_uart_set_termios()
882 spin_unlock_irqrestore(&port->lock, flags); in sirfsoc_uart_set_termios()
885 static void sirfsoc_uart_pm(struct uart_port *port, unsigned int state, in sirfsoc_uart_pm() argument
888 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_pm()
895 static int sirfsoc_uart_startup(struct uart_port *port) in sirfsoc_uart_startup() argument
897 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_startup()
900 unsigned int index = port->line; in sirfsoc_uart_startup()
902 irq_modify_status(port->irq, IRQ_NOREQUEST, IRQ_NOAUTOEN); in sirfsoc_uart_startup()
903 ret = request_irq(port->irq, in sirfsoc_uart_startup()
909 dev_err(port->dev, "UART%d request IRQ line (%d) failed.\n", in sirfsoc_uart_startup()
910 index, port->irq); in sirfsoc_uart_startup()
914 wr_regl(port, ureg->sirfsoc_tx_dma_io_ctrl, in sirfsoc_uart_startup()
915 rd_regl(port, ureg->sirfsoc_tx_dma_io_ctrl) | in sirfsoc_uart_startup()
917 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_uart_startup()
918 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) | in sirfsoc_uart_startup()
920 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_uart_startup()
921 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) & in sirfsoc_uart_startup()
923 wr_regl(port, ureg->sirfsoc_tx_dma_io_len, 0); in sirfsoc_uart_startup()
924 wr_regl(port, ureg->sirfsoc_rx_dma_io_len, 0); in sirfsoc_uart_startup()
925 wr_regl(port, ureg->sirfsoc_tx_rx_en, SIRFUART_RX_EN | SIRFUART_TX_EN); in sirfsoc_uart_startup()
927 wr_regl(port, ureg->sirfsoc_mode1, in sirfsoc_uart_startup()
930 wr_regl(port, ureg->sirfsoc_tx_fifo_op, SIRFUART_FIFO_RESET); in sirfsoc_uart_startup()
931 wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_RESET); in sirfsoc_uart_startup()
932 wr_regl(port, ureg->sirfsoc_rx_fifo_op, 0); in sirfsoc_uart_startup()
933 wr_regl(port, ureg->sirfsoc_tx_fifo_ctrl, SIRFUART_FIFO_THD(port)); in sirfsoc_uart_startup()
934 wr_regl(port, ureg->sirfsoc_rx_fifo_ctrl, SIRFUART_FIFO_THD(port)); in sirfsoc_uart_startup()
936 wr_regl(port, ureg->sirfsoc_rx_fifo_level_chk, in sirfsoc_uart_startup()
937 SIRFUART_RX_FIFO_CHK_SC(port->line, 0x1) | in sirfsoc_uart_startup()
938 SIRFUART_RX_FIFO_CHK_LC(port->line, 0x2) | in sirfsoc_uart_startup()
939 SIRFUART_RX_FIFO_CHK_HC(port->line, 0x4)); in sirfsoc_uart_startup()
942 wr_regl(port, ureg->sirfsoc_tx_fifo_level_chk, in sirfsoc_uart_startup()
943 SIRFUART_TX_FIFO_CHK_SC(port->line, 0x1b) | in sirfsoc_uart_startup()
944 SIRFUART_TX_FIFO_CHK_LC(port->line, 0xe) | in sirfsoc_uart_startup()
945 SIRFUART_TX_FIFO_CHK_HC(port->line, 0x4)); in sirfsoc_uart_startup()
956 dev_err(port->dev, "UART-USP:request gpio irq fail\n"); in sirfsoc_uart_startup()
962 wr_regl(port, ureg->sirfsoc_swh_dma_io, in sirfsoc_uart_startup()
966 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_uart_startup()
967 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) | in sirfsoc_uart_startup()
980 wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_START); in sirfsoc_uart_startup()
982 sirfsoc_uart_start_next_rx_dma(port); in sirfsoc_uart_startup()
985 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_startup()
986 rd_regl(port, ureg->sirfsoc_int_en_reg) | in sirfsoc_uart_startup()
990 wr_regl(port, ureg->sirfsoc_int_en_reg, in sirfsoc_uart_startup()
994 enable_irq(port->irq); in sirfsoc_uart_startup()
998 free_irq(port->irq, sirfport); in sirfsoc_uart_startup()
1003 static void sirfsoc_uart_shutdown(struct uart_port *port) in sirfsoc_uart_shutdown() argument
1005 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_shutdown()
1011 wr_regl(port, ureg->sirfsoc_int_en_reg, 0); in sirfsoc_uart_shutdown()
1013 wr_regl(port, ureg->sirfsoc_int_en_clr_reg, ~0UL); in sirfsoc_uart_shutdown()
1015 free_irq(port->irq, sirfport); in sirfsoc_uart_shutdown()
1017 sirfsoc_uart_disable_ms(port); in sirfsoc_uart_shutdown()
1026 while (((rd_regl(port, ureg->sirfsoc_rx_fifo_status) & in sirfsoc_uart_shutdown()
1036 static const char *sirfsoc_uart_type(struct uart_port *port) in sirfsoc_uart_type() argument
1038 return port->type == SIRFSOC_PORT_TYPE ? SIRFUART_PORT_NAME : NULL; in sirfsoc_uart_type()
1041 static int sirfsoc_uart_request_port(struct uart_port *port) in sirfsoc_uart_request_port() argument
1043 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_request_port()
1046 ret = request_mem_region(port->mapbase, in sirfsoc_uart_request_port()
1051 static void sirfsoc_uart_release_port(struct uart_port *port) in sirfsoc_uart_release_port() argument
1053 release_mem_region(port->mapbase, SIRFUART_MAP_SIZE); in sirfsoc_uart_release_port()
1056 static void sirfsoc_uart_config_port(struct uart_port *port, int flags) in sirfsoc_uart_config_port() argument
1059 port->type = SIRFSOC_PORT_TYPE; in sirfsoc_uart_config_port()
1060 sirfsoc_uart_request_port(port); in sirfsoc_uart_config_port()
1099 if (!sirfport->port.mapbase) in sirfsoc_uart_console_setup()
1104 wr_regl(&sirfport->port, ureg->sirfsoc_mode1, SIRFSOC_USP_EN | in sirfsoc_uart_console_setup()
1108 sirfport->port.cons = co; in sirfsoc_uart_console_setup()
1113 return uart_set_options(&sirfport->port, co, baud, parity, bits, flow); in sirfsoc_uart_console_setup()
1116 static void sirfsoc_uart_console_putchar(struct uart_port *port, int ch) in sirfsoc_uart_console_putchar() argument
1118 struct sirfsoc_uart_port *sirfport = to_sirfport(port); in sirfsoc_uart_console_putchar()
1121 while (rd_regl(port, ureg->sirfsoc_tx_fifo_status) & in sirfsoc_uart_console_putchar()
1122 ufifo_st->ff_full(port)) in sirfsoc_uart_console_putchar()
1124 wr_regl(port, ureg->sirfsoc_tx_fifo_data, ch); in sirfsoc_uart_console_putchar()
1132 uart_console_write(&sirfport->port, s, count, in sirfsoc_uart_console_write()
1172 struct uart_port *port; in sirfsoc_uart_rx_dma_hrtimer_callback() local
1182 port = &sirfport->port; in sirfsoc_uart_rx_dma_hrtimer_callback()
1184 tty = port->state->port.tty; in sirfsoc_uart_rx_dma_hrtimer_callback()
1200 inserted = tty_insert_flip_string(tty->port, in sirfsoc_uart_rx_dma_hrtimer_callback()
1204 port->icount.rx += inserted; in sirfsoc_uart_rx_dma_hrtimer_callback()
1209 tty_flip_buffer_push(tty->port); in sirfsoc_uart_rx_dma_hrtimer_callback()
1217 ((rd_regl(port, ureg->sirfsoc_rx_fifo_status) & in sirfsoc_uart_rx_dma_hrtimer_callback()
1221 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_uart_rx_dma_hrtimer_callback()
1222 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) | in sirfsoc_uart_rx_dma_hrtimer_callback()
1237 while (!(rd_regl(port, ureg->sirfsoc_rx_fifo_status) & in sirfsoc_uart_rx_dma_hrtimer_callback()
1238 ufifo_st->ff_empty(port)) && max_pio_cnt--) { in sirfsoc_uart_rx_dma_hrtimer_callback()
1240 rd_regl(port, ureg->sirfsoc_rx_fifo_data); in sirfsoc_uart_rx_dma_hrtimer_callback()
1246 wr_regl(port, ureg->sirfsoc_rx_dma_io_ctrl, in sirfsoc_uart_rx_dma_hrtimer_callback()
1247 rd_regl(port, ureg->sirfsoc_rx_dma_io_ctrl) & in sirfsoc_uart_rx_dma_hrtimer_callback()
1268 struct uart_port *port; in sirfsoc_uart_probe() local
1285 sirfport->port.line = of_alias_get_id(pdev->dev.of_node, "serial"); in sirfsoc_uart_probe()
1286 sirf_ports[sirfport->port.line] = sirfport; in sirfsoc_uart_probe()
1287 sirfport->port.iotype = UPIO_MEM; in sirfsoc_uart_probe()
1288 sirfport->port.flags = UPF_BOOT_AUTOCONF; in sirfsoc_uart_probe()
1289 port = &sirfport->port; in sirfsoc_uart_probe()
1290 port->dev = &pdev->dev; in sirfsoc_uart_probe()
1291 port->private_data = sirfport; in sirfsoc_uart_probe()
1345 &port->fifosize)) { in sirfsoc_uart_probe()
1358 port->mapbase = res->start; in sirfsoc_uart_probe()
1359 port->membase = devm_ioremap(&pdev->dev, in sirfsoc_uart_probe()
1361 if (!port->membase) { in sirfsoc_uart_probe()
1372 port->irq = res->start; in sirfsoc_uart_probe()
1379 port->uartclk = clk_get_rate(sirfport->clk); in sirfsoc_uart_probe()
1381 port->ops = &sirfsoc_uart_ops; in sirfsoc_uart_probe()
1382 spin_lock_init(&port->lock); in sirfsoc_uart_probe()
1385 ret = uart_add_one_port(&sirfsoc_uart_drv, port); in sirfsoc_uart_probe()
1391 sirfport->rx_dma_chan = dma_request_slave_channel(port->dev, "rx"); in sirfsoc_uart_probe()
1393 dma_alloc_coherent(port->dev, SIRFSOC_RX_DMA_BUF_SIZE, in sirfsoc_uart_probe()
1396 dev_err(port->dev, "Uart alloc bufa failed\n"); in sirfsoc_uart_probe()
1404 sirfport->tx_dma_chan = dma_request_slave_channel(port->dev, "tx"); in sirfsoc_uart_probe()
1415 dma_free_coherent(port->dev, SIRFSOC_RX_DMA_BUF_SIZE, in sirfsoc_uart_probe()
1426 struct uart_port *port = &sirfport->port; in sirfsoc_uart_remove() local
1427 uart_remove_one_port(&sirfsoc_uart_drv, port); in sirfsoc_uart_remove()
1431 dma_free_coherent(port->dev, SIRFSOC_RX_DMA_BUF_SIZE, in sirfsoc_uart_remove()
1447 struct uart_port *port = &sirfport->port; in sirfsoc_uart_suspend() local
1448 uart_suspend_port(&sirfsoc_uart_drv, port); in sirfsoc_uart_suspend()
1455 struct uart_port *port = &sirfport->port; in sirfsoc_uart_resume() local
1456 uart_resume_port(&sirfsoc_uart_drv, port); in sirfsoc_uart_resume()