From: "Grant Likely" <grant.likely@secretlab.ca>
To: "John Linn" <john.linn@xilinx.com>
Cc: linuxppc-dev@ozlabs.org
Subject: Re: [PATCH 2/3] [POWERPC] Xilinx: of_serial support for Xilinx uart 16550.
Date: Thu, 20 Mar 2008 18:19:07 -0600 [thread overview]
Message-ID: <fa686aa40803201719i7bf02ba2qd259f1a36a24d943@mail.gmail.com> (raw)
In-Reply-To: <20080320144402.3063517C005D@mail148-sin.bigfish.com>
On Thu, Mar 20, 2008 at 8:43 AM, John Linn <john.linn@xilinx.com> wrote:
> The Xilinx 16550 uart core is not a standard 16550, because it uses
> word-based addressing rather than byte-based addressing. As a result,
> it is not compatible with the open firmware 'ns16550' compatible
> binding. This code introduces new bindings, which pass the correct
> register base and regshift properties to the uart driver to enable
> this core to be used. Doing this cleanly required some refactoring of
> the existing code.
Personally, I'm not fond of this approach. There is already some
traction to using the reg-shift property to specify spacing, and I
think it would be appropriate to also define a reg-offset property to
handle the +3 offset and then let the xilinx 16550 nodes use those.
More comments below.
>
> Signed-off-by: Stephen Neuendorffer <stephen.neuendorffer@xilinx.com>
> Signed-off-by: John Linn <john.linn@xilinx.com>
> ---
> drivers/serial/of_serial.c | 47 ++++++++++++++++++++++++++++++-------------
> 1 files changed, 33 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/serial/of_serial.c b/drivers/serial/of_serial.c
> index 2efb892..910c94f 100644
> --- a/drivers/serial/of_serial.c
> +++ b/drivers/serial/of_serial.c
> @@ -20,13 +20,15 @@
> struct of_serial_info {
> int type;
> int line;
> + int regshift;
> + int regoffset;
> };
>
> /*
> * Fill a struct uart_port for a given device node
> */
> static int __devinit of_platform_serial_setup(struct of_device *ofdev,
> - int type, struct uart_port *port)
> + struct of_serial_info *info, struct uart_port *port)
> {
> struct resource resource;
> struct device_node *np = ofdev->node;
> @@ -48,17 +50,16 @@ static int __devinit of_platform_serial_setup(struct of_device *ofdev,
> }
>
> spin_lock_init(&port->lock);
> - port->mapbase = resource.start;
> + port->mapbase = resource.start + info->regoffset;
> port->irq = irq_of_parse_and_map(np, 0);
> port->iotype = UPIO_MEM;
> - port->type = type;
> + port->type = info->type;
> + port->regshift = info->regshift;
> port->uartclk = *clk;
> port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP
> | UPF_FIXED_PORT;
> port->dev = &ofdev->dev;
> - /* If current-speed was set, then try not to change it. */
> - if (spd)
> - port->custom_divisor = *clk / (16 * (*spd));
> + port->custom_divisor = *clk / (16 * (*spd));
Oops, looks like you're undoing your previous patch here.
>
> return 0;
> }
> @@ -81,8 +82,9 @@ static int __devinit of_platform_serial_probe(struct of_device *ofdev,
> if (info == NULL)
> return -ENOMEM;
>
> - port_type = (unsigned long)id->data;
> - ret = of_platform_serial_setup(ofdev, port_type, &port);
> + memcpy(info, id->data, sizeof(struct of_serial_info));
> + port_type = info->type;
> + ret = of_platform_serial_setup(ofdev, info, &port);
> if (ret)
> goto out;
>
> @@ -100,7 +102,6 @@ static int __devinit of_platform_serial_probe(struct of_device *ofdev,
> if (ret < 0)
> goto out;
>
> - info->type = port_type;
> info->line = ret;
> ofdev->dev.driver_data = info;
> return 0;
> @@ -128,15 +129,33 @@ static int of_platform_serial_remove(struct of_device *ofdev)
> return 0;
> }
>
> +static struct of_serial_info __devinitdata ns8250_info = { .type = PORT_8250 };
> +static struct of_serial_info __devinitdata ns16450_info = { .type = PORT_16450 };
> +static struct of_serial_info __devinitdata ns16550_info = { .type = PORT_16550 };
> +static struct of_serial_info __devinitdata ns16750_info = { .type = PORT_16750 };
> +static struct of_serial_info __devinitdata xilinx_16550_info = {
> + .type = PORT_16550,
> + .regshift = 2,
> + .regoffset = 3,
> +};
> +static struct of_serial_info __devinitdata unknown_info = { .type = PORT_UNKNOWN };
In support of my argument; the fact that you need a table of data says
to me that this data should really be encoded in the device tree. :-)
Cheers,
g.
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
next prev parent reply other threads:[~2008-03-21 0:19 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <12060242324116-git-send-email-john.linn@xilinx.com>
2008-03-20 14:43 ` [PATCH 2/3] [POWERPC] Xilinx: of_serial support for Xilinx uart 16550 John Linn
2008-03-21 0:19 ` Grant Likely [this message]
2008-03-21 9:21 ` Paul Mackerras
2008-03-21 11:39 ` Segher Boessenkool
2008-03-21 16:08 ` [PATCH 2/3] [POWERPC] Xilinx: of_serial support for Xilinx uart16550 Stephen Neuendorffer
2008-03-21 16:48 ` Segher Boessenkool
2008-03-22 14:50 ` [PATCH 2/3] [POWERPC] Xilinx: of_serial support for Xilinx uart 16550 Grant Likely
2008-03-22 16:06 ` Sergei Shtylyov
2008-03-24 14:09 ` Sergei Shtylyov
2008-03-24 14:27 ` Grant Likely
2008-03-24 16:15 ` Sergei Shtylyov
2008-03-24 16:48 ` Grant Likely
2008-03-24 17:03 ` Sergei Shtylyov
2008-03-25 22:48 ` John Linn
2008-03-21 13:00 ` Sergei Shtylyov
2008-03-21 15:37 ` Segher Boessenkool
2008-03-21 15:54 ` Sergei Shtylyov
2008-03-21 16:45 ` Segher Boessenkool
2008-03-21 16:50 ` [PATCH 2/3] [POWERPC] Xilinx: of_serial support for Xilinx uart16550 Stephen Neuendorffer
2008-03-21 17:01 ` [PATCH 2/3] [POWERPC] Xilinx: of_serial support for Xilinx uart 16550 Sergei Shtylyov
2008-03-22 15:06 ` Grant Likely
2008-03-22 16:40 ` Sergei Shtylyov
2008-03-21 16:14 ` [PATCH 2/3] [POWERPC] Xilinx: of_serial support for Xilinx uart16550 Stephen Neuendorffer
[not found] ` <1206024232655-git-send-email-john.linn@xilinx.com>
2008-03-20 14:43 ` [PATCH 3/3] [POWERPC] Xilinx: boot support for Xilinx uart 16550 John Linn
2008-03-20 14:54 ` Grant Likely
2008-03-20 16:15 ` John Linn
2008-03-20 21:18 ` Grant Likely
[not found] ` <20080320175601.5D86217C8055@mail127-sin.bigfish.com>
2008-03-20 21:07 ` Grant Likely
2008-03-20 22:04 ` Grant Likely
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fa686aa40803201719i7bf02ba2qd259f1a36a24d943@mail.gmail.com \
--to=grant.likely@secretlab.ca \
--cc=john.linn@xilinx.com \
--cc=linuxppc-dev@ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).