summaryrefslogtreecommitdiffstats
path: root/configs/platform-v7a/patches/barebox-2018.12.0/0104-serial_ns16550-handle-default-reg-io-width.patch
diff options
context:
space:
mode:
Diffstat (limited to 'configs/platform-v7a/patches/barebox-2018.12.0/0104-serial_ns16550-handle-default-reg-io-width.patch')
-rw-r--r--configs/platform-v7a/patches/barebox-2018.12.0/0104-serial_ns16550-handle-default-reg-io-width.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/configs/platform-v7a/patches/barebox-2018.12.0/0104-serial_ns16550-handle-default-reg-io-width.patch b/configs/platform-v7a/patches/barebox-2018.12.0/0104-serial_ns16550-handle-default-reg-io-width.patch
new file mode 100644
index 0000000..568d74d
--- /dev/null
+++ b/configs/platform-v7a/patches/barebox-2018.12.0/0104-serial_ns16550-handle-default-reg-io-width.patch
@@ -0,0 +1,78 @@
+From: Rouven Czerwinski <r.czerwinski@pengutronix.de>
+Date: Tue, 11 Dec 2018 11:28:33 +0100
+Subject: [PATCH] serial_ns16550: handle default reg-io-width
+
+According to the device tree bindings for 8250, width is an optional property.
+Default to 1 which is the same default value as used by the kernel.
+Before this change the driver would not work for device trees which do not
+include the optional binding.
+
+Signed-off-by: Rouven Czerwinski <r.czerwinski@pengutronix.de>
+---
+ drivers/serial/serial_ns16550.c | 46 ++++++++++++++++++++---------------------
+ 1 file changed, 23 insertions(+), 23 deletions(-)
+
+diff --git a/drivers/serial/serial_ns16550.c b/drivers/serial/serial_ns16550.c
+index 4d73ea8b8740..8ddcfdbefc1d 100644
+--- a/drivers/serial/serial_ns16550.c
++++ b/drivers/serial/serial_ns16550.c
+@@ -297,36 +297,36 @@ static int ns16550_tstc(struct console_device *cdev)
+ static void ns16550_probe_dt(struct device_d *dev, struct ns16550_priv *priv)
+ {
+ struct device_node *np = dev->device_node;
+- u32 width;
++ u32 width = 1;
+
+ if (!IS_ENABLED(CONFIG_OFDEVICE))
+ return;
+
+ of_property_read_u32(np, "clock-frequency", &priv->plat.clock);
+ of_property_read_u32(np, "reg-shift", &priv->plat.shift);
+- if (!of_property_read_u32(np, "reg-io-width", &width))
+- switch (width) {
+- case 1:
+- priv->read_reg = ns16550_read_reg_mmio_8;
+- priv->write_reg = ns16550_write_reg_mmio_8;
+- break;
+- case 2:
+- priv->read_reg = ns16550_read_reg_mmio_16;
+- priv->write_reg = ns16550_write_reg_mmio_16;
+- break;
+- case 4:
+- if (of_device_is_big_endian(np)) {
+- priv->read_reg = ns16550_read_reg_mmio_32be;
+- priv->write_reg = ns16550_write_reg_mmio_32be;
+- } else {
+- priv->read_reg = ns16550_read_reg_mmio_32;
+- priv->write_reg = ns16550_write_reg_mmio_32;
+- }
+- break;
+- default:
+- dev_err(dev, "unsupported reg-io-width (%d)\n",
+- width);
++ of_property_read_u32(np, "reg-io-width", &width);
++ switch (width) {
++ case 1:
++ priv->read_reg = ns16550_read_reg_mmio_8;
++ priv->write_reg = ns16550_write_reg_mmio_8;
++ break;
++ case 2:
++ priv->read_reg = ns16550_read_reg_mmio_16;
++ priv->write_reg = ns16550_write_reg_mmio_16;
++ break;
++ case 4:
++ if (of_device_is_big_endian(np)) {
++ priv->read_reg = ns16550_read_reg_mmio_32be;
++ priv->write_reg = ns16550_write_reg_mmio_32be;
++ } else {
++ priv->read_reg = ns16550_read_reg_mmio_32;
++ priv->write_reg = ns16550_write_reg_mmio_32;
+ }
++ break;
++ default:
++ dev_err(dev, "unsupported reg-io-width (%d)\n",
++ width);
++ }
+ }
+
+ static struct ns16550_drvdata ns16450_drvdata = {