mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 13:51:44 +00:00
TTY/Serial driver fixes for 6.3-rc3
Here are some small tty and serial driver fixes for 6.3-rc3 to resolve some reported issues. They include: - 8250 driver Kconfig issue pointed out by you that showed up in -rc1 - qcom-geni serial driver fixes - various 8250 driver fixes for reported problems - fsl_lpuart driver fixes - serdev fix for regression in -rc1 - vt.c bugfix All have been in linux-next for over a week with no reported problems. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCZBcinQ8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ynIYACgjP49Xy1N6hDLZJgKxvnPLmvnhY4AoKM8CkHI zbWudA1fBqsYLFtxNKaQ =/Ond -----END PGP SIGNATURE----- Merge tag 'tty-6.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty Pull tty/serial driver fixes from Greg KH: "Here are some small tty and serial driver fixes for 6.3-rc3 to resolve some reported issues. They include: - 8250 driver Kconfig issue pointed out by you that showed up in -rc1 - qcom-geni serial driver fixes - various 8250 driver fixes for reported problems - fsl_lpuart driver fixes - serdev fix for regression in -rc1 - vt.c bugfix All have been in linux-next for over a week with no reported problems" * tag 'tty-6.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: tty: vt: protect KD_FONT_OP_GET_TALL from unbound access serial: qcom-geni: drop bogus uart_write_wakeup() serial: qcom-geni: fix mapping of empty DMA buffer serial: qcom-geni: fix DMA mapping leak on shutdown serial: qcom-geni: fix console shutdown hang serdev: Set fwnode for serdev devices tty: serial: fsl_lpuart: fix race on RX DMA shutdown serial: 8250_pci1xxxx: Disable SERIAL_8250_PCI1XXXX config by default serial: 8250_fsl: fix handle_irq locking serial: 8250_em: Fix UART port type serial: 8250: ASPEED_VUART: select REGMAP instead of depending on it tty: serial: fsl_lpuart: skip waiting for transmission complete when UARTCTRL_SBK is asserted Revert "tty: serial: fsl_lpuart: adjust SERIAL_FSL_LPUART_CONSOLE config dependency"
This commit is contained in:
commit
5cdfdd6da3
@ -534,7 +534,7 @@ static int of_serdev_register_devices(struct serdev_controller *ctrl)
|
||||
if (!serdev)
|
||||
continue;
|
||||
|
||||
serdev->dev.of_node = node;
|
||||
device_set_node(&serdev->dev, of_fwnode_handle(node));
|
||||
|
||||
err = serdev_device_add(serdev);
|
||||
if (err) {
|
||||
|
@ -106,8 +106,8 @@ static int serial8250_em_probe(struct platform_device *pdev)
|
||||
memset(&up, 0, sizeof(up));
|
||||
up.port.mapbase = regs->start;
|
||||
up.port.irq = irq;
|
||||
up.port.type = PORT_UNKNOWN;
|
||||
up.port.flags = UPF_BOOT_AUTOCONF | UPF_FIXED_PORT | UPF_IOREMAP;
|
||||
up.port.type = PORT_16750;
|
||||
up.port.flags = UPF_FIXED_PORT | UPF_IOREMAP | UPF_FIXED_TYPE;
|
||||
up.port.dev = &pdev->dev;
|
||||
up.port.private_data = priv;
|
||||
|
||||
|
@ -34,7 +34,7 @@ int fsl8250_handle_irq(struct uart_port *port)
|
||||
|
||||
iir = port->serial_in(port, UART_IIR);
|
||||
if (iir & UART_IIR_NO_INT) {
|
||||
spin_unlock(&up->port.lock);
|
||||
spin_unlock_irqrestore(&up->port.lock, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -42,7 +42,7 @@ int fsl8250_handle_irq(struct uart_port *port)
|
||||
if (unlikely(up->lsr_saved_flags & UART_LSR_BI)) {
|
||||
up->lsr_saved_flags &= ~UART_LSR_BI;
|
||||
port->serial_in(port, UART_RX);
|
||||
spin_unlock(&up->port.lock);
|
||||
spin_unlock_irqrestore(&up->port.lock, flags);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -257,8 +257,9 @@ config SERIAL_8250_ASPEED_VUART
|
||||
tristate "Aspeed Virtual UART"
|
||||
depends on SERIAL_8250
|
||||
depends on OF
|
||||
depends on REGMAP && MFD_SYSCON
|
||||
depends on MFD_SYSCON
|
||||
depends on ARCH_ASPEED || COMPILE_TEST
|
||||
select REGMAP
|
||||
help
|
||||
If you want to use the virtual UART (VUART) device on Aspeed
|
||||
BMC platforms, enable this option. This enables the 16550A-
|
||||
@ -299,7 +300,6 @@ config SERIAL_8250_PCI1XXXX
|
||||
tristate "Microchip 8250 based serial port"
|
||||
depends on SERIAL_8250 && PCI
|
||||
select SERIAL_8250_PCILIB
|
||||
default SERIAL_8250
|
||||
help
|
||||
Select this option if you have a setup with Microchip PCIe
|
||||
Switch with serial port enabled and wish to enable 8250
|
||||
|
@ -1313,7 +1313,7 @@ config SERIAL_FSL_LPUART
|
||||
|
||||
config SERIAL_FSL_LPUART_CONSOLE
|
||||
bool "Console on Freescale lpuart serial port"
|
||||
depends on SERIAL_FSL_LPUART
|
||||
depends on SERIAL_FSL_LPUART=y
|
||||
select SERIAL_CORE_CONSOLE
|
||||
select SERIAL_EARLYCON
|
||||
help
|
||||
|
@ -1354,6 +1354,7 @@ static void lpuart_dma_rx_free(struct uart_port *port)
|
||||
struct dma_chan *chan = sport->dma_rx_chan;
|
||||
|
||||
dmaengine_terminate_sync(chan);
|
||||
del_timer_sync(&sport->lpuart_timer);
|
||||
dma_unmap_sg(chan->device->dev, &sport->rx_sgl, 1, DMA_FROM_DEVICE);
|
||||
kfree(sport->rx_ring.buf);
|
||||
sport->rx_ring.tail = 0;
|
||||
@ -1813,7 +1814,6 @@ static int lpuart32_startup(struct uart_port *port)
|
||||
static void lpuart_dma_shutdown(struct lpuart_port *sport)
|
||||
{
|
||||
if (sport->lpuart_dma_rx_use) {
|
||||
del_timer_sync(&sport->lpuart_timer);
|
||||
lpuart_dma_rx_free(&sport->port);
|
||||
sport->lpuart_dma_rx_use = false;
|
||||
}
|
||||
@ -1973,10 +1973,8 @@ lpuart_set_termios(struct uart_port *port, struct ktermios *termios,
|
||||
* Since timer function acqures sport->port.lock, need to stop before
|
||||
* acquring same lock because otherwise del_timer_sync() can deadlock.
|
||||
*/
|
||||
if (old && sport->lpuart_dma_rx_use) {
|
||||
del_timer_sync(&sport->lpuart_timer);
|
||||
if (old && sport->lpuart_dma_rx_use)
|
||||
lpuart_dma_rx_free(&sport->port);
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&sport->port.lock, flags);
|
||||
|
||||
@ -2210,10 +2208,8 @@ lpuart32_set_termios(struct uart_port *port, struct ktermios *termios,
|
||||
* Since timer function acqures sport->port.lock, need to stop before
|
||||
* acquring same lock because otherwise del_timer_sync() can deadlock.
|
||||
*/
|
||||
if (old && sport->lpuart_dma_rx_use) {
|
||||
del_timer_sync(&sport->lpuart_timer);
|
||||
if (old && sport->lpuart_dma_rx_use)
|
||||
lpuart_dma_rx_free(&sport->port);
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&sport->port.lock, flags);
|
||||
|
||||
@ -2240,9 +2236,15 @@ lpuart32_set_termios(struct uart_port *port, struct ktermios *termios,
|
||||
/* update the per-port timeout */
|
||||
uart_update_timeout(port, termios->c_cflag, baud);
|
||||
|
||||
/* wait transmit engin complete */
|
||||
lpuart32_write(&sport->port, 0, UARTMODIR);
|
||||
lpuart32_wait_bit_set(&sport->port, UARTSTAT, UARTSTAT_TC);
|
||||
/*
|
||||
* LPUART Transmission Complete Flag may never be set while queuing a break
|
||||
* character, so skip waiting for transmission complete when UARTCTRL_SBK is
|
||||
* asserted.
|
||||
*/
|
||||
if (!(old_ctrl & UARTCTRL_SBK)) {
|
||||
lpuart32_write(&sport->port, 0, UARTMODIR);
|
||||
lpuart32_wait_bit_set(&sport->port, UARTSTAT, UARTSTAT_TC);
|
||||
}
|
||||
|
||||
/* disable transmit and receive */
|
||||
lpuart32_write(&sport->port, old_ctrl & ~(UARTCTRL_TE | UARTCTRL_RE),
|
||||
@ -3014,7 +3016,6 @@ static int lpuart_suspend(struct device *dev)
|
||||
* cannot resume as expected, hence gracefully release the
|
||||
* Rx DMA path before suspend and start Rx DMA path on resume.
|
||||
*/
|
||||
del_timer_sync(&sport->lpuart_timer);
|
||||
lpuart_dma_rx_free(&sport->port);
|
||||
|
||||
/* Disable Rx DMA to use UART port as wakeup source */
|
||||
|
@ -596,7 +596,7 @@ static void qcom_geni_serial_stop_tx_dma(struct uart_port *uport)
|
||||
if (!qcom_geni_serial_main_active(uport))
|
||||
return;
|
||||
|
||||
if (port->rx_dma_addr) {
|
||||
if (port->tx_dma_addr) {
|
||||
geni_se_tx_dma_unprep(&port->se, port->tx_dma_addr,
|
||||
port->tx_remaining);
|
||||
port->tx_dma_addr = 0;
|
||||
@ -631,9 +631,8 @@ static void qcom_geni_serial_start_tx_dma(struct uart_port *uport)
|
||||
if (port->tx_dma_addr)
|
||||
return;
|
||||
|
||||
xmit_size = uart_circ_chars_pending(xmit);
|
||||
if (xmit_size < WAKEUP_CHARS)
|
||||
uart_write_wakeup(uport);
|
||||
if (uart_circ_empty(xmit))
|
||||
return;
|
||||
|
||||
xmit_size = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
|
||||
|
||||
@ -1070,6 +1069,10 @@ static int setup_fifos(struct qcom_geni_serial_port *port)
|
||||
static void qcom_geni_serial_shutdown(struct uart_port *uport)
|
||||
{
|
||||
disable_irq(uport->irq);
|
||||
|
||||
if (uart_console(uport))
|
||||
return;
|
||||
|
||||
qcom_geni_serial_stop_tx(uport);
|
||||
qcom_geni_serial_stop_rx(uport);
|
||||
}
|
||||
|
@ -4545,6 +4545,9 @@ static int con_font_get(struct vc_data *vc, struct console_font_op *op)
|
||||
int c;
|
||||
unsigned int vpitch = op->op == KD_FONT_OP_GET_TALL ? op->height : 32;
|
||||
|
||||
if (vpitch > max_font_height)
|
||||
return -EINVAL;
|
||||
|
||||
if (op->data) {
|
||||
font.data = kvmalloc(max_font_size, GFP_KERNEL);
|
||||
if (!font.data)
|
||||
|
Loading…
Reference in New Issue
Block a user