From 43d36606d668edf155da9d879110de2894df825a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Mon, 24 Sep 2018 13:46:08 +0200 Subject: [PATCH] kernel: pick earlycon regression fixes from the stable-queue.git MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes regression introduced in kernel 4.14 and makes bcm53xx revert obsolete. Signed-off-by: Rafał Miłecki --- ...initialise-baud-field-of-earlycon-de.patch | 33 -------------- ...lk-based-on-clock-frequency-property.patch | 45 +++++++++++++++++++ ...-initialization-in-of_setup_earlycon.patch | 40 +++++++++++++++++ 3 files changed, 85 insertions(+), 33 deletions(-) delete mode 100644 target/linux/bcm53xx/patches-4.14/910-Revert-earlycon-initialise-baud-field-of-earlycon-de.patch create mode 100644 target/linux/generic/backport-4.14/180-earlycon-initialize-port-uartclk-based-on-clock-frequency-property.patch create mode 100644 target/linux/generic/backport-4.14/181-earlycon-remove-hardcoded-port-uartclk-initialization-in-of_setup_earlycon.patch diff --git a/target/linux/bcm53xx/patches-4.14/910-Revert-earlycon-initialise-baud-field-of-earlycon-de.patch b/target/linux/bcm53xx/patches-4.14/910-Revert-earlycon-initialise-baud-field-of-earlycon-de.patch deleted file mode 100644 index c00cae2df3..0000000000 --- a/target/linux/bcm53xx/patches-4.14/910-Revert-earlycon-initialise-baud-field-of-earlycon-de.patch +++ /dev/null @@ -1,33 +0,0 @@ -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= -Subject: [PATCH] Revert "earlycon: initialise baud field of earlycon device - structure" -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This reverts commit 31cb9a8575ca04f47ea113434d4782b695638b62. - -It broke earlycon on BCM5301X. Using: -1) uartclk 1843200 (BASE_BAUD * 16) -2) early_console_dev.baud 115200 -results in init_port() calculating UART divisor 1. That's a wrong value -(default one is 54) that breaks serial console output. - -Signed-off-by: Rafał Miłecki ---- - ---- a/drivers/tty/serial/earlycon.c -+++ b/drivers/tty/serial/earlycon.c -@@ -285,12 +285,7 @@ int __init of_setup_earlycon(const struc - } - } - -- val = of_get_flat_dt_prop(node, "current-speed", NULL); -- if (val) -- early_console_dev.baud = be32_to_cpu(*val); -- - if (options) { -- early_console_dev.baud = simple_strtoul(options, NULL, 0); - strlcpy(early_console_dev.options, options, - sizeof(early_console_dev.options)); - } diff --git a/target/linux/generic/backport-4.14/180-earlycon-initialize-port-uartclk-based-on-clock-frequency-property.patch b/target/linux/generic/backport-4.14/180-earlycon-initialize-port-uartclk-based-on-clock-frequency-property.patch new file mode 100644 index 0000000000..1b98958af4 --- /dev/null +++ b/target/linux/generic/backport-4.14/180-earlycon-initialize-port-uartclk-based-on-clock-frequency-property.patch @@ -0,0 +1,45 @@ +From 814453adea7d081ad8917aa0f32d6a14165a3563 Mon Sep 17 00:00:00 2001 +From: Michal Simek +Date: Tue, 10 Apr 2018 15:32:28 +0200 +Subject: earlycon: Initialize port->uartclk based on clock-frequency property + +From: Michal Simek + +commit 814453adea7d081ad8917aa0f32d6a14165a3563 upstream. + +On DT based platforms when current-speed property is present baudrate +is setup. Also port->uartclk is initialized to bogus BASE_BAUD * 16 +value. Drivers like uartps/ns16550 contain logic when baudrate and +uartclk is used for baudrate calculation. + +The patch is reading optional clock-frequency property to replace bogus +BASE_BAUD * 16 calculation to have proper baudrate calculation. + +[-stable comment: commit 31cb9a8575ca ("earlycon: initialise baud field + of earlycon device structure") has changed 8250_early.c behavior which + now tries to setup UART speed. Ignoring clock-frequency results in + wrong value of calculated divisor & malformed early console output.] + +Fixes: 31cb9a8575ca ("earlycon: initialise baud field of earlycon device structure") +Signed-off-by: Michal Simek +[rmilecki: add -stable comment and Fixes tag] +Signed-off-by: Rafał Miłecki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/tty/serial/earlycon.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/tty/serial/earlycon.c ++++ b/drivers/tty/serial/earlycon.c +@@ -289,6 +289,10 @@ int __init of_setup_earlycon(const struc + if (val) + early_console_dev.baud = be32_to_cpu(*val); + ++ val = of_get_flat_dt_prop(node, "clock-frequency", NULL); ++ if (val) ++ port->uartclk = be32_to_cpu(*val); ++ + if (options) { + early_console_dev.baud = simple_strtoul(options, NULL, 0); + strlcpy(early_console_dev.options, options, diff --git a/target/linux/generic/backport-4.14/181-earlycon-remove-hardcoded-port-uartclk-initialization-in-of_setup_earlycon.patch b/target/linux/generic/backport-4.14/181-earlycon-remove-hardcoded-port-uartclk-initialization-in-of_setup_earlycon.patch new file mode 100644 index 0000000000..a4df913840 --- /dev/null +++ b/target/linux/generic/backport-4.14/181-earlycon-remove-hardcoded-port-uartclk-initialization-in-of_setup_earlycon.patch @@ -0,0 +1,40 @@ +From 182ead3e418a20328b73152b8e81fc8b4cac3b0b Mon Sep 17 00:00:00 2001 +From: Michal Simek +Date: Wed, 25 Apr 2018 15:48:42 +0200 +Subject: earlycon: Remove hardcoded port->uartclk initialization in of_setup_earlycon + +From: Michal Simek + +commit 182ead3e418a20328b73152b8e81fc8b4cac3b0b upstream. + +There is no reason to initialize uartclk to BASE_BAUD * 16 for DT based +systems. + +[-stable comment: commit 31cb9a8575ca ("earlycon: initialise baud field + of earlycon device structure") has changed 8250_early.c behavior which + now tries to setup UART speed. + Already-backported upstream commit 0ff3ab701963 ("serial: 8250_early: + Only set divisor if valid clk & baud") handles properly uartclk not + being set but it still requires backporting fix for wrong uartclk val. + This fixes malformed early console output on arch-es with BASE_BAUD.] + +Fixes: 31cb9a8575ca ("earlycon: initialise baud field of earlycon device structure") +Signed-off-by: Michal Simek +Tested-by: Matt Redfearn +[rmilecki: add -stable comment and Fixes tag] +Signed-off-by: Rafał Miłecki +Signed-off-by: Greg Kroah-Hartman +--- + drivers/tty/serial/earlycon.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/drivers/tty/serial/earlycon.c ++++ b/drivers/tty/serial/earlycon.c +@@ -254,7 +254,6 @@ int __init of_setup_earlycon(const struc + return -ENXIO; + } + port->mapbase = addr; +- port->uartclk = BASE_BAUD * 16; + + val = of_get_flat_dt_prop(node, "reg-offset", NULL); + if (val)