Lines Matching refs:up
237 static void rp2_rmw(struct rp2_uart_port *up, int reg, in rp2_rmw() argument
240 u32 tmp = readl(up->base + reg); in rp2_rmw()
243 writel(tmp, up->base + reg); in rp2_rmw()
246 static void rp2_rmw_clr(struct rp2_uart_port *up, int reg, u32 val) in rp2_rmw_clr() argument
248 rp2_rmw(up, reg, val, 0); in rp2_rmw_clr()
251 static void rp2_rmw_set(struct rp2_uart_port *up, int reg, u32 val) in rp2_rmw_set() argument
253 rp2_rmw(up, reg, 0, val); in rp2_rmw_set()
256 static void rp2_mask_ch_irq(struct rp2_uart_port *up, int ch_num, in rp2_mask_ch_irq() argument
261 spin_lock_irqsave(&up->card->card_lock, flags); in rp2_mask_ch_irq()
263 irq_mask = readl(up->asic_base + RP2_CH_IRQ_MASK); in rp2_mask_ch_irq()
268 writel(irq_mask, up->asic_base + RP2_CH_IRQ_MASK); in rp2_mask_ch_irq()
270 spin_unlock_irqrestore(&up->card->card_lock, flags); in rp2_mask_ch_irq()
275 struct rp2_uart_port *up = port_to_up(port); in rp2_uart_tx_empty() local
283 spin_lock_irqsave(&up->port.lock, flags); in rp2_uart_tx_empty()
284 tx_fifo_bytes = readw(up->base + RP2_TX_FIFO_COUNT); in rp2_uart_tx_empty()
285 spin_unlock_irqrestore(&up->port.lock, flags); in rp2_uart_tx_empty()
292 struct rp2_uart_port *up = port_to_up(port); in rp2_uart_get_mctrl() local
295 status = readl(up->base + RP2_CHAN_STAT); in rp2_uart_get_mctrl()
341 static void __rp2_uart_set_termios(struct rp2_uart_port *up, in __rp2_uart_set_termios() argument
347 writew(baud_div - 1, up->base + RP2_BAUD); in __rp2_uart_set_termios()
350 rp2_rmw(up, RP2_UART_CTL, in __rp2_uart_set_termios()
359 rp2_rmw(up, RP2_TXRX_CTL, in __rp2_uart_set_termios()
372 up->ucode + RP2_TX_SWFLOW); in __rp2_uart_set_termios()
374 up->ucode + RP2_RX_SWFLOW); in __rp2_uart_set_termios()
381 struct rp2_uart_port *up = port_to_up(port); in rp2_uart_set_termios() local
396 __rp2_uart_set_termios(up, new->c_cflag, new->c_iflag, baud_div); in rp2_uart_set_termios()
402 static void rp2_rx_chars(struct rp2_uart_port *up) in rp2_rx_chars() argument
404 u16 bytes = readw(up->base + RP2_RX_FIFO_COUNT); in rp2_rx_chars()
405 struct tty_port *port = &up->port.state->port; in rp2_rx_chars()
408 u32 byte = readw(up->base + RP2_DATA_BYTE) | RP2_DUMMY_READ; in rp2_rx_chars()
412 if (!uart_handle_sysrq_char(&up->port, ch)) in rp2_rx_chars()
413 uart_insert_char(&up->port, byte, 0, ch, in rp2_rx_chars()
424 uart_insert_char(&up->port, byte, in rp2_rx_chars()
427 up->port.icount.rx++; in rp2_rx_chars()
430 spin_unlock(&up->port.lock); in rp2_rx_chars()
432 spin_lock(&up->port.lock); in rp2_rx_chars()
435 static void rp2_tx_chars(struct rp2_uart_port *up) in rp2_tx_chars() argument
437 u16 max_tx = FIFO_SIZE - readw(up->base + RP2_TX_FIFO_COUNT); in rp2_tx_chars()
438 struct circ_buf *xmit = &up->port.state->xmit; in rp2_tx_chars()
440 if (uart_tx_stopped(&up->port)) { in rp2_tx_chars()
441 rp2_uart_stop_tx(&up->port); in rp2_tx_chars()
446 if (up->port.x_char) { in rp2_tx_chars()
447 writeb(up->port.x_char, up->base + RP2_DATA_BYTE); in rp2_tx_chars()
448 up->port.x_char = 0; in rp2_tx_chars()
449 up->port.icount.tx++; in rp2_tx_chars()
453 rp2_uart_stop_tx(&up->port); in rp2_tx_chars()
456 writeb(xmit->buf[xmit->tail], up->base + RP2_DATA_BYTE); in rp2_tx_chars()
458 up->port.icount.tx++; in rp2_tx_chars()
462 uart_write_wakeup(&up->port); in rp2_tx_chars()
465 static void rp2_ch_interrupt(struct rp2_uart_port *up) in rp2_ch_interrupt() argument
469 spin_lock(&up->port.lock); in rp2_ch_interrupt()
475 status = readl(up->base + RP2_CHAN_STAT); in rp2_ch_interrupt()
476 writel(status, up->base + RP2_CHAN_STAT); in rp2_ch_interrupt()
479 rp2_rx_chars(up); in rp2_ch_interrupt()
481 rp2_tx_chars(up); in rp2_ch_interrupt()
483 wake_up_interruptible(&up->port.state->port.delta_msr_wait); in rp2_ch_interrupt()
485 spin_unlock(&up->port.lock); in rp2_ch_interrupt()
514 static inline void rp2_flush_fifos(struct rp2_uart_port *up) in rp2_flush_fifos() argument
516 rp2_rmw_set(up, RP2_UART_CTL, in rp2_flush_fifos()
518 readl(up->base + RP2_UART_CTL); in rp2_flush_fifos()
520 rp2_rmw_clr(up, RP2_UART_CTL, in rp2_flush_fifos()
526 struct rp2_uart_port *up = port_to_up(port); in rp2_uart_startup() local
528 rp2_flush_fifos(up); in rp2_uart_startup()
529 rp2_rmw(up, RP2_TXRX_CTL, RP2_TXRX_CTL_MSRIRQ_m, RP2_TXRX_CTL_RXIRQ_m); in rp2_uart_startup()
530 rp2_rmw(up, RP2_TXRX_CTL, RP2_TXRX_CTL_RX_TRIG_m, in rp2_uart_startup()
532 rp2_rmw(up, RP2_CHAN_STAT, 0, 0); in rp2_uart_startup()
533 rp2_mask_ch_irq(up, up->idx, 1); in rp2_uart_startup()
540 struct rp2_uart_port *up = port_to_up(port); in rp2_uart_shutdown() local
546 rp2_mask_ch_irq(up, up->idx, 0); in rp2_uart_shutdown()
547 rp2_rmw(up, RP2_CHAN_STAT, 0, 0); in rp2_uart_shutdown()
633 static void rp2_init_port(struct rp2_uart_port *up, const struct firmware *fw) in rp2_init_port() argument
637 writel(RP2_UART_CTL_RESET_CH_m, up->base + RP2_UART_CTL); in rp2_init_port()
638 readl(up->base + RP2_UART_CTL); in rp2_init_port()
641 writel(0, up->base + RP2_TXRX_CTL); in rp2_init_port()
642 writel(0, up->base + RP2_UART_CTL); in rp2_init_port()
643 readl(up->base + RP2_UART_CTL); in rp2_init_port()
646 rp2_flush_fifos(up); in rp2_init_port()
649 writeb(fw->data[i], up->ucode + i); in rp2_init_port()
651 __rp2_uart_set_termios(up, CS8 | CREAD | CLOCAL, 0, DEFAULT_BAUD_DIV); in rp2_init_port()
652 rp2_uart_set_mctrl(&up->port, 0); in rp2_init_port()
654 writeb(RP2_RX_FIFO_ena, up->ucode + RP2_RX_FIFO); in rp2_init_port()
655 rp2_rmw(up, RP2_UART_CTL, RP2_UART_CTL_MODE_m, in rp2_init_port()
657 rp2_rmw_set(up, RP2_TXRX_CTL, in rp2_init_port()