Lines Matching full:port
93 struct uart_port port; member
139 static const struct esp32_uart_variant *port_variant(struct uart_port *port) in port_variant() argument
141 return port->private_data; in port_variant()
144 static void esp32_uart_write(struct uart_port *port, unsigned long reg, u32 v) in esp32_uart_write() argument
146 writel(v, port->membase + reg); in esp32_uart_write()
149 static u32 esp32_uart_read(struct uart_port *port, unsigned long reg) in esp32_uart_read() argument
151 return readl(port->membase + reg); in esp32_uart_read()
154 static u32 esp32_uart_tx_fifo_cnt(struct uart_port *port) in esp32_uart_tx_fifo_cnt() argument
156 u32 status = esp32_uart_read(port, UART_STATUS_REG); in esp32_uart_tx_fifo_cnt()
158 return (status & port_variant(port)->txfifo_cnt_mask) >> UART_TXFIFO_CNT_SHIFT; in esp32_uart_tx_fifo_cnt()
161 static u32 esp32_uart_rx_fifo_cnt(struct uart_port *port) in esp32_uart_rx_fifo_cnt() argument
163 u32 status = esp32_uart_read(port, UART_STATUS_REG); in esp32_uart_rx_fifo_cnt()
165 return (status & port_variant(port)->rxfifo_cnt_mask) >> UART_RXFIFO_CNT_SHIFT; in esp32_uart_rx_fifo_cnt()
169 static unsigned int esp32_uart_tx_empty(struct uart_port *port) in esp32_uart_tx_empty() argument
171 return esp32_uart_tx_fifo_cnt(port) ? 0 : TIOCSER_TEMT; in esp32_uart_tx_empty()
174 static void esp32_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) in esp32_uart_set_mctrl() argument
176 u32 conf0 = esp32_uart_read(port, UART_CONF0_REG); in esp32_uart_set_mctrl()
189 esp32_uart_write(port, UART_CONF0_REG, conf0); in esp32_uart_set_mctrl()
192 static unsigned int esp32_uart_get_mctrl(struct uart_port *port) in esp32_uart_get_mctrl() argument
194 u32 status = esp32_uart_read(port, UART_STATUS_REG); in esp32_uart_get_mctrl()
205 static void esp32_uart_stop_tx(struct uart_port *port) in esp32_uart_stop_tx() argument
209 int_ena = esp32_uart_read(port, UART_INT_ENA_REG); in esp32_uart_stop_tx()
211 esp32_uart_write(port, UART_INT_ENA_REG, int_ena); in esp32_uart_stop_tx()
214 static void esp32_uart_rxint(struct uart_port *port) in esp32_uart_rxint() argument
216 struct tty_port *tty_port = &port->state->port; in esp32_uart_rxint()
217 u32 rx_fifo_cnt = esp32_uart_rx_fifo_cnt(port); in esp32_uart_rxint()
224 spin_lock_irqsave(&port->lock, flags); in esp32_uart_rxint()
227 u32 rx = esp32_uart_read(port, UART_FIFO_REG); in esp32_uart_rxint()
230 (esp32_uart_read(port, UART_INT_ST_REG) & UART_BRK_DET_INT)) { in esp32_uart_rxint()
231 esp32_uart_write(port, UART_INT_CLR_REG, UART_BRK_DET_INT); in esp32_uart_rxint()
232 ++port->icount.brk; in esp32_uart_rxint()
233 uart_handle_break(port); in esp32_uart_rxint()
235 if (uart_handle_sysrq_char(port, (unsigned char)rx)) in esp32_uart_rxint()
238 ++port->icount.rx; in esp32_uart_rxint()
241 spin_unlock_irqrestore(&port->lock, flags); in esp32_uart_rxint()
246 static void esp32_uart_put_char(struct uart_port *port, u8 c) in esp32_uart_put_char() argument
248 esp32_uart_write(port, UART_FIFO_REG, c); in esp32_uart_put_char()
251 static void esp32_uart_put_char_sync(struct uart_port *port, u8 c) in esp32_uart_put_char_sync() argument
255 while (esp32_uart_tx_fifo_cnt(port) >= ESP32_UART_TX_FIFO_SIZE) { in esp32_uart_put_char_sync()
257 dev_warn(port->dev, "timeout waiting for TX FIFO\n"); in esp32_uart_put_char_sync()
262 esp32_uart_put_char(port, c); in esp32_uart_put_char_sync()
265 static void esp32_uart_transmit_buffer(struct uart_port *port) in esp32_uart_transmit_buffer() argument
267 u32 tx_fifo_used = esp32_uart_tx_fifo_cnt(port); in esp32_uart_transmit_buffer()
274 pending = uart_port_tx_limited(port, ch, in esp32_uart_transmit_buffer()
276 true, esp32_uart_put_char(port, ch), in esp32_uart_transmit_buffer()
281 int_ena = esp32_uart_read(port, UART_INT_ENA_REG); in esp32_uart_transmit_buffer()
283 esp32_uart_write(port, UART_INT_ENA_REG, int_ena); in esp32_uart_transmit_buffer()
287 static void esp32_uart_txint(struct uart_port *port) in esp32_uart_txint() argument
289 esp32_uart_transmit_buffer(port); in esp32_uart_txint()
294 struct uart_port *port = dev_id; in esp32_uart_int() local
297 status = esp32_uart_read(port, UART_INT_ST_REG); in esp32_uart_int()
300 esp32_uart_rxint(port); in esp32_uart_int()
302 esp32_uart_txint(port); in esp32_uart_int()
304 esp32_uart_write(port, UART_INT_CLR_REG, status); in esp32_uart_int()
309 static void esp32_uart_start_tx(struct uart_port *port) in esp32_uart_start_tx() argument
311 esp32_uart_transmit_buffer(port); in esp32_uart_start_tx()
314 static void esp32_uart_stop_rx(struct uart_port *port) in esp32_uart_stop_rx() argument
318 int_ena = esp32_uart_read(port, UART_INT_ENA_REG); in esp32_uart_stop_rx()
320 esp32_uart_write(port, UART_INT_ENA_REG, int_ena); in esp32_uart_stop_rx()
323 static int esp32_uart_startup(struct uart_port *port) in esp32_uart_startup() argument
327 struct esp32_port *sport = container_of(port, struct esp32_port, port); in esp32_uart_startup()
333 ret = request_irq(port->irq, esp32_uart_int, 0, DRIVER_NAME, port); in esp32_uart_startup()
339 spin_lock_irqsave(&port->lock, flags); in esp32_uart_startup()
340 if (port_variant(port)->has_clkconf) in esp32_uart_startup()
341 esp32_uart_write(port, ESP32S3_UART_CLK_CONF_REG, in esp32_uart_startup()
343 esp32_uart_write(port, UART_CONF1_REG, in esp32_uart_startup()
345 (1 << port_variant(port)->txfifo_empty_thrhd_shift)); in esp32_uart_startup()
346 esp32_uart_write(port, UART_INT_CLR_REG, UART_RXFIFO_FULL_INT | UART_BRK_DET_INT); in esp32_uart_startup()
347 esp32_uart_write(port, UART_INT_ENA_REG, UART_RXFIFO_FULL_INT | UART_BRK_DET_INT); in esp32_uart_startup()
348 spin_unlock_irqrestore(&port->lock, flags); in esp32_uart_startup()
353 static void esp32_uart_shutdown(struct uart_port *port) in esp32_uart_shutdown() argument
355 struct esp32_port *sport = container_of(port, struct esp32_port, port); in esp32_uart_shutdown()
357 esp32_uart_write(port, UART_INT_ENA_REG, 0); in esp32_uart_shutdown()
358 free_irq(port->irq, port); in esp32_uart_shutdown()
362 static bool esp32_uart_set_baud(struct uart_port *port, u32 baud) in esp32_uart_set_baud() argument
364 u32 sclk = port->uartclk; in esp32_uart_set_baud()
367 if (port_variant(port)->has_clkconf) { in esp32_uart_set_baud()
368 u32 sclk_div = div / port_variant(port)->clkdiv_mask; in esp32_uart_set_baud()
370 if (div > port_variant(port)->clkdiv_mask) { in esp32_uart_set_baud()
374 esp32_uart_write(port, ESP32S3_UART_CLK_CONF_REG, in esp32_uart_set_baud()
379 if (div <= port_variant(port)->clkdiv_mask) { in esp32_uart_set_baud()
382 esp32_uart_write(port, UART_CLKDIV_REG, in esp32_uart_set_baud()
390 static void esp32_uart_set_termios(struct uart_port *port, in esp32_uart_set_termios() argument
397 const u32 rx_flow_en = port_variant(port)->rx_flow_en; in esp32_uart_set_termios()
398 u32 max_div = port_variant(port)->clkdiv_mask; in esp32_uart_set_termios()
402 if (port_variant(port)->has_clkconf) in esp32_uart_set_termios()
405 baud = uart_get_baud_rate(port, termios, old, in esp32_uart_set_termios()
406 port->uartclk / max_div, in esp32_uart_set_termios()
407 port->uartclk / 16); in esp32_uart_set_termios()
409 spin_lock_irqsave(&port->lock, flags); in esp32_uart_set_termios()
411 conf0 = esp32_uart_read(port, UART_CONF0_REG); in esp32_uart_set_termios()
414 conf1 = esp32_uart_read(port, UART_CONF1_REG); in esp32_uart_set_termios()
446 esp32_uart_write(port, UART_CONF0_REG, conf0); in esp32_uart_set_termios()
447 esp32_uart_write(port, UART_CONF1_REG, conf1); in esp32_uart_set_termios()
450 esp32_uart_set_baud(port, baud); in esp32_uart_set_termios()
451 uart_update_timeout(port, termios->c_cflag, baud); in esp32_uart_set_termios()
453 if (esp32_uart_set_baud(port, 115200)) { in esp32_uart_set_termios()
456 uart_update_timeout(port, termios->c_cflag, baud); in esp32_uart_set_termios()
458 dev_warn(port->dev, in esp32_uart_set_termios()
463 spin_unlock_irqrestore(&port->lock, flags); in esp32_uart_set_termios()
466 static const char *esp32_uart_type(struct uart_port *port) in esp32_uart_type() argument
468 return port_variant(port)->type; in esp32_uart_type()
471 /* configure/auto-configure the port */
472 static void esp32_uart_config_port(struct uart_port *port, int flags) in esp32_uart_config_port() argument
475 port->type = PORT_GENERIC; in esp32_uart_config_port()
479 static int esp32_uart_poll_init(struct uart_port *port) in esp32_uart_poll_init() argument
481 struct esp32_port *sport = container_of(port, struct esp32_port, port); in esp32_uart_poll_init()
486 static void esp32_uart_poll_put_char(struct uart_port *port, unsigned char c) in esp32_uart_poll_put_char() argument
488 esp32_uart_put_char_sync(port, c); in esp32_uart_poll_put_char()
491 static int esp32_uart_poll_get_char(struct uart_port *port) in esp32_uart_poll_get_char() argument
493 if (esp32_uart_rx_fifo_cnt(port)) in esp32_uart_poll_get_char()
494 return esp32_uart_read(port, UART_FIFO_REG); in esp32_uart_poll_get_char()
520 static void esp32_uart_console_putchar(struct uart_port *port, u8 c) in esp32_uart_console_putchar() argument
522 esp32_uart_put_char_sync(port, c); in esp32_uart_console_putchar()
525 static void esp32_uart_string_write(struct uart_port *port, const char *s, in esp32_uart_string_write() argument
528 uart_console_write(port, s, count, esp32_uart_console_putchar); in esp32_uart_string_write()
535 struct uart_port *port = &sport->port; in esp32_uart_console_write() local
539 if (port->sysrq) in esp32_uart_console_write()
542 locked = spin_trylock_irqsave(&port->lock, flags); in esp32_uart_console_write()
544 spin_lock_irqsave(&port->lock, flags); in esp32_uart_console_write()
546 esp32_uart_string_write(port, s, count); in esp32_uart_console_write()
549 spin_unlock_irqrestore(&port->lock, flags); in esp32_uart_console_write()
563 * if so, search for the first available port that does have in esp32_uart_console_setup()
580 return uart_set_options(&sport->port, co, baud, parity, bits, flow); in esp32_uart_console_setup()
603 static void esp32_uart_earlycon_putchar(struct uart_port *port, u8 c) in esp32_uart_earlycon_putchar() argument
605 esp32_uart_put_char_sync(port, c); in esp32_uart_earlycon_putchar()
613 uart_console_write(&dev->port, s, n, esp32_uart_earlycon_putchar); in esp32_uart_earlycon_write()
623 int c = esp32_uart_poll_get_char(&dev->port); in esp32_uart_earlycon_read()
636 if (!device->port.membase) in esp32xx_uart_early_console_setup()
643 if (device->port.uartclk != BASE_BAUD * 16) in esp32xx_uart_early_console_setup()
644 esp32_uart_set_baud(&device->port, device->baud); in esp32xx_uart_early_console_setup()
652 device->port.private_data = (void *)&esp32_variant; in esp32_uart_early_console_setup()
663 device->port.private_data = (void *)&esp32s3_variant; in esp32s3_uart_early_console_setup()
682 struct uart_port *port; in esp32_uart_probe() local
691 port = &sport->port; in esp32_uart_probe()
703 port->line = ret; in esp32_uart_probe()
709 port->mapbase = res->start; in esp32_uart_probe()
710 port->membase = devm_ioremap_resource(&pdev->dev, res); in esp32_uart_probe()
711 if (IS_ERR(port->membase)) in esp32_uart_probe()
712 return PTR_ERR(port->membase); in esp32_uart_probe()
718 port->uartclk = clk_get_rate(sport->clk); in esp32_uart_probe()
719 port->dev = &pdev->dev; in esp32_uart_probe()
720 port->type = PORT_GENERIC; in esp32_uart_probe()
721 port->iotype = UPIO_MEM; in esp32_uart_probe()
722 port->irq = platform_get_irq(pdev, 0); in esp32_uart_probe()
723 port->ops = &esp32_uart_pops; in esp32_uart_probe()
724 port->flags = UPF_BOOT_AUTOCONF; in esp32_uart_probe()
725 port->has_sysrq = 1; in esp32_uart_probe()
726 port->fifosize = ESP32_UART_TX_FIFO_SIZE; in esp32_uart_probe()
727 port->private_data = (void *)device_get_match_data(&pdev->dev); in esp32_uart_probe()
729 esp32_uart_ports[port->line] = sport; in esp32_uart_probe()
731 platform_set_drvdata(pdev, port); in esp32_uart_probe()
733 return uart_add_one_port(&esp32_uart_reg, port); in esp32_uart_probe()
738 struct uart_port *port = platform_get_drvdata(pdev); in esp32_uart_remove() local
740 uart_remove_one_port(&esp32_uart_reg, port); in esp32_uart_remove()