From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
To: Antony Pavlov <antonynpavlov@gmail.com>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 1/2] serial_ns16550: move switch from ns16550_{read, write}() to ns16550_probe()
Date: Thu, 4 Aug 2011 02:42:50 +0200 [thread overview]
Message-ID: <20110804004250.GH24730@game.jcrosoft.org> (raw)
In-Reply-To: <1312396666-23348-1-git-send-email-antonynpavlov@gmail.com>
On 22:37 Wed 03 Aug , Antony Pavlov wrote:
> Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
> ---
> drivers/serial/serial_ns16550.c | 87 ++++++++++++++++++++++++---------------
> 1 files changed, 54 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/serial/serial_ns16550.c b/drivers/serial/serial_ns16550.c
> index 4ed2671..ec93750 100644
> --- a/drivers/serial/serial_ns16550.c
> +++ b/drivers/serial/serial_ns16550.c
> @@ -48,6 +48,23 @@
>
> /*********** Private Functions **********************************/
>
> +#define NS16550_READ_WRITE_UART_FUNC(pfx, cmdr, cmdw, mask) \
> +static unsigned int ns16550_generic_##pfx##_read(unsigned long base, \
> + unsigned char reg_idx) \
> +{ \
> + return cmdr((char *)base + reg_idx); \
> +} \
> + \
> +static void ns16550_generic_##pfx##_write(unsigned int val, unsigned long base, \
> + unsigned char reg_idx) \
> +{ \
> + cmdw((mask val), (char *)base + reg_idx); \
> +}
> +
> +NS16550_READ_WRITE_UART_FUNC(8bit, readb, writeb, 0xff &)
> +NS16550_READ_WRITE_UART_FUNC(16bit, readw, writew, 0xffff &)
> +NS16550_READ_WRITE_UART_FUNC(32bit, readl, writel, )
> +
> /**
> * @brief read register
> *
> @@ -60,22 +77,10 @@ static uint32_t ns16550_read(struct console_device *cdev, uint32_t off)
> {
> struct device_d *dev = cdev->dev;
> struct NS16550_plat *plat = (struct NS16550_plat *)dev->platform_data;
> - int width = dev->resource[0].flags & IORESOURCE_MEM_TYPE_MASK;
>
> off <<= plat->shift;
>
> - if (plat->reg_read)
> - return plat->reg_read((unsigned long)dev->priv, off);
> -
> - switch (width) {
> - case IORESOURCE_MEM_8BIT:
> - return readb(dev->priv + off);
> - case IORESOURCE_MEM_16BIT:
> - return readw(dev->priv + off);
> - case IORESOURCE_MEM_32BIT:
> - return readl(dev->priv + off);
> - }
> - return -1;
> + return plat->reg_read((unsigned long)dev->priv, off);
> }
>
> /**
> @@ -90,26 +95,10 @@ static void ns16550_write(struct console_device *cdev, uint32_t val,
> {
> struct device_d *dev = cdev->dev;
> struct NS16550_plat *plat = (struct NS16550_plat *)dev->platform_data;
> - int width = dev->resource[0].flags & IORESOURCE_MEM_TYPE_MASK;
>
> off <<= plat->shift;
>
> - if (plat->reg_write) {
> - plat->reg_write(val, (unsigned long)dev->priv, off);
> - return;
> - }
> -
> - switch (width) {
> - case IORESOURCE_MEM_8BIT:
> - writeb(val & 0xff, dev->priv + off);
> - break;
> - case IORESOURCE_MEM_16BIT:
> - writew(val & 0xffff, dev->priv + off);
> - break;
> - case IORESOURCE_MEM_32BIT:
> - writel(val, dev->priv + off);
> - break;
> - }
> + plat->reg_write(val, (unsigned long)dev->priv, off);
no it must stay void __iomem*
> }
>
> /**
> @@ -239,9 +228,41 @@ static int ns16550_probe(struct device_d *dev)
> /* we do expect platform specific data */
> if (plat == NULL)
> return -EINVAL;
> - if (!(dev->resource[0].flags & IORESOURCE_MEM_TYPE_MASK) &&
> - ((plat->reg_read == NULL) || (plat->reg_write == NULL)))
> - return -EINVAL;
we need to apply the fix fix and then change the behavior
for bisect
> +
> + if (plat->reg_read == NULL) {
> + int width = dev->resource[0].flags & IORESOURCE_MEM_TYPE_MASK;
> +
> + switch (width) {
> + default:
> + case IORESOURCE_MEM_8BIT:
> + plat->reg_read = ns16550_generic_8bit_read;
> + break;
> + case IORESOURCE_MEM_16BIT:
> + plat->reg_read = ns16550_generic_16bit_read;
> + break;
> + case IORESOURCE_MEM_32BIT:
> + plat->reg_read = ns16550_generic_32bit_read;
> + break;
> + }
> + }
> +
> + if (plat->reg_write == NULL) {
> + int width = dev->resource[0].flags & IORESOURCE_MEM_TYPE_MASK;
why do it twice?
Best Regards,
J.
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2011-08-04 1:00 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-03 18:37 [PATCH 1/2] serial_ns16550: move switch from ns16550_{read, write}() to ns16550_probe() Antony Pavlov
2011-08-03 18:37 ` [PATCH 2/2] serial_ns16550: use 'struct device_d *' instead of 'struct console_device *' Antony Pavlov
2011-08-04 0:37 ` Jean-Christophe PLAGNIOL-VILLARD
2011-08-04 4:54 ` Antony Pavlov
2011-08-04 0:42 ` Jean-Christophe PLAGNIOL-VILLARD [this message]
2011-08-04 7:30 ` [PATCH 1/2] serial_ns16550: move switch from ns16550_{read, write}() to ns16550_probe() Antony Pavlov
2011-08-04 7:19 ` Sascha Hauer
2011-08-04 7:38 ` Antony Pavlov
2011-08-04 7:51 ` Sascha Hauer
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=20110804004250.GH24730@game.jcrosoft.org \
--to=plagnioj@jcrosoft.com \
--cc=antonynpavlov@gmail.com \
--cc=barebox@lists.infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.