All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Thompson <daniel.thompson@linaro.org>
To: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Pramod Gurav <pramod.gurav@smartplayin.com>,
	linux-kernel@vger.kernel.org
Cc: Maxime Coquelin <maxime.coquelin@st.com>,
	Patrice Chotard <patrice.chotard@st.com>,
	Linus Walleij <linus.walleij@linaro.org>
Subject: Re: [PATCH] pinctrl: st: Fix Sparse error
Date: Mon, 29 Sep 2014 16:09:57 +0100	[thread overview]
Message-ID: <54297645.7030208@linaro.org> (raw)
In-Reply-To: <542970CF.6040405@linaro.org>

On 29/09/14 15:46, Srinivas Kandagatla wrote:
> On 29/09/14 14:48, Pramod Gurav wrote:
>> This change fixes below sparse error,
>> drivers/pinctrl/pinctrl-st.c:1515:31: error: incompatible types for
>> operation (>)
>> drivers/pinctrl/pinctrl-st.c:1515:31:    left side has type void
>> [noderef] <asn:2>*irqmux_base
>> drivers/pinctrl/pinctrl-st.c:1515:31:    right side has type int
>>
>> The fix is done by removing a check on info->irqmux_base as
>> info->irqmux_base has already been checked  for error when allocating it.
>> Hence there is no need to redo the check.
>>
>> Cc: Maxime Coquelin <maxime.coquelin@st.com>
>> Cc: Patrice Chotard <patrice.chotard@st.com>
>> CC: Linus Walleij <linus.walleij@linaro.org>
>> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>> Signed-off-by: Pramod Gurav <pramod.gurav@smartplayin.com>
>> ---
>>   drivers/pinctrl/pinctrl-st.c |    2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
>> index 5475374..ddeaeda 100644
>> --- a/drivers/pinctrl/pinctrl-st.c
>> +++ b/drivers/pinctrl/pinctrl-st.c
>> @@ -1512,7 +1512,7 @@ static int st_gpiolib_register_bank(struct
>> st_pinctrl *info,
>>                            gpio_irq, st_gpio_irq_handler);
>>       }
>>
>> -    if (info->irqmux_base > 0 || gpio_irq > 0) {
>> +    if (gpio_irq > 0) {
>>           err = gpiochip_irqchip_add(&bank->gpio_chip, &st_gpio_irqchip,
>>                          0, handle_simple_irq,
>>                          IRQ_TYPE_LEVEL_LOW);
> 
> This is not the correct fix. Please see why irqmux_base and gpio_irq are
> used in the driver.
> You are breaking the logic here...
> 
> please read the below comment from the code.
> 
>     /**
>      * GPIO bank can have one of the two possible types of
>      * interrupt-wirings.
>      *
>      * First type is via irqmux, single interrupt is used by multiple
>      * gpio banks. This reduces number of overall interrupts numbers
>      * required. All these banks belong to a single pincontroller.
>      *          _________
>      *         |       |----> [gpio-bank (n)    ]
>      *         |       |----> [gpio-bank (n + 1)]
>      *    [irqN]-- | irq-mux |----> [gpio-bank (n + 2)]
>      *         |       |----> [gpio-bank (...  )]
>      *         |_________|----> [gpio-bank (n + 7)]
>      *
>      * Second type has a dedicated interrupt per each gpio bank.
>      *
>      *    [irqN]----> [gpio-bank (n)]
>      */
> 
> 
> so irqmux_base is first type and gpio_irq is second type.
> if you remove check for irqmux_base here you would end up NOT adding
> irqchip the gpiochip in first type so you break the existing logic here.
> 
> 
> I think the correct fix is:
> 
> diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
> index 5475374..4060c30 100644
> --- a/drivers/pinctrl/pinctrl-st.c
> +++ b/drivers/pinctrl/pinctrl-st.c
> @@ -1512,7 +1512,7 @@ static int st_gpiolib_register_bank(struct
> st_pinctrl *info,
>                                              gpio_irq,
> st_gpio_irq_handler);
>         }
> 
> -       if (info->irqmux_base > 0 || gpio_irq > 0) {
> +       if (!IS_ERR(info->irqmux_base) || gpio_irq > 0) {
>                 err = gpiochip_irqchip_add(&bank->gpio_chip,
> &st_gpio_irqchip,
>                                            0, handle_simple_irq,
>                                            IRQ_TYPE_LEVEL_LOW);

IS_ERR() should be irrelavent because the allocation code bombs out on
error. Shouldn't this just be a NULL pointer check?

  if(info->irqmux_base || gpio_irq > 0)


Daniel.


      parent reply	other threads:[~2014-09-29 15:09 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-29 13:48 [PATCH] pinctrl: st: Fix Sparse error Pramod Gurav
2014-09-29 13:47 ` Patrice Chotard
2014-09-29 14:46 ` Srinivas Kandagatla
2014-09-29 15:05   ` Pramod Gurav
2014-09-29 15:38     ` Srinivas Kandagatla
2014-09-29 16:10       ` Pramod Gurav
2014-09-29 15:09   ` Daniel Thompson [this message]

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=54297645.7030208@linaro.org \
    --to=daniel.thompson@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maxime.coquelin@st.com \
    --cc=patrice.chotard@st.com \
    --cc=pramod.gurav@smartplayin.com \
    --cc=srinivas.kandagatla@linaro.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.