From: Hongwei Zhang <hongweiz@ami.com>
To: Andrew Jeffery <andrew@aj.id.au>,
Linus Walleij <linus.walleij@linaro.org>,
linux-gpio <linux-gpio@vger.kernel.org>,
Joel Stanley <joel@jms.id.au>
Cc: linux-aspeed <linux-aspeed@lists.ozlabs.org>,
Bartosz Golaszewski <bgolaszewski@baylibre.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
Hongwei Zhang <hongweiz@ami.com>
Subject: [v6 2/2] gpio: aspeed: Add SGPIO driver
Date: Wed, 31 Jul 2019 16:25:45 -0400 [thread overview]
Message-ID: <1564604745-1639-1-git-send-email-hongweiz@ami.com> (raw)
In-Reply-To: <1564500268-2627-3-git-send-email-hongweiz@ami.com>
Hello Andrew,
Thanks so much for your help.
> From: Andrew Jeffery <andrew@aj.id.au>
> Sent: Tuesday, July 30, 2019 8:19 PM
> To: Hongwei Zhang; Linus Walleij; linux-gpio@vger.kernel.org
> Cc: Joel Stanley; linux-aspeed@lists.ozlabs.org; Bartosz Golaszewski; linux-kernel@vger.kernel.org;
> linux-arm-kernel@lists.infradead.org
> Subject: Re: [v6 2/2] gpio: aspeed: Add SGPIO driver
>
>
>
> On Wed, 31 Jul 2019, at 00:55, Hongwei Zhang wrote:
> > Add SGPIO driver support for Aspeed AST2500 SoC.
> >
> > Signed-off-by: Hongwei Zhang <hongweiz@ami.com>
> > ---
> > drivers/gpio/sgpio-aspeed.c | 521
> > ++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 521 insertions(+)
> > create mode 100644 drivers/gpio/sgpio-aspeed.c
> >
> > diff --git a/drivers/gpio/sgpio-aspeed.c b/drivers/gpio/sgpio-aspeed.c
> > new file mode 100644 index 0000000..9a17b1a
> > --- /dev/null
> > +++ b/drivers/gpio/sgpio-aspeed.c
> > @@ -0,0 +1,521 @@
> > +// SPDX-License-Identifier: GPL-2.0-or-later
> > +/*
> > + * Copyright 2019 American Megatrends International LLC.
> > + *
> > + * Author: Karthikeyan Mani <karthikeyanm@amiindia.co.in> */
> > +
> > +#include <linux/bitfield.h>
> > +#include <linux/clk.h>
> > +#include <linux/gpio/driver.h>
> > +#include <linux/hashtable.h>
> > +#include <linux/init.h>
> > +
> > +static void aspeed_sgpio_set(struct gpio_chip *gc, unsigned int
> > offset, int val)
> > +{
> > + struct aspeed_sgpio *gpio = gpiochip_get_data(gc);
> > + const struct aspeed_sgpio_bank *bank = to_bank(offset);
> > + unsigned long flags;
> > + void __iomem *addr;
> > + u32 reg = 0;
> > +
> > + spin_lock_irqsave(&gpio->lock, flags);
> > +
> > + addr = bank_reg(gpio, bank, reg_val);
> > +
> > + if (val)
> > + reg |= GPIO_BIT(offset);
> > + else
> > + reg &= ~GPIO_BIT(offset);
>
> reg is zero-initialised above and you haven't read from addr to assign to reg, so the else branch is
> redundant (reg is already zeroed). This path has a bug - you're clearing the state of all GPIOs associated
> with addr rather than just the GPIO associated with offset.
>
you're correct, this is fixed in v7.
> > +
> > + iowrite32(reg, addr);
> > +
> > + spin_unlock_irqrestore(&gpio->lock, flags); }
> > +
> > +
> > +static int aspeed_sgpio_dir_out(struct gpio_chip *gc, unsigned int
> > offset, int val)
> > +{
> > + struct aspeed_sgpio *gpio = gpiochip_get_data(gc);
> > + unsigned long flags;
> > +
> > + spin_lock_irqsave(&gpio->lock, flags);
> > + gpio->dir_in[GPIO_BANK(offset)] &= ~GPIO_BIT(offset);
> > + spin_unlock_irqrestore(&gpio->lock, flags);
> > +
> > + aspeed_sgpio_set(gc, offset, val);
>
> In this case you should probably have an unlocked variant of aspeed_sgpio_set() so you can call it inside
> the the critical section above instead of needing to acquire/release the lock twice (once above and again
> in aspeed_sgpio_set() as it stands).
>
moved _sgpio_set() so only one pair of acquire/release lock used.
> Cheers,
>
> Andrew
>
Thanks,
--Hongwei
> > +
> > + return 0;
> > +}
> > +
> > --
> > 2.7.4
> >
> >
next prev parent reply other threads:[~2019-07-31 20:27 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-30 15:24 [v6 0/2] gpio: aspeed: Add SGPIO driver Hongwei Zhang
2019-07-30 15:24 ` [v6 1/2] dt-bindings: gpio: aspeed: Add SGPIO support Hongwei Zhang
2019-07-30 23:58 ` Andrew Jeffery
2019-07-30 15:24 ` [v6 2/2] gpio: aspeed: Add SGPIO driver Hongwei Zhang
2019-07-31 0:19 ` Andrew Jeffery
2019-07-31 20:25 ` Hongwei Zhang [this message]
-- strict thread matches above, loose matches on Subject: below --
2019-07-19 19:24 [v5 " Hongwei Zhang
2019-07-29 20:29 ` [v6 " Hongwei Zhang
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=1564604745-1639-1-git-send-email-hongweiz@ami.com \
--to=hongweiz@ami.com \
--cc=andrew@aj.id.au \
--cc=bgolaszewski@baylibre.com \
--cc=joel@jms.id.au \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-aspeed@lists.ozlabs.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.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).