On Mon, Jun 27, 2011 at 6:32 AM, Jamie Iles <jamie@xxxxxxxxxxxxx> wrote: > Some platforms e.g. TI Davinci require 32-bit accesses to the UARTs. > The of_serial driver currently registers all UARTs as UPIO_MEM. Add a > new attribute "io-width" to allow the port to be registered with > different IO width requirements. > > Acked-by: Alan Cox <alan@xxxxxxxxxxxxxxx> > Acked-by: Grant Likely <grant.likely@xxxxxxxxxxxx> > Signed-off-by: Jamie Iles <jamie@xxxxxxxxxxxxx> > --- > .../devicetree/bindings/tty/serial/of-serial.txt | 3 +++ > drivers/tty/serial/of_serial.c | 17 +++++++++++++++++ > 2 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/Documentation/devicetree/bindings/tty/serial/of-serial.txt b/Documentation/devicetree/bindings/tty/serial/of-serial.txt > index 35e53ae..93260d0 100644 > --- a/Documentation/devicetree/bindings/tty/serial/of-serial.txt > +++ b/Documentation/devicetree/bindings/tty/serial/of-serial.txt > @@ -21,6 +21,9 @@ Optional properties: > - reg-shift : quantity to shift the register offsets by. > - used-by-rtas : set to indicate that the port is in use by the OpenFirmware > RTAS and should not be registered. > +- io-width : the size (in bytes) of the IO accesses that should be performed I know I've already picked this up into linux-next, but I'm going to change the property name (unless there are objections). This should be okay since it hasn't appeared in any mainline kernels yet. I'd like this to be named 'reg-io-width' instead to be more consistent with the existing 'reg-shift' and 'reg-offset' properties. g. > + on the device. There are some systems that require 32-bit accesses to the > + UART (e.g. TI davinci). > > Example: > > diff --git a/drivers/tty/serial/of_serial.c b/drivers/tty/serial/of_serial.c > index c911b24..dfcad6f 100644 > --- a/drivers/tty/serial/of_serial.c > +++ b/drivers/tty/serial/of_serial.c > @@ -65,6 +65,23 @@ static int __devinit of_platform_serial_setup(struct platform_device *ofdev, > > port->irq = irq_of_parse_and_map(np, 0); > port->iotype = UPIO_MEM; > + prop = of_get_property(np, "io-width", &prop_size); > + if (prop && (prop_size == sizeof(u32))) { > + switch (be32_to_cpup(prop)) { > + case 1: > + port->iotype = UPIO_MEM; > + break; > + case 4: > + port->iotype = UPIO_MEM32; > + break; > + default: > + dev_warn(&ofdev->dev, > + "unsupported io width (%d bytes)\n", > + be32_to_cpup(prop)); > + return -EINVAL; > + } > + } > + > port->type = type; > port->uartclk = be32_to_cpup(clk); > port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP > -- > 1.7.4.1 > > _______________________________________________ > devicetree-discuss mailing list > devicetree-discuss@xxxxxxxxxxxxxxxx > https://lists.ozlabs.org/listinfo/devicetree-discuss > -- Grant Likely, B.Sc., P.Eng. Secret Lab Technologies Ltd. -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html