Lines Matching refs:port
166 struct uart_port *port; member
184 struct uart_port *port = (struct uart_port *)dev_id; in cdns_uart_isr() local
190 spin_lock_irqsave(&port->lock, flags); in cdns_uart_isr()
195 isrstatus = readl(port->membase + CDNS_UART_ISR_OFFSET); in cdns_uart_isr()
203 while (!(readl(port->membase + CDNS_UART_SR_OFFSET) & in cdns_uart_isr()
205 if (!readl(port->membase + CDNS_UART_FIFO_OFFSET)) { in cdns_uart_isr()
206 port->read_status_mask |= CDNS_UART_IXR_BRK; in cdns_uart_isr()
211 port->membase + CDNS_UART_ISR_OFFSET); in cdns_uart_isr()
215 if (isrstatus & port->ignore_status_mask & CDNS_UART_IXR_PARITY) in cdns_uart_isr()
218 isrstatus &= port->read_status_mask; in cdns_uart_isr()
219 isrstatus &= ~port->ignore_status_mask; in cdns_uart_isr()
224 while (!(readl(port->membase + CDNS_UART_SR_OFFSET) & in cdns_uart_isr()
226 data = readl(port->membase + CDNS_UART_FIFO_OFFSET); in cdns_uart_isr()
229 if (data && (port->read_status_mask & in cdns_uart_isr()
231 port->read_status_mask &= ~CDNS_UART_IXR_BRK; in cdns_uart_isr()
232 port->icount.brk++; in cdns_uart_isr()
233 if (uart_handle_break(port)) in cdns_uart_isr()
242 if (port->sysrq) { in cdns_uart_isr()
243 spin_unlock(&port->lock); in cdns_uart_isr()
244 if (uart_handle_sysrq_char(port, in cdns_uart_isr()
246 spin_lock(&port->lock); in cdns_uart_isr()
249 spin_lock(&port->lock); in cdns_uart_isr()
253 port->icount.rx++; in cdns_uart_isr()
256 port->icount.parity++; in cdns_uart_isr()
259 port->icount.frame++; in cdns_uart_isr()
262 port->icount.overrun++; in cdns_uart_isr()
265 uart_insert_char(port, isrstatus, CDNS_UART_IXR_OVERRUN, in cdns_uart_isr()
268 spin_unlock(&port->lock); in cdns_uart_isr()
269 tty_flip_buffer_push(&port->state->port); in cdns_uart_isr()
270 spin_lock(&port->lock); in cdns_uart_isr()
275 if (uart_circ_empty(&port->state->xmit)) { in cdns_uart_isr()
277 port->membase + CDNS_UART_IDR_OFFSET); in cdns_uart_isr()
279 numbytes = port->fifosize; in cdns_uart_isr()
282 if (uart_circ_empty(&port->state->xmit)) in cdns_uart_isr()
288 writel(port->state->xmit.buf[ in cdns_uart_isr()
289 port->state->xmit.tail], in cdns_uart_isr()
290 port->membase + CDNS_UART_FIFO_OFFSET); in cdns_uart_isr()
292 port->icount.tx++; in cdns_uart_isr()
297 port->state->xmit.tail = in cdns_uart_isr()
298 (port->state->xmit.tail + 1) & in cdns_uart_isr()
303 &port->state->xmit) < WAKEUP_CHARS) in cdns_uart_isr()
304 uart_write_wakeup(port); in cdns_uart_isr()
308 writel(isrstatus, port->membase + CDNS_UART_ISR_OFFSET); in cdns_uart_isr()
311 spin_unlock_irqrestore(&port->lock, flags); in cdns_uart_isr()
385 static unsigned int cdns_uart_set_baud_rate(struct uart_port *port, in cdns_uart_set_baud_rate() argument
392 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_set_baud_rate()
394 calc_baud = cdns_uart_calc_baud_divs(port->uartclk, baud, &bdiv, &cd, in cdns_uart_set_baud_rate()
398 mreg = readl(port->membase + CDNS_UART_MR_OFFSET); in cdns_uart_set_baud_rate()
403 writel(mreg, port->membase + CDNS_UART_MR_OFFSET); in cdns_uart_set_baud_rate()
404 writel(cd, port->membase + CDNS_UART_BAUDGEN_OFFSET); in cdns_uart_set_baud_rate()
405 writel(bdiv, port->membase + CDNS_UART_BAUDDIV_OFFSET); in cdns_uart_set_baud_rate()
423 struct uart_port *port; in cdns_uart_clk_notifier_cb() local
429 port = cdns_uart->port; in cdns_uart_clk_notifier_cb()
430 if (port->suspended) in cdns_uart_clk_notifier_cb()
445 dev_warn(port->dev, "clock rate change rejected\n"); in cdns_uart_clk_notifier_cb()
449 spin_lock_irqsave(&cdns_uart->port->lock, flags); in cdns_uart_clk_notifier_cb()
452 ctrl_reg = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_clk_notifier_cb()
454 writel(ctrl_reg, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_clk_notifier_cb()
456 spin_unlock_irqrestore(&cdns_uart->port->lock, flags); in cdns_uart_clk_notifier_cb()
466 spin_lock_irqsave(&cdns_uart->port->lock, flags); in cdns_uart_clk_notifier_cb()
469 port->uartclk = ndata->new_rate; in cdns_uart_clk_notifier_cb()
471 cdns_uart->baud = cdns_uart_set_baud_rate(cdns_uart->port, in cdns_uart_clk_notifier_cb()
476 spin_lock_irqsave(&cdns_uart->port->lock, flags); in cdns_uart_clk_notifier_cb()
479 ctrl_reg = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_clk_notifier_cb()
481 writel(ctrl_reg, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_clk_notifier_cb()
483 while (readl(port->membase + CDNS_UART_CR_OFFSET) & in cdns_uart_clk_notifier_cb()
492 writel(rx_timeout, port->membase + CDNS_UART_RXTOUT_OFFSET); in cdns_uart_clk_notifier_cb()
493 ctrl_reg = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_clk_notifier_cb()
496 writel(ctrl_reg, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_clk_notifier_cb()
498 spin_unlock_irqrestore(&cdns_uart->port->lock, flags); in cdns_uart_clk_notifier_cb()
511 static void cdns_uart_start_tx(struct uart_port *port) in cdns_uart_start_tx() argument
513 unsigned int status, numbytes = port->fifosize; in cdns_uart_start_tx()
515 if (uart_circ_empty(&port->state->xmit) || uart_tx_stopped(port)) in cdns_uart_start_tx()
518 status = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_start_tx()
523 port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_start_tx()
525 while (numbytes-- && ((readl(port->membase + CDNS_UART_SR_OFFSET) & in cdns_uart_start_tx()
528 if (uart_circ_empty(&port->state->xmit)) in cdns_uart_start_tx()
534 writel(port->state->xmit.buf[port->state->xmit.tail], in cdns_uart_start_tx()
535 port->membase + CDNS_UART_FIFO_OFFSET); in cdns_uart_start_tx()
536 port->icount.tx++; in cdns_uart_start_tx()
541 port->state->xmit.tail = (port->state->xmit.tail + 1) & in cdns_uart_start_tx()
544 writel(CDNS_UART_IXR_TXEMPTY, port->membase + CDNS_UART_ISR_OFFSET); in cdns_uart_start_tx()
546 writel(CDNS_UART_IXR_TXEMPTY, port->membase + CDNS_UART_IER_OFFSET); in cdns_uart_start_tx()
548 if (uart_circ_chars_pending(&port->state->xmit) < WAKEUP_CHARS) in cdns_uart_start_tx()
549 uart_write_wakeup(port); in cdns_uart_start_tx()
556 static void cdns_uart_stop_tx(struct uart_port *port) in cdns_uart_stop_tx() argument
560 regval = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_stop_tx()
563 writel(regval, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_stop_tx()
570 static void cdns_uart_stop_rx(struct uart_port *port) in cdns_uart_stop_rx() argument
574 regval = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_stop_rx()
577 writel(regval, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_stop_rx()
586 static unsigned int cdns_uart_tx_empty(struct uart_port *port) in cdns_uart_tx_empty() argument
590 status = readl(port->membase + CDNS_UART_SR_OFFSET) & in cdns_uart_tx_empty()
601 static void cdns_uart_break_ctl(struct uart_port *port, int ctl) in cdns_uart_break_ctl() argument
606 spin_lock_irqsave(&port->lock, flags); in cdns_uart_break_ctl()
608 status = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_break_ctl()
612 port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_break_ctl()
616 port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_break_ctl()
618 spin_unlock_irqrestore(&port->lock, flags); in cdns_uart_break_ctl()
628 static void cdns_uart_set_termios(struct uart_port *port, in cdns_uart_set_termios() argument
636 spin_lock_irqsave(&port->lock, flags); in cdns_uart_set_termios()
639 if (!(readl(port->membase + CDNS_UART_CR_OFFSET) & in cdns_uart_set_termios()
641 while (!(readl(port->membase + CDNS_UART_SR_OFFSET) & in cdns_uart_set_termios()
648 ctrl_reg = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_set_termios()
650 writel(ctrl_reg, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_set_termios()
657 minbaud = port->uartclk / in cdns_uart_set_termios()
659 maxbaud = port->uartclk / (CDNS_UART_BDIV_MIN + 1); in cdns_uart_set_termios()
660 baud = uart_get_baud_rate(port, termios, old, minbaud, maxbaud); in cdns_uart_set_termios()
661 baud = cdns_uart_set_baud_rate(port, baud); in cdns_uart_set_termios()
666 uart_update_timeout(port, termios->c_cflag, baud); in cdns_uart_set_termios()
669 ctrl_reg = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_set_termios()
671 writel(ctrl_reg, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_set_termios()
677 ctrl_reg = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_set_termios()
680 writel(ctrl_reg, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_set_termios()
682 writel(rx_timeout, port->membase + CDNS_UART_RXTOUT_OFFSET); in cdns_uart_set_termios()
684 port->read_status_mask = CDNS_UART_IXR_TXEMPTY | CDNS_UART_IXR_RXTRIG | in cdns_uart_set_termios()
686 port->ignore_status_mask = 0; in cdns_uart_set_termios()
689 port->read_status_mask |= CDNS_UART_IXR_PARITY | in cdns_uart_set_termios()
693 port->ignore_status_mask |= CDNS_UART_IXR_PARITY | in cdns_uart_set_termios()
698 port->ignore_status_mask |= CDNS_UART_IXR_RXTRIG | in cdns_uart_set_termios()
702 mode_reg = readl(port->membase + CDNS_UART_MR_OFFSET); in cdns_uart_set_termios()
743 writel(cval, port->membase + CDNS_UART_MR_OFFSET); in cdns_uart_set_termios()
745 spin_unlock_irqrestore(&port->lock, flags); in cdns_uart_set_termios()
754 static int cdns_uart_startup(struct uart_port *port) in cdns_uart_startup() argument
758 retval = request_irq(port->irq, cdns_uart_isr, 0, CDNS_UART_NAME, in cdns_uart_startup()
759 (void *)port); in cdns_uart_startup()
765 port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_startup()
771 port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_startup()
773 status = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_startup()
781 port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_startup()
788 port->membase + CDNS_UART_MR_OFFSET); in cdns_uart_startup()
794 writel(rx_trigger_level, port->membase + CDNS_UART_RXWM_OFFSET); in cdns_uart_startup()
800 writel(rx_timeout, port->membase + CDNS_UART_RXTOUT_OFFSET); in cdns_uart_startup()
803 writel(readl(port->membase + CDNS_UART_ISR_OFFSET), in cdns_uart_startup()
804 port->membase + CDNS_UART_ISR_OFFSET); in cdns_uart_startup()
810 port->membase + CDNS_UART_IER_OFFSET); in cdns_uart_startup()
819 static void cdns_uart_shutdown(struct uart_port *port) in cdns_uart_shutdown() argument
824 status = readl(port->membase + CDNS_UART_IMR_OFFSET); in cdns_uart_shutdown()
825 writel(status, port->membase + CDNS_UART_IDR_OFFSET); in cdns_uart_shutdown()
829 port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_shutdown()
830 free_irq(port->irq, port); in cdns_uart_shutdown()
839 static const char *cdns_uart_type(struct uart_port *port) in cdns_uart_type() argument
841 return port->type == PORT_XUARTPS ? CDNS_UART_NAME : NULL; in cdns_uart_type()
851 static int cdns_uart_verify_port(struct uart_port *port, in cdns_uart_verify_port() argument
856 if (port->irq != ser->irq) in cdns_uart_verify_port()
860 if (port->iobase != ser->port) in cdns_uart_verify_port()
875 static int cdns_uart_request_port(struct uart_port *port) in cdns_uart_request_port() argument
877 if (!request_mem_region(port->mapbase, CDNS_UART_REGISTER_SPACE, in cdns_uart_request_port()
882 port->membase = ioremap(port->mapbase, CDNS_UART_REGISTER_SPACE); in cdns_uart_request_port()
883 if (!port->membase) { in cdns_uart_request_port()
884 dev_err(port->dev, "Unable to map registers\n"); in cdns_uart_request_port()
885 release_mem_region(port->mapbase, CDNS_UART_REGISTER_SPACE); in cdns_uart_request_port()
898 static void cdns_uart_release_port(struct uart_port *port) in cdns_uart_release_port() argument
900 release_mem_region(port->mapbase, CDNS_UART_REGISTER_SPACE); in cdns_uart_release_port()
901 iounmap(port->membase); in cdns_uart_release_port()
902 port->membase = NULL; in cdns_uart_release_port()
910 static void cdns_uart_config_port(struct uart_port *port, int flags) in cdns_uart_config_port() argument
912 if (flags & UART_CONFIG_TYPE && cdns_uart_request_port(port) == 0) in cdns_uart_config_port()
913 port->type = PORT_XUARTPS; in cdns_uart_config_port()
922 static unsigned int cdns_uart_get_mctrl(struct uart_port *port) in cdns_uart_get_mctrl() argument
927 static void cdns_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) in cdns_uart_set_mctrl() argument
931 val = readl(port->membase + CDNS_UART_MODEMCR_OFFSET); in cdns_uart_set_mctrl()
940 writel(val, port->membase + CDNS_UART_MODEMCR_OFFSET); in cdns_uart_set_mctrl()
944 static int cdns_uart_poll_get_char(struct uart_port *port) in cdns_uart_poll_get_char() argument
950 imr = readl(port->membase + CDNS_UART_IMR_OFFSET); in cdns_uart_poll_get_char()
951 writel(imr, port->membase + CDNS_UART_IDR_OFFSET); in cdns_uart_poll_get_char()
954 if (readl(port->membase + CDNS_UART_SR_OFFSET) & CDNS_UART_SR_RXEMPTY) in cdns_uart_poll_get_char()
958 port->membase + CDNS_UART_FIFO_OFFSET); in cdns_uart_poll_get_char()
961 writel(imr, port->membase + CDNS_UART_IER_OFFSET); in cdns_uart_poll_get_char()
966 static void cdns_uart_poll_put_char(struct uart_port *port, unsigned char c) in cdns_uart_poll_put_char() argument
971 imr = readl(port->membase + CDNS_UART_IMR_OFFSET); in cdns_uart_poll_put_char()
972 writel(imr, port->membase + CDNS_UART_IDR_OFFSET); in cdns_uart_poll_put_char()
975 while (!(readl(port->membase + CDNS_UART_SR_OFFSET) & in cdns_uart_poll_put_char()
980 writel(c, port->membase + CDNS_UART_FIFO_OFFSET); in cdns_uart_poll_put_char()
983 while (!(readl(port->membase + CDNS_UART_SR_OFFSET) & in cdns_uart_poll_put_char()
988 writel(imr, port->membase + CDNS_UART_IER_OFFSET); in cdns_uart_poll_put_char()
1026 struct uart_port *port; in cdns_uart_get_port() local
1039 port = &cdns_uart_port[id]; in cdns_uart_get_port()
1042 spin_lock_init(&port->lock); in cdns_uart_get_port()
1043 port->membase = NULL; in cdns_uart_get_port()
1044 port->irq = 0; in cdns_uart_get_port()
1045 port->type = PORT_UNKNOWN; in cdns_uart_get_port()
1046 port->iotype = UPIO_MEM32; in cdns_uart_get_port()
1047 port->flags = UPF_BOOT_AUTOCONF; in cdns_uart_get_port()
1048 port->ops = &cdns_uart_ops; in cdns_uart_get_port()
1049 port->fifosize = CDNS_UART_FIFO_SIZE; in cdns_uart_get_port()
1050 port->line = id; in cdns_uart_get_port()
1051 port->dev = NULL; in cdns_uart_get_port()
1052 return port; in cdns_uart_get_port()
1060 static void cdns_uart_console_wait_tx(struct uart_port *port) in cdns_uart_console_wait_tx() argument
1062 while (!(readl(port->membase + CDNS_UART_SR_OFFSET) & in cdns_uart_console_wait_tx()
1072 static void cdns_uart_console_putchar(struct uart_port *port, int ch) in cdns_uart_console_putchar() argument
1074 cdns_uart_console_wait_tx(port); in cdns_uart_console_putchar()
1075 writel(ch, port->membase + CDNS_UART_FIFO_OFFSET); in cdns_uart_console_putchar()
1082 uart_console_write(&dev->port, s, n, cdns_uart_console_putchar); in cdns_early_write()
1088 if (!device->port.membase) in cdns_early_console_setup()
1106 struct uart_port *port = &cdns_uart_port[co->index]; in cdns_uart_console_write() local
1112 locked = spin_trylock_irqsave(&port->lock, flags); in cdns_uart_console_write()
1114 spin_lock_irqsave(&port->lock, flags); in cdns_uart_console_write()
1117 imr = readl(port->membase + CDNS_UART_IMR_OFFSET); in cdns_uart_console_write()
1118 writel(imr, port->membase + CDNS_UART_IDR_OFFSET); in cdns_uart_console_write()
1124 ctrl = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_console_write()
1126 port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_console_write()
1128 uart_console_write(port, s, count, cdns_uart_console_putchar); in cdns_uart_console_write()
1129 cdns_uart_console_wait_tx(port); in cdns_uart_console_write()
1131 writel(ctrl, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_console_write()
1134 writel(imr, port->membase + CDNS_UART_IER_OFFSET); in cdns_uart_console_write()
1137 spin_unlock_irqrestore(&port->lock, flags); in cdns_uart_console_write()
1149 struct uart_port *port = &cdns_uart_port[co->index]; in cdns_uart_console_setup() local
1158 if (!port->membase) { in cdns_uart_console_setup()
1167 return uart_set_options(port, co, baud, parity, bits, flow); in cdns_uart_console_setup()
1218 struct uart_port *port = dev_get_drvdata(device); in cdns_uart_suspend() local
1224 tty = tty_port_tty_get(&port->state->port); in cdns_uart_suspend()
1235 uart_suspend_port(&cdns_uart_uart_driver, port); in cdns_uart_suspend()
1237 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_suspend()
1244 spin_lock_irqsave(&port->lock, flags); in cdns_uart_suspend()
1246 while (!(readl(port->membase + CDNS_UART_SR_OFFSET) & in cdns_uart_suspend()
1248 readl(port->membase + CDNS_UART_FIFO_OFFSET); in cdns_uart_suspend()
1250 writel(1, port->membase + CDNS_UART_RXWM_OFFSET); in cdns_uart_suspend()
1253 port->membase + CDNS_UART_IDR_OFFSET); in cdns_uart_suspend()
1254 spin_unlock_irqrestore(&port->lock, flags); in cdns_uart_suspend()
1268 struct uart_port *port = dev_get_drvdata(device); in cdns_uart_resume() local
1276 tty = tty_port_tty_get(&port->state->port); in cdns_uart_resume()
1284 struct cdns_uart *cdns_uart = port->private_data; in cdns_uart_resume()
1289 spin_lock_irqsave(&port->lock, flags); in cdns_uart_resume()
1292 ctrl_reg = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_resume()
1294 writel(ctrl_reg, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_resume()
1295 while (readl(port->membase + CDNS_UART_CR_OFFSET) & in cdns_uart_resume()
1300 writel(rx_timeout, port->membase + CDNS_UART_RXTOUT_OFFSET); in cdns_uart_resume()
1302 ctrl_reg = readl(port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_resume()
1305 writel(ctrl_reg, port->membase + CDNS_UART_CR_OFFSET); in cdns_uart_resume()
1307 spin_unlock_irqrestore(&port->lock, flags); in cdns_uart_resume()
1309 spin_lock_irqsave(&port->lock, flags); in cdns_uart_resume()
1312 port->membase + CDNS_UART_RXWM_OFFSET); in cdns_uart_resume()
1315 port->membase + CDNS_UART_IER_OFFSET); in cdns_uart_resume()
1316 spin_unlock_irqrestore(&port->lock, flags); in cdns_uart_resume()
1319 return uart_resume_port(&cdns_uart_uart_driver, port); in cdns_uart_resume()
1335 struct uart_port *port; in cdns_uart_probe() local
1402 port = cdns_uart_get_port(id); in cdns_uart_probe()
1404 if (!port) { in cdns_uart_probe()
1413 port->mapbase = res->start; in cdns_uart_probe()
1414 port->irq = irq; in cdns_uart_probe()
1415 port->dev = &pdev->dev; in cdns_uart_probe()
1416 port->uartclk = clk_get_rate(cdns_uart_data->uartclk); in cdns_uart_probe()
1417 port->private_data = cdns_uart_data; in cdns_uart_probe()
1418 cdns_uart_data->port = port; in cdns_uart_probe()
1419 platform_set_drvdata(pdev, port); in cdns_uart_probe()
1420 rc = uart_add_one_port(&cdns_uart_uart_driver, port); in cdns_uart_probe()
1450 struct uart_port *port = platform_get_drvdata(pdev); in cdns_uart_remove() local
1451 struct cdns_uart *cdns_uart_data = port->private_data; in cdns_uart_remove()
1459 rc = uart_remove_one_port(&cdns_uart_uart_driver, port); in cdns_uart_remove()
1460 port->mapbase = 0; in cdns_uart_remove()