Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'tty-6.3-rc6' 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 some reported
problems:

- fsl_uart driver bugfixes

- sh-sci serial driver bugfixes

- renesas serial driver DT binding bugfixes

- 8250 DMA bugfix

All of these have been in linux-next for a while with no reported
problems"

* tag 'tty-6.3-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
tty: serial: sh-sci: Fix Rx on RZ/G2L SCI
tty: serial: fsl_lpuart: fix crash in lpuart_uport_is_active
tty: serial: fsl_lpuart: avoid checking for transfer complete when UARTCTRL_SBK is asserted in lpuart32_tx_empty
serial: 8250: Prevent starting up DMA Rx on THRI interrupt
dt-bindings: serial: renesas,scif: Fix 4th IRQ for 4-IRQ SCIFs
tty: serial: sh-sci: Fix transmit end interrupt handler

+30 -5
+2 -2
Documentation/devicetree/bindings/serial/renesas,scif.yaml
··· 92 92 - description: Error interrupt 93 93 - description: Receive buffer full interrupt 94 94 - description: Transmit buffer empty interrupt 95 - - description: Transmit End interrupt 95 + - description: Break interrupt 96 96 - items: 97 97 - description: Error interrupt 98 98 - description: Receive buffer full interrupt ··· 107 107 - const: eri 108 108 - const: rxi 109 109 - const: txi 110 - - const: tei 110 + - const: bri 111 111 - items: 112 112 - const: eri 113 113 - const: rxi
+11
drivers/tty/serial/8250/8250_port.c
··· 1903 1903 static bool handle_rx_dma(struct uart_8250_port *up, unsigned int iir) 1904 1904 { 1905 1905 switch (iir & 0x3f) { 1906 + case UART_IIR_THRI: 1907 + /* 1908 + * Postpone DMA or not decision to IIR_RDI or IIR_RX_TIMEOUT 1909 + * because it's impossible to do an informed decision about 1910 + * that with IIR_THRI. 1911 + * 1912 + * This also fixes one known DMA Rx corruption issue where 1913 + * DR is asserted but DMA Rx only gets a corrupted zero byte 1914 + * (too early DR?). 1915 + */ 1916 + return false; 1906 1917 case UART_IIR_RDI: 1907 1918 if (!up->dma->rx_running) 1908 1919 break;
+8 -2
drivers/tty/serial/fsl_lpuart.c
··· 858 858 struct lpuart_port, port); 859 859 unsigned long stat = lpuart32_read(port, UARTSTAT); 860 860 unsigned long sfifo = lpuart32_read(port, UARTFIFO); 861 + unsigned long ctrl = lpuart32_read(port, UARTCTRL); 861 862 862 863 if (sport->dma_tx_in_progress) 863 864 return 0; 864 865 865 - if (stat & UARTSTAT_TC && sfifo & UARTFIFO_TXEMPT) 866 + /* 867 + * LPUART Transmission Complete Flag may never be set while queuing a break 868 + * character, so avoid checking for transmission complete when UARTCTRL_SBK 869 + * is asserted. 870 + */ 871 + if ((stat & UARTSTAT_TC && sfifo & UARTFIFO_TXEMPT) || ctrl & UARTCTRL_SBK) 866 872 return TIOCSER_TEMT; 867 873 868 874 return 0; ··· 2948 2942 tty = tty_port_tty_get(port); 2949 2943 if (tty) { 2950 2944 tty_dev = tty->dev; 2951 - may_wake = device_may_wakeup(tty_dev); 2945 + may_wake = tty_dev && device_may_wakeup(tty_dev); 2952 2946 tty_kref_put(tty); 2953 2947 } 2954 2948
+9 -1
drivers/tty/serial/sh-sci.c
··· 31 31 #include <linux/ioport.h> 32 32 #include <linux/ktime.h> 33 33 #include <linux/major.h> 34 + #include <linux/minmax.h> 34 35 #include <linux/module.h> 35 36 #include <linux/mm.h> 36 37 #include <linux/of.h> ··· 2865 2864 sci_port->irqs[i] = platform_get_irq(dev, i); 2866 2865 } 2867 2866 2867 + /* 2868 + * The fourth interrupt on SCI port is transmit end interrupt, so 2869 + * shuffle the interrupts. 2870 + */ 2871 + if (p->type == PORT_SCI) 2872 + swap(sci_port->irqs[SCIx_BRI_IRQ], sci_port->irqs[SCIx_TEI_IRQ]); 2873 + 2868 2874 /* The SCI generates several interrupts. They can be muxed together or 2869 2875 * connected to different interrupt lines. In the muxed case only one 2870 2876 * interrupt resource is specified as there is only one interrupt ID. ··· 2937 2929 port->flags = UPF_FIXED_PORT | UPF_BOOT_AUTOCONF | p->flags; 2938 2930 port->fifosize = sci_port->params->fifosize; 2939 2931 2940 - if (port->type == PORT_SCI) { 2932 + if (port->type == PORT_SCI && !dev->dev.of_node) { 2941 2933 if (sci_port->reg_size >= 0x20) 2942 2934 port->regshift = 2; 2943 2935 else