summaryrefslogtreecommitdiffstats
path: root/configs/platform-v7a/patches/barebox-2018.12.0/0105-serial_ns16550-add-raspberry-pi-compatible-and-init.patch
blob: 911a0e246b33662a3cbce9938adc85d1b7327974 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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 */