FAILED: patch "[PATCH] serial: imx: only set receiver level if it is zero" failed to apply to 5.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.4.y
git checkout FETCH_HEAD
git cherry-pick -x 9706fc87b4cff0ac4f5d5d62327be83fe72e3108
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024070351-precinct-imperfect-ed7d@gregkh' --subject-prefix 'PATCH 5.4.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 9706fc87b4cff0ac4f5d5d62327be83fe72e3108 Mon Sep 17 00:00:00 2001
From: Stefan Eichenberger <[email protected]>
Date: Wed, 3 Jul 2024 13:25:40 +0200
Subject: [PATCH] serial: imx: only set receiver level if it is zero
With commit a81dbd0463ec ("serial: imx: set receiver level before starting uart") we set the receiver level to its default value. This caused a regression when using SDMA, where the receiver level is 9 instead of 8 (default). This change will first check if the receiver level is zero and only then set it to the default. This still avoids the interrupt storm when the receiver level is zero.
drivers/tty/serial/imx.c +6 -2
@@ -120,6 +120,7 @@#define UCR4_OREN (1<<1)/* Receiver overrun interrupt enable */ #define UCR4_DREN (1<<0)/* Recv data ready interrupt enable */ #define UFCR_RXTL_SHF 0/* Receiver trigger level shift */ +#define UFCR_RXTL_MASK 0x3F/* Receiver trigger 6 bits wide */ #define UFCR_DCEDTE (1<<6)/* DCE/DTE mode select */ #define UFCR_RFDIV (7<<7)/* Reference freq divider mask */ #define UFCR_RFDIV_REG (x) (((x) < 7 ? 6 - (x) : 6) << 7)
@@ -1933,7 +1934,7 @@ static int imx_uart_rs485_config(struct uart_port *port, struct ktermios *termio struct serial_rs485 *rs485conf) {struct imx_port *sport = (struct imx_port *)port; -u32 ucr2; +u32 ucr2, ufcr;if (rs485conf->flags &SER_RS485_ENABLED ) {/* Enable receiver if low-active RTS signal is requested */
@@ -1953,7 +1954,10 @@ static int imx_uart_rs485_config(struct uart_port *port, struct ktermios *termio/* Make sure Rx is enabled in case Tx is active with Rx disabled */ if (!(rs485conf->flags &SER_RS485_ENABLED ) || rs485conf->flags &SER_RS485_RX_DURING_TX ) { -imx_uart_setup_ufcr (sport,TXTL_DEFAULT ,RXTL_DEFAULT ); +/* If the receiver trigger is 0, set it to a default value */ + ufcr =imx_uart_readl (sport,UFCR ); +if ((ufcr &UFCR_RXTL_MASK ) ==0 ) +imx_uart_setup_ufcr (sport,TXTL_DEFAULT ,RXTL_DEFAULT );imx_uart_start_rx (port); }