aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--target/linux/bcm53xx/patches-4.14/910-Revert-earlycon-initialise-baud-field-of-earlycon-de.patch33
-rw-r--r--target/linux/generic/backport-4.14/180-earlycon-initialize-port-uartclk-based-on-clock-frequency-property.patch45
-rw-r--r--target/linux/generic/backport-4.14/181-earlycon-remove-hardcoded-port-uartclk-initialization-in-of_setup_earlycon.patch40
3 files changed, 85 insertions, 33 deletions
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?= <rafal@milecki.pl>
-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 <rafal@milecki.pl>
----
-
---- 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 <michal.simek@xilinx.com>
+Date: Tue, 10 Apr 2018 15:32:28 +0200
+Subject: earlycon: Initialize port->uartclk based on clock-frequency property
+
+From: Michal Simek <michal.simek@xilinx.com>
+
+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 <michal.simek@xilinx.com>
+[rmilecki: add -stable comment and Fixes tag]
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 <michal.simek@xilinx.com>
+Date: Wed, 25 Apr 2018 15:48:42 +0200
+Subject: earlycon: Remove hardcoded port->uartclk initialization in of_setup_earlycon
+
+From: Michal Simek <michal.simek@xilinx.com>
+
+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 <michal.simek@xilinx.com>
+Tested-by: Matt Redfearn <matt.redfearn@mips.com>
+[rmilecki: add -stable comment and Fixes tag]
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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)