Lines Matching full:up
234 static void rp2_rmw(struct rp2_uart_port *up, int reg, in rp2_rmw() argument
237 u32 tmp = readl(up->base + reg); in rp2_rmw()
240 writel(tmp, up->base + reg); in rp2_rmw()
243 static void rp2_rmw_clr(struct rp2_uart_port *up, int reg, u32 val) in rp2_rmw_clr() argument
245 rp2_rmw(up, reg, val, 0); in rp2_rmw_clr()
248 static void rp2_rmw_set(struct rp2_uart_port *up, int reg, u32 val) in rp2_rmw_set() argument
250 rp2_rmw(up, reg, 0, val); in rp2_rmw_set()
253 static void rp2_mask_ch_irq(struct rp2_uart_port *up, int ch_num, in rp2_mask_ch_irq() argument
258 spin_lock_irqsave(&up->card->card_lock, flags); in rp2_mask_ch_irq()
260 irq_mask = readl(up->asic_base + RP2_CH_IRQ_MASK); in rp2_mask_ch_irq()
265 writel(irq_mask, up->asic_base + RP2_CH_IRQ_MASK); in rp2_mask_ch_irq()
267 spin_unlock_irqrestore(&up->card->card_lock, flags); in rp2_mask_ch_irq()
272 struct rp2_uart_port *up = port_to_up(port); in rp2_uart_tx_empty() local
280 spin_lock_irqsave(&up->port.lock, flags); in rp2_uart_tx_empty()
281 tx_fifo_bytes = readw(up->base + RP2_TX_FIFO_COUNT); in rp2_uart_tx_empty()
282 spin_unlock_irqrestore(&up->port.lock, flags); in rp2_uart_tx_empty()
289 struct rp2_uart_port *up = port_to_up(port); in rp2_uart_get_mctrl() local
292 status = readl(up->base + RP2_CHAN_STAT); in rp2_uart_get_mctrl()
338 static void __rp2_uart_set_termios(struct rp2_uart_port *up, in __rp2_uart_set_termios() argument
344 writew(baud_div - 1, up->base + RP2_BAUD); in __rp2_uart_set_termios()
347 rp2_rmw(up, RP2_UART_CTL, in __rp2_uart_set_termios()
356 rp2_rmw(up, RP2_TXRX_CTL, in __rp2_uart_set_termios()
369 up->ucode + RP2_TX_SWFLOW); in __rp2_uart_set_termios()
371 up->ucode + RP2_RX_SWFLOW); in __rp2_uart_set_termios()
378 struct rp2_uart_port *up = port_to_up(port); in rp2_uart_set_termios() local
393 __rp2_uart_set_termios(up, new->c_cflag, new->c_iflag, baud_div); in rp2_uart_set_termios()
399 static void rp2_rx_chars(struct rp2_uart_port *up) in rp2_rx_chars() argument
401 u16 bytes = readw(up->base + RP2_RX_FIFO_COUNT); in rp2_rx_chars()
402 struct tty_port *port = &up->port.state->port; in rp2_rx_chars()
405 u32 byte = readw(up->base + RP2_DATA_BYTE) | RP2_DUMMY_READ; in rp2_rx_chars()
409 if (!uart_handle_sysrq_char(&up->port, ch)) in rp2_rx_chars()
410 uart_insert_char(&up->port, byte, 0, ch, in rp2_rx_chars()
421 uart_insert_char(&up->port, byte, in rp2_rx_chars()
424 up->port.icount.rx++; in rp2_rx_chars()
427 spin_unlock(&up->port.lock); in rp2_rx_chars()
429 spin_lock(&up->port.lock); in rp2_rx_chars()
432 static void rp2_tx_chars(struct rp2_uart_port *up) in rp2_tx_chars() argument
434 u16 max_tx = FIFO_SIZE - readw(up->base + RP2_TX_FIFO_COUNT); in rp2_tx_chars()
435 struct circ_buf *xmit = &up->port.state->xmit; in rp2_tx_chars()
437 if (uart_tx_stopped(&up->port)) { in rp2_tx_chars()
438 rp2_uart_stop_tx(&up->port); in rp2_tx_chars()
443 if (up->port.x_char) { in rp2_tx_chars()
444 writeb(up->port.x_char, up->base + RP2_DATA_BYTE); in rp2_tx_chars()
445 up->port.x_char = 0; in rp2_tx_chars()
446 up->port.icount.tx++; in rp2_tx_chars()
450 rp2_uart_stop_tx(&up->port); in rp2_tx_chars()
453 writeb(xmit->buf[xmit->tail], up->base + RP2_DATA_BYTE); in rp2_tx_chars()
455 up->port.icount.tx++; in rp2_tx_chars()
459 uart_write_wakeup(&up->port); in rp2_tx_chars()
462 static void rp2_ch_interrupt(struct rp2_uart_port *up) in rp2_ch_interrupt() argument
466 spin_lock(&up->port.lock); in rp2_ch_interrupt()
472 status = readl(up->base + RP2_CHAN_STAT); in rp2_ch_interrupt()
473 writel(status, up->base + RP2_CHAN_STAT); in rp2_ch_interrupt()
476 rp2_rx_chars(up); in rp2_ch_interrupt()
478 rp2_tx_chars(up); in rp2_ch_interrupt()
480 wake_up_interruptible(&up->port.state->port.delta_msr_wait); in rp2_ch_interrupt()
482 spin_unlock(&up->port.lock); in rp2_ch_interrupt()
511 static inline void rp2_flush_fifos(struct rp2_uart_port *up) in rp2_flush_fifos() argument
513 rp2_rmw_set(up, RP2_UART_CTL, in rp2_flush_fifos()
515 readl(up->base + RP2_UART_CTL); in rp2_flush_fifos()
517 rp2_rmw_clr(up, RP2_UART_CTL, in rp2_flush_fifos()
523 struct rp2_uart_port *up = port_to_up(port); in rp2_uart_startup() local
525 rp2_flush_fifos(up); in rp2_uart_startup()
526 rp2_rmw(up, RP2_TXRX_CTL, RP2_TXRX_CTL_MSRIRQ_m, RP2_TXRX_CTL_RXIRQ_m); in rp2_uart_startup()
527 rp2_rmw(up, RP2_TXRX_CTL, RP2_TXRX_CTL_RX_TRIG_m, in rp2_uart_startup()
529 rp2_rmw(up, RP2_CHAN_STAT, 0, 0); in rp2_uart_startup()
530 rp2_mask_ch_irq(up, up->idx, 1); in rp2_uart_startup()
537 struct rp2_uart_port *up = port_to_up(port); in rp2_uart_shutdown() local
543 rp2_mask_ch_irq(up, up->idx, 0); in rp2_uart_shutdown()
544 rp2_rmw(up, RP2_CHAN_STAT, 0, 0); in rp2_uart_shutdown()
630 static void rp2_init_port(struct rp2_uart_port *up, const struct firmware *fw) in rp2_init_port() argument
634 writel(RP2_UART_CTL_RESET_CH_m, up->base + RP2_UART_CTL); in rp2_init_port()
635 readl(up->base + RP2_UART_CTL); in rp2_init_port()
638 writel(0, up->base + RP2_TXRX_CTL); in rp2_init_port()
639 writel(0, up->base + RP2_UART_CTL); in rp2_init_port()
640 readl(up->base + RP2_UART_CTL); in rp2_init_port()
643 rp2_flush_fifos(up); in rp2_init_port()
646 writeb(fw->data[i], up->ucode + i); in rp2_init_port()
648 __rp2_uart_set_termios(up, CS8 | CREAD | CLOCAL, 0, DEFAULT_BAUD_DIV); in rp2_init_port()
649 rp2_uart_set_mctrl(&up->port, 0); in rp2_init_port()
651 writeb(RP2_RX_FIFO_ena, up->ucode + RP2_RX_FIFO); in rp2_init_port()
652 rp2_rmw(up, RP2_UART_CTL, RP2_UART_CTL_MODE_m, in rp2_init_port()
654 rp2_rmw_set(up, RP2_TXRX_CTL, in rp2_init_port()