Lines Matching +full:uart +full:- +full:fifosize

1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (C) 2019-2020 Antmicro <www.antmicro.com>
24 * The definitions below are true for LiteX SoC configured for 8-bit CSR Bus,
25 * 32-bit aligned.
72 struct liteuart_port *uart = from_timer(uart, t, timer); in liteuart_timer() local
73 struct uart_port *port = &uart->port; in liteuart_timer()
74 unsigned char __iomem *membase = port->membase; in liteuart_timer()
81 port->icount.rx++; in liteuart_timer()
90 tty_flip_buffer_push(&port->state->port); in liteuart_timer()
93 mod_timer(&uart->timer, jiffies + uart_poll_timeout(port)); in liteuart_timer()
98 while (litex_read8(port->membase + OFF_TXFULL)) in liteuart_putchar()
101 litex_write8(port->membase + OFF_RXTX, ch); in liteuart_putchar()
107 if (!litex_read8(port->membase + OFF_TXFULL)) in liteuart_tx_empty()
129 struct circ_buf *xmit = &port->state->xmit; in liteuart_start_tx()
132 if (unlikely(port->x_char)) { in liteuart_start_tx()
133 litex_write8(port->membase + OFF_RXTX, port->x_char); in liteuart_start_tx()
134 port->icount.tx++; in liteuart_start_tx()
135 port->x_char = 0; in liteuart_start_tx()
137 while (xmit->head != xmit->tail) { in liteuart_start_tx()
138 ch = xmit->buf[xmit->tail]; in liteuart_start_tx()
139 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); in liteuart_start_tx()
140 port->icount.tx++; in liteuart_start_tx()
151 struct liteuart_port *uart = to_liteuart_port(port); in liteuart_stop_rx() local
154 del_timer(&uart->timer); in liteuart_stop_rx()
164 struct liteuart_port *uart = to_liteuart_port(port); in liteuart_startup() local
167 litex_write8(port->membase + OFF_EV_ENABLE, 0); in liteuart_startup()
170 timer_setup(&uart->timer, liteuart_timer, 0); in liteuart_startup()
171 mod_timer(&uart->timer, jiffies + uart_poll_timeout(port)); in liteuart_startup()
186 spin_lock_irqsave(&port->lock, flags); in liteuart_set_termios()
190 uart_update_timeout(port, new->c_cflag, baud); in liteuart_set_termios()
192 spin_unlock_irqrestore(&port->lock, flags); in liteuart_set_termios()
212 * Driver core for serial ports forces a non-zero value for port type. in liteuart_config_port()
216 port->type = 1; in liteuart_config_port()
222 if (port->type != PORT_UNKNOWN && ser->type != 1) in liteuart_verify_port()
223 return -EINVAL; in liteuart_verify_port()
248 struct liteuart_port *uart; in liteuart_probe() local
253 /* look for aliases; auto-enumerate for free index if not found */ in liteuart_probe()
254 dev_id = of_alias_get_id(pdev->dev.of_node, "serial"); in liteuart_probe()
260 uart = devm_kzalloc(&pdev->dev, sizeof(struct liteuart_port), GFP_KERNEL); in liteuart_probe()
261 if (!uart) in liteuart_probe()
262 return -ENOMEM; in liteuart_probe()
264 ret = xa_alloc(&liteuart_array, &dev_id, uart, limit, GFP_KERNEL); in liteuart_probe()
268 uart->id = dev_id; in liteuart_probe()
269 port = &uart->port; in liteuart_probe()
272 port->membase = devm_platform_get_and_ioremap_resource(pdev, 0, NULL); in liteuart_probe()
273 if (IS_ERR(port->membase)) { in liteuart_probe()
274 ret = PTR_ERR(port->membase); in liteuart_probe()
279 port->dev = &pdev->dev; in liteuart_probe()
280 port->iotype = UPIO_MEM; in liteuart_probe()
281 port->flags = UPF_BOOT_AUTOCONF; in liteuart_probe()
282 port->ops = &liteuart_ops; in liteuart_probe()
283 port->regshift = 2; in liteuart_probe()
284 port->fifosize = 16; in liteuart_probe()
285 port->iobase = 1; in liteuart_probe()
286 port->type = PORT_UNKNOWN; in liteuart_probe()
287 port->line = dev_id; in liteuart_probe()
288 spin_lock_init(&port->lock); in liteuart_probe()
292 ret = uart_add_one_port(&liteuart_driver, &uart->port); in liteuart_probe()
299 xa_erase(&liteuart_array, uart->id); in liteuart_probe()
307 struct liteuart_port *uart = to_liteuart_port(port); in liteuart_remove() local
310 xa_erase(&liteuart_array, uart->id); in liteuart_remove()
335 struct liteuart_port *uart; in liteuart_console_write() local
339 uart = (struct liteuart_port *)xa_load(&liteuart_array, co->index); in liteuart_console_write()
340 port = &uart->port; in liteuart_console_write()
342 spin_lock_irqsave(&port->lock, flags); in liteuart_console_write()
344 spin_unlock_irqrestore(&port->lock, flags); in liteuart_console_write()
349 struct liteuart_port *uart; in liteuart_console_setup() local
356 uart = (struct liteuart_port *)xa_load(&liteuart_array, co->index); in liteuart_console_setup()
357 if (!uart) in liteuart_console_setup()
358 return -ENODEV; in liteuart_console_setup()
360 port = &uart->port; in liteuart_console_setup()
361 if (!port->membase) in liteuart_console_setup()
362 return -ENODEV; in liteuart_console_setup()
376 .index = -1,
391 struct earlycon_device *device = console->data; in early_liteuart_write()
392 struct uart_port *port = &device->port; in early_liteuart_write()
400 if (!device->port.membase) in early_liteuart_setup()
401 return -ENODEV; in early_liteuart_setup()
403 device->con->write = early_liteuart_write; in early_liteuart_setup()