All of lore.kernel.org
 help / color / mirror / Atom feed
From: "DebBarma, Tarun Kanti" <tarun.kanti@ti.com>
To: Roger Quadros <rogerq@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: Thu, 26 Jul 2012 11:50:21 +0530	[thread overview]
Message-ID: <CAC83ZvJ7DW-u+Q_DJB8TRX9=F+ucESBNRQ0T8qkFdt0W4c=o4A@mail.gmail.com> (raw)
In-Reply-To: <CAC83ZvLo3X_-EarrMFNM0B196FaMLrP5SNh5OA7aE7wMZ9VJUQ@mail.gmail.com>

Hi Roger,

On Mon, Jul 9, 2012 at 4:46 PM, DebBarma, Tarun Kanti
<tarun.kanti@ti.com> wrote:
> Hi Roger,
>
> On Mon, Jul 9, 2012 at 3:13 PM, Roger Quadros <rogerq@ti.com> wrote:
>> 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.
> This is based upon understanding that set_gpio_trigger() is the common
> function where update of wake_en register takes place. Unless, mask_reg
> in this case refers to something else, effectively we would be saving the
> same value to saved_wakeup what is already present in wake_en.
> I will verify this specific to this function.
I had a look at this change and it appears for OMAP1 we have to explicitly
save the register here. This is because set_gpio_trigger() refers to wake_en
register for OMAP2+ platforms, whereas here on OMAP1 it is referring to
irqenable register. In other words we need to have:
bank->context.wake_en = __raw_readl(mask_reg);
--
Tarun

>
>>
>>>       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?
> That's right, the same value is restored back which was last updated in
> set_gpio_trigger() that got stored in wake_en register. Let me know if
> I am missing your points here.
>
>>
>> Proper solution would be to save the mask_reg context into another
>> register than context.wake_en during suspend.
> As I said, this would make sense if mask_reg is referring to different
> register than what is used in set_gpio_trigger(). I will have a look.
>
> BTW, did you observe anything unusual during some testing?
>
> Thanks.
> --
> Tarun
>>
>>>       spin_unlock_irqrestore(&bank->lock, flags);
>>>
>>>       return 0;
>>
>>
>> cheers,
>> -roger

WARNING: multiple messages have this Message-ID (diff)
From: tarun.kanti@ti.com (DebBarma, Tarun Kanti)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 04/12] gpio/omap: remove saved_wakeup field from struct gpio_bank
Date: Thu, 26 Jul 2012 11:50:21 +0530	[thread overview]
Message-ID: <CAC83ZvJ7DW-u+Q_DJB8TRX9=F+ucESBNRQ0T8qkFdt0W4c=o4A@mail.gmail.com> (raw)
In-Reply-To: <CAC83ZvLo3X_-EarrMFNM0B196FaMLrP5SNh5OA7aE7wMZ9VJUQ@mail.gmail.com>

Hi Roger,

On Mon, Jul 9, 2012 at 4:46 PM, DebBarma, Tarun Kanti
<tarun.kanti@ti.com> wrote:
> Hi Roger,
>
> On Mon, Jul 9, 2012 at 3:13 PM, Roger Quadros <rogerq@ti.com> wrote:
>> 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.
> This is based upon understanding that set_gpio_trigger() is the common
> function where update of wake_en register takes place. Unless, mask_reg
> in this case refers to something else, effectively we would be saving the
> same value to saved_wakeup what is already present in wake_en.
> I will verify this specific to this function.
I had a look at this change and it appears for OMAP1 we have to explicitly
save the register here. This is because set_gpio_trigger() refers to wake_en
register for OMAP2+ platforms, whereas here on OMAP1 it is referring to
irqenable register. In other words we need to have:
bank->context.wake_en = __raw_readl(mask_reg);
--
Tarun

>
>>
>>>       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?
> That's right, the same value is restored back which was last updated in
> set_gpio_trigger() that got stored in wake_en register. Let me know if
> I am missing your points here.
>
>>
>> Proper solution would be to save the mask_reg context into another
>> register than context.wake_en during suspend.
> As I said, this would make sense if mask_reg is referring to different
> register than what is used in set_gpio_trigger(). I will have a look.
>
> BTW, did you observe anything unusual during some testing?
>
> Thanks.
> --
> Tarun
>>
>>>       spin_unlock_irqrestore(&bank->lock, flags);
>>>
>>>       return 0;
>>
>>
>> cheers,
>> -roger

  parent reply	other threads:[~2012-07-26  6:20 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
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 [this message]
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='CAC83ZvJ7DW-u+Q_DJB8TRX9=F+ucESBNRQ0T8qkFdt0W4c=o4A@mail.gmail.com' \
    --to=tarun.kanti@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=rogerq@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.