Lines Matching +full:bcm2835 +full:- +full:pm
1 // SPDX-License-Identifier: GPL-2.0+
3 * Base port operations for 8250/16550-type serial ports
255 * tx_loadsz is set to 63-bytes instead of 64-bytes to implement
256 * workaround of errata A-008006 which states that tx_loadsz should
268 .name = "Palmchip BK-3103",
354 offset = offset << p->regshift; in hub6_serial_in()
355 outb(p->hub6 - 1 + offset, p->iobase); in hub6_serial_in()
356 return inb(p->iobase + 1); in hub6_serial_in()
361 offset = offset << p->regshift; in hub6_serial_out()
362 outb(p->hub6 - 1 + offset, p->iobase); in hub6_serial_out()
363 outb(value, p->iobase + 1); in hub6_serial_out()
368 offset = offset << p->regshift; in mem_serial_in()
369 return readb(p->membase + offset); in mem_serial_in()
374 offset = offset << p->regshift; in mem_serial_out()
375 writeb(value, p->membase + offset); in mem_serial_out()
380 offset = offset << p->regshift; in mem16_serial_out()
381 writew(value, p->membase + offset); in mem16_serial_out()
386 offset = offset << p->regshift; in mem16_serial_in()
387 return readw(p->membase + offset); in mem16_serial_in()
392 offset = offset << p->regshift; in mem32_serial_out()
393 writel(value, p->membase + offset); in mem32_serial_out()
398 offset = offset << p->regshift; in mem32_serial_in()
399 return readl(p->membase + offset); in mem32_serial_in()
404 offset = offset << p->regshift; in mem32be_serial_out()
405 iowrite32be(value, p->membase + offset); in mem32be_serial_out()
410 offset = offset << p->regshift; in mem32be_serial_in()
411 return ioread32be(p->membase + offset); in mem32be_serial_in()
416 offset = offset << p->regshift; in io_serial_in()
417 return inb(p->iobase + offset); in io_serial_in()
422 offset = offset << p->regshift; in io_serial_out()
423 outb(value, p->iobase + offset); in io_serial_out()
432 up->dl_read = default_serial_dl_read; in set_io_from_upio()
433 up->dl_write = default_serial_dl_write; in set_io_from_upio()
435 switch (p->iotype) { in set_io_from_upio()
437 p->serial_in = hub6_serial_in; in set_io_from_upio()
438 p->serial_out = hub6_serial_out; in set_io_from_upio()
442 p->serial_in = mem_serial_in; in set_io_from_upio()
443 p->serial_out = mem_serial_out; in set_io_from_upio()
447 p->serial_in = mem16_serial_in; in set_io_from_upio()
448 p->serial_out = mem16_serial_out; in set_io_from_upio()
452 p->serial_in = mem32_serial_in; in set_io_from_upio()
453 p->serial_out = mem32_serial_out; in set_io_from_upio()
457 p->serial_in = mem32be_serial_in; in set_io_from_upio()
458 p->serial_out = mem32be_serial_out; in set_io_from_upio()
462 p->serial_in = io_serial_in; in set_io_from_upio()
463 p->serial_out = io_serial_out; in set_io_from_upio()
467 up->cur_iotype = p->iotype; in set_io_from_upio()
468 p->handle_irq = serial8250_default_handle_irq; in set_io_from_upio()
474 switch (p->iotype) { in serial_port_out_sync()
480 p->serial_out(p, offset, value); in serial_port_out_sync()
481 p->serial_in(p, UART_LCR); /* safe, no side-effects */ in serial_port_out_sync()
484 p->serial_out(p, offset, value); in serial_port_out_sync()
493 if (p->capabilities & UART_CAP_FIFO) { in serial8250_clear_fifos()
507 serial_out(p, UART_FCR, p->fcr); in serial8250_clear_and_reinit_fifos()
513 if (!(p->capabilities & UART_CAP_RPM)) in serial8250_rpm_get()
515 pm_runtime_get_sync(p->port.dev); in serial8250_rpm_get()
521 if (!(p->capabilities & UART_CAP_RPM)) in serial8250_rpm_put()
523 pm_runtime_mark_last_busy(p->port.dev); in serial8250_rpm_put()
524 pm_runtime_put_autosuspend(p->port.dev); in serial8250_rpm_put()
529 * serial8250_em485_init() - put uart_8250_port into rs485 emulating
542 * or from any other callback protected with p->port.lock spinlock.
546 * Return 0 - success, -errno - otherwise
551 lockdep_assert_held_once(&p->port.lock); in serial8250_em485_init()
553 if (p->em485) in serial8250_em485_init()
556 p->em485 = kmalloc(sizeof(struct uart_8250_em485), GFP_ATOMIC); in serial8250_em485_init()
557 if (!p->em485) in serial8250_em485_init()
558 return -ENOMEM; in serial8250_em485_init()
560 hrtimer_init(&p->em485->stop_tx_timer, CLOCK_MONOTONIC, in serial8250_em485_init()
562 hrtimer_init(&p->em485->start_tx_timer, CLOCK_MONOTONIC, in serial8250_em485_init()
564 p->em485->stop_tx_timer.function = &serial8250_em485_handle_stop_tx; in serial8250_em485_init()
565 p->em485->start_tx_timer.function = &serial8250_em485_handle_start_tx; in serial8250_em485_init()
566 p->em485->port = p; in serial8250_em485_init()
567 p->em485->active_timer = NULL; in serial8250_em485_init()
568 p->em485->tx_stopped = true; in serial8250_em485_init()
571 if (p->em485->tx_stopped) in serial8250_em485_init()
572 p->rs485_stop_tx(p); in serial8250_em485_init()
578 * serial8250_em485_destroy() - put uart_8250_port into normal state
586 * or from any other callback protected with p->port.lock spinlock.
592 if (!p->em485) in serial8250_em485_destroy()
595 hrtimer_cancel(&p->em485->start_tx_timer); in serial8250_em485_destroy()
596 hrtimer_cancel(&p->em485->stop_tx_timer); in serial8250_em485_destroy()
598 kfree(p->em485); in serial8250_em485_destroy()
599 p->em485 = NULL; in serial8250_em485_destroy()
612 * serial8250_em485_config() - generic ->rs485_config() callback
627 if (!!(rs485->flags & SER_RS485_RTS_ON_SEND) == in serial8250_em485_config()
628 !!(rs485->flags & SER_RS485_RTS_AFTER_SEND)) { in serial8250_em485_config()
629 rs485->flags |= SER_RS485_RTS_ON_SEND; in serial8250_em485_config()
630 rs485->flags &= ~SER_RS485_RTS_AFTER_SEND; in serial8250_em485_config()
637 if (rs485->flags & SER_RS485_ENABLED) in serial8250_em485_config()
654 if (!(p->capabilities & UART_CAP_RPM)) in serial8250_rpm_get_tx()
657 rpm_active = xchg(&p->rpm_tx_active, 1); in serial8250_rpm_get_tx()
660 pm_runtime_get_sync(p->port.dev); in serial8250_rpm_get_tx()
668 if (!(p->capabilities & UART_CAP_RPM)) in serial8250_rpm_put_tx()
671 rpm_active = xchg(&p->rpm_tx_active, 0); in serial8250_rpm_put_tx()
674 pm_runtime_mark_last_busy(p->port.dev); in serial8250_rpm_put_tx()
675 pm_runtime_put_autosuspend(p->port.dev); in serial8250_rpm_put_tx()
690 if (p->capabilities & UART_CAP_SLEEP) { in serial8250_set_sleep()
692 spin_lock_irq(&p->port.lock); in serial8250_set_sleep()
693 if (p->capabilities & UART_CAP_EFR) { in serial8250_set_sleep()
701 if (p->capabilities & UART_CAP_EFR) { in serial8250_set_sleep()
706 spin_unlock_irq(&p->port.lock); in serial8250_set_sleep()
714 if (up->capabilities & UART_CAP_UUE) in serial8250_clear_IER()
740 up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16; in __enable_rsa()
747 if (up->port.type == PORT_RSA) { in enable_rsa()
748 if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) { in enable_rsa()
749 spin_lock_irq(&up->port.lock); in enable_rsa()
751 spin_unlock_irq(&up->port.lock); in enable_rsa()
753 if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) in enable_rsa()
769 if (up->port.type == PORT_RSA && in disable_rsa()
770 up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) { in disable_rsa()
771 spin_lock_irq(&up->port.lock); in disable_rsa()
783 up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16; in disable_rsa()
784 spin_unlock_irq(&up->port.lock); in disable_rsa()
812 mdelay(20);/* FIXME - schedule_timeout */ in size_fifo()
826 * Read UART ID using the divisor method - set DLL and DLM to zero
864 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; in autoconfig_has_efr()
869 * If we have to do this here because some non-National in autoconfig_has_efr()
883 up->acr = 0; in autoconfig_has_efr()
896 up->port.type = PORT_16C950; in autoconfig_has_efr()
904 up->bugs |= UART_BUG_QUOT; in autoconfig_has_efr()
912 * 0x10 - XR16C850 and the DLL contains the chip revision. in autoconfig_has_efr()
913 * 0x12 - XR16C2850. in autoconfig_has_efr()
914 * 0x14 - XR16C854. in autoconfig_has_efr()
921 up->port.type = PORT_16850; in autoconfig_has_efr()
932 * I've had problems doing this in the past. -TYT in autoconfig_has_efr()
935 up->port.type = PORT_16654; in autoconfig_has_efr()
937 up->port.type = PORT_16650V2; in autoconfig_has_efr()
942 * this category - the original 8250 and the 16450. The
949 up->port.type = PORT_8250; in autoconfig_8250()
959 up->port.type = PORT_16450; in autoconfig_8250()
967 * http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-11/4812.html in broken_efr()
987 lockdep_assert_held_once(&up->port.lock); in autoconfig_16550a()
989 up->port.type = PORT_16550A; in autoconfig_16550a()
990 up->capabilities |= UART_CAP_FIFO; in autoconfig_16550a()
993 !(up->port.flags & UPF_FULL_PROBE)) in autoconfig_16550a()
1005 up->port.type = PORT_16650; in autoconfig_16550a()
1006 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; in autoconfig_16550a()
1017 up->port.type = PORT_16550A_FSL64; in autoconfig_16550a()
1041 * it's changed. If so, set baud_base in EXCR2 to 921600. -- dwmw2 in autoconfig_16550a()
1069 up->port.uartclk = 921600*16; in autoconfig_16550a()
1070 up->port.type = PORT_NS16550A; in autoconfig_16550a()
1071 up->capabilities |= UART_NATSEMI; in autoconfig_16550a()
1098 up->port.type = PORT_16750; in autoconfig_16550a()
1099 up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP; in autoconfig_16550a()
1125 up->port.type = PORT_XSCALE; in autoconfig_16550a()
1126 up->capabilities |= UART_CAP_UUE | UART_CAP_RTOIE; in autoconfig_16550a()
1142 if (up->port.type == PORT_16550A && size_fifo(up) == 64) { in autoconfig_16550a()
1143 up->port.type = PORT_U6_16550A; in autoconfig_16550a()
1144 up->capabilities |= UART_CAP_AFE; in autoconfig_16550a()
1159 struct uart_port *port = &up->port; in autoconfig()
1163 if (!port->iobase && !port->mapbase && !port->membase) in autoconfig()
1167 port->name, port->iobase, port->membase); in autoconfig()
1170 * We really do need global IRQs disabled here - we're going to in autoconfig()
1175 spin_lock_irqsave(&port->lock, flags); in autoconfig()
1177 up->capabilities = 0; in autoconfig()
1178 up->bugs = 0; in autoconfig()
1180 if (!(port->flags & UPF_BUGGY_UART)) { in autoconfig()
1187 * assumption is that 0x80 is a non-existent port; in autoconfig()
1214 spin_unlock_irqrestore(&port->lock, flags); in autoconfig()
1231 * that conflicts with COM 1-4 --- we hope! in autoconfig()
1233 if (!(port->flags & UPF_SKIP_TEST)) { in autoconfig()
1238 spin_unlock_irqrestore(&port->lock, flags); in autoconfig()
1265 port->type = PORT_16550; in autoconfig()
1271 port->type = PORT_UNKNOWN; in autoconfig()
1279 if (port->type == PORT_16550A && up->probe & UART_PROBE_RSA && in autoconfig()
1281 port->type = PORT_RSA; in autoconfig()
1286 port->fifosize = uart_config[up->port.type].fifo_size; in autoconfig()
1287 old_capabilities = up->capabilities; in autoconfig()
1288 up->capabilities = uart_config[port->type].flags; in autoconfig()
1289 up->tx_loadsz = uart_config[port->type].tx_loadsz; in autoconfig()
1291 if (port->type == PORT_UNKNOWN) in autoconfig()
1298 if (port->type == PORT_RSA) in autoconfig()
1307 spin_unlock_irqrestore(&port->lock, flags); in autoconfig()
1312 if (port->type == PORT_16550A && port->iotype == UPIO_PORT) in autoconfig()
1315 if (up->capabilities != old_capabilities) { in autoconfig()
1316 dev_warn(port->dev, "detected caps %08x should be %08x\n", in autoconfig()
1317 old_capabilities, up->capabilities); in autoconfig()
1321 DEBUG_AUTOCONF("type=%s\n", uart_config[port->type].name); in autoconfig()
1326 struct uart_port *port = &up->port; in autoconfig_irq()
1333 if (port->flags & UPF_FOURPORT) { in autoconfig_irq()
1334 ICP = (port->iobase & 0xfe0) | 0x1f; in autoconfig_irq()
1347 spin_lock_irq(&port->lock); in autoconfig_irq()
1349 spin_unlock_irq(&port->lock); in autoconfig_irq()
1355 if (port->flags & UPF_FOURPORT) { in autoconfig_irq()
1362 spin_lock_irq(&port->lock); in autoconfig_irq()
1364 spin_unlock_irq(&port->lock); in autoconfig_irq()
1375 spin_lock_irq(&port->lock); in autoconfig_irq()
1377 spin_unlock_irq(&port->lock); in autoconfig_irq()
1379 if (port->flags & UPF_FOURPORT) in autoconfig_irq()
1385 port->irq = (irq > 0) ? irq : 0; in autoconfig_irq()
1393 lockdep_assert_held_once(&port->lock); in serial8250_stop_rx()
1397 up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); in serial8250_stop_rx()
1398 up->port.read_status_mask &= ~UART_LSR_DR; in serial8250_stop_rx()
1399 serial_port_out(port, UART_IER, up->ier); in serial8250_stop_rx()
1405 * serial8250_em485_stop_tx() - generic ->rs485_stop_tx() callback
1415 lockdep_assert_held_once(&p->port.lock); in serial8250_em485_stop_tx()
1417 if (p->port.rs485.flags & SER_RS485_RTS_AFTER_SEND) in serial8250_em485_stop_tx()
1425 * received during the half-duplex transmission. in serial8250_em485_stop_tx()
1428 if (!(p->port.rs485.flags & SER_RS485_RX_DURING_TX)) { in serial8250_em485_stop_tx()
1431 p->ier |= UART_IER_RLSI | UART_IER_RDI; in serial8250_em485_stop_tx()
1432 serial_port_out(&p->port, UART_IER, p->ier); in serial8250_em485_stop_tx()
1441 struct uart_8250_port *p = em485->port; in serial8250_em485_handle_stop_tx()
1445 spin_lock_irqsave(&p->port.lock, flags); in serial8250_em485_handle_stop_tx()
1446 if (em485->active_timer == &em485->stop_tx_timer) { in serial8250_em485_handle_stop_tx()
1447 p->rs485_stop_tx(p); in serial8250_em485_handle_stop_tx()
1448 em485->active_timer = NULL; in serial8250_em485_handle_stop_tx()
1449 em485->tx_stopped = true; in serial8250_em485_handle_stop_tx()
1451 spin_unlock_irqrestore(&p->port.lock, flags); in serial8250_em485_handle_stop_tx()
1464 struct uart_8250_em485 *em485 = p->em485; in __stop_tx_rs485()
1467 lockdep_assert_held_once(&p->port.lock); in __stop_tx_rs485()
1469 stop_delay += (u64)p->port.rs485.delay_rts_after_send * NSEC_PER_MSEC; in __stop_tx_rs485()
1476 em485->active_timer = &em485->stop_tx_timer; in __stop_tx_rs485()
1477 hrtimer_start(&em485->stop_tx_timer, ns_to_ktime(stop_delay), HRTIMER_MODE_REL); in __stop_tx_rs485()
1479 p->rs485_stop_tx(p); in __stop_tx_rs485()
1480 em485->active_timer = NULL; in __stop_tx_rs485()
1481 em485->tx_stopped = true; in __stop_tx_rs485()
1487 struct uart_8250_em485 *em485 = p->em485; in __stop_tx()
1504 if (!(p->capabilities & UART_CAP_NOTEMT)) in __stop_tx()
1513 stop_delay = p->port.frame_time + DIV_ROUND_UP(p->port.frame_time, 7); in __stop_tx()
1533 if (port->type == PORT_16C950) { in serial8250_stop_tx()
1534 up->acr |= UART_ACR_TXDIS; in serial8250_stop_tx()
1535 serial_icr_write(up, UART_ACR, up->acr); in serial8250_stop_tx()
1544 if (up->dma && !up->dma->tx_dma(up)) in __start_tx()
1548 if (up->bugs & UART_BUG_TXEN) { in __start_tx()
1557 * Re-enable the transmitter if we disabled it. in __start_tx()
1559 if (port->type == PORT_16C950 && up->acr & UART_ACR_TXDIS) { in __start_tx()
1560 up->acr &= ~UART_ACR_TXDIS; in __start_tx()
1561 serial_icr_write(up, UART_ACR, up->acr); in __start_tx()
1566 * serial8250_em485_start_tx() - generic ->rs485_start_tx() callback
1579 if (!(up->port.rs485.flags & SER_RS485_RX_DURING_TX)) in serial8250_em485_start_tx()
1580 serial8250_stop_rx(&up->port); in serial8250_em485_start_tx()
1582 if (up->port.rs485.flags & SER_RS485_RTS_ON_SEND) in serial8250_em485_start_tx()
1594 struct uart_8250_em485 *em485 = up->em485; in start_tx_rs485()
1598 * em485->active_timer != &em485->stop_tx_timer, it might happen that in start_tx_rs485()
1600 * chars is send and em485->active_timer == &em485->stop_tx_timer again. in start_tx_rs485()
1603 * em485->active_timer when &em485->stop_tx_timer is armed again. in start_tx_rs485()
1605 if (em485->active_timer == &em485->stop_tx_timer) in start_tx_rs485()
1606 hrtimer_try_to_cancel(&em485->stop_tx_timer); in start_tx_rs485()
1608 em485->active_timer = NULL; in start_tx_rs485()
1610 if (em485->tx_stopped) { in start_tx_rs485()
1611 em485->tx_stopped = false; in start_tx_rs485()
1613 up->rs485_start_tx(up); in start_tx_rs485()
1615 if (up->port.rs485.delay_rts_before_send > 0) { in start_tx_rs485()
1616 em485->active_timer = &em485->start_tx_timer; in start_tx_rs485()
1617 start_hrtimer_ms(&em485->start_tx_timer, in start_tx_rs485()
1618 up->port.rs485.delay_rts_before_send); in start_tx_rs485()
1630 struct uart_8250_port *p = em485->port; in serial8250_em485_handle_start_tx()
1633 spin_lock_irqsave(&p->port.lock, flags); in serial8250_em485_handle_start_tx()
1634 if (em485->active_timer == &em485->start_tx_timer) { in serial8250_em485_handle_start_tx()
1635 __start_tx(&p->port); in serial8250_em485_handle_start_tx()
1636 em485->active_timer = NULL; in serial8250_em485_handle_start_tx()
1638 spin_unlock_irqrestore(&p->port.lock, flags); in serial8250_em485_handle_start_tx()
1646 struct uart_8250_em485 *em485 = up->em485; in serial8250_start_tx()
1649 lockdep_assert_held_once(&port->lock); in serial8250_start_tx()
1651 if (!port->x_char && uart_circ_empty(&port->state->xmit)) in serial8250_start_tx()
1657 if ((em485->active_timer == &em485->start_tx_timer) || in serial8250_start_tx()
1666 port->throttle(port); in serial8250_throttle()
1671 port->unthrottle(port); in serial8250_unthrottle()
1679 lockdep_assert_held_once(&port->lock); in serial8250_disable_ms()
1682 if (up->bugs & UART_BUG_NOMSR) in serial8250_disable_ms()
1685 mctrl_gpio_disable_ms(up->gpios); in serial8250_disable_ms()
1687 up->ier &= ~UART_IER_MSI; in serial8250_disable_ms()
1688 serial_port_out(port, UART_IER, up->ier); in serial8250_disable_ms()
1696 lockdep_assert_held_once(&port->lock); in serial8250_enable_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()
1728 port->icount.rx++; in serial8250_read_char()
1730 lsr |= up->lsr_saved_flags; in serial8250_read_char()
1731 up->lsr_saved_flags = 0; in serial8250_read_char()
1736 port->icount.brk++; in serial8250_read_char()
1746 port->icount.parity++; in serial8250_read_char()
1748 port->icount.frame++; in serial8250_read_char()
1750 port->icount.overrun++; in serial8250_read_char()
1755 lsr &= port->read_status_mask; in serial8250_read_char()
1758 dev_dbg(port->dev, "handling break\n"); in serial8250_read_char()
1773 * serial8250_rx_chars - Read characters. The first LSR value must be passed in.
1775 * Returns LSR bits. The caller should rely only on non-Rx related LSR bits
1781 struct uart_port *port = &up->port; in serial8250_rx_chars()
1786 if (--max_count == 0) in serial8250_rx_chars()
1791 tty_flip_buffer_push(&port->state->port); in serial8250_rx_chars()
1798 struct uart_port *port = &up->port; in serial8250_tx_chars()
1799 struct circ_buf *xmit = &port->state->xmit; in serial8250_tx_chars()
1802 if (port->x_char) { in serial8250_tx_chars()
1815 count = up->tx_loadsz; in serial8250_tx_chars()
1817 serial_out(up, UART_TX, xmit->buf[xmit->tail]); in serial8250_tx_chars()
1818 if (up->bugs & UART_BUG_TXRACE) { in serial8250_tx_chars()
1824 * Delay back-to-back writes by a read cycle to avoid in serial8250_tx_chars()
1826 * side-effects and discard the result. in serial8250_tx_chars()
1833 if ((up->capabilities & UART_CAP_HFIFO) && in serial8250_tx_chars()
1836 /* The BCM2835 MINI UART THRE bit is really a not-full bit. */ in serial8250_tx_chars()
1837 if ((up->capabilities & UART_CAP_MINI) && in serial8250_tx_chars()
1840 } while (--count > 0); in serial8250_tx_chars()
1850 if (uart_circ_empty(xmit) && !(up->capabilities & UART_CAP_RPM)) in serial8250_tx_chars()
1858 struct uart_port *port = &up->port; in serial8250_modem_status()
1861 status |= up->msr_saved_flags; in serial8250_modem_status()
1862 up->msr_saved_flags = 0; in serial8250_modem_status()
1863 if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI && in serial8250_modem_status()
1864 port->state != NULL) { in serial8250_modem_status()
1866 port->icount.rng++; in serial8250_modem_status()
1868 port->icount.dsr++; in serial8250_modem_status()
1874 wake_up_interruptible(&port->state->port.delta_msr_wait); in serial8250_modem_status()
1896 if (!up->dma->rx_running) in handle_rx_dma()
1904 return up->dma->rx_dma(up); in handle_rx_dma()
1913 struct tty_port *tport = &port->state->port; in serial8250_handle_irq()
1921 spin_lock_irqsave(&port->lock, flags); in serial8250_handle_irq()
1934 (port->status & (UPSTAT_AUTOCTS | UPSTAT_AUTORTS)) && in serial8250_handle_irq()
1935 !(port->read_status_mask & UART_LSR_DR)) in serial8250_handle_irq()
1941 d = irq_get_irq_data(port->irq); in serial8250_handle_irq()
1943 pm_wakeup_event(tport->tty->dev, 0); in serial8250_handle_irq()
1944 if (!up->dma || handle_rx_dma(up, iir)) in serial8250_handle_irq()
1948 if ((status & UART_LSR_THRE) && (up->ier & UART_IER_THRI)) { in serial8250_handle_irq()
1949 if (!up->dma || up->dma->tx_err) in serial8250_handle_irq()
1951 else if (!up->dma->tx_running) in serial8250_handle_irq()
1991 spin_lock_irqsave(&port->lock, flags); in serial8250_tx_threshold_handle_irq()
1993 spin_unlock_irqrestore(&port->lock, flags); in serial8250_tx_threshold_handle_irq()
2008 spin_lock_irqsave(&port->lock, flags); in serial8250_tx_empty()
2011 spin_unlock_irqrestore(&port->lock, flags); in serial8250_tx_empty()
2029 if (up->gpios) in serial8250_do_get_mctrl()
2030 return mctrl_gpio_get(up->gpios, &val); in serial8250_do_get_mctrl()
2038 if (port->get_mctrl) in serial8250_get_mctrl()
2039 return port->get_mctrl(port); in serial8250_get_mctrl()
2050 mcr |= up->mcr; in serial8250_do_set_mctrl()
2058 if (port->rs485.flags & SER_RS485_ENABLED) in serial8250_set_mctrl()
2061 if (port->set_mctrl) in serial8250_set_mctrl()
2062 port->set_mctrl(port, mctrl); in serial8250_set_mctrl()
2073 spin_lock_irqsave(&port->lock, flags); in serial8250_break_ctl()
2074 if (break_state == -1) in serial8250_break_ctl()
2075 up->lcr |= UART_LCR_SBC; in serial8250_break_ctl()
2077 up->lcr &= ~UART_LCR_SBC; in serial8250_break_ctl()
2078 serial_port_out(port, UART_LCR, up->lcr); in serial8250_break_ctl()
2079 spin_unlock_irqrestore(&port->lock, flags); in serial8250_break_ctl()
2093 if (--tmout == 0) in wait_for_lsr()
2110 if (up->port.flags & UPF_CONS_FLOW) { in wait_for_xmitr()
2111 for (tmout = 1000000; tmout; tmout--) { in wait_for_xmitr()
2113 up->msr_saved_flags |= msr & MSR_SAVE_FLAGS; in wait_for_xmitr()
2196 if (!port->fifosize) in serial8250_do_startup()
2197 port->fifosize = uart_config[port->type].fifo_size; in serial8250_do_startup()
2198 if (!up->tx_loadsz) in serial8250_do_startup()
2199 up->tx_loadsz = uart_config[port->type].tx_loadsz; in serial8250_do_startup()
2200 if (!up->capabilities) in serial8250_do_startup()
2201 up->capabilities = uart_config[port->type].flags; in serial8250_do_startup()
2202 up->mcr = 0; in serial8250_do_startup()
2204 if (port->iotype != up->cur_iotype) in serial8250_do_startup()
2208 if (port->type == PORT_16C950) { in serial8250_do_startup()
2214 spin_lock_irqsave(&port->lock, flags); in serial8250_do_startup()
2215 up->acr = 0; in serial8250_do_startup()
2224 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_startup()
2227 if (port->type == PORT_DA830) { in serial8250_do_startup()
2233 spin_lock_irqsave(&port->lock, flags); in serial8250_do_startup()
2236 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_startup()
2246 if (port->type == PORT_NPCM) { in serial8250_do_startup()
2282 if (!(port->flags & UPF_BUGGY_UART) && in serial8250_do_startup()
2284 dev_info_ratelimited(port->dev, "LSR safety check engaged!\n"); in serial8250_do_startup()
2285 retval = -ENODEV; in serial8250_do_startup()
2292 if (port->type == PORT_16850) { in serial8250_do_startup()
2311 if (((port->type == PORT_ALTR_16550_F32) || in serial8250_do_startup()
2312 (port->type == PORT_ALTR_16550_F64) || in serial8250_do_startup()
2313 (port->type == PORT_ALTR_16550_F128)) && (port->fifosize > 1)) { in serial8250_do_startup()
2314 /* Bounds checking of TX threshold (valid 0 to fifosize-2) */ in serial8250_do_startup()
2315 if ((up->tx_loadsz < 2) || (up->tx_loadsz > port->fifosize)) { in serial8250_do_startup()
2316 dev_err(port->dev, "TX FIFO Threshold errors, skipping\n"); in serial8250_do_startup()
2321 port->fifosize - up->tx_loadsz); in serial8250_do_startup()
2322 port->handle_irq = serial8250_tx_threshold_handle_irq; in serial8250_do_startup()
2327 if (port->irq && (up->port.flags & UPF_SHARE_IRQ)) in serial8250_do_startup()
2328 up->port.irqflags |= IRQF_SHARED; in serial8250_do_startup()
2330 retval = up->ops->setup_irq(up); in serial8250_do_startup()
2334 if (port->irq && !(up->port.flags & UPF_NO_THRE_TEST)) { in serial8250_do_startup()
2337 if (port->irqflags & IRQF_SHARED) in serial8250_do_startup()
2338 disable_irq_nosync(port->irq); in serial8250_do_startup()
2350 spin_lock_irqsave(&port->lock, flags); in serial8250_do_startup()
2358 udelay(1); /* allow a working UART time to re-assert THRE */ in serial8250_do_startup()
2362 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_startup()
2364 if (port->irqflags & IRQF_SHARED) in serial8250_do_startup()
2365 enable_irq(port->irq); in serial8250_do_startup()
2373 up->port.flags & UPF_BUG_THRE) { in serial8250_do_startup()
2374 up->bugs |= UART_BUG_THRE; in serial8250_do_startup()
2378 up->ops->setup_timer(up); in serial8250_do_startup()
2385 spin_lock_irqsave(&port->lock, flags); in serial8250_do_startup()
2386 if (up->port.flags & UPF_FOURPORT) { in serial8250_do_startup()
2387 if (!up->port.irq) in serial8250_do_startup()
2388 up->port.mctrl |= TIOCM_OUT1; in serial8250_do_startup()
2393 if (port->irq) in serial8250_do_startup()
2394 up->port.mctrl |= TIOCM_OUT2; in serial8250_do_startup()
2396 serial8250_set_mctrl(port, port->mctrl); in serial8250_do_startup()
2409 if (up->port.quirks & UPQ_NO_TXEN_TEST) in serial8250_do_startup()
2422 if (!(up->bugs & UART_BUG_TXEN)) { in serial8250_do_startup()
2423 up->bugs |= UART_BUG_TXEN; in serial8250_do_startup()
2424 dev_dbg(port->dev, "enabling bad tx status workarounds\n"); in serial8250_do_startup()
2427 up->bugs &= ~UART_BUG_TXEN; in serial8250_do_startup()
2431 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_startup()
2442 up->lsr_saved_flags = 0; in serial8250_do_startup()
2443 up->msr_saved_flags = 0; in serial8250_do_startup()
2448 if (up->dma) { in serial8250_do_startup()
2456 dev_warn_ratelimited(port->dev, "%s\n", msg); in serial8250_do_startup()
2457 up->dma = NULL; in serial8250_do_startup()
2463 * enable until after the FIFOs are enabled; otherwise, an already- in serial8250_do_startup()
2466 up->ier = UART_IER_RLSI | UART_IER_RDI; in serial8250_do_startup()
2468 if (port->flags & UPF_FOURPORT) { in serial8250_do_startup()
2473 icp = (port->iobase & 0xfe0) | 0x01f; in serial8250_do_startup()
2486 if (port->startup) in serial8250_startup()
2487 return port->startup(port); in serial8250_startup()
2502 spin_lock_irqsave(&port->lock, flags); in serial8250_do_shutdown()
2503 up->ier = 0; in serial8250_do_shutdown()
2505 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_shutdown()
2507 synchronize_irq(port->irq); in serial8250_do_shutdown()
2509 if (up->dma) in serial8250_do_shutdown()
2512 spin_lock_irqsave(&port->lock, flags); in serial8250_do_shutdown()
2513 if (port->flags & UPF_FOURPORT) { in serial8250_do_shutdown()
2515 inb((port->iobase & 0xfe0) | 0x1f); in serial8250_do_shutdown()
2516 port->mctrl |= TIOCM_OUT1; in serial8250_do_shutdown()
2518 port->mctrl &= ~TIOCM_OUT2; in serial8250_do_shutdown()
2520 serial8250_set_mctrl(port, port->mctrl); in serial8250_do_shutdown()
2521 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_shutdown()
2544 up->ops->release_irq(up); in serial8250_do_shutdown()
2550 if (port->shutdown) in serial8250_shutdown()
2551 port->shutdown(port); in serial8250_shutdown()
2560 struct uart_port *port = &up->port; in npcm_get_divisor()
2562 return DIV_ROUND_CLOSEST(port->uartclk, 16 * baud + 2) - 2; in npcm_get_divisor()
2569 upf_t magic_multiplier = port->flags & UPF_MAGIC_MULTIPLIER; in serial8250_do_get_divisor()
2592 * if set to 1 and high-speed operation has been enabled with the in serial8250_do_get_divisor()
2605 if (magic_multiplier && baud >= port->uartclk / 6) in serial8250_do_get_divisor()
2607 else if (magic_multiplier && baud >= port->uartclk / 12) in serial8250_do_get_divisor()
2609 else if (up->port.type == PORT_NPCM) in serial8250_do_get_divisor()
2617 if (up->bugs & UART_BUG_QUOT && (quot & 0xff) == 0) in serial8250_do_get_divisor()
2627 if (port->get_divisor) in serial8250_get_divisor()
2628 return port->get_divisor(port, baud, frac); in serial8250_get_divisor()
2670 if (up->capabilities & UART_NATSEMI) in serial8250_do_set_divisor()
2673 serial_port_out(port, UART_LCR, up->lcr | UART_LCR_DLAB); in serial8250_do_set_divisor()
2682 if (port->set_divisor) in serial8250_set_divisor()
2683 port->set_divisor(port, baud, quot, quot_frac); in serial8250_set_divisor()
2692 unsigned int tolerance = port->uartclk / 100; in serial8250_get_baud_rate()
2701 if (port->flags & UPF_MAGIC_MULTIPLIER) { in serial8250_get_baud_rate()
2702 min = port->uartclk / 16 / UART_DIV_MAX >> 1; in serial8250_get_baud_rate()
2703 max = (port->uartclk + tolerance) / 4; in serial8250_get_baud_rate()
2705 min = port->uartclk / 16 / UART_DIV_MAX; in serial8250_get_baud_rate()
2706 max = (port->uartclk + tolerance) / 16; in serial8250_get_baud_rate()
2726 struct tty_port *tport = &port->state->port; in serial8250_update_uartclk()
2734 mutex_lock(&tport->mutex); in serial8250_update_uartclk()
2735 port->uartclk = uartclk; in serial8250_update_uartclk()
2736 mutex_unlock(&tport->mutex); in serial8250_update_uartclk()
2740 down_write(&tty->termios_rwsem); in serial8250_update_uartclk()
2741 mutex_lock(&tport->mutex); in serial8250_update_uartclk()
2743 if (port->uartclk == uartclk) in serial8250_update_uartclk()
2746 port->uartclk = uartclk; in serial8250_update_uartclk()
2751 termios = &tty->termios; in serial8250_update_uartclk()
2757 spin_lock_irqsave(&port->lock, flags); in serial8250_update_uartclk()
2759 uart_update_timeout(port, termios->c_cflag, baud); in serial8250_update_uartclk()
2762 serial_port_out(port, UART_LCR, up->lcr); in serial8250_update_uartclk()
2764 spin_unlock_irqrestore(&port->lock, flags); in serial8250_update_uartclk()
2768 mutex_unlock(&tport->mutex); in serial8250_update_uartclk()
2769 up_write(&tty->termios_rwsem); in serial8250_update_uartclk()
2783 if (up->capabilities & UART_CAP_MINI) { in serial8250_do_set_termios()
2784 termios->c_cflag &= ~(CSTOPB | PARENB | PARODD | CMSPAR); in serial8250_do_set_termios()
2785 if ((termios->c_cflag & CSIZE) == CS5 || in serial8250_do_set_termios()
2786 (termios->c_cflag & CSIZE) == CS6) in serial8250_do_set_termios()
2787 termios->c_cflag = (termios->c_cflag & ~CSIZE) | CS7; in serial8250_do_set_termios()
2789 cval = serial8250_compute_lcr(up, termios->c_cflag); in serial8250_do_set_termios()
2801 spin_lock_irqsave(&port->lock, flags); in serial8250_do_set_termios()
2803 up->lcr = cval; /* Save computed LCR */ in serial8250_do_set_termios()
2805 if (up->capabilities & UART_CAP_FIFO && port->fifosize > 1) { in serial8250_do_set_termios()
2806 if (baud < 2400 && !up->dma) { in serial8250_do_set_termios()
2807 up->fcr &= ~UART_FCR_TRIGGER_MASK; in serial8250_do_set_termios()
2808 up->fcr |= UART_FCR_TRIGGER_1; in serial8250_do_set_termios()
2813 * MCR-based auto flow control. When AFE is enabled, RTS will be in serial8250_do_set_termios()
2817 if (up->capabilities & UART_CAP_AFE) { in serial8250_do_set_termios()
2818 up->mcr &= ~UART_MCR_AFE; in serial8250_do_set_termios()
2819 if (termios->c_cflag & CRTSCTS) in serial8250_do_set_termios()
2820 up->mcr |= UART_MCR_AFE; in serial8250_do_set_termios()
2824 * Update the per-port timeout. in serial8250_do_set_termios()
2826 uart_update_timeout(port, termios->c_cflag, baud); in serial8250_do_set_termios()
2828 port->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; in serial8250_do_set_termios()
2829 if (termios->c_iflag & INPCK) in serial8250_do_set_termios()
2830 port->read_status_mask |= UART_LSR_FE | UART_LSR_PE; in serial8250_do_set_termios()
2831 if (termios->c_iflag & (IGNBRK | BRKINT | PARMRK)) in serial8250_do_set_termios()
2832 port->read_status_mask |= UART_LSR_BI; in serial8250_do_set_termios()
2837 port->ignore_status_mask = 0; in serial8250_do_set_termios()
2838 if (termios->c_iflag & IGNPAR) in serial8250_do_set_termios()
2839 port->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE; in serial8250_do_set_termios()
2840 if (termios->c_iflag & IGNBRK) { in serial8250_do_set_termios()
2841 port->ignore_status_mask |= UART_LSR_BI; in serial8250_do_set_termios()
2846 if (termios->c_iflag & IGNPAR) in serial8250_do_set_termios()
2847 port->ignore_status_mask |= UART_LSR_OE; in serial8250_do_set_termios()
2853 if ((termios->c_cflag & CREAD) == 0) in serial8250_do_set_termios()
2854 port->ignore_status_mask |= UART_LSR_DR; in serial8250_do_set_termios()
2859 up->ier &= ~UART_IER_MSI; in serial8250_do_set_termios()
2860 if (!(up->bugs & UART_BUG_NOMSR) && in serial8250_do_set_termios()
2861 UART_ENABLE_MS(&up->port, termios->c_cflag)) in serial8250_do_set_termios()
2862 up->ier |= UART_IER_MSI; in serial8250_do_set_termios()
2863 if (up->capabilities & UART_CAP_UUE) in serial8250_do_set_termios()
2864 up->ier |= UART_IER_UUE; in serial8250_do_set_termios()
2865 if (up->capabilities & UART_CAP_RTOIE) in serial8250_do_set_termios()
2866 up->ier |= UART_IER_RTOIE; in serial8250_do_set_termios()
2868 serial_port_out(port, UART_IER, up->ier); in serial8250_do_set_termios()
2870 if (up->capabilities & UART_CAP_EFR) { in serial8250_do_set_termios()
2874 * - TI16C752 requires control thresholds to be set. in serial8250_do_set_termios()
2875 * - UART_MCR_RTS is ineffective if auto-RTS mode is enabled. in serial8250_do_set_termios()
2877 if (termios->c_cflag & CRTSCTS) in serial8250_do_set_termios()
2881 if (port->flags & UPF_EXAR_EFR) in serial8250_do_set_termios()
2890 * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR in serial8250_do_set_termios()
2893 if (port->type == PORT_16750) in serial8250_do_set_termios()
2894 serial_port_out(port, UART_FCR, up->fcr); in serial8250_do_set_termios()
2896 serial_port_out(port, UART_LCR, up->lcr); /* reset DLAB */ in serial8250_do_set_termios()
2897 if (port->type != PORT_16750) { in serial8250_do_set_termios()
2899 if (up->fcr & UART_FCR_ENABLE_FIFO) in serial8250_do_set_termios()
2901 serial_port_out(port, UART_FCR, up->fcr); /* set fcr */ in serial8250_do_set_termios()
2903 serial8250_set_mctrl(port, port->mctrl); in serial8250_do_set_termios()
2904 spin_unlock_irqrestore(&port->lock, flags); in serial8250_do_set_termios()
2917 if (port->set_termios) in serial8250_set_termios()
2918 port->set_termios(port, termios, old); in serial8250_set_termios()
2925 if (termios->c_line == N_PPS) { in serial8250_do_set_ldisc()
2926 port->flags |= UPF_HARDPPS_CD; in serial8250_do_set_ldisc()
2927 spin_lock_irq(&port->lock); in serial8250_do_set_ldisc()
2929 spin_unlock_irq(&port->lock); in serial8250_do_set_ldisc()
2931 port->flags &= ~UPF_HARDPPS_CD; in serial8250_do_set_ldisc()
2932 if (!UART_ENABLE_MS(port, termios->c_cflag)) { in serial8250_do_set_ldisc()
2933 spin_lock_irq(&port->lock); in serial8250_do_set_ldisc()
2935 spin_unlock_irq(&port->lock); in serial8250_do_set_ldisc()
2944 if (port->set_ldisc) in serial8250_set_ldisc()
2945 port->set_ldisc(port, termios); in serial8250_set_ldisc()
2963 if (port->pm) in serial8250_pm()
2964 port->pm(port, state, oldstate); in serial8250_pm()
2971 if (pt->port.mapsize) in serial8250_port_size()
2972 return pt->port.mapsize; in serial8250_port_size()
2974 return 0x16 << pt->port.regshift; in serial8250_port_size()
2976 return 8 << pt->port.regshift; in serial8250_port_size()
2985 struct uart_port *port = &up->port; in serial8250_request_std_resource()
2988 switch (port->iotype) { in serial8250_request_std_resource()
2995 if (!port->mapbase) { in serial8250_request_std_resource()
2996 ret = -EINVAL; in serial8250_request_std_resource()
3000 if (!request_mem_region(port->mapbase, size, "serial")) { in serial8250_request_std_resource()
3001 ret = -EBUSY; in serial8250_request_std_resource()
3005 if (port->flags & UPF_IOREMAP) { in serial8250_request_std_resource()
3006 port->membase = ioremap(port->mapbase, size); in serial8250_request_std_resource()
3007 if (!port->membase) { in serial8250_request_std_resource()
3008 release_mem_region(port->mapbase, size); in serial8250_request_std_resource()
3009 ret = -ENOMEM; in serial8250_request_std_resource()
3016 if (!request_region(port->iobase, size, "serial")) in serial8250_request_std_resource()
3017 ret = -EBUSY; in serial8250_request_std_resource()
3026 struct uart_port *port = &up->port; in serial8250_release_std_resource()
3028 switch (port->iotype) { in serial8250_release_std_resource()
3035 if (!port->mapbase) in serial8250_release_std_resource()
3038 if (port->flags & UPF_IOREMAP) { in serial8250_release_std_resource()
3039 iounmap(port->membase); in serial8250_release_std_resource()
3040 port->membase = NULL; in serial8250_release_std_resource()
3043 release_mem_region(port->mapbase, size); in serial8250_release_std_resource()
3048 release_region(port->iobase, size); in serial8250_release_std_resource()
3069 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in fcr_get_rxtrig_bytes()
3072 bytes = conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(up->fcr)]; in fcr_get_rxtrig_bytes()
3074 return bytes ? bytes : -EOPNOTSUPP; in fcr_get_rxtrig_bytes()
3079 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in bytes_to_fcr_rxtrig()
3082 if (!conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(UART_FCR_R_TRIG_00)]) in bytes_to_fcr_rxtrig()
3083 return -EOPNOTSUPP; in bytes_to_fcr_rxtrig()
3086 if (bytes < conf_type->rxtrig_bytes[i]) in bytes_to_fcr_rxtrig()
3088 return (--i) << UART_FCR_R_TRIG_SHIFT; in bytes_to_fcr_rxtrig()
3097 struct uart_port *uport = state->uart_port; in do_get_rxtrig()
3100 if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1) in do_get_rxtrig()
3101 return -EINVAL; in do_get_rxtrig()
3110 mutex_lock(&port->mutex); in do_serial8250_get_rxtrig()
3112 mutex_unlock(&port->mutex); in do_serial8250_get_rxtrig()
3133 struct uart_port *uport = state->uart_port; in do_set_rxtrig()
3137 if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1) in do_set_rxtrig()
3138 return -EINVAL; in do_set_rxtrig()
3145 up->fcr &= ~UART_FCR_TRIGGER_MASK; in do_set_rxtrig()
3146 up->fcr |= (unsigned char)rxtrig; in do_set_rxtrig()
3147 serial_out(up, UART_FCR, up->fcr); in do_set_rxtrig()
3155 mutex_lock(&port->mutex); in do_serial8250_set_rxtrig()
3157 mutex_unlock(&port->mutex); in do_serial8250_set_rxtrig()
3170 return -EINVAL; in rx_trig_bytes_store()
3196 const struct serial8250_config *conf_type = &uart_config[up->port.type]; in register_dev_spec_attr_grp()
3198 if (conf_type->rxtrig_bytes[0]) in register_dev_spec_attr_grp()
3199 up->port.attr_group = &serial8250_dev_attr_group; in register_dev_spec_attr_grp()
3215 if (port->iotype != up->cur_iotype) in serial8250_config_port()
3222 if (port->type == PORT_TEGRA) in serial8250_config_port()
3223 up->bugs |= UART_BUG_NOMSR; in serial8250_config_port()
3225 if (port->type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ) in serial8250_config_port()
3228 if (port->type == PORT_UNKNOWN) in serial8250_config_port()
3232 up->fcr = uart_config[up->port.type].fcr; in serial8250_config_port()
3238 if (ser->irq >= nr_irqs || ser->irq < 0 || in serial8250_verify_port()
3239 ser->baud_base < 9600 || ser->type < PORT_UNKNOWN || in serial8250_verify_port()
3240 ser->type >= ARRAY_SIZE(uart_config) || ser->type == PORT_CIRRUS || in serial8250_verify_port()
3241 ser->type == PORT_STARTECH) in serial8250_verify_port()
3242 return -EINVAL; in serial8250_verify_port()
3248 int type = port->type; in serial8250_type()
3270 .pm = serial8250_pm,
3284 struct uart_port *port = &up->port; in serial8250_init_port()
3286 spin_lock_init(&port->lock); in serial8250_init_port()
3287 port->ctrl_id = 0; in serial8250_init_port()
3288 port->pm = NULL; in serial8250_init_port()
3289 port->ops = &serial8250_pops; in serial8250_init_port()
3290 port->has_sysrq = IS_ENABLED(CONFIG_SERIAL_8250_CONSOLE); in serial8250_init_port()
3292 up->cur_iotype = 0xFF; in serial8250_init_port()
3298 struct uart_port *port = &up->port; in serial8250_set_defaults()
3300 if (up->port.flags & UPF_FIXED_TYPE) { in serial8250_set_defaults()
3301 unsigned int type = up->port.type; in serial8250_set_defaults()
3303 if (!up->port.fifosize) in serial8250_set_defaults()
3304 up->port.fifosize = uart_config[type].fifo_size; in serial8250_set_defaults()
3305 if (!up->tx_loadsz) in serial8250_set_defaults()
3306 up->tx_loadsz = uart_config[type].tx_loadsz; in serial8250_set_defaults()
3307 if (!up->capabilities) in serial8250_set_defaults()
3308 up->capabilities = uart_config[type].flags; in serial8250_set_defaults()
3314 if (up->dma) { in serial8250_set_defaults()
3315 if (!up->dma->tx_dma) in serial8250_set_defaults()
3316 up->dma->tx_dma = serial8250_tx_dma; in serial8250_set_defaults()
3317 if (!up->dma->rx_dma) in serial8250_set_defaults()
3318 up->dma->rx_dma = serial8250_rx_dma; in serial8250_set_defaults()
3334 * Restore serial console when h/w power-off detected
3338 struct uart_port *port = &up->port; in serial8250_console_restore()
3342 termios.c_cflag = port->cons->cflag; in serial8250_console_restore()
3343 termios.c_ispeed = port->cons->ispeed; in serial8250_console_restore()
3344 termios.c_ospeed = port->cons->ospeed; in serial8250_console_restore()
3345 if (port->state->port.tty && termios.c_cflag == 0) { in serial8250_console_restore()
3346 termios.c_cflag = port->state->port.tty->termios.c_cflag; in serial8250_console_restore()
3347 termios.c_ispeed = port->state->port.tty->termios.c_ispeed; in serial8250_console_restore()
3348 termios.c_ospeed = port->state->port.tty->termios.c_ospeed; in serial8250_console_restore()
3355 serial_port_out(port, UART_LCR, up->lcr); in serial8250_console_restore()
3356 serial8250_out_MCR(up, up->mcr | UART_MCR_DTR | UART_MCR_RTS); in serial8250_console_restore()
3370 unsigned int fifosize = up->tx_loadsz; in serial8250_console_fifo_write()
3394 * Doing runtime PM is really a bad idea for the kernel console.
3400 struct uart_8250_em485 *em485 = up->em485; in serial8250_console_write()
3401 struct uart_port *port = &up->port; in serial8250_console_write()
3409 locked = spin_trylock_irqsave(&port->lock, flags); in serial8250_console_write()
3411 spin_lock_irqsave(&port->lock, flags); in serial8250_console_write()
3420 if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { in serial8250_console_write()
3422 up->canary = 0; in serial8250_console_write()
3426 if (em485->tx_stopped) in serial8250_console_write()
3427 up->rs485_start_tx(up); in serial8250_console_write()
3428 mdelay(port->rs485.delay_rts_before_send); in serial8250_console_write()
3431 use_fifo = (up->capabilities & UART_CAP_FIFO) && in serial8250_console_write()
3436 !(up->capabilities & UART_CAP_MINI) && in serial8250_console_write()
3440 up->tx_loadsz > 1 && in serial8250_console_write()
3441 (up->fcr & UART_FCR_ENABLE_FIFO) && in serial8250_console_write()
3442 port->state && in serial8250_console_write()
3443 test_bit(TTY_PORT_INITIALIZED, &port->state->port.iflags) && in serial8250_console_write()
3449 !(up->port.flags & UPF_CONS_FLOW); in serial8250_console_write()
3463 mdelay(port->rs485.delay_rts_after_send); in serial8250_console_write()
3464 if (em485->tx_stopped) in serial8250_console_write()
3465 up->rs485_stop_tx(up); in serial8250_console_write()
3477 if (up->msr_saved_flags) in serial8250_console_write()
3481 spin_unlock_irqrestore(&port->lock, flags); in serial8250_console_write()
3496 return (port->uartclk / 16) / quot; in probe_baud()
3507 if (!port->iobase && !port->membase) in serial8250_console_setup()
3508 return -ENODEV; in serial8250_console_setup()
3515 ret = uart_set_options(port, port->cons, baud, parity, bits, flow); in serial8250_console_setup()
3519 if (port->dev) in serial8250_console_setup()
3520 pm_runtime_get_sync(port->dev); in serial8250_console_setup()
3527 if (port->dev) in serial8250_console_exit()
3528 pm_runtime_put_sync(port->dev); in serial8250_console_exit()