summaryrefslogtreecommitdiffstats
path: root/configs/platform-v7a/patches/barebox-2018.12.0/0105-serial_ns16550-add-raspberry-pi-compatible-and-init.patch
diff options
context:
space:
mode:
Diffstat (limited to 'configs/platform-v7a/patches/barebox-2018.12.0/0105-serial_ns16550-add-raspberry-pi-compatible-and-init.patch')
-rw-r--r--configs/platform-v7a/patches/barebox-2018.12.0/0105-serial_ns16550-add-raspberry-pi-compatible-and-init.patch62
1 files changed, 62 insertions, 0 deletions
diff --git a/configs/platform-v7a/patches/barebox-2018.12.0/0105-serial_ns16550-add-raspberry-pi-compatible-and-init.patch b/configs/platform-v7a/patches/barebox-2018.12.0/0105-serial_ns16550-add-raspberry-pi-compatible-and-init.patch
new file mode 100644
index 0000000..911a0e2
--- /dev/null
+++ b/configs/platform-v7a/patches/barebox-2018.12.0/0105-serial_ns16550-add-raspberry-pi-compatible-and-init.patch
@@ -0,0 +1,62 @@
+From: Rouven Czerwinski <r.czerwinski@pengutronix.de>
+Date: Tue, 11 Dec 2018 10:50:44 +0100
+Subject: [PATCH] serial_ns16550: add raspberry pi compatible and init
+
+Add the compatible for the Raspberry Pi AUX UART and an init function which
+enables it via the aux register and configures the correct shift value.
+
+Signed-off-by: Rouven Czerwinski <r.czerwinski@pengutronix.de>
+---
+ drivers/serial/serial_ns16550.c | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+diff --git a/drivers/serial/serial_ns16550.c b/drivers/serial/serial_ns16550.c
+index 8ddcfdbefc1d..7a4054a67e41 100644
+--- a/drivers/serial/serial_ns16550.c
++++ b/drivers/serial/serial_ns16550.c
+@@ -253,6 +253,20 @@ static void ns16550_jz_init_port(struct console_device *cdev)
+ ns16550_serial_init_port(cdev);
+ }
+
++static void rpi_init_port(struct console_device *cdev)
++{
++ struct ns16550_priv *priv = to_ns16550_priv(cdev);
++
++ writeb(0x01, 0x3f215004);
++ priv->plat.shift = 2;
++ /*
++ * We double the clock rate since the 16550 will divide by 16
++ * (instead of 8 required by the BCM2835 peripheral manual)
++ */
++ priv->plat.clock = priv->plat.clock*2;
++ ns16550_serial_init_port(cdev);
++}
++
+ /*********** Exposed Functions **********************************/
+
+ /**
+@@ -353,6 +367,11 @@ static __maybe_unused struct ns16550_drvdata tegra_drvdata = {
+ .linux_console_name = "ttyS",
+ };
+
++static struct ns16550_drvdata rpi_drvdata = {
++ .init_port = rpi_init_port,
++ .linux_console_name = "ttyS",
++};
++
+ static int ns16550_init_iomem(struct device_d *dev, struct ns16550_priv *priv)
+ {
+ struct resource *iores;
+@@ -527,6 +546,12 @@ static struct of_device_id ns16550_serial_dt_ids[] = {
+ .compatible = "ingenic,jz4740-uart",
+ .data = &jz_drvdata,
+ },
++#endif
++#if IS_ENABLED(CONFIG_MACH_RPI_COMMON)
++ {
++ .compatible = "brcm,bcm2835-aux-uart",
++ .data = &rpi_drvdata,
++ },
+ #endif
+ {
+ /* sentinel */