From 98626f8441add596486b5fd176a5ea6fa16609c8 Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Thu, 29 Nov 2018 11:58:34 +0100 Subject: add RPI3 Support Signed-off-by: Rouven Czerwinski --- ...6550-add-raspberry-pi-compatible-and-init.patch | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 configs/platform-v7a/patches/barebox-2018.12.0/0105-serial_ns16550-add-raspberry-pi-compatible-and-init.patch (limited to 'configs/platform-v7a/patches/barebox-2018.12.0/0105-serial_ns16550-add-raspberry-pi-compatible-and-init.patch') 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 +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 +--- + 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 */ -- cgit v1.2.3