kernel: pick earlycon regression fixes from the stable-queue.git
This fixes regression introduced in kernel 4.14 and makes bcm53xx revert obsolete. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
parent
dee8804de0
commit
43d36606d6
3 changed files with 85 additions and 33 deletions
|
@ -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));
|
|
||||||
}
|
|
|
@ -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,
|
|
@ -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)
|
Loading…
Reference in a new issue