All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roger Quadros <rogerq@ti.com>
To: Tarun Kanti DebBarma <tarun.kanti@ti.com>
Cc: linux-omap@vger.kernel.org, khilman@ti.com, tony@atomide.com,
	b-cousson@ti.com, grant.likely@secretlab.ca,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v4 04/12] gpio/omap: remove saved_wakeup field from struct gpio_bank
Date: Mon, 9 Jul 2012 12:43:15 +0300	[thread overview]
Message-ID: <4FFAA7B3.6020009@ti.com> (raw)
In-Reply-To: <1331906760-5259-5-git-send-email-tarun.kanti@ti.com>

Hi,

Just bumped across this patch and have a query.

On 03/16/2012 04:05 PM, Tarun Kanti DebBarma wrote:
> There is no more need to have saved_wakeup because bank->context.wake_en
> already holds that value. So getting rid of read/write operation associated
> with this field.
> 
> Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>
> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
> Acked-by: Felipe Balbi <balbi@ti.com>
> ---
>  drivers/gpio/gpio-omap.c |   12 +++---------
>  1 files changed, 3 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
> index 3a4f151..3b91ade 100644
> --- a/drivers/gpio/gpio-omap.c
> +++ b/drivers/gpio/gpio-omap.c
> @@ -57,7 +57,6 @@ struct gpio_bank {
>  	u16 irq;
>  	int irq_base;
>  	struct irq_domain *domain;
> -	u32 saved_wakeup;
>  	u32 non_wakeup_gpios;
>  	u32 enabled_non_wakeup_gpios;
>  	struct gpio_regs context;
> @@ -777,7 +776,6 @@ static int omap_mpuio_suspend_noirq(struct device *dev)
>  	unsigned long		flags;
>  
>  	spin_lock_irqsave(&bank->lock, flags);
> -	bank->saved_wakeup = __raw_readl(mask_reg);
>  	__raw_writel(0xffff & ~bank->context.wake_en, mask_reg);

OK, here you are overwriting the mask_reg with the wakeup bitmask
without saving the mask_reg's original content.

>  	spin_unlock_irqrestore(&bank->lock, flags);
>  
> @@ -793,7 +791,7 @@ static int omap_mpuio_resume_noirq(struct device *dev)
>  	unsigned long		flags;
>  
>  	spin_lock_irqsave(&bank->lock, flags);
> -	__raw_writel(bank->saved_wakeup, mask_reg);
> +	__raw_writel(bank->context.wake_en, mask_reg);

Now you are restoring nothing but the same content that you stored
during suspend. This will cause the non-wakeup gpio interrupts to get
masked between a suspend/resume. So isn't this a bug?

Proper solution would be to save the mask_reg context into another
register than context.wake_en during suspend.

>  	spin_unlock_irqrestore(&bank->lock, flags);
>  
>  	return 0;


cheers,
-roger

WARNING: multiple messages have this Message-ID (diff)
From: rogerq@ti.com (Roger Quadros)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 04/12] gpio/omap: remove saved_wakeup field from struct gpio_bank
Date: Mon, 9 Jul 2012 12:43:15 +0300	[thread overview]
Message-ID: <4FFAA7B3.6020009@ti.com> (raw)
In-Reply-To: <1331906760-5259-5-git-send-email-tarun.kanti@ti.com>

Hi,

Just bumped across this patch and have a query.

On 03/16/2012 04:05 PM, Tarun Kanti DebBarma wrote:
> There is no more need to have saved_wakeup because bank->context.wake_en
> already holds that value. So getting rid of read/write operation associated
> with this field.
> 
> Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>
> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
> Acked-by: Felipe Balbi <balbi@ti.com>
> ---
>  drivers/gpio/gpio-omap.c |   12 +++---------
>  1 files changed, 3 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
> index 3a4f151..3b91ade 100644
> --- a/drivers/gpio/gpio-omap.c
> +++ b/drivers/gpio/gpio-omap.c
> @@ -57,7 +57,6 @@ struct gpio_bank {
>  	u16 irq;
>  	int irq_base;
>  	struct irq_domain *domain;
> -	u32 saved_wakeup;
>  	u32 non_wakeup_gpios;
>  	u32 enabled_non_wakeup_gpios;
>  	struct gpio_regs context;
> @@ -777,7 +776,6 @@ static int omap_mpuio_suspend_noirq(struct device *dev)
>  	unsigned long		flags;
>  
>  	spin_lock_irqsave(&bank->lock, flags);
> -	bank->saved_wakeup = __raw_readl(mask_reg);
>  	__raw_writel(0xffff & ~bank->context.wake_en, mask_reg);

OK, here you are overwriting the mask_reg with the wakeup bitmask
without saving the mask_reg's original content.

>  	spin_unlock_irqrestore(&bank->lock, flags);
>  
> @@ -793,7 +791,7 @@ static int omap_mpuio_resume_noirq(struct device *dev)
>  	unsigned long		flags;
>  
>  	spin_lock_irqsave(&bank->lock, flags);
> -	__raw_writel(bank->saved_wakeup, mask_reg);
> +	__raw_writel(bank->context.wake_en, mask_reg);

Now you are restoring nothing but the same content that you stored
during suspend. This will cause the non-wakeup gpio interrupts to get
masked between a suspend/resume. So isn't this a bug?

Proper solution would be to save the mask_reg context into another
register than context.wake_en during suspend.

>  	spin_unlock_irqrestore(&bank->lock, flags);
>  
>  	return 0;


cheers,
-roger

  reply	other threads:[~2012-07-09  9:43 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-16 14:05 [PATCH v4 00/12] gpio/omap: Some more driver cleanup and fixes Tarun Kanti DebBarma
2012-03-16 14:05 ` Tarun Kanti DebBarma
2012-03-16 14:05 ` [PATCH v4 01/12] gpio/omap: remove saved_fallingdetect, saved_risingdetect fields Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-03-16 14:05 ` [PATCH v4 02/12] gpio/omap: fix wakeup_en register update in _set_gpio_wakeup() Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-03-16 14:05 ` [PATCH v4 03/12] gpio/omap: remove suspend_wakeup field from struct gpio_bank Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-03-16 14:05 ` [PATCH v4 04/12] gpio/omap: remove saved_wakeup " Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-07-09  9:43   ` Roger Quadros [this message]
2012-07-09  9:43     ` Roger Quadros
2012-07-09 11:16     ` DebBarma, Tarun Kanti
2012-07-09 11:16       ` DebBarma, Tarun Kanti
2012-07-09 11:51       ` Roger Quadros
2012-07-09 11:51         ` Roger Quadros
2012-07-09 12:30         ` DebBarma, Tarun Kanti
2012-07-09 12:30           ` DebBarma, Tarun Kanti
2012-07-11 14:49           ` Roger Quadros
2012-07-11 14:49             ` Roger Quadros
2012-07-26  6:20       ` DebBarma, Tarun Kanti
2012-07-26  6:20         ` DebBarma, Tarun Kanti
2012-03-16 14:05 ` [PATCH v4 05/12] gpio/omap: get rid of retrigger variable in gpio_irq_handler Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-03-16 14:05 ` [PATCH v4 06/12] gpio/omap: fix trigger type to unsigned Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-03-16 14:05 ` [PATCH v4 07/12] gpio/omap: fix _set_gpio_irqenable implementation Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-03-16 14:05 ` [PATCH v4 08/12] gpio/omap: remove redundant decoding of gpio offset Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-03-16 14:05 ` [PATCH v4 09/12] gpio/omap: remove suspend/resume callbacks Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-03-16 14:05 ` [PATCH v4 10/12] gpio/omap: fix missing dataout context save in _set_gpio_dataout_reg Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-03-16 14:05 ` [PATCH v4 11/12] gpio/omap: fix incorrect context restore logic in omap_gpio_runtime_* Tarun Kanti DebBarma
2012-03-16 14:05   ` Tarun Kanti DebBarma
2012-03-16 14:06 ` [PATCH v4 12/12] gpio/omap: fix incorrect update to context.irqenable1 Tarun Kanti DebBarma
2012-03-16 14:06   ` Tarun Kanti DebBarma
2012-03-20  0:37 ` [PATCH v4 00/12] gpio/omap: Some more driver cleanup and fixes Kevin Hilman
2012-03-20  0:37   ` Kevin Hilman
2012-03-20  2:35   ` DebBarma, Tarun Kanti
2012-03-20  2:35     ` DebBarma, Tarun Kanti

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=4FFAA7B3.6020009@ti.com \
    --to=rogerq@ti.com \
    --cc=b-cousson@ti.com \
    --cc=grant.likely@secretlab.ca \
    --cc=khilman@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=tarun.kanti@ti.com \
    --cc=tony@atomide.com \
    /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.