linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Sherry Sun <sherry.sun@nxp.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Sasha Levin <sashal@kernel.org>,
	jirislaby@kernel.org, linux-serial@vger.kernel.org
Subject: [PATCH AUTOSEL 5.15 11/50] tty: serial: fsl_lpuart: disable the CTS when send break signal
Date: Fri,  3 Mar 2023 16:44:52 -0500	[thread overview]
Message-ID: <20230303214531.1450154-11-sashal@kernel.org> (raw)
In-Reply-To: <20230303214531.1450154-1-sashal@kernel.org>

From: Sherry Sun <sherry.sun@nxp.com>

[ Upstream commit c4c81db5cf8bc53d6160c3abf26d382c841aa434 ]

LPUART IP has a bug that it treats the CTS as higher priority than the
break signal, which cause the break signal sending through UARTCTRL_SBK
may impacted by the CTS input if the HW flow control is enabled.

Add this workaround patch to fix the IP bug, we can disable CTS before
asserting SBK to avoid any interference from CTS, and re-enable it when
break off.

Such as for the bluetooth chip power save feature, host can let the BT
chip get into sleep state by sending a UART break signal, and wake it up
by turning off the UART break. If the BT chip enters the sleep mode
successfully, it will pull up the CTS line, if the BT chip is woken up,
it will pull down the CTS line. If without this workaround patch, the
UART TX pin cannot send the break signal successfully as it affected by
the BT CTS pin. After adding this patch, the BT power save feature can
work well.

Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
Link: https://lore.kernel.org/r/20221214031137.28815-2-sherry.sun@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/tty/serial/fsl_lpuart.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
index fc311df9f1c9d..1497098e100bf 100644
--- a/drivers/tty/serial/fsl_lpuart.c
+++ b/drivers/tty/serial/fsl_lpuart.c
@@ -1484,12 +1484,32 @@ static void lpuart_break_ctl(struct uart_port *port, int break_state)
 
 static void lpuart32_break_ctl(struct uart_port *port, int break_state)
 {
-	unsigned long temp;
+	unsigned long temp, modem;
+	struct tty_struct *tty;
+	unsigned int cflag = 0;
+
+	tty = tty_port_tty_get(&port->state->port);
+	if (tty) {
+		cflag = tty->termios.c_cflag;
+		tty_kref_put(tty);
+	}
 
 	temp = lpuart32_read(port, UARTCTRL) & ~UARTCTRL_SBK;
+	modem = lpuart32_read(port, UARTMODIR);
 
-	if (break_state != 0)
+	if (break_state != 0) {
 		temp |= UARTCTRL_SBK;
+		/*
+		 * LPUART CTS has higher priority than SBK, need to disable CTS before
+		 * asserting SBK to avoid any interference if flow control is enabled.
+		 */
+		if (cflag & CRTSCTS && modem & UARTMODIR_TXCTSE)
+			lpuart32_write(port, modem & ~UARTMODIR_TXCTSE, UARTMODIR);
+	} else {
+		/* Re-enable the CTS when break off. */
+		if (cflag & CRTSCTS && !(modem & UARTMODIR_TXCTSE))
+			lpuart32_write(port, modem | UARTMODIR_TXCTSE, UARTMODIR);
+	}
 
 	lpuart32_write(port, temp, UARTCTRL);
 }
-- 
2.39.2


  parent reply	other threads:[~2023-03-03 21:52 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-03 21:44 [PATCH AUTOSEL 5.15 01/50] IB/hfi1: Update RMT size calculation Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 02/50] iommu/amd: Fix error handling for pdev_pri_ats_enable() Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 03/50] media: uvcvideo: Remove format descriptions Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 04/50] media: uvcvideo: Handle cameras with invalid descriptors Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 05/50] media: uvcvideo: Handle errors from calls to usb_string Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 06/50] media: uvcvideo: Quirk for autosuspend in Logitech B910 and C910 Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 07/50] media: uvcvideo: Silence memcpy() run-time false positive warnings Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 08/50] USB: fix memory leak with using debugfs_lookup() Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 09/50] staging: emxx_udc: Add checks for dma_alloc_coherent() Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 10/50] tty: fix out-of-bounds access in tty_driver_lookup_tty() Sasha Levin
2023-03-03 21:44 ` Sasha Levin [this message]
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 12/50] serial: sc16is7xx: setup GPIO controller later in probe Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 13/50] mei: bus-fixup:upon error print return values of send and receive Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 14/50] parport_pc: Set up mode and ECR masks for Oxford Semiconductor devices Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 15/50] tools/iio/iio_utils:fix memory leak Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 16/50] iio: accel: mma9551_core: Prevent uninitialized variable in mma9551_read_status_word() Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 17/50] iio: accel: mma9551_core: Prevent uninitialized variable in mma9551_read_config_word() Sasha Levin
2023-03-03 21:44 ` [PATCH AUTOSEL 5.15 18/50] firmware: coreboot: framebuffer: Ignore reserved pixel color bits Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 19/50] soundwire: bus_type: Avoid lockdep assert in sdw_drv_probe() Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 20/50] PCI: loongson: Prevent LS7A MRRS increases Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 21/50] USB: dwc3: fix memory leak with using debugfs_lookup() Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 22/50] USB: chipidea: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 23/50] USB: uhci: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 24/50] USB: sl811: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 25/50] USB: fotg210: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 26/50] USB: isp116x: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 27/50] USB: isp1362: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 28/50] USB: gadget: gr_udc: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 29/50] USB: gadget: bcm63xx_udc: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 30/50] USB: gadget: lpc32xx_udc: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 31/50] USB: gadget: pxa25x_udc: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 32/50] USB: gadget: pxa27x_udc: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 33/50] usb: host: xhci: mvebu: Iterate over array indexes instead of using pointer math Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 34/50] USB: ene_usb6250: Allocate enough memory for full object Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 35/50] usb: uvc: Enumerate valid values for color matching Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 36/50] usb: gadget: uvc: Make bSourceID read/write Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 37/50] PCI: Align extra resources for hotplug bridges properly Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 38/50] PCI: Take other bus devices into account when distributing resources Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 39/50] tty: pcn_uart: fix memory leak with using debugfs_lookup() Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 40/50] misc: vmw_balloon: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 41/50] drivers: base: component: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 42/50] drivers: base: dd: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 43/50] kernel/time/test_udelay.c: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 44/50] kernel/power/energy_model.c: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 45/50] kernel/fail_function: " Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 46/50] PCI: loongson: Add more devices that need MRRS quirk Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 47/50] PCI: Add ACS quirk for Wangxun NICs Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 48/50] phy: rockchip-typec: Fix unsigned comparison with less than zero Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 49/50] soundwire: cadence: Remove wasted space in response_buf Sasha Levin
2023-03-03 21:45 ` [PATCH AUTOSEL 5.15 50/50] soundwire: cadence: Drain the RX FIFO after an IO timeout Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230303214531.1450154-11-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jirislaby@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=sherry.sun@nxp.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).