linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "DebBarma, Tarun Kanti" <tarun.kanti@ti.com>
To: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>
Cc: linux-omap@vger.kernel.org, grant.likely@secretlab.ca,
	khilman@ti.com, tony@atomide.com, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, Charulatha V <charu@ti.com>
Subject: Re: [PATCH v9 11/25] gpio/omap: cleanup omap_gpio_mod_init function
Date: Tue, 24 Apr 2012 00:24:26 +0530	[thread overview]
Message-ID: <CAC83ZvK630=6B-k2TfV3XBg8w7ZosLVDNE4ezjDYnn=hcXA48Q@mail.gmail.com> (raw)
In-Reply-To: <13629551.hP3ZV1ajDo@vclass>

On Sat, Apr 21, 2012 at 7:33 PM, Janusz Krzysztofik
<jkrzyszt@tis.icnet.pl> wrote:
> On Thursday 02 of February 2012 23:00:37 Tarun Kanti DebBarma wrote:
>> With register offsets now defined for respective OMAP versions we can get rid
>> of cpu_class_* checks. This function now has common initialization code for
>> all OMAP versions...
>>
>> Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>
>> Signed-off-by: Charulatha V <charu@ti.com>
>> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
>> Acked-by: Tony Lindgren <tony@atomide.com>
>
> Sorry for being so late with my comment for chanes already present in
> mainline, but this patch breaks GPIO on Amstrad Delta at least, and I
> have neither enough spare time nor enough experience with non OMAP1
> machines to provide a solution myself.
Yes, I looked at the omap_gpio_mod_init() and OMAP1 configurations are
overwritten.
Also looks like there is issue in making distinction between omap15xx
and omap16xx.
I will post a patch and you can help me testing it in OMAP1 platform.
Thanks for pointing this out.
--
Tarun
>
>> ---
>>  arch/arm/mach-omap1/gpio16xx.c |   35 +++++++++++++++++-
>>  drivers/gpio/gpio-omap.c       |   77 ++++++++++++----------------------------
>>  2 files changed, 57 insertions(+), 55 deletions(-)
> ...
>> diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
>> index f39d9e4..a948351 100644
>> --- a/drivers/gpio/gpio-omap.c
>> +++ b/drivers/gpio/gpio-omap.c
> ...
>> @@ -898,62 +896,30 @@ static void __init omap_gpio_show_rev(struct gpio_bank *bank)
>>   */
>>  static struct lock_class_key gpio_lock_class;
>>
>> -/* TODO: Cleanup cpu_is_* checks */
>>  static void omap_gpio_mod_init(struct gpio_bank *bank)
>>  {
>> -     if (cpu_class_is_omap2()) {
>> -             if (cpu_is_omap44xx()) {
>> -                     __raw_writel(0xffffffff, bank->base +
>> -                                     OMAP4_GPIO_IRQSTATUSCLR0);
>> -                     __raw_writel(0x00000000, bank->base +
>> -                                      OMAP4_GPIO_DEBOUNCENABLE);
>> -                     /* Initialize interface clk ungated, module enabled */
>> -                     __raw_writel(0, bank->base + OMAP4_GPIO_CTRL);
>> -             } else if (cpu_is_omap34xx()) {
>> -                     __raw_writel(0x00000000, bank->base +
>> -                                     OMAP24XX_GPIO_IRQENABLE1);
>> -                     __raw_writel(0xffffffff, bank->base +
>> -                                     OMAP24XX_GPIO_IRQSTATUS1);
>> -                     __raw_writel(0x00000000, bank->base +
>> -                                     OMAP24XX_GPIO_DEBOUNCE_EN);
>> -
>> -                     /* Initialize interface clk ungated, module enabled */
>> -                     __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL);
>> -             }
>> -     } else if (cpu_class_is_omap1()) {
>> -             if (bank_is_mpuio(bank)) {
>> -                     __raw_writew(0xffff, bank->base +
>> -                             OMAP_MPUIO_GPIO_MASKIT / bank->stride);
>> -                     mpuio_init(bank);
>> -             }
>> -             if (cpu_is_omap15xx() && bank->method == METHOD_GPIO_1510) {
>> -                     __raw_writew(0xffff, bank->base
>> -                                             + OMAP1510_GPIO_INT_MASK);
>> -                     __raw_writew(0x0000, bank->base
>> -                                             + OMAP1510_GPIO_INT_STATUS);
>> -             }
>> -             if (cpu_is_omap16xx() && bank->method == METHOD_GPIO_1610) {
>> -                     __raw_writew(0x0000, bank->base
>> -                                             + OMAP1610_GPIO_IRQENABLE1);
>> -                     __raw_writew(0xffff, bank->base
>> -                                             + OMAP1610_GPIO_IRQSTATUS1);
>> -                     __raw_writew(0x0014, bank->base
>> -                                             + OMAP1610_GPIO_SYSCONFIG);
>> +     void __iomem *base = bank->base;
>> +     u32 l = 0xffffffff;
>>
>> -                     /*
>> -                      * Enable system clock for GPIO module.
>> -                      * The CAM_CLK_CTRL *is* really the right place.
>> -                      */
>> -                     omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04,
>> -                                             ULPD_CAM_CLK_CTRL);
>> -             }
>> -             if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX) {
>> -                     __raw_writel(0xffffffff, bank->base
>> -                                             + OMAP7XX_GPIO_INT_MASK);
>> -                     __raw_writel(0x00000000, bank->base
>> -                                             + OMAP7XX_GPIO_INT_STATUS);
>> -             }
>> +     if (bank->width == 16)
>> +             l = 0xffff;
>> +
>> +     if (bank_is_mpuio(bank)) {
>> +             __raw_writel(l, bank->base + bank->regs->irqenable);
>> +             return;
>>       }
>> +
>> +     _gpio_rmw(base, bank->regs->irqenable, l, bank->regs->irqenable_inv);
>> +     _gpio_rmw(base, bank->regs->irqstatus, l,
>> +                                     bank->regs->irqenable_inv == false);
>> +     _gpio_rmw(base, bank->regs->irqenable, l, bank->regs->debounce_en != 0);
>> +     _gpio_rmw(base, bank->regs->irqenable, l, bank->regs->ctrl != 0);
>
> bank->regs->irqenable trgister is manipulated 3 times in a row, each
> time based on different criteria. This breaks GPIO on Amstrad Delta at
> least, and generally looks wrong. I was only able to verify that
> commenting out the above two lines fixes the issue with Amstrad Delta for
> me.
>
>> +     if (bank->regs->debounce_en)
>> +             _gpio_rmw(base, bank->regs->debounce_en, 0, 1);
>
> This also looks suspicious, I guess the second line should rather be:
>
>                _gpio_rmw(base, bank->regs->debounce, 0, 1);
>
>> +
>> +      /* Initialize interface clk ungated, module enabled */
>> +     if (bank->regs->ctrl)
>> +             _gpio_rmw(base, bank->regs->ctrl, 0, 1);
>
> Is bank->regs->ctrl a flag, or a register offset? If the latter, is that
> offset guaranteed to never take a valid value of 0?
>
> Thanks,
> Janusz

  reply	other threads:[~2012-04-23 18:59 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-02 17:30 [PATCH v9 00/25] gpio/omap: driver cleanup and fixes Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 01/25] gpio/omap: remove dependency on gpio_bank_count Tarun Kanti DebBarma
2012-02-02 18:41   ` Felipe Balbi
2012-02-02 19:16     ` Grant Likely
2012-02-02 19:45       ` Felipe Balbi
2012-02-02 20:48         ` Cousson, Benoit
2012-02-02 21:49           ` Felipe Balbi
2012-02-02 21:53             ` Felipe Balbi
2012-02-02 22:00               ` Cousson, Benoit
2012-02-02 22:07                 ` Felipe Balbi
2012-02-03 17:50                   ` Kevin Hilman
2012-02-04 16:08                     ` Felipe Balbi
2012-02-05  7:07                       ` Varadarajan, Charulatha
2012-02-05  9:08                         ` Felipe Balbi
2012-02-05  9:16                           ` Shilimkar, Santosh
2012-02-05 11:35                             ` Felipe Balbi
2012-02-05 12:35                               ` Shilimkar, Santosh
2012-02-06  6:40                                 ` Felipe Balbi
2012-02-06  5:18                           ` Varadarajan, Charulatha
2012-02-02 17:30 ` [PATCH v9 02/25] gpio/omap: use flag to identify wakeup domain Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 03/25] gpio/omap: make gpio_context part of gpio_bank structure Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 04/25] gpio/omap: handle save/restore context in GPIO driver Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 05/25] gpio/omap: make non-wakeup GPIO part of pdata Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 06/25] gpio/omap: avoid cpu checks during module ena/disable Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 07/25] gpio/omap: further cleanup using wkup_en register Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 08/25] gpio/omap: use level/edge detect reg offsets Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 09/25] gpio/omap: remove hardcoded offsets in context save/restore Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 10/25] gpio/omap: cleanup set_gpio_triggering function Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 11/25] gpio/omap: cleanup omap_gpio_mod_init function Tarun Kanti DebBarma
2012-04-21 14:03   ` Janusz Krzysztofik
2012-04-23 18:54     ` DebBarma, Tarun Kanti [this message]
2012-04-24 15:36       ` DebBarma, Tarun Kanti
2012-04-24 16:04         ` Tony Lindgren
2012-04-25  4:34           ` DebBarma, Tarun Kanti
2012-04-25  6:39             ` Shilimkar, Santosh
2012-04-25 12:54               ` DebBarma, Tarun Kanti
2012-04-25 13:45                 ` Russell King - ARM Linux
2012-04-26  5:13                   ` DebBarma, Tarun Kanti
2012-04-27 21:31                     ` Kevin Hilman
2012-04-24 22:37         ` Janusz Krzysztofik
2012-02-02 17:30 ` [PATCH v9 12/25] gpio/omap: use pinctrl offset instead of macro Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 13/25] gpio/omap: remove unnecessary bit-masking for read access Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 14/25] gpio/omap: remove bank->method & METHOD_* macros Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 15/25] gpio/omap: fix bankwidth for OMAP7xx MPUIO Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 16/25] gpio/omap: use pm-runtime framework Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 17/25] gpio/omap: optimize suspend and resume functions Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 18/25] gpio/omap: cleanup prepare_for_idle and resume_after_idle Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 19/25] gpio/omap: fix debounce clock handling Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 20/25] gpio/omap: fix incorrect access of debounce module Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 21/25] gpio/omap: remove omap_gpio_save_context overhead Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 22/25] gpio/omap: save and restore debounce registers Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 23/25] gpio/omap: enable irq at the end of all configuration in restore Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 24/25] gpio/omap: restore OE only after setting the output level Tarun Kanti DebBarma
2012-02-02 17:30 ` [PATCH v9 25/25] gpio/omap: handle set_dataout reg capable IP on restore Tarun Kanti DebBarma
2012-02-02 19:42 ` [PATCH v9 00/25] gpio/omap: driver cleanup and fixes Grant Likely
2012-02-03 17:51   ` Kevin Hilman
2012-02-03 21:16     ` Grant Likely
2012-02-03  9:21 ` Hebbar, Gururaja
     [not found]   ` <CAC83ZvLoYVofH9oKXw92i-=DbP2i3NfZjLGSJwk1j0JvXcFZVQ@mail.gmail.com>
2012-02-03 12:09     ` Hebbar, Gururaja
2012-02-03 21:01 ` Kevin Hilman
2012-02-06 11:53   ` DebBarma, Tarun Kanti
2012-02-10 19:24 ` Tony Lindgren
2012-02-10 19:55   ` Kevin Hilman
2012-02-13  5:33     ` 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='CAC83ZvK630=6B-k2TfV3XBg8w7ZosLVDNE4ezjDYnn=hcXA48Q@mail.gmail.com' \
    --to=tarun.kanti@ti.com \
    --cc=charu@ti.com \
    --cc=grant.likely@secretlab.ca \
    --cc=jkrzyszt@tis.icnet.pl \
    --cc=khilman@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --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 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).