Lines Matching +full:auto +full:- +full:baud

1 // SPDX-License-Identifier: GPL-2.0+
3 * Base port operations for 8250/16550-type serial ports
256 * tx_loadsz is set to 63-bytes instead of 64-bytes to implement
257 * workaround of errata A-008006 which states that tx_loadsz should
269 .name = "Palmchip BK-3103",
340 -1, /* UART_SCR (unmapped) */
349 -1, /* UART_LSR (unmapped) */
350 -1, /* UART_MSR (unmapped) */
351 -1, /* UART_SCR (unmapped) */
361 return __raw_readl(p->membase + (offset << p->regshift)); in au_serial_in()
371 __raw_writel(value, p->membase + (offset << p->regshift)); in au_serial_out()
377 return __raw_readl(up->port.membase + 0x28); in au_serial_dl_read()
382 __raw_writel(value, up->port.membase + 0x28); in au_serial_dl_write()
389 offset = offset << p->regshift; in hub6_serial_in()
390 outb(p->hub6 - 1 + offset, p->iobase); in hub6_serial_in()
391 return inb(p->iobase + 1); in hub6_serial_in()
396 offset = offset << p->regshift; in hub6_serial_out()
397 outb(p->hub6 - 1 + offset, p->iobase); in hub6_serial_out()
398 outb(value, p->iobase + 1); in hub6_serial_out()
403 offset = offset << p->regshift; in mem_serial_in()
404 return readb(p->membase + offset); in mem_serial_in()
409 offset = offset << p->regshift; in mem_serial_out()
410 writeb(value, p->membase + offset); in mem_serial_out()
415 offset = offset << p->regshift; in mem16_serial_out()
416 writew(value, p->membase + offset); in mem16_serial_out()
421 offset = offset << p->regshift; in mem16_serial_in()
422 return readw(p->membase + offset); in mem16_serial_in()
427 offset = offset << p->regshift; in mem32_serial_out()
428 writel(value, p->membase + offset); in mem32_serial_out()
433 offset = offset << p->regshift; in mem32_serial_in()
434 return readl(p->membase + offset); in mem32_serial_in()
439 offset = offset << p->regshift; in mem32be_serial_out()
440 iowrite32be(value, p->membase + offset); in mem32be_serial_out()
445 offset = offset << p->regshift; in mem32be_serial_in()
446 return ioread32be(p->membase + offset); in mem32be_serial_in()
451 offset = offset << p->regshift; in io_serial_in()
452 return inb(p->iobase + offset); in io_serial_in()
457 offset = offset << p->regshift; in io_serial_out()
458 outb(value, p->iobase + offset); in io_serial_out()
467 up->dl_read = default_serial_dl_read; in set_io_from_upio()
468 up->dl_write = default_serial_dl_write; in set_io_from_upio()
470 switch (p->iotype) { in set_io_from_upio()
472 p->serial_in = hub6_serial_in; in set_io_from_upio()
473 p->serial_out = hub6_serial_out; in set_io_from_upio()
477 p->serial_in = mem_serial_in; in set_io_from_upio()
478 p->serial_out = mem_serial_out; in set_io_from_upio()
482 p->serial_in = mem16_serial_in; in set_io_from_upio()
483 p->serial_out = mem16_serial_out; in set_io_from_upio()
487 p->serial_in = mem32_serial_in; in set_io_from_upio()
488 p->serial_out = mem32_serial_out; in set_io_from_upio()
492 p->serial_in = mem32be_serial_in; in set_io_from_upio()
493 p->serial_out = mem32be_serial_out; in set_io_from_upio()
498 p->serial_in = au_serial_in; in set_io_from_upio()
499 p->serial_out = au_serial_out; in set_io_from_upio()
500 up->dl_read = au_serial_dl_read; in set_io_from_upio()
501 up->dl_write = au_serial_dl_write; in set_io_from_upio()
506 p->serial_in = io_serial_in; in set_io_from_upio()
507 p->serial_out = io_serial_out; in set_io_from_upio()
511 up->cur_iotype = p->iotype; in set_io_from_upio()
512 p->handle_irq = serial8250_default_handle_irq; in set_io_from_upio()
518 switch (p->iotype) { in serial_port_out_sync()
524 p->serial_out(p, offset, value); in serial_port_out_sync()
525 p->serial_in(p, UART_LCR); /* safe, no side-effects */ in serial_port_out_sync()
528 p->serial_out(p, offset, value); in serial_port_out_sync()
545 serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD); in serial_icr_read()
548 serial_icr_write(up, UART_ACR, up->acr); in serial_icr_read()
558 if (p->capabilities & UART_CAP_FIFO) { in serial8250_clear_fifos()
572 serial_out(p, UART_FCR, p->fcr); in serial8250_clear_and_reinit_fifos()
578 if (!(p->capabilities & UART_CAP_RPM)) in serial8250_rpm_get()
580 pm_runtime_get_sync(p->port.dev); in serial8250_rpm_get()
586 if (!(p->capabilities & UART_CAP_RPM)) in serial8250_rpm_put()
588 pm_runtime_mark_last_busy(p->port.dev); in serial8250_rpm_put()
589 pm_runtime_put_autosuspend(p->port.dev); in serial8250_rpm_put()
594 * serial8250_em485_init() - put uart_8250_port into rs485 emulating
607 * or from any other callback protected with p->port.lock spinlock.
611 * Return 0 - success, -errno - otherwise
615 if (p->em485) in serial8250_em485_init()
618 p->em485 = kmalloc(sizeof(struct uart_8250_em485), GFP_ATOMIC); in serial8250_em485_init()
619 if (!p->em485) in serial8250_em485_init()
620 return -ENOMEM; in serial8250_em485_init()
622 hrtimer_init(&p->em485->stop_tx_timer, CLOCK_MONOTONIC, in serial8250_em485_init()
624 hrtimer_init(&p->em485->start_tx_timer, CLOCK_MONOTONIC, in serial8250_em485_init()
626 p->em485->stop_tx_timer.function = &serial8250_em485_handle_stop_tx; in serial8250_em485_init()
627 p->em485->start_tx_timer.function = &serial8250_em485_handle_start_tx; in serial8250_em485_init()
628 p->em485->port = p; in serial8250_em485_init()
629 p->em485->active_timer = NULL; in serial8250_em485_init()
630 p->em485->tx_stopped = true; in serial8250_em485_init()
632 p->rs485_stop_tx(p); in serial8250_em485_init()
638 * serial8250_em485_destroy() - put uart_8250_port into normal state
646 * or from any other callback protected with p->port.lock spinlock.
652 if (!p->em485) in serial8250_em485_destroy()
655 hrtimer_cancel(&p->em485->start_tx_timer); in serial8250_em485_destroy()
656 hrtimer_cancel(&p->em485->stop_tx_timer); in serial8250_em485_destroy()
658 kfree(p->em485); in serial8250_em485_destroy()
659 p->em485 = NULL; in serial8250_em485_destroy()
664 * serial8250_em485_config() - generic ->rs485_config() callback
677 if (!!(rs485->flags & SER_RS485_RTS_ON_SEND) == in serial8250_em485_config()
678 !!(rs485->flags & SER_RS485_RTS_AFTER_SEND)) { in serial8250_em485_config()
679 rs485->flags |= SER_RS485_RTS_ON_SEND; in serial8250_em485_config()
680 rs485->flags &= ~SER_RS485_RTS_AFTER_SEND; in serial8250_em485_config()
684 rs485->delay_rts_before_send = min(rs485->delay_rts_before_send, 100U); in serial8250_em485_config()
685 rs485->delay_rts_after_send = min(rs485->delay_rts_after_send, 100U); in serial8250_em485_config()
687 memset(rs485->padding, 0, sizeof(rs485->padding)); in serial8250_em485_config()
688 port->rs485 = *rs485; in serial8250_em485_config()
690 gpiod_set_value(port->rs485_term_gpio, in serial8250_em485_config()
691 rs485->flags & SER_RS485_TERMINATE_BUS); in serial8250_em485_config()
697 if (rs485->flags & SER_RS485_ENABLED) { in serial8250_em485_config()
701 rs485->flags &= ~SER_RS485_ENABLED; in serial8250_em485_config()
702 port->rs485.flags &= ~SER_RS485_ENABLED; in serial8250_em485_config()
721 if (!(p->capabilities & UART_CAP_RPM)) in serial8250_rpm_get_tx()
724 rpm_active = xchg(&p->rpm_tx_active, 1); in serial8250_rpm_get_tx()
727 pm_runtime_get_sync(p->port.dev); in serial8250_rpm_get_tx()
735 if (!(p->capabilities & UART_CAP_RPM)) in serial8250_rpm_put_tx()
738 rpm_active = xchg(&p->rpm_tx_active, 0); in serial8250_rpm_put_tx()
741 pm_runtime_mark_last_busy(p->port.dev); in serial8250_rpm_put_tx()
742 pm_runtime_put_autosuspend(p->port.dev); in serial8250_rpm_put_tx()
757 if (p->capabilities & UART_CAP_SLEEP) { in serial8250_set_sleep()
758 if (p->capabilities & UART_CAP_EFR) { in serial8250_set_sleep()
766 if (p->capabilities & UART_CAP_EFR) { in serial8250_set_sleep()
796 up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16; in __enable_rsa()
803 if (up->port.type == PORT_RSA) { in enable_rsa()
804 if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) { in enable_rsa()
805 spin_lock_irq(&up->port.lock); in enable_rsa()
807 spin_unlock_irq(&up->port.lock); in enable_rsa()
809 if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) in enable_rsa()
825 if (up->port.type == PORT_RSA && in disable_rsa()
826 up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) { in disable_rsa()
827 spin_lock_irq(&up->port.lock); in disable_rsa()
839 up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16; in disable_rsa()
840 spin_unlock_irq(&up->port.lock); in disable_rsa()
868 mdelay(20);/* FIXME - schedule_timeout */ in size_fifo()
882 * Read UART ID using the divisor method - set DLL and DLM to zero
920 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; in autoconfig_has_efr()
925 * If we have to do this here because some non-National in autoconfig_has_efr()
939 up->acr = 0; in autoconfig_has_efr()
952 up->port.type = PORT_16C950; in autoconfig_has_efr()
956 * chip which causes it to seriously miscalculate baud rates in autoconfig_has_efr()
960 up->bugs |= UART_BUG_QUOT; in autoconfig_has_efr()
968 * 0x10 - XR16C850 and the DLL contains the chip revision. in autoconfig_has_efr()
969 * 0x12 - XR16C2850. in autoconfig_has_efr()
970 * 0x14 - XR16C854. in autoconfig_has_efr()
977 up->port.type = PORT_16850; in autoconfig_has_efr()
988 * I've had problems doing this in the past. -TYT in autoconfig_has_efr()
991 up->port.type = PORT_16654; in autoconfig_has_efr()
993 up->port.type = PORT_16650V2; in autoconfig_has_efr()
998 * this category - the original 8250 and the 16450. The
1005 up->port.type = PORT_8250; in autoconfig_8250()
1015 up->port.type = PORT_16450; in autoconfig_8250()
1023 * http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-11/4812.html in broken_efr()
1042 up->port.type = PORT_16550A; in autoconfig_16550a()
1043 up->capabilities |= UART_CAP_FIFO; in autoconfig_16550a()
1057 up->port.type = PORT_16650; in autoconfig_16550a()
1058 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; in autoconfig_16550a()
1068 up->port.type = PORT_16550A_FSL64; in autoconfig_16550a()
1092 * it's changed. If so, set baud_base in EXCR2 to 921600. -- dwmw2 in autoconfig_16550a()
1120 up->port.uartclk = 921600*16; in autoconfig_16550a()
1121 up->port.type = PORT_NS16550A; in autoconfig_16550a()
1122 up->capabilities |= UART_NATSEMI; in autoconfig_16550a()
1146 up->port.type = PORT_16750; in autoconfig_16550a()
1147 up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP; in autoconfig_16550a()
1173 up->port.type = PORT_XSCALE; in autoconfig_16550a()
1174 up->capabilities |= UART_CAP_UUE | UART_CAP_RTOIE; in autoconfig_16550a()
1190 if (up->port.type == PORT_16550A && size_fifo(up) == 64) { in autoconfig_16550a()
1191 up->port.type = PORT_U6_16550A; in autoconfig_16550a()
1192 up->capabilities |= UART_CAP_AFE; in autoconfig_16550a()
1207 struct uart_port *port = &up->port; in autoconfig()
1211 if (!port->iobase && !port->mapbase && !port->membase) in autoconfig()
1215 port->name, port->iobase, port->membase); in autoconfig()
1218 * We really do need global IRQs disabled here - we're going to in autoconfig()
1221 spin_lock_irqsave(&port->lock, flags); in autoconfig()
1223 up->capabilities = 0; in autoconfig()
1224 up->bugs = 0; in autoconfig()
1226 if (!(port->flags & UPF_BUGGY_UART)) { in autoconfig()
1233 * assumption is that 0x80 is a non-existent port; in autoconfig()
1260 spin_unlock_irqrestore(&port->lock, flags); in autoconfig()
1277 * that conflicts with COM 1-4 --- we hope! in autoconfig()
1279 if (!(port->flags & UPF_SKIP_TEST)) { in autoconfig()
1284 spin_unlock_irqrestore(&port->lock, flags); in autoconfig()
1314 port->type = PORT_UNKNOWN; in autoconfig()
1317 port->type = PORT_16550; in autoconfig()
1328 if (port->type == PORT_16550A && up->probe & UART_PROBE_RSA && in autoconfig()
1330 port->type = PORT_RSA; in autoconfig()
1335 port->fifosize = uart_config[up->port.type].fifo_size; in autoconfig()
1336 old_capabilities = up->capabilities; in autoconfig()
1337 up->capabilities = uart_config[port->type].flags; in autoconfig()
1338 up->tx_loadsz = uart_config[port->type].tx_loadsz; in autoconfig()
1340 if (port->type == PORT_UNKNOWN) in autoconfig()
1347 if (port->type == PORT_RSA) in autoconfig()
1353 if (up->capabilities & UART_CAP_UUE) in autoconfig()
1359 spin_unlock_irqrestore(&port->lock, flags); in autoconfig()
1364 if (port->type == PORT_16550A && port->iotype == UPIO_PORT) in autoconfig()
1367 if (up->capabilities != old_capabilities) { in autoconfig()
1368 dev_warn(port->dev, "detected caps %08x should be %08x\n", in autoconfig()
1369 old_capabilities, up->capabilities); in autoconfig()
1373 DEBUG_AUTOCONF("type=%s\n", uart_config[port->type].name); in autoconfig()
1378 struct uart_port *port = &up->port; in autoconfig_irq()
1385 if (port->flags & UPF_FOURPORT) { in autoconfig_irq()
1386 ICP = (port->iobase & 0xfe0) | 0x1f; in autoconfig_irq()
1404 if (port->flags & UPF_FOURPORT) { in autoconfig_irq()
1422 if (port->flags & UPF_FOURPORT) in autoconfig_irq()
1428 port->irq = (irq > 0) ? irq : 0; in autoconfig_irq()
1437 up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); in serial8250_stop_rx()
1438 up->port.read_status_mask &= ~UART_LSR_DR; in serial8250_stop_rx()
1439 serial_port_out(port, UART_IER, up->ier); in serial8250_stop_rx()
1445 * serial8250_em485_stop_tx() - generic ->rs485_stop_tx() callback
1454 if (p->port.rs485.flags & SER_RS485_RTS_AFTER_SEND) in serial8250_em485_stop_tx()
1462 * received during the half-duplex transmission. in serial8250_em485_stop_tx()
1465 if (!(p->port.rs485.flags & SER_RS485_RX_DURING_TX)) { in serial8250_em485_stop_tx()
1468 p->ier |= UART_IER_RLSI | UART_IER_RDI; in serial8250_em485_stop_tx()
1469 serial_port_out(&p->port, UART_IER, p->ier); in serial8250_em485_stop_tx()
1478 struct uart_8250_port *p = em485->port; in serial8250_em485_handle_stop_tx()
1482 spin_lock_irqsave(&p->port.lock, flags); in serial8250_em485_handle_stop_tx()
1483 if (em485->active_timer == &em485->stop_tx_timer) { in serial8250_em485_handle_stop_tx()
1484 p->rs485_stop_tx(p); in serial8250_em485_handle_stop_tx()
1485 em485->active_timer = NULL; in serial8250_em485_handle_stop_tx()
1486 em485->tx_stopped = true; in serial8250_em485_handle_stop_tx()
1488 spin_unlock_irqrestore(&p->port.lock, flags); in serial8250_em485_handle_stop_tx()
1501 struct uart_8250_em485 *em485 = p->em485; in __stop_tx_rs485()
1507 if (p->port.rs485.delay_rts_after_send > 0) { in __stop_tx_rs485()
1508 em485->active_timer = &em485->stop_tx_timer; in __stop_tx_rs485()
1509 start_hrtimer_ms(&em485->stop_tx_timer, in __stop_tx_rs485()
1510 p->port.rs485.delay_rts_after_send); in __stop_tx_rs485()
1512 p->rs485_stop_tx(p); in __stop_tx_rs485()
1513 em485->active_timer = NULL; in __stop_tx_rs485()
1514 em485->tx_stopped = true; in __stop_tx_rs485()
1526 struct uart_8250_em485 *em485 = p->em485; in __stop_tx()
1554 if (port->type == PORT_16C950) { in serial8250_stop_tx()
1555 up->acr |= UART_ACR_TXDIS; in serial8250_stop_tx()
1556 serial_icr_write(up, UART_ACR, up->acr); in serial8250_stop_tx()
1565 if (up->dma && !up->dma->tx_dma(up)) in __start_tx()
1569 if (up->bugs & UART_BUG_TXEN) { in __start_tx()
1573 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; in __start_tx()
1580 * Re-enable the transmitter if we disabled it. in __start_tx()
1582 if (port->type == PORT_16C950 && up->acr & UART_ACR_TXDIS) { in __start_tx()
1583 up->acr &= ~UART_ACR_TXDIS; in __start_tx()
1584 serial_icr_write(up, UART_ACR, up->acr); in __start_tx()
1589 * serial8250_em485_start_tx() - generic ->rs485_start_tx() callback
1602 if (!(up->port.rs485.flags & SER_RS485_RX_DURING_TX)) in serial8250_em485_start_tx()
1603 serial8250_stop_rx(&up->port); in serial8250_em485_start_tx()
1605 if (up->port.rs485.flags & SER_RS485_RTS_ON_SEND) in serial8250_em485_start_tx()
1616 struct uart_8250_em485 *em485 = up->em485; in start_tx_rs485()
1618 em485->active_timer = NULL; in start_tx_rs485()
1620 if (em485->tx_stopped) { in start_tx_rs485()
1621 em485->tx_stopped = false; in start_tx_rs485()
1623 up->rs485_start_tx(up); in start_tx_rs485()
1625 if (up->port.rs485.delay_rts_before_send > 0) { in start_tx_rs485()
1626 em485->active_timer = &em485->start_tx_timer; in start_tx_rs485()
1627 start_hrtimer_ms(&em485->start_tx_timer, in start_tx_rs485()
1628 up->port.rs485.delay_rts_before_send); in start_tx_rs485()
1640 struct uart_8250_port *p = em485->port; in serial8250_em485_handle_start_tx()
1643 spin_lock_irqsave(&p->port.lock, flags); in serial8250_em485_handle_start_tx()
1644 if (em485->active_timer == &em485->start_tx_timer) { in serial8250_em485_handle_start_tx()
1645 __start_tx(&p->port); in serial8250_em485_handle_start_tx()
1646 em485->active_timer = NULL; in serial8250_em485_handle_start_tx()
1648 spin_unlock_irqrestore(&p->port.lock, flags); in serial8250_em485_handle_start_tx()
1656 struct uart_8250_em485 *em485 = up->em485; in serial8250_start_tx()
1661 em485->active_timer == &em485->start_tx_timer) in serial8250_start_tx()
1672 port->throttle(port); in serial8250_throttle()
1677 port->unthrottle(port); in serial8250_unthrottle()
1685 if (up->bugs & UART_BUG_NOMSR) in serial8250_disable_ms()
1688 mctrl_gpio_disable_ms(up->gpios); in serial8250_disable_ms()
1690 up->ier &= ~UART_IER_MSI; in serial8250_disable_ms()
1691 serial_port_out(port, UART_IER, up->ier); in serial8250_disable_ms()
1699 if (up->bugs & UART_BUG_NOMSR) in serial8250_enable_ms()
1702 mctrl_gpio_enable_ms(up->gpios); in serial8250_enable_ms()
1704 up->ier |= UART_IER_MSI; in serial8250_enable_ms()
1707 serial_port_out(port, UART_IER, up->ier); in serial8250_enable_ms()
1713 struct uart_port *port = &up->port; in serial8250_read_char()
1729 port->icount.rx++; in serial8250_read_char()
1731 lsr |= up->lsr_saved_flags; in serial8250_read_char()
1732 up->lsr_saved_flags = 0; in serial8250_read_char()
1737 port->icount.brk++; in serial8250_read_char()
1747 port->icount.parity++; in serial8250_read_char()
1749 port->icount.frame++; in serial8250_read_char()
1751 port->icount.overrun++; in serial8250_read_char()
1756 lsr &= port->read_status_mask; in serial8250_read_char()
1759 dev_dbg(port->dev, "handling break\n"); in serial8250_read_char()
1780 struct uart_port *port = &up->port; in serial8250_rx_chars()
1785 if (--max_count == 0) in serial8250_rx_chars()
1790 tty_flip_buffer_push(&port->state->port); in serial8250_rx_chars()
1797 struct uart_port *port = &up->port; in serial8250_tx_chars()
1798 struct circ_buf *xmit = &port->state->xmit; in serial8250_tx_chars()
1801 if (port->x_char) { in serial8250_tx_chars()
1802 serial_out(up, UART_TX, port->x_char); in serial8250_tx_chars()
1803 port->icount.tx++; in serial8250_tx_chars()
1804 port->x_char = 0; in serial8250_tx_chars()
1816 count = up->tx_loadsz; in serial8250_tx_chars()
1818 serial_out(up, UART_TX, xmit->buf[xmit->tail]); in serial8250_tx_chars()
1819 if (up->bugs & UART_BUG_TXRACE) { in serial8250_tx_chars()
1825 * Delay back-to-back writes by a read cycle to avoid in serial8250_tx_chars()
1827 * side-effects and discard the result. in serial8250_tx_chars()
1831 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); in serial8250_tx_chars()
1832 port->icount.tx++; in serial8250_tx_chars()
1835 if ((up->capabilities & UART_CAP_HFIFO) && in serial8250_tx_chars()
1838 /* The BCM2835 MINI UART THRE bit is really a not-full bit. */ in serial8250_tx_chars()
1839 if ((up->capabilities & UART_CAP_MINI) && in serial8250_tx_chars()
1842 } while (--count > 0); in serial8250_tx_chars()
1852 if (uart_circ_empty(xmit) && !(up->capabilities & UART_CAP_RPM)) in serial8250_tx_chars()
1860 struct uart_port *port = &up->port; in serial8250_modem_status()
1863 status |= up->msr_saved_flags; in serial8250_modem_status()
1864 up->msr_saved_flags = 0; in serial8250_modem_status()
1865 if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI && in serial8250_modem_status()
1866 port->state != NULL) { in serial8250_modem_status()
1868 port->icount.rng++; in serial8250_modem_status()
1870 port->icount.dsr++; in serial8250_modem_status()
1876 wake_up_interruptible(&port->state->port.delta_msr_wait); in serial8250_modem_status()
1892 return up->dma->rx_dma(up); in handle_rx_dma()
1908 spin_lock_irqsave(&port->lock, flags); in serial8250_handle_irq()
1915 * overflow. Not servicing, RX FIFO would trigger auto HW flow in serial8250_handle_irq()
1917 * halting RX. This only works when auto HW flow control is in serial8250_handle_irq()
1921 (port->status & (UPSTAT_AUTOCTS | UPSTAT_AUTORTS)) && in serial8250_handle_irq()
1922 !(port->read_status_mask & UART_LSR_DR)) in serial8250_handle_irq()
1926 if (!up->dma || handle_rx_dma(up, iir)) in serial8250_handle_irq()
1930 if ((!up->dma || up->dma->tx_err) && (status & UART_LSR_THRE) && in serial8250_handle_irq()
1931 (up->ier & UART_IER_THRI)) in serial8250_handle_irq()
1970 spin_lock_irqsave(&port->lock, flags); in serial8250_tx_threshold_handle_irq()
1972 spin_unlock_irqrestore(&port->lock, flags); in serial8250_tx_threshold_handle_irq()
1987 spin_lock_irqsave(&port->lock, flags); in serial8250_tx_empty()
1989 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; in serial8250_tx_empty()
1990 spin_unlock_irqrestore(&port->lock, flags); in serial8250_tx_empty()
2008 if (up->gpios) in serial8250_do_get_mctrl()
2009 return mctrl_gpio_get(up->gpios, &val); in serial8250_do_get_mctrl()
2017 if (port->get_mctrl) in serial8250_get_mctrl()
2018 return port->get_mctrl(port); in serial8250_get_mctrl()
2027 if (port->rs485.flags & SER_RS485_ENABLED) { in serial8250_do_set_mctrl()
2036 mcr = (mcr & up->mcr_mask) | up->mcr_force | up->mcr; in serial8250_do_set_mctrl()
2044 if (port->set_mctrl) in serial8250_set_mctrl()
2045 port->set_mctrl(port, mctrl); in serial8250_set_mctrl()
2056 spin_lock_irqsave(&port->lock, flags); in serial8250_break_ctl()
2057 if (break_state == -1) in serial8250_break_ctl()
2058 up->lcr |= UART_LCR_SBC; in serial8250_break_ctl()
2060 up->lcr &= ~UART_LCR_SBC; in serial8250_break_ctl()
2061 serial_port_out(port, UART_LCR, up->lcr); in serial8250_break_ctl()
2062 spin_unlock_irqrestore(&port->lock, flags); in serial8250_break_ctl()
2077 up->lsr_saved_flags |= status & LSR_SAVE_FLAGS; in wait_for_xmitr()
2081 if (--tmout == 0) in wait_for_xmitr()
2088 if (up->port.flags & UPF_CONS_FLOW) { in wait_for_xmitr()
2089 for (tmout = 1000000; tmout; tmout--) { in wait_for_xmitr()
2091 up->msr_saved_flags |= msr & MSR_SAVE_FLAGS; in wait_for_xmitr()
2139 if (up->capabilities & UART_CAP_UUE) in serial8250_put_poll_char()
2168 if (!port->fifosize) in serial8250_do_startup()
2169 port->fifosize = uart_config[port->type].fifo_size; in serial8250_do_startup()
2170 if (!up->tx_loadsz) in serial8250_do_startup()
2171 up->tx_loadsz = uart_config[port->type].tx_loadsz; in serial8250_do_startup()
2172 if (!up->capabilities) in serial8250_do_startup()
2173 up->capabilities = uart_config[port->type].flags; in serial8250_do_startup()
2174 up->mcr = 0; in serial8250_do_startup()
2176 if (port->iotype != up->cur_iotype) in serial8250_do_startup()
2180 if (port->type == PORT_16C950) { in serial8250_do_startup()
2182 up->acr = 0; in serial8250_do_startup()
2193 if (port->type == PORT_DA830) { in serial8250_do_startup()
2206 if (port->type == PORT_NPCM) { in serial8250_do_startup()
2242 if (!(port->flags & UPF_BUGGY_UART) && in serial8250_do_startup()
2244 dev_info_ratelimited(port->dev, "LSR safety check engaged!\n"); in serial8250_do_startup()
2245 retval = -ENODEV; in serial8250_do_startup()
2252 if (port->type == PORT_16850) { in serial8250_do_startup()
2271 if (((port->type == PORT_ALTR_16550_F32) || in serial8250_do_startup()
2272 (port->type == PORT_ALTR_16550_F64) || in serial8250_do_startup()
2273 (port->type == PORT_ALTR_16550_F128)) && (port->fifosize > 1)) { in serial8250_do_startup()
2274 /* Bounds checking of TX threshold (valid 0 to fifosize-2) */ in serial8250_do_startup()
2275 if ((up->tx_loadsz < 2) || (up->tx_loadsz > port->fifosize)) { in serial8250_do_startup()
2276 dev_err(port->dev, "TX FIFO Threshold errors, skipping\n"); in serial8250_do_startup()
2281 port->fifosize - up->tx_loadsz); in serial8250_do_startup()
2282 port->handle_irq = serial8250_tx_threshold_handle_irq; in serial8250_do_startup()
2287 if (port->irq && (up->port.flags & UPF_SHARE_IRQ)) in serial8250_do_startup()
2288 up->port.irqflags |= IRQF_SHARED; in serial8250_do_startup()
2290 if (port->irq && !(up->port.flags & UPF_NO_THRE_TEST)) { in serial8250_do_startup()
2293 if (port->irqflags & IRQF_SHARED) in serial8250_do_startup()
2294 disable_irq_nosync(port->irq); in serial8250_do_startup()
2304 spin_lock_irqsave(&port->lock, flags); in serial8250_do_startup()
2312 udelay(1); /* allow a working UART time to re-assert THRE */ in serial8250_do_startup()
2316 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_startup()
2318 if (port->irqflags & IRQF_SHARED) in serial8250_do_startup()
2319 enable_irq(port->irq); in serial8250_do_startup()
2327 up->port.flags & UPF_BUG_THRE) { in serial8250_do_startup()
2328 up->bugs |= UART_BUG_THRE; in serial8250_do_startup()
2332 retval = up->ops->setup_irq(up); in serial8250_do_startup()
2341 spin_lock_irqsave(&port->lock, flags); in serial8250_do_startup()
2342 if (up->port.flags & UPF_FOURPORT) { in serial8250_do_startup()
2343 if (!up->port.irq) in serial8250_do_startup()
2344 up->port.mctrl |= TIOCM_OUT1; in serial8250_do_startup()
2349 if (port->irq) in serial8250_do_startup()
2350 up->port.mctrl |= TIOCM_OUT2; in serial8250_do_startup()
2352 serial8250_set_mctrl(port, port->mctrl); in serial8250_do_startup()
2365 if (up->port.quirks & UPQ_NO_TXEN_TEST) in serial8250_do_startup()
2378 if (!(up->bugs & UART_BUG_TXEN)) { in serial8250_do_startup()
2379 up->bugs |= UART_BUG_TXEN; in serial8250_do_startup()
2380 dev_dbg(port->dev, "enabling bad tx status workarounds\n"); in serial8250_do_startup()
2383 up->bugs &= ~UART_BUG_TXEN; in serial8250_do_startup()
2387 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_startup()
2398 up->lsr_saved_flags = 0; in serial8250_do_startup()
2399 up->msr_saved_flags = 0; in serial8250_do_startup()
2404 if (up->dma) { in serial8250_do_startup()
2412 dev_warn_ratelimited(port->dev, "%s\n", msg); in serial8250_do_startup()
2413 up->dma = NULL; in serial8250_do_startup()
2419 * enable until after the FIFOs are enabled; otherwise, an already- in serial8250_do_startup()
2422 up->ier = UART_IER_RLSI | UART_IER_RDI; in serial8250_do_startup()
2424 if (port->flags & UPF_FOURPORT) { in serial8250_do_startup()
2429 icp = (port->iobase & 0xfe0) | 0x01f; in serial8250_do_startup()
2442 if (port->startup) in serial8250_startup()
2443 return port->startup(port); in serial8250_startup()
2456 spin_lock_irqsave(&port->lock, flags); in serial8250_do_shutdown()
2457 up->ier = 0; in serial8250_do_shutdown()
2459 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_shutdown()
2461 synchronize_irq(port->irq); in serial8250_do_shutdown()
2463 if (up->dma) in serial8250_do_shutdown()
2466 spin_lock_irqsave(&port->lock, flags); in serial8250_do_shutdown()
2467 if (port->flags & UPF_FOURPORT) { in serial8250_do_shutdown()
2469 inb((port->iobase & 0xfe0) | 0x1f); in serial8250_do_shutdown()
2470 port->mctrl |= TIOCM_OUT1; in serial8250_do_shutdown()
2472 port->mctrl &= ~TIOCM_OUT2; in serial8250_do_shutdown()
2474 serial8250_set_mctrl(port, port->mctrl); in serial8250_do_shutdown()
2475 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_shutdown()
2498 up->ops->release_irq(up); in serial8250_do_shutdown()
2504 if (port->shutdown) in serial8250_shutdown()
2505 port->shutdown(port); in serial8250_shutdown()
2512 unsigned int baud) in npcm_get_divisor() argument
2514 struct uart_port *port = &up->port; in npcm_get_divisor()
2516 return DIV_ROUND_CLOSEST(port->uartclk, 16 * baud + 2) - 2; in npcm_get_divisor()
2520 unsigned int baud, in serial8250_do_get_divisor() argument
2523 upf_t magic_multiplier = port->flags & UPF_MAGIC_MULTIPLIER; in serial8250_do_get_divisor()
2528 * Handle magic divisors for baud rates above baud_base on SMSC in serial8250_do_get_divisor()
2531 * magic divisors actually reprogram the baud rate generator's in serial8250_do_get_divisor()
2536 * for the extra baud rates of 460800bps and 230400bps rather in serial8250_do_get_divisor()
2543 * the base frequency is divided by 4 for use by the Baud Rate in serial8250_do_get_divisor()
2545 * the divisor produces the baud rate of 115200bps. Conversely, in serial8250_do_get_divisor()
2546 * if set to 1 and high-speed operation has been enabled with the in serial8250_do_get_divisor()
2548 * then the base frequency is supplied directly to the Baud Rate in serial8250_do_get_divisor()
2550 * 0x8004, etc. the respective baud rates produced are 460800bps, in serial8250_do_get_divisor()
2554 * the baud base and therefore 32767 is the maximum divisor value in serial8250_do_get_divisor()
2556 * Baud Rate Generator is capable of dividing the internal PLL in serial8250_do_get_divisor()
2559 if (magic_multiplier && baud >= port->uartclk / 6) in serial8250_do_get_divisor()
2561 else if (magic_multiplier && baud >= port->uartclk / 12) in serial8250_do_get_divisor()
2563 else if (up->port.type == PORT_NPCM) in serial8250_do_get_divisor()
2564 quot = npcm_get_divisor(up, baud); in serial8250_do_get_divisor()
2566 quot = uart_get_divisor(port, baud); in serial8250_do_get_divisor()
2571 if (up->bugs & UART_BUG_QUOT && (quot & 0xff) == 0) in serial8250_do_get_divisor()
2578 unsigned int baud, in serial8250_get_divisor() argument
2581 if (port->get_divisor) in serial8250_get_divisor()
2582 return port->get_divisor(port, baud, frac); in serial8250_get_divisor()
2584 return serial8250_do_get_divisor(port, baud, frac); in serial8250_get_divisor()
2612 if (up->bugs & UART_BUG_PARITY) in serial8250_compute_lcr()
2613 up->fifo_bug = true; in serial8250_compute_lcr()
2625 void serial8250_do_set_divisor(struct uart_port *port, unsigned int baud, in serial8250_do_set_divisor() argument
2630 /* Workaround to enable 115200 baud on OMAP1510 internal ports */ in serial8250_do_set_divisor()
2632 if (baud == 115200) { in serial8250_do_set_divisor()
2643 if (up->capabilities & UART_NATSEMI) in serial8250_do_set_divisor()
2646 serial_port_out(port, UART_LCR, up->lcr | UART_LCR_DLAB); in serial8250_do_set_divisor()
2652 static void serial8250_set_divisor(struct uart_port *port, unsigned int baud, in serial8250_set_divisor() argument
2655 if (port->set_divisor) in serial8250_set_divisor()
2656 port->set_divisor(port, baud, quot, quot_frac); in serial8250_set_divisor()
2658 serial8250_do_set_divisor(port, baud, quot, quot_frac); in serial8250_set_divisor()
2665 unsigned int tolerance = port->uartclk / 100; in serial8250_get_baud_rate()
2670 * Handle magic divisors for baud rates above baud_base on SMSC in serial8250_get_baud_rate()
2674 if (port->flags & UPF_MAGIC_MULTIPLIER) { in serial8250_get_baud_rate()
2675 min = port->uartclk / 16 / UART_DIV_MAX >> 1; in serial8250_get_baud_rate()
2676 max = (port->uartclk + tolerance) / 4; in serial8250_get_baud_rate()
2678 min = port->uartclk / 16 / UART_DIV_MAX; in serial8250_get_baud_rate()
2679 max = (port->uartclk + tolerance) / 16; in serial8250_get_baud_rate()
2685 * slower than nominal still match standard baud rates without in serial8250_get_baud_rate()
2699 unsigned int baud, quot, frac = 0; in serial8250_update_uartclk() local
2703 mutex_lock(&port->state->port.mutex); in serial8250_update_uartclk()
2705 if (port->uartclk == uartclk) in serial8250_update_uartclk()
2708 port->uartclk = uartclk; in serial8250_update_uartclk()
2710 if (!tty_port_initialized(&port->state->port)) in serial8250_update_uartclk()
2713 termios = &port->state->port.tty->termios; in serial8250_update_uartclk()
2715 baud = serial8250_get_baud_rate(port, termios, NULL); in serial8250_update_uartclk()
2716 quot = serial8250_get_divisor(port, baud, &frac); in serial8250_update_uartclk()
2719 spin_lock_irqsave(&port->lock, flags); in serial8250_update_uartclk()
2721 uart_update_timeout(port, termios->c_cflag, baud); in serial8250_update_uartclk()
2723 serial8250_set_divisor(port, baud, quot, frac); in serial8250_update_uartclk()
2724 serial_port_out(port, UART_LCR, up->lcr); in serial8250_update_uartclk()
2726 spin_unlock_irqrestore(&port->lock, flags); in serial8250_update_uartclk()
2730 mutex_unlock(&port->state->port.mutex); in serial8250_update_uartclk()
2741 unsigned int baud, quot, frac = 0; in serial8250_do_set_termios() local
2743 if (up->capabilities & UART_CAP_MINI) { in serial8250_do_set_termios()
2744 termios->c_cflag &= ~(CSTOPB | PARENB | PARODD | CMSPAR); in serial8250_do_set_termios()
2745 if ((termios->c_cflag & CSIZE) == CS5 || in serial8250_do_set_termios()
2746 (termios->c_cflag & CSIZE) == CS6) in serial8250_do_set_termios()
2747 termios->c_cflag = (termios->c_cflag & ~CSIZE) | CS7; in serial8250_do_set_termios()
2749 cval = serial8250_compute_lcr(up, termios->c_cflag); in serial8250_do_set_termios()
2751 baud = serial8250_get_baud_rate(port, termios, old); in serial8250_do_set_termios()
2752 quot = serial8250_get_divisor(port, baud, &frac); in serial8250_do_set_termios()
2759 spin_lock_irqsave(&port->lock, flags); in serial8250_do_set_termios()
2761 up->lcr = cval; /* Save computed LCR */ in serial8250_do_set_termios()
2763 if (up->capabilities & UART_CAP_FIFO && port->fifosize > 1) { in serial8250_do_set_termios()
2765 if ((baud < 2400 && !up->dma) || up->fifo_bug) { in serial8250_do_set_termios()
2766 up->fcr &= ~UART_FCR_TRIGGER_MASK; in serial8250_do_set_termios()
2767 up->fcr |= UART_FCR_TRIGGER_1; in serial8250_do_set_termios()
2772 * MCR-based auto flow control. When AFE is enabled, RTS will be in serial8250_do_set_termios()
2776 if (up->capabilities & UART_CAP_AFE) { in serial8250_do_set_termios()
2777 up->mcr &= ~UART_MCR_AFE; in serial8250_do_set_termios()
2778 if (termios->c_cflag & CRTSCTS) in serial8250_do_set_termios()
2779 up->mcr |= UART_MCR_AFE; in serial8250_do_set_termios()
2783 * Update the per-port timeout. in serial8250_do_set_termios()
2785 uart_update_timeout(port, termios->c_cflag, baud); in serial8250_do_set_termios()
2787 port->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; in serial8250_do_set_termios()
2788 if (termios->c_iflag & INPCK) in serial8250_do_set_termios()
2789 port->read_status_mask |= UART_LSR_FE | UART_LSR_PE; in serial8250_do_set_termios()
2790 if (termios->c_iflag & (IGNBRK | BRKINT | PARMRK)) in serial8250_do_set_termios()
2791 port->read_status_mask |= UART_LSR_BI; in serial8250_do_set_termios()
2796 port->ignore_status_mask = 0; in serial8250_do_set_termios()
2797 if (termios->c_iflag & IGNPAR) in serial8250_do_set_termios()
2798 port->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE; in serial8250_do_set_termios()
2799 if (termios->c_iflag & IGNBRK) { in serial8250_do_set_termios()
2800 port->ignore_status_mask |= UART_LSR_BI; in serial8250_do_set_termios()
2805 if (termios->c_iflag & IGNPAR) in serial8250_do_set_termios()
2806 port->ignore_status_mask |= UART_LSR_OE; in serial8250_do_set_termios()
2812 if ((termios->c_cflag & CREAD) == 0) in serial8250_do_set_termios()
2813 port->ignore_status_mask |= UART_LSR_DR; in serial8250_do_set_termios()
2818 up->ier &= ~UART_IER_MSI; in serial8250_do_set_termios()
2819 if (!(up->bugs & UART_BUG_NOMSR) && in serial8250_do_set_termios()
2820 UART_ENABLE_MS(&up->port, termios->c_cflag)) in serial8250_do_set_termios()
2821 up->ier |= UART_IER_MSI; in serial8250_do_set_termios()
2822 if (up->capabilities & UART_CAP_UUE) in serial8250_do_set_termios()
2823 up->ier |= UART_IER_UUE; in serial8250_do_set_termios()
2824 if (up->capabilities & UART_CAP_RTOIE) in serial8250_do_set_termios()
2825 up->ier |= UART_IER_RTOIE; in serial8250_do_set_termios()
2827 serial_port_out(port, UART_IER, up->ier); in serial8250_do_set_termios()
2829 if (up->capabilities & UART_CAP_EFR) { in serial8250_do_set_termios()
2833 * - TI16C752 requires control thresholds to be set. in serial8250_do_set_termios()
2834 * - UART_MCR_RTS is ineffective if auto-RTS mode is enabled. in serial8250_do_set_termios()
2836 if (termios->c_cflag & CRTSCTS) in serial8250_do_set_termios()
2840 if (port->flags & UPF_EXAR_EFR) in serial8250_do_set_termios()
2846 serial8250_set_divisor(port, baud, quot, frac); in serial8250_do_set_termios()
2849 * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR in serial8250_do_set_termios()
2852 if (port->type == PORT_16750) in serial8250_do_set_termios()
2853 serial_port_out(port, UART_FCR, up->fcr); in serial8250_do_set_termios()
2855 serial_port_out(port, UART_LCR, up->lcr); /* reset DLAB */ in serial8250_do_set_termios()
2856 if (port->type != PORT_16750) { in serial8250_do_set_termios()
2858 if (up->fcr & UART_FCR_ENABLE_FIFO) in serial8250_do_set_termios()
2860 serial_port_out(port, UART_FCR, up->fcr); /* set fcr */ in serial8250_do_set_termios()
2862 serial8250_set_mctrl(port, port->mctrl); in serial8250_do_set_termios()
2863 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_set_termios()
2868 tty_termios_encode_baud_rate(termios, baud, baud); in serial8250_do_set_termios()
2876 if (port->set_termios) in serial8250_set_termios()
2877 port->set_termios(port, termios, old); in serial8250_set_termios()
2884 if (termios->c_line == N_PPS) { in serial8250_do_set_ldisc()
2885 port->flags |= UPF_HARDPPS_CD; in serial8250_do_set_ldisc()
2886 spin_lock_irq(&port->lock); in serial8250_do_set_ldisc()
2888 spin_unlock_irq(&port->lock); in serial8250_do_set_ldisc()
2890 port->flags &= ~UPF_HARDPPS_CD; in serial8250_do_set_ldisc()
2891 if (!UART_ENABLE_MS(port, termios->c_cflag)) { in serial8250_do_set_ldisc()
2892 spin_lock_irq(&port->lock); in serial8250_do_set_ldisc()
2894 spin_unlock_irq(&port->lock); in serial8250_do_set_ldisc()
2903 if (port->set_ldisc) in serial8250_set_ldisc()
2904 port->set_ldisc(port, termios); in serial8250_set_ldisc()
2922 if (port->pm) in serial8250_pm()
2923 port->pm(port, state, oldstate); in serial8250_pm()
2930 if (pt->port.mapsize) in serial8250_port_size()
2931 return pt->port.mapsize; in serial8250_port_size()
2932 if (pt->port.iotype == UPIO_AU) { in serial8250_port_size()
2933 if (pt->port.type == PORT_RT2880) in serial8250_port_size()
2938 return 0x16 << pt->port.regshift; in serial8250_port_size()
2940 return 8 << pt->port.regshift; in serial8250_port_size()
2949 struct uart_port *port = &up->port; in serial8250_request_std_resource()
2952 switch (port->iotype) { in serial8250_request_std_resource()
2959 if (!port->mapbase) in serial8250_request_std_resource()
2962 if (!request_mem_region(port->mapbase, size, "serial")) { in serial8250_request_std_resource()
2963 ret = -EBUSY; in serial8250_request_std_resource()
2967 if (port->flags & UPF_IOREMAP) { in serial8250_request_std_resource()
2968 port->membase = ioremap(port->mapbase, size); in serial8250_request_std_resource()
2969 if (!port->membase) { in serial8250_request_std_resource()
2970 release_mem_region(port->mapbase, size); in serial8250_request_std_resource()
2971 ret = -ENOMEM; in serial8250_request_std_resource()
2978 if (!request_region(port->iobase, size, "serial")) in serial8250_request_std_resource()
2979 ret = -EBUSY; in serial8250_request_std_resource()
2988 struct uart_port *port = &up->port; in serial8250_release_std_resource()
2990 switch (port->iotype) { in serial8250_release_std_resource()
2997 if (!port->mapbase) in serial8250_release_std_resource()
3000 if (port->flags & UPF_IOREMAP) { in serial8250_release_std_resource()
3001 iounmap(port->membase); in serial8250_release_std_resource()
3002 port->membase = NULL; in serial8250_release_std_resource()
3005 release_mem_region(port->mapbase, size); in serial8250_release_std_resource()
3010 release_region(port->iobase, size); in serial8250_release_std_resource()
3031 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in fcr_get_rxtrig_bytes()
3034 bytes = conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(up->fcr)]; in fcr_get_rxtrig_bytes()
3036 return bytes ? bytes : -EOPNOTSUPP; in fcr_get_rxtrig_bytes()
3041 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in bytes_to_fcr_rxtrig()
3044 if (!conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(UART_FCR_R_TRIG_00)]) in bytes_to_fcr_rxtrig()
3045 return -EOPNOTSUPP; in bytes_to_fcr_rxtrig()
3048 if (bytes < conf_type->rxtrig_bytes[i]) in bytes_to_fcr_rxtrig()
3050 return (--i) << UART_FCR_R_TRIG_SHIFT; in bytes_to_fcr_rxtrig()
3059 struct uart_port *uport = state->uart_port; in do_get_rxtrig()
3062 if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1) in do_get_rxtrig()
3063 return -EINVAL; in do_get_rxtrig()
3072 mutex_lock(&port->mutex); in do_serial8250_get_rxtrig()
3074 mutex_unlock(&port->mutex); in do_serial8250_get_rxtrig()
3095 struct uart_port *uport = state->uart_port; in do_set_rxtrig()
3099 if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1 || in do_set_rxtrig()
3100 up->fifo_bug) in do_set_rxtrig()
3101 return -EINVAL; in do_set_rxtrig()
3108 up->fcr &= ~UART_FCR_TRIGGER_MASK; in do_set_rxtrig()
3109 up->fcr |= (unsigned char)rxtrig; in do_set_rxtrig()
3110 serial_out(up, UART_FCR, up->fcr); in do_set_rxtrig()
3118 mutex_lock(&port->mutex); in do_serial8250_set_rxtrig()
3120 mutex_unlock(&port->mutex); in do_serial8250_set_rxtrig()
3133 return -EINVAL; in rx_trig_bytes_store()
3159 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in register_dev_spec_attr_grp()
3161 if (conf_type->rxtrig_bytes[0]) in register_dev_spec_attr_grp()
3162 up->port.attr_group = &serial8250_dev_attr_group; in register_dev_spec_attr_grp()
3178 if (port->iotype != up->cur_iotype) in serial8250_config_port()
3184 if (port->rs485.flags & SER_RS485_ENABLED) in serial8250_config_port()
3185 port->rs485_config(port, &port->rs485); in serial8250_config_port()
3188 if (port->type == PORT_16550A && port->iotype == UPIO_AU) in serial8250_config_port()
3189 up->bugs |= UART_BUG_NOMSR; in serial8250_config_port()
3192 if (port->type == PORT_TEGRA) in serial8250_config_port()
3193 up->bugs |= UART_BUG_NOMSR; in serial8250_config_port()
3195 if (port->type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ) in serial8250_config_port()
3198 if (port->type == PORT_UNKNOWN) in serial8250_config_port()
3202 up->fcr = uart_config[up->port.type].fcr; in serial8250_config_port()
3208 if (ser->irq >= nr_irqs || ser->irq < 0 || in serial8250_verify_port()
3209 ser->baud_base < 9600 || ser->type < PORT_UNKNOWN || in serial8250_verify_port()
3210 ser->type >= ARRAY_SIZE(uart_config) || ser->type == PORT_CIRRUS || in serial8250_verify_port()
3211 ser->type == PORT_STARTECH) in serial8250_verify_port()
3212 return -EINVAL; in serial8250_verify_port()
3218 int type = port->type; in serial8250_type()
3254 struct uart_port *port = &up->port; in serial8250_init_port()
3256 spin_lock_init(&port->lock); in serial8250_init_port()
3257 port->ops = &serial8250_pops; in serial8250_init_port()
3258 port->has_sysrq = IS_ENABLED(CONFIG_SERIAL_8250_CONSOLE); in serial8250_init_port()
3260 up->cur_iotype = 0xFF; in serial8250_init_port()
3266 struct uart_port *port = &up->port; in serial8250_set_defaults()
3268 if (up->port.flags & UPF_FIXED_TYPE) { in serial8250_set_defaults()
3269 unsigned int type = up->port.type; in serial8250_set_defaults()
3271 if (!up->port.fifosize) in serial8250_set_defaults()
3272 up->port.fifosize = uart_config[type].fifo_size; in serial8250_set_defaults()
3273 if (!up->tx_loadsz) in serial8250_set_defaults()
3274 up->tx_loadsz = uart_config[type].tx_loadsz; in serial8250_set_defaults()
3275 if (!up->capabilities) in serial8250_set_defaults()
3276 up->capabilities = uart_config[type].flags; in serial8250_set_defaults()
3282 if (up->dma) { in serial8250_set_defaults()
3283 if (!up->dma->tx_dma) in serial8250_set_defaults()
3284 up->dma->tx_dma = serial8250_tx_dma; in serial8250_set_defaults()
3285 if (!up->dma->rx_dma) in serial8250_set_defaults()
3286 up->dma->rx_dma = serial8250_rx_dma; in serial8250_set_defaults()
3302 * Restore serial console when h/w power-off detected
3306 struct uart_port *port = &up->port; in serial8250_console_restore()
3308 unsigned int baud, quot, frac = 0; in serial8250_console_restore() local
3310 termios.c_cflag = port->cons->cflag; in serial8250_console_restore()
3311 if (port->state->port.tty && termios.c_cflag == 0) in serial8250_console_restore()
3312 termios.c_cflag = port->state->port.tty->termios.c_cflag; in serial8250_console_restore()
3314 baud = serial8250_get_baud_rate(port, &termios, NULL); in serial8250_console_restore()
3315 quot = serial8250_get_divisor(port, baud, &frac); in serial8250_console_restore()
3317 serial8250_set_divisor(port, baud, quot, frac); in serial8250_console_restore()
3318 serial_port_out(port, UART_LCR, up->lcr); in serial8250_console_restore()
3334 struct uart_8250_em485 *em485 = up->em485; in serial8250_console_write()
3335 struct uart_port *port = &up->port; in serial8250_console_write()
3343 locked = spin_trylock_irqsave(&port->lock, flags); in serial8250_console_write()
3345 spin_lock_irqsave(&port->lock, flags); in serial8250_console_write()
3352 if (up->capabilities & UART_CAP_UUE) in serial8250_console_write()
3358 if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { in serial8250_console_write()
3360 up->canary = 0; in serial8250_console_write()
3364 if (em485->tx_stopped) in serial8250_console_write()
3365 up->rs485_start_tx(up); in serial8250_console_write()
3366 mdelay(port->rs485.delay_rts_before_send); in serial8250_console_write()
3378 mdelay(port->rs485.delay_rts_after_send); in serial8250_console_write()
3379 if (em485->tx_stopped) in serial8250_console_write()
3380 up->rs485_stop_tx(up); in serial8250_console_write()
3392 if (up->msr_saved_flags) in serial8250_console_write()
3396 spin_unlock_irqrestore(&port->lock, flags); in serial8250_console_write()
3411 return (port->uartclk / 16) / quot; in probe_baud()
3416 int baud = 9600; in serial8250_console_setup() local
3422 if (!port->iobase && !port->membase) in serial8250_console_setup()
3423 return -ENODEV; in serial8250_console_setup()
3426 uart_parse_options(options, &baud, &parity, &bits, &flow); in serial8250_console_setup()
3428 baud = probe_baud(port); in serial8250_console_setup()
3430 ret = uart_set_options(port, port->cons, baud, parity, bits, flow); in serial8250_console_setup()
3434 if (port->dev) in serial8250_console_setup()
3435 pm_runtime_get_sync(port->dev); in serial8250_console_setup()
3442 if (port->dev) in serial8250_console_exit()
3443 pm_runtime_put_sync(port->dev); in serial8250_console_exit()