+++ /dev/null
-From e5d6bd25f93d6ae158bb4cd04956cb497a85b8ef Mon Sep 17 00:00:00 2001
-From: Peter Collingbourne <pcc@google.com>
-Date: Thu, 22 Feb 2024 11:26:34 -0800
-Subject: serial: 8250_dw: Do not reclock if already at correct rate
-
-From: Peter Collingbourne <pcc@google.com>
-
-commit e5d6bd25f93d6ae158bb4cd04956cb497a85b8ef upstream.
-
-When userspace opens the console, we call set_termios() passing a
-termios with the console's configured baud rate. Currently this causes
-dw8250_set_termios() to disable and then re-enable the UART clock at
-the same frequency as it was originally. This can cause corruption
-of any concurrent console output. Fix it by skipping the reclocking
-if we are already at the correct rate.
-
-Signed-off-by: Peter Collingbourne <pcc@google.com>
-Fixes: 4e26b134bd17 ("serial: 8250_dw: clock rate handling for all ACPI platforms")
-Cc: stable@vger.kernel.org
-Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
-Link: https://lore.kernel.org/r/20240222192635.1050502-1-pcc@google.com
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/tty/serial/8250/8250_dw.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_dw.c
-+++ b/drivers/tty/serial/8250/8250_dw.c
-@@ -357,9 +357,9 @@ static void dw8250_set_termios(struct ua
- long rate;
- int ret;
-
-- clk_disable_unprepare(d->clk);
- rate = clk_round_rate(d->clk, newrate);
-- if (rate > 0) {
-+ if (rate > 0 && p->uartclk != rate) {
-+ clk_disable_unprepare(d->clk);
- /*
- * Note that any clock-notifer worker will block in
- * serial8250_update_uartclk() until we are done.
-@@ -367,8 +367,8 @@ static void dw8250_set_termios(struct ua
- ret = clk_set_rate(d->clk, newrate);
- if (!ret)
- p->uartclk = rate;
-+ clk_prepare_enable(d->clk);
- }
-- clk_prepare_enable(d->clk);
-
- dw8250_do_set_termios(p, termios, old);
- }
usb-gadget-ncm-fix-handling-of-zero-block-length-packets.patch
usb-port-don-t-try-to-peer-unused-usb-ports-based-on-location.patch
tty-serial-fsl_lpuart-avoid-idle-preamble-pending-if-cts-is-enabled.patch
-serial-8250_dw-do-not-reclock-if-already-at-correct-rate.patch
misc-lis3lv02d_i2c-fix-regulators-getting-en-dis-abled-twice-on-suspend-resume.patch
mei-me-add-arrow-lake-point-s-did.patch
mei-me-add-arrow-lake-point-h-did.patch
+++ /dev/null
-From e5d6bd25f93d6ae158bb4cd04956cb497a85b8ef Mon Sep 17 00:00:00 2001
-From: Peter Collingbourne <pcc@google.com>
-Date: Thu, 22 Feb 2024 11:26:34 -0800
-Subject: serial: 8250_dw: Do not reclock if already at correct rate
-
-From: Peter Collingbourne <pcc@google.com>
-
-commit e5d6bd25f93d6ae158bb4cd04956cb497a85b8ef upstream.
-
-When userspace opens the console, we call set_termios() passing a
-termios with the console's configured baud rate. Currently this causes
-dw8250_set_termios() to disable and then re-enable the UART clock at
-the same frequency as it was originally. This can cause corruption
-of any concurrent console output. Fix it by skipping the reclocking
-if we are already at the correct rate.
-
-Signed-off-by: Peter Collingbourne <pcc@google.com>
-Fixes: 4e26b134bd17 ("serial: 8250_dw: clock rate handling for all ACPI platforms")
-Cc: stable@vger.kernel.org
-Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
-Link: https://lore.kernel.org/r/20240222192635.1050502-1-pcc@google.com
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/tty/serial/8250/8250_dw.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_dw.c
-+++ b/drivers/tty/serial/8250/8250_dw.c
-@@ -357,9 +357,9 @@ static void dw8250_set_termios(struct ua
- long rate;
- int ret;
-
-- clk_disable_unprepare(d->clk);
- rate = clk_round_rate(d->clk, newrate);
-- if (rate > 0) {
-+ if (rate > 0 && p->uartclk != rate) {
-+ clk_disable_unprepare(d->clk);
- /*
- * Note that any clock-notifer worker will block in
- * serial8250_update_uartclk() until we are done.
-@@ -367,8 +367,8 @@ static void dw8250_set_termios(struct ua
- ret = clk_set_rate(d->clk, newrate);
- if (!ret)
- p->uartclk = rate;
-+ clk_prepare_enable(d->clk);
- }
-- clk_prepare_enable(d->clk);
-
- dw8250_do_set_termios(p, termios, old);
- }
usb-port-don-t-try-to-peer-unused-usb-ports-based-on-location.patch
xhci-fix-failure-to-detect-ring-expansion-need.patch
tty-serial-fsl_lpuart-avoid-idle-preamble-pending-if-cts-is-enabled.patch
-serial-8250_dw-do-not-reclock-if-already-at-correct-rate.patch
misc-lis3lv02d_i2c-fix-regulators-getting-en-dis-abled-twice-on-suspend-resume.patch
misc-fastrpc-pass-proper-arguments-to-scm-call.patch
serial-port-don-t-suspend-if-the-port-is-still-busy.patch
+++ /dev/null
-From e5d6bd25f93d6ae158bb4cd04956cb497a85b8ef Mon Sep 17 00:00:00 2001
-From: Peter Collingbourne <pcc@google.com>
-Date: Thu, 22 Feb 2024 11:26:34 -0800
-Subject: serial: 8250_dw: Do not reclock if already at correct rate
-
-From: Peter Collingbourne <pcc@google.com>
-
-commit e5d6bd25f93d6ae158bb4cd04956cb497a85b8ef upstream.
-
-When userspace opens the console, we call set_termios() passing a
-termios with the console's configured baud rate. Currently this causes
-dw8250_set_termios() to disable and then re-enable the UART clock at
-the same frequency as it was originally. This can cause corruption
-of any concurrent console output. Fix it by skipping the reclocking
-if we are already at the correct rate.
-
-Signed-off-by: Peter Collingbourne <pcc@google.com>
-Fixes: 4e26b134bd17 ("serial: 8250_dw: clock rate handling for all ACPI platforms")
-Cc: stable@vger.kernel.org
-Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
-Link: https://lore.kernel.org/r/20240222192635.1050502-1-pcc@google.com
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/tty/serial/8250/8250_dw.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/tty/serial/8250/8250_dw.c
-+++ b/drivers/tty/serial/8250/8250_dw.c
-@@ -357,9 +357,9 @@ static void dw8250_set_termios(struct ua
- long rate;
- int ret;
-
-- clk_disable_unprepare(d->clk);
- rate = clk_round_rate(d->clk, newrate);
-- if (rate > 0) {
-+ if (rate > 0 && p->uartclk != rate) {
-+ clk_disable_unprepare(d->clk);
- /*
- * Note that any clock-notifer worker will block in
- * serial8250_update_uartclk() until we are done.
-@@ -367,8 +367,8 @@ static void dw8250_set_termios(struct ua
- ret = clk_set_rate(d->clk, newrate);
- if (!ret)
- p->uartclk = rate;
-+ clk_prepare_enable(d->clk);
- }
-- clk_prepare_enable(d->clk);
-
- dw8250_do_set_termios(p, termios, old);
- }
usb-port-don-t-try-to-peer-unused-usb-ports-based-on-location.patch
xhci-fix-failure-to-detect-ring-expansion-need.patch
tty-serial-fsl_lpuart-avoid-idle-preamble-pending-if-cts-is-enabled.patch
-serial-8250_dw-do-not-reclock-if-already-at-correct-rate.patch
misc-lis3lv02d_i2c-fix-regulators-getting-en-dis-abled-twice-on-suspend-resume.patch
misc-fastrpc-pass-proper-arguments-to-scm-call.patch
serial-port-don-t-suspend-if-the-port-is-still-busy.patch