Lines Matching +full:uart +full:- +full:fifosize
1 // SPDX-License-Identifier: GPL-2.0
3 * Driver for the serial port on the 21285 StrongArm-110 core logic chip.
19 #include <asm/mach-types.h>
42 static const char serial21285_name[] = "Footbridge UART";
46 * this, use bits of the private_data pointer of the uart port structure.
53 unsigned long *private_data = (unsigned long *)&port->private_data; in is_enabled()
62 unsigned long *private_data = (unsigned long *)&port->private_data; in enable()
69 unsigned long *private_data = (unsigned long *)&port->private_data; in disable()
84 * BAUD_BASE / baud - 1
88 * int(BAUD_BASE / baud - 0.5) ->
89 * int(BAUD_BASE / baud - (baud >> 1) / baud) ->
90 * int((BAUD_BASE - (baud >> 1)) / baud)
123 while (!(status & 0x10) && max_count--) { in serial21285_rx_chars()
126 port->icount.rx++; in serial21285_rx_chars()
131 port->icount.parity++; in serial21285_rx_chars()
133 port->icount.frame++; in serial21285_rx_chars()
135 port->icount.overrun++; in serial21285_rx_chars()
137 rxs &= port->read_status_mask; in serial21285_rx_chars()
149 tty_flip_buffer_push(&port->state->port); in serial21285_rx_chars()
157 struct circ_buf *xmit = &port->state->xmit; in serial21285_tx_chars()
160 if (port->x_char) { in serial21285_tx_chars()
161 *CSR_UARTDR = port->x_char; in serial21285_tx_chars()
162 port->icount.tx++; in serial21285_tx_chars()
163 port->x_char = 0; in serial21285_tx_chars()
172 *CSR_UARTDR = xmit->buf[xmit->tail]; in serial21285_tx_chars()
173 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); in serial21285_tx_chars()
174 port->icount.tx++; in serial21285_tx_chars()
177 } while (--count > 0 && !(*CSR_UARTFLG & 0x20)); in serial21285_tx_chars()
209 spin_lock_irqsave(&port->lock, flags); in serial21285_break_ctl()
216 spin_unlock_irqrestore(&port->lock, flags); in serial21285_break_ctl()
254 termios->c_cflag &= ~(HUPCL | CRTSCTS | CMSPAR); in serial21285_set_termios()
255 termios->c_cflag |= CLOCAL; in serial21285_set_termios()
260 termios->c_iflag &= ~(IGNBRK | BRKINT); in serial21285_set_termios()
265 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); in serial21285_set_termios()
267 b = port->uartclk / (16 * quot); in serial21285_set_termios()
270 switch (termios->c_cflag & CSIZE) { in serial21285_set_termios()
285 if (termios->c_cflag & CSTOPB) in serial21285_set_termios()
287 if (termios->c_cflag & PARENB) { in serial21285_set_termios()
289 if (!(termios->c_cflag & PARODD)) in serial21285_set_termios()
293 if (port->fifosize) in serial21285_set_termios()
296 spin_lock_irqsave(&port->lock, flags); in serial21285_set_termios()
299 * Update the per-port timeout. in serial21285_set_termios()
301 uart_update_timeout(port, termios->c_cflag, baud); in serial21285_set_termios()
306 port->read_status_mask = RXSTAT_OVERRUN; in serial21285_set_termios()
307 if (termios->c_iflag & INPCK) in serial21285_set_termios()
308 port->read_status_mask |= RXSTAT_FRAME | RXSTAT_PARITY; in serial21285_set_termios()
313 port->ignore_status_mask = 0; in serial21285_set_termios()
314 if (termios->c_iflag & IGNPAR) in serial21285_set_termios()
315 port->ignore_status_mask |= RXSTAT_FRAME | RXSTAT_PARITY; in serial21285_set_termios()
316 if (termios->c_iflag & IGNBRK && termios->c_iflag & IGNPAR) in serial21285_set_termios()
317 port->ignore_status_mask |= RXSTAT_OVERRUN; in serial21285_set_termios()
322 if ((termios->c_cflag & CREAD) == 0) in serial21285_set_termios()
323 port->ignore_status_mask |= RXSTAT_DUMMY_READ; in serial21285_set_termios()
325 quot -= 1; in serial21285_set_termios()
333 spin_unlock_irqrestore(&port->lock, flags); in serial21285_set_termios()
338 return port->type == PORT_21285 ? "DC21285" : NULL; in serial21285_type()
343 release_mem_region(port->mapbase, 32); in serial21285_release_port()
348 return request_mem_region(port->mapbase, 32, serial21285_name) in serial21285_request_port()
349 != NULL ? 0 : -EBUSY; in serial21285_request_port()
355 port->type = PORT_21285; in serial21285_config_port()
364 if (ser->type != PORT_UNKNOWN && ser->type != PORT_21285) in serial21285_verify_port()
365 ret = -EINVAL; in serial21285_verify_port()
366 if (ser->irq <= 0) in serial21285_verify_port()
367 ret = -EINVAL; in serial21285_verify_port()
368 if (ser->baud_base != port->uartclk / 16) in serial21285_verify_port()
369 ret = -EINVAL; in serial21285_verify_port()
395 .fifosize = 16,
452 *baud = port->uartclk / (16 * (tmp + 1)); in serial21285_get_options()
468 * Check whether an invalid uart number has been specified, and in serial21285_console_setup()
489 .index = -1,