[PATCHv3 2/2] tty: of_serial: support for 32 bit accesses
Grant Likely
grant.likely at secretlab.ca
Fri Jul 1 04:38:22 EST 2011
On Mon, Jun 27, 2011 at 6:32 AM, Jamie Iles <jamie at jamieiles.com> 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 at linux.intel.com>
> Acked-by: Grant Likely <grant.likely at secretlab.ca>
> Signed-off-by: Jamie Iles <jamie at jamieiles.com>
> ---
> .../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 at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/devicetree-discuss
>
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
More information about the devicetree-discuss
mailing list