diff options
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.patch | 78 |
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 = { |