All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 5.10.y] serial: tegra: Add missing clk_disable_unprepare() in tegra_uart_hw_init()
@ 2026-10-29  6:14 Karl Mehltretter
  2026-10-29  6:18 ` sashiko-bot
  2026-10-29 18:43 ` Sasha Levin
  0 siblings, 2 replies; 3+ messages in thread
From: Karl Mehltretter @ 2026-10-29  6:14 UTC (permalink / raw)
  To: stable
  Cc: Karl Mehltretter, Greg Kroah-Hartman, Sasha Levin, Yi Yang,
	Jiri Slaby, Thierry Reding, Jonathan Hunter, linux-serial,
	linux-tegra

From: Yi Yang <yiyang13@huawei.com>

commit 38f28cfe9d08e3a47ef008798b275fef8118fc20 upstream.

Add the missing clk_disable_unprepare() before return from
tegra_uart_hw_init() in the error handling path.
When request_irq() fails in tegra_uart_startup(), 'tup->uart_clk'
has been enabled, fix it by adding clk_disable_unprepare().

Fixes: cc9ca4d95846 ("serial: tegra: Only print FIFO error message when an error occurs")
Fixes: d781ec21bae6 ("serial: tegra: report clk rate errors")
Signed-off-by: Yi Yang <yiyang13@huawei.com>
Link: https://lore.kernel.org/r/20221126020852.113378-1-yiyang13@huawei.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Assisted-by: LLM
Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
---
This fix is already in 5.15.y and newer stable trees, and applies cleanly
to 5.10.y.

Tested on the 5.10.273 review queue (6aa0165f18f12) in arm64 Tegra210
QEMU across the FIFO timeout, baud-rate tolerance, and request_irq()
error paths. Without the fix, each failed open() leaks +1 on the UART
clock's clk_enable_count and clk_prepare_count. With the fix, both
counts return to 0.

 drivers/tty/serial/serial-tegra.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/serial/serial-tegra.c b/drivers/tty/serial/serial-tegra.c
index ccc6106a5a253..3b86272cdf390 100644
--- a/drivers/tty/serial/serial-tegra.c
+++ b/drivers/tty/serial/serial-tegra.c
@@ -1060,6 +1060,7 @@ static int tegra_uart_hw_init(struct tegra_uart_port *tup)
 	if (tup->cdata->fifo_mode_enable_status) {
 		ret = tegra_uart_wait_fifo_mode_enabled(tup);
 		if (ret < 0) {
+			clk_disable_unprepare(tup->uart_clk);
 			dev_err(tup->uport.dev,
 				"Failed to enable FIFO mode: %d\n", ret);
 			return ret;
@@ -1081,6 +1082,7 @@ static int tegra_uart_hw_init(struct tegra_uart_port *tup)
 	 */
 	ret = tegra_set_baudrate(tup, TEGRA_UART_DEFAULT_BAUD);
 	if (ret < 0) {
+		clk_disable_unprepare(tup->uart_clk);
 		dev_err(tup->uport.dev, "Failed to set baud rate\n");
 		return ret;
 	}
@@ -1240,10 +1242,13 @@ static int tegra_uart_startup(struct uart_port *u)
 				dev_name(u->dev), tup);
 	if (ret < 0) {
 		dev_err(u->dev, "Failed to register ISR for IRQ %d\n", u->irq);
-		goto fail_hw_init;
+		goto fail_request_irq;
 	}
 	return 0;
 
+fail_request_irq:
+	/* tup->uart_clk is already enabled in tegra_uart_hw_init */
+	clk_disable_unprepare(tup->uart_clk);
 fail_hw_init:
 	if (!tup->use_rx_pio)
 		tegra_uart_dma_channel_free(tup, true);
-- 
2.50.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 5.10.y] serial: tegra: Add missing clk_disable_unprepare() in tegra_uart_hw_init()
  2026-10-29  6:14 [PATCH 5.10.y] serial: tegra: Add missing clk_disable_unprepare() in tegra_uart_hw_init() Karl Mehltretter
@ 2026-10-29  6:18 ` sashiko-bot
  2026-10-29 18:43 ` Sasha Levin
  1 sibling, 0 replies; 3+ messages in thread
From: sashiko-bot @ 2026-10-29  6:18 UTC (permalink / raw)
  To: Karl Mehltretter; +Cc: linux-serial

> From: Yi Yang <yiyang13@huawei.com>
> 
> commit 38f28cfe9d08e3a47ef008798b275fef8118fc20 upstream.
> 
> Add the missing clk_disable_unprepare() before return from
> tegra_uart_hw_init() in the error handling path.
> When request_irq() fails in tegra_uart_startup(), 'tup->uart_clk'
> has been enabled, fix it by adding clk_disable_unprepare().
> 
> Fixes: cc9ca4d95846 ("serial: tegra: Only print FIFO error message when an error occurs")
> Fixes: d781ec21bae6 ("serial: tegra: report clk rate errors")
> Signed-off-by: Yi Yang <yiyang13@huawei.com>
> Link: https://lore.kernel.org/r/20221126020852.113378-1-yiyang13@huawei.com
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Assisted-by: LLM
> Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>

Sashiko has reviewed this patch and found no issues.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261029061427.27973-1-kmehltretter@gmail.com?part=1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 5.10.y] serial: tegra: Add missing clk_disable_unprepare() in tegra_uart_hw_init()
  2026-10-29  6:14 [PATCH 5.10.y] serial: tegra: Add missing clk_disable_unprepare() in tegra_uart_hw_init() Karl Mehltretter
  2026-10-29  6:18 ` sashiko-bot
@ 2026-10-29 18:43 ` Sasha Levin
  1 sibling, 0 replies; 3+ messages in thread
From: Sasha Levin @ 2026-10-29 18:43 UTC (permalink / raw)
  To: stable
  Cc: Sasha Levin, Karl Mehltretter, Greg Kroah-Hartman, Yi Yang,
	Jiri Slaby, Thierry Reding, Jonathan Hunter, linux-serial,
	linux-tegra

> Add the missing clk_disable_unprepare() before return from
> tegra_uart_hw_init() in the error handling path.

Queued for 5.10, thanks.

-- 
Thanks,
Sasha

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-10-29 18:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-29  6:14 [PATCH 5.10.y] serial: tegra: Add missing clk_disable_unprepare() in tegra_uart_hw_init() Karl Mehltretter
2026-10-29  6:18 ` sashiko-bot
2026-10-29 18:43 ` Sasha Levin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.