Lines Matching full:port

76 	struct uart_port port;  member
84 static inline void owl_uart_write(struct uart_port *port, u32 val, unsigned int off) in owl_uart_write() argument
86 writel(val, port->membase + off); in owl_uart_write()
89 static inline u32 owl_uart_read(struct uart_port *port, unsigned int off) in owl_uart_read() argument
91 return readl(port->membase + off); in owl_uart_read()
94 static void owl_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) in owl_uart_set_mctrl() argument
98 ctl = owl_uart_read(port, OWL_UART_CTL); in owl_uart_set_mctrl()
105 owl_uart_write(port, ctl, OWL_UART_CTL); in owl_uart_set_mctrl()
108 static unsigned int owl_uart_get_mctrl(struct uart_port *port) in owl_uart_get_mctrl() argument
113 ctl = owl_uart_read(port, OWL_UART_CTL); in owl_uart_get_mctrl()
114 stat = owl_uart_read(port, OWL_UART_STAT); in owl_uart_get_mctrl()
122 static unsigned int owl_uart_tx_empty(struct uart_port *port) in owl_uart_tx_empty() argument
128 uart_port_lock_irqsave(port, &flags); in owl_uart_tx_empty()
130 val = owl_uart_read(port, OWL_UART_STAT); in owl_uart_tx_empty()
133 uart_port_unlock_irqrestore(port, flags); in owl_uart_tx_empty()
138 static void owl_uart_stop_rx(struct uart_port *port) in owl_uart_stop_rx() argument
142 val = owl_uart_read(port, OWL_UART_CTL); in owl_uart_stop_rx()
144 owl_uart_write(port, val, OWL_UART_CTL); in owl_uart_stop_rx()
146 val = owl_uart_read(port, OWL_UART_STAT); in owl_uart_stop_rx()
148 owl_uart_write(port, val, OWL_UART_STAT); in owl_uart_stop_rx()
151 static void owl_uart_stop_tx(struct uart_port *port) in owl_uart_stop_tx() argument
155 val = owl_uart_read(port, OWL_UART_CTL); in owl_uart_stop_tx()
157 owl_uart_write(port, val, OWL_UART_CTL); in owl_uart_stop_tx()
159 val = owl_uart_read(port, OWL_UART_STAT); in owl_uart_stop_tx()
161 owl_uart_write(port, val, OWL_UART_STAT); in owl_uart_stop_tx()
164 static void owl_uart_start_tx(struct uart_port *port) in owl_uart_start_tx() argument
168 if (uart_tx_stopped(port)) { in owl_uart_start_tx()
169 owl_uart_stop_tx(port); in owl_uart_start_tx()
173 val = owl_uart_read(port, OWL_UART_STAT); in owl_uart_start_tx()
175 owl_uart_write(port, val, OWL_UART_STAT); in owl_uart_start_tx()
177 val = owl_uart_read(port, OWL_UART_CTL); in owl_uart_start_tx()
179 owl_uart_write(port, val, OWL_UART_CTL); in owl_uart_start_tx()
182 static void owl_uart_send_chars(struct uart_port *port) in owl_uart_send_chars() argument
186 uart_port_tx(port, ch, in owl_uart_send_chars()
187 !(owl_uart_read(port, OWL_UART_STAT) & OWL_UART_STAT_TFFU), in owl_uart_send_chars()
188 owl_uart_write(port, ch, OWL_UART_TXDAT)); in owl_uart_send_chars()
191 static void owl_uart_receive_chars(struct uart_port *port) in owl_uart_receive_chars() argument
195 val = owl_uart_read(port, OWL_UART_CTL); in owl_uart_receive_chars()
197 owl_uart_write(port, val, OWL_UART_CTL); in owl_uart_receive_chars()
199 stat = owl_uart_read(port, OWL_UART_STAT); in owl_uart_receive_chars()
205 port->icount.overrun++; in owl_uart_receive_chars()
209 port->icount.brk++; in owl_uart_receive_chars()
210 port->icount.frame++; in owl_uart_receive_chars()
212 stat &= port->read_status_mask; in owl_uart_receive_chars()
216 port->icount.rx++; in owl_uart_receive_chars()
218 val = owl_uart_read(port, OWL_UART_RXDAT); in owl_uart_receive_chars()
221 sysrq = uart_prepare_sysrq_char(port, val); in owl_uart_receive_chars()
223 if (!sysrq && (stat & port->ignore_status_mask) == 0) in owl_uart_receive_chars()
224 tty_insert_flip_char(&port->state->port, val, flag); in owl_uart_receive_chars()
226 stat = owl_uart_read(port, OWL_UART_STAT); in owl_uart_receive_chars()
229 tty_flip_buffer_push(&port->state->port); in owl_uart_receive_chars()
234 struct uart_port *port = dev_id; in owl_uart_irq() local
237 uart_port_lock(port); in owl_uart_irq()
239 stat = owl_uart_read(port, OWL_UART_STAT); in owl_uart_irq()
242 owl_uart_receive_chars(port); in owl_uart_irq()
245 owl_uart_send_chars(port); in owl_uart_irq()
247 stat = owl_uart_read(port, OWL_UART_STAT); in owl_uart_irq()
249 owl_uart_write(port, stat, OWL_UART_STAT); in owl_uart_irq()
251 uart_unlock_and_check_sysrq(port); in owl_uart_irq()
256 static void owl_uart_shutdown(struct uart_port *port) in owl_uart_shutdown() argument
261 uart_port_lock_irqsave(port, &flags); in owl_uart_shutdown()
263 val = owl_uart_read(port, OWL_UART_CTL); in owl_uart_shutdown()
266 owl_uart_write(port, val, OWL_UART_CTL); in owl_uart_shutdown()
268 uart_port_unlock_irqrestore(port, flags); in owl_uart_shutdown()
270 free_irq(port->irq, port); in owl_uart_shutdown()
273 static int owl_uart_startup(struct uart_port *port) in owl_uart_startup() argument
279 ret = request_irq(port->irq, owl_uart_irq, IRQF_TRIGGER_HIGH, in owl_uart_startup()
280 "owl-uart", port); in owl_uart_startup()
284 uart_port_lock_irqsave(port, &flags); in owl_uart_startup()
286 val = owl_uart_read(port, OWL_UART_STAT); in owl_uart_startup()
289 owl_uart_write(port, val, OWL_UART_STAT); in owl_uart_startup()
291 val = owl_uart_read(port, OWL_UART_CTL); in owl_uart_startup()
294 owl_uart_write(port, val, OWL_UART_CTL); in owl_uart_startup()
296 uart_port_unlock_irqrestore(port, flags); in owl_uart_startup()
307 static void owl_uart_set_termios(struct uart_port *port, in owl_uart_set_termios() argument
311 struct owl_uart_port *owl_port = to_owl_uart_port(port); in owl_uart_set_termios()
316 uart_port_lock_irqsave(port, &flags); in owl_uart_set_termios()
318 ctl = owl_uart_read(port, OWL_UART_CTL); in owl_uart_set_termios()
361 owl_uart_write(port, ctl, OWL_UART_CTL); in owl_uart_set_termios()
363 baud = uart_get_baud_rate(port, termios, old, 9600, 3200000); in owl_uart_set_termios()
370 port->read_status_mask |= OWL_UART_STAT_RXER; in owl_uart_set_termios()
372 port->read_status_mask |= OWL_UART_STAT_RXST; in owl_uart_set_termios()
374 uart_update_timeout(port, termios->c_cflag, baud); in owl_uart_set_termios()
376 uart_port_unlock_irqrestore(port, flags); in owl_uart_set_termios()
379 static void owl_uart_release_port(struct uart_port *port) in owl_uart_release_port() argument
381 struct platform_device *pdev = to_platform_device(port->dev); in owl_uart_release_port()
388 if (port->flags & UPF_IOREMAP) { in owl_uart_release_port()
389 devm_release_mem_region(port->dev, port->mapbase, in owl_uart_release_port()
391 devm_iounmap(port->dev, port->membase); in owl_uart_release_port()
392 port->membase = NULL; in owl_uart_release_port()
396 static int owl_uart_request_port(struct uart_port *port) in owl_uart_request_port() argument
398 struct platform_device *pdev = to_platform_device(port->dev); in owl_uart_request_port()
405 if (!devm_request_mem_region(port->dev, port->mapbase, in owl_uart_request_port()
406 resource_size(res), dev_name(port->dev))) in owl_uart_request_port()
409 if (port->flags & UPF_IOREMAP) { in owl_uart_request_port()
410 port->membase = devm_ioremap(port->dev, port->mapbase, in owl_uart_request_port()
412 if (!port->membase) in owl_uart_request_port()
419 static const char *owl_uart_type(struct uart_port *port) in owl_uart_type() argument
421 return (port->type == PORT_OWL) ? "owl-uart" : NULL; in owl_uart_type()
424 static int owl_uart_verify_port(struct uart_port *port, in owl_uart_verify_port() argument
427 if (port->type != PORT_OWL) in owl_uart_verify_port()
430 if (port->irq != ser->irq) in owl_uart_verify_port()
436 static void owl_uart_config_port(struct uart_port *port, int flags) in owl_uart_config_port() argument
439 port->type = PORT_OWL; in owl_uart_config_port()
440 owl_uart_request_port(port); in owl_uart_config_port()
446 static int owl_uart_poll_get_char(struct uart_port *port) in owl_uart_poll_get_char() argument
448 if (owl_uart_read(port, OWL_UART_STAT) & OWL_UART_STAT_RFEM) in owl_uart_poll_get_char()
451 return owl_uart_read(port, OWL_UART_RXDAT); in owl_uart_poll_get_char()
454 static void owl_uart_poll_put_char(struct uart_port *port, unsigned char ch) in owl_uart_poll_put_char() argument
460 ret = readl_poll_timeout_atomic(port->membase + OWL_UART_STAT, reg, in owl_uart_poll_put_char()
465 dev_err(port->dev, "Timeout waiting while UART TX FULL\n"); in owl_uart_poll_put_char()
469 owl_uart_write(port, ch, OWL_UART_TXDAT); in owl_uart_poll_put_char()
497 static void owl_console_putchar(struct uart_port *port, unsigned char ch) in owl_console_putchar() argument
499 if (!port->membase) in owl_console_putchar()
502 while (owl_uart_read(port, OWL_UART_STAT) & OWL_UART_STAT_TFFU) in owl_console_putchar()
505 owl_uart_write(port, ch, OWL_UART_TXDAT); in owl_console_putchar()
508 static void owl_uart_port_write(struct uart_port *port, const char *s, in owl_uart_port_write() argument
516 locked = uart_port_trylock_irqsave(port, &flags); in owl_uart_port_write()
518 uart_port_lock_irqsave(port, &flags); in owl_uart_port_write()
520 old_ctl = owl_uart_read(port, OWL_UART_CTL); in owl_uart_port_write()
524 owl_uart_write(port, val, OWL_UART_CTL); in owl_uart_port_write()
526 uart_console_write(port, s, count, owl_console_putchar); in owl_uart_port_write()
529 while (owl_uart_read(port, OWL_UART_STAT) & OWL_UART_STAT_TRFL_MASK) in owl_uart_port_write()
533 val = owl_uart_read(port, OWL_UART_STAT); in owl_uart_port_write()
535 owl_uart_write(port, val, OWL_UART_STAT); in owl_uart_port_write()
537 owl_uart_write(port, old_ctl, OWL_UART_CTL); in owl_uart_port_write()
540 uart_port_unlock_irqrestore(port, flags); in owl_uart_port_write()
552 owl_uart_port_write(&owl_port->port, s, count); in owl_uart_console_write()
567 if (!owl_port || !owl_port->port.membase) in owl_uart_console_setup()
573 return uart_set_options(&owl_port->port, co, baud, parity, bits, flow); in owl_uart_console_setup()
600 owl_uart_port_write(&dev->port, s, count); in owl_uart_early_console_write()
606 if (!device->port.membase) in owl_uart_early_console_setup()
675 dev_err(&pdev->dev, "port %d already allocated\n", pdev->id); in owl_uart_probe()
695 owl_port->port.dev = &pdev->dev; in owl_uart_probe()
696 owl_port->port.line = pdev->id; in owl_uart_probe()
697 owl_port->port.type = PORT_OWL; in owl_uart_probe()
698 owl_port->port.iotype = UPIO_MEM; in owl_uart_probe()
699 owl_port->port.mapbase = res_mem->start; in owl_uart_probe()
700 owl_port->port.irq = irq; in owl_uart_probe()
701 owl_port->port.uartclk = clk_get_rate(owl_port->clk); in owl_uart_probe()
702 if (owl_port->port.uartclk == 0) { in owl_uart_probe()
707 owl_port->port.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP | UPF_LOW_LATENCY; in owl_uart_probe()
708 owl_port->port.x_char = 0; in owl_uart_probe()
709 owl_port->port.fifosize = (info) ? info->tx_fifosize : 16; in owl_uart_probe()
710 owl_port->port.ops = &owl_uart_ops; in owl_uart_probe()
715 ret = uart_add_one_port(&owl_uart_driver, &owl_port->port); in owl_uart_probe()
726 uart_remove_one_port(&owl_uart_driver, &owl_port->port); in owl_uart_remove()