Am 13.12.18 um 08:44 schrieb Rouven Czerwinski: > 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 <[email protected]> > --- > 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 4d73ea8b8..8ddcfdbef 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);
i think it is not good to drop error handling completely. We may fail in
different ways:
static const void *of_find_property_value_of_size(const struct
device_node *np,
const char *propname, u32 len)
{
struct property *prop = of_find_property(np, propname, NULL);
const void *value;
if (!prop)
return ERR_PTR(-EINVAL);
value = of_property_get_value(prop);
if (!value)
return ERR_PTR(-ENODATA);
if (len > prop->length)
return ERR_PTR(-EOVERFLOW);
return value;
}
> + 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 = {
>
--
Regards,
Oleksij
signature.asc
Description: OpenPGP digital signature
_______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
