summaryrefslogtreecommitdiffstats
path: root/configs/platform-v7a/patches/barebox-2018.12.0/0103-ARM-rpi-retrieve-miniuart-clock-from-firmware.patch
diff options
context:
space:
mode:
Diffstat (limited to 'configs/platform-v7a/patches/barebox-2018.12.0/0103-ARM-rpi-retrieve-miniuart-clock-from-firmware.patch')
-rw-r--r--configs/platform-v7a/patches/barebox-2018.12.0/0103-ARM-rpi-retrieve-miniuart-clock-from-firmware.patch34
1 files changed, 34 insertions, 0 deletions
diff --git a/configs/platform-v7a/patches/barebox-2018.12.0/0103-ARM-rpi-retrieve-miniuart-clock-from-firmware.patch b/configs/platform-v7a/patches/barebox-2018.12.0/0103-ARM-rpi-retrieve-miniuart-clock-from-firmware.patch
new file mode 100644
index 0000000..95daa60
--- /dev/null
+++ b/configs/platform-v7a/patches/barebox-2018.12.0/0103-ARM-rpi-retrieve-miniuart-clock-from-firmware.patch
@@ -0,0 +1,34 @@
+From: Rouven Czerwinski <r.czerwinski@pengutronix.de>
+Date: Thu, 13 Dec 2018 07:23:37 +0100
+Subject: [PATCH] ARM: rpi: retrieve miniuart clock from firmware
+
+The miniuart uses the core clock as the clock source. This clock is fixed by the
+firmware to 250Mhz if enable_uart=1 is set in the config.txt file.
+However a user could still choose to overclock the core frequency,
+which would result in wrong baudrates computed by barebox.
+Retrieve the core clock frequency from the firmware to allow all potential
+firmware configurations to work with barebox.
+
+Signed-off-by: Rouven Czerwinski <r.czerwinski@pengutronix.de>
+---
+ arch/arm/boards/raspberry-pi/rpi-common.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c b/arch/arm/boards/raspberry-pi/rpi-common.c
+index 490aeef12306..e29177d08e20 100644
+--- a/arch/arm/boards/raspberry-pi/rpi-common.c
++++ b/arch/arm/boards/raspberry-pi/rpi-common.c
+@@ -309,6 +309,13 @@ static int rpi_console_clock_init(void)
+ clkdev_add_physbase(clk, 0x20201000, NULL);
+ clkdev_add_physbase(clk, 0x3f201000, NULL);
+
++ clk = rpi_register_firmware_clock(BCM2835_MBOX_CLOCK_ID_CORE,
++ "uart1-8250");
++ if (IS_ERR(clk))
++ return PTR_ERR(clk);
++
++ clkdev_add_physbase(clk, 0x3f215040, NULL);
++
+ clk = clk_fixed("bcm2835-cs", 1 * 1000 * 1000);
+ clk_register_clkdev(clk, NULL, "bcm2835-cs");
+