* Suspicious debounce handling code in pintctrl-baytrail
@ 2017-01-26 13:20 Jean Delvare
2017-01-26 13:43 ` Mika Westerberg
0 siblings, 1 reply; 8+ messages in thread
From: Jean Delvare @ 2017-01-26 13:20 UTC (permalink / raw)
To: Cristina Ciocan
Cc: Mika Westerberg, Linus Walleij, Heikki Krogerus, linux-gpio
Hi Cristina,
In this commit:
commit 658b476c742fe379e7020309fd590a27b457a4c1
Date: Fri Apr 1 14:00:07 2016 +0300
pinctrl: baytrail: Add debounce configuration
you added support for getting and setting debounce configuration for
the Baytrail pins. Now gcc complains about the following:
CC [M] drivers/pinctrl/intel/pinctrl-baytrail.o
drivers/pinctrl/intel/pinctrl-baytrail.c: In function ‘byt_pin_config_set’:
drivers/pinctrl/intel/pinctrl-baytrail.c:1181:17: warning: variable ‘debounce’ set but not used [-Wunused-but-set-variable]
u32 conf, val, debounce;
^
I looked at the code, and it indeed looks wrong. You are reading the
BYT_DEBOUNCE_REG register, clearing the debounce time bits from it, and
then writing the debounce time bits to the *BYT_CONF0_REG* register.
This is certainly corrupting the chip configuration, as the
configuration register bits 2-0 have a completely different meaning
(mux configuration.)
Did you ever test that code?
Additionally, I suspect that in the "get" path, the following is wrong:
case PIN_CONFIG_INPUT_DEBOUNCE:
if (!(conf & BYT_DEBOUNCE_EN))
return -EINVAL;
I'm not familiar with the pinctrl interface but my understanding of
the PIN_CONFIG_INPUT_DEBOUNCE documentation is that the driver must
return 0 if debouncing is disabled. The "set" path would also need to
handle this case properly (setting BYT_DEBOUNCE_EN if debounce timing is
non-zero, clearing it if value is zero.)
--
Jean Delvare
SUSE L3 Support
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Suspicious debounce handling code in pintctrl-baytrail
2017-01-26 13:20 Suspicious debounce handling code in pintctrl-baytrail Jean Delvare
@ 2017-01-26 13:43 ` Mika Westerberg
2017-01-26 14:00 ` Jean Delvare
0 siblings, 1 reply; 8+ messages in thread
From: Mika Westerberg @ 2017-01-26 13:43 UTC (permalink / raw)
To: Jean Delvare
Cc: Cristina Ciocan, Linus Walleij, Heikki Krogerus, linux-gpio,
Andy Shevchenko
On Thu, Jan 26, 2017 at 02:20:20PM +0100, Jean Delvare wrote:
> Hi Cristina,
>
> In this commit:
>
> commit 658b476c742fe379e7020309fd590a27b457a4c1
> Date: Fri Apr 1 14:00:07 2016 +0300
>
> pinctrl: baytrail: Add debounce configuration
>
> you added support for getting and setting debounce configuration for
> the Baytrail pins. Now gcc complains about the following:
>
> CC [M] drivers/pinctrl/intel/pinctrl-baytrail.o
> drivers/pinctrl/intel/pinctrl-baytrail.c: In function ‘byt_pin_config_set’:
> drivers/pinctrl/intel/pinctrl-baytrail.c:1181:17: warning: variable ‘debounce’ set but not used [-Wunused-but-set-variable]
> u32 conf, val, debounce;
> ^
>
> I looked at the code, and it indeed looks wrong. You are reading the
> BYT_DEBOUNCE_REG register, clearing the debounce time bits from it, and
> then writing the debounce time bits to the *BYT_CONF0_REG* register.
> This is certainly corrupting the chip configuration, as the
> configuration register bits 2-0 have a completely different meaning
> (mux configuration.)
Yes, you are right.
This is fixed by following commit from Andy:
https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-pinctrl.git/commit/?h=fixes&id=04ff5a095d662e0879f0eb04b9247e092210aeff
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Suspicious debounce handling code in pintctrl-baytrail
2017-01-26 13:43 ` Mika Westerberg
@ 2017-01-26 14:00 ` Jean Delvare
2017-01-26 14:08 ` Mika Westerberg
2017-01-26 14:13 ` Shevchenko, Andriy
0 siblings, 2 replies; 8+ messages in thread
From: Jean Delvare @ 2017-01-26 14:00 UTC (permalink / raw)
To: Mika Westerberg
Cc: Cristina Ciocan, Linus Walleij, Heikki Krogerus, linux-gpio,
Andy Shevchenko
Hi Mika, hello Andy,
On Thu, 26 Jan 2017 15:43:41 +0200, Mika Westerberg wrote:
> On Thu, Jan 26, 2017 at 02:20:20PM +0100, Jean Delvare wrote:
> > Hi Cristina,
> >
> > In this commit:
> >
> > commit 658b476c742fe379e7020309fd590a27b457a4c1
> > Date: Fri Apr 1 14:00:07 2016 +0300
> >
> > pinctrl: baytrail: Add debounce configuration
> >
> > you added support for getting and setting debounce configuration for
> > the Baytrail pins. Now gcc complains about the following:
> >
> > CC [M] drivers/pinctrl/intel/pinctrl-baytrail.o
> > drivers/pinctrl/intel/pinctrl-baytrail.c: In function ‘byt_pin_config_set’:
> > drivers/pinctrl/intel/pinctrl-baytrail.c:1181:17: warning: variable ‘debounce’ set but not used [-Wunused-but-set-variable]
> > u32 conf, val, debounce;
> > ^
> >
> > I looked at the code, and it indeed looks wrong. You are reading the
> > BYT_DEBOUNCE_REG register, clearing the debounce time bits from it, and
> > then writing the debounce time bits to the *BYT_CONF0_REG* register.
> > This is certainly corrupting the chip configuration, as the
> > configuration register bits 2-0 have a completely different meaning
> > (mux configuration.)
>
> Yes, you are right.
>
> This is fixed by following commit from Andy:
>
> https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-pinctrl.git/commit/?h=fixes&id=04ff5a095d662e0879f0eb04b9247e092210aeff
Thanks for the pointer, I wasn't aware of that patch. Looks overall
good, but:
+ case 0:
+ conf &= BYT_DEBOUNCE_EN;
+ break;
looks suspicious to me. I think ~BYT_DEBOUNCE_EN was intended?
Furthermore I would expect conf |= BYT_DEBOUNCE_EN in the other cases,
otherwise disabling debounce once will prevent you from enabling it
forever.
Also Andy's patch doesn't seem to address my second point:
> Additionally, I suspect that in the "get" path, the following is wrong:
>
> case PIN_CONFIG_INPUT_DEBOUNCE:
> if (!(conf & BYT_DEBOUNCE_EN))
> return -EINVAL;
>
> I'm not familiar with the pinctrl interface but my understanding of
> the PIN_CONFIG_INPUT_DEBOUNCE documentation is that the driver must
> return 0 if debouncing is disabled.
?
Thanks,
--
Jean Delvare
SUSE L3 Support
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Suspicious debounce handling code in pintctrl-baytrail
2017-01-26 14:00 ` Jean Delvare
@ 2017-01-26 14:08 ` Mika Westerberg
2017-01-26 14:24 ` Jean Delvare
2017-01-26 14:13 ` Shevchenko, Andriy
1 sibling, 1 reply; 8+ messages in thread
From: Mika Westerberg @ 2017-01-26 14:08 UTC (permalink / raw)
To: Jean Delvare
Cc: Cristina Ciocan, Linus Walleij, Heikki Krogerus, linux-gpio,
Andy Shevchenko
On Thu, Jan 26, 2017 at 03:00:46PM +0100, Jean Delvare wrote:
> Hi Mika, hello Andy,
>
> On Thu, 26 Jan 2017 15:43:41 +0200, Mika Westerberg wrote:
> > On Thu, Jan 26, 2017 at 02:20:20PM +0100, Jean Delvare wrote:
> > > Hi Cristina,
> > >
> > > In this commit:
> > >
> > > commit 658b476c742fe379e7020309fd590a27b457a4c1
> > > Date: Fri Apr 1 14:00:07 2016 +0300
> > >
> > > pinctrl: baytrail: Add debounce configuration
> > >
> > > you added support for getting and setting debounce configuration for
> > > the Baytrail pins. Now gcc complains about the following:
> > >
> > > CC [M] drivers/pinctrl/intel/pinctrl-baytrail.o
> > > drivers/pinctrl/intel/pinctrl-baytrail.c: In function ‘byt_pin_config_set’:
> > > drivers/pinctrl/intel/pinctrl-baytrail.c:1181:17: warning: variable ‘debounce’ set but not used [-Wunused-but-set-variable]
> > > u32 conf, val, debounce;
> > > ^
> > >
> > > I looked at the code, and it indeed looks wrong. You are reading the
> > > BYT_DEBOUNCE_REG register, clearing the debounce time bits from it, and
> > > then writing the debounce time bits to the *BYT_CONF0_REG* register.
> > > This is certainly corrupting the chip configuration, as the
> > > configuration register bits 2-0 have a completely different meaning
> > > (mux configuration.)
> >
> > Yes, you are right.
> >
> > This is fixed by following commit from Andy:
> >
> > https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-pinctrl.git/commit/?h=fixes&id=04ff5a095d662e0879f0eb04b9247e092210aeff
>
> Thanks for the pointer, I wasn't aware of that patch. Looks overall
> good, but:
>
> + case 0:
> + conf &= BYT_DEBOUNCE_EN;
> + break;
>
> looks suspicious to me. I think ~BYT_DEBOUNCE_EN was intended?
Good catch! Yes, definitely it should be ~BYT_DEBOUNCE_EN.
> Furthermore I would expect conf |= BYT_DEBOUNCE_EN in the other cases,
> otherwise disabling debounce once will prevent you from enabling it
> forever.
>
> Also Andy's patch doesn't seem to address my second point:
>
> > Additionally, I suspect that in the "get" path, the following is wrong:
> >
> > case PIN_CONFIG_INPUT_DEBOUNCE:
> > if (!(conf & BYT_DEBOUNCE_EN))
> > return -EINVAL;
> >
> > I'm not familiar with the pinctrl interface but my understanding of
> > the PIN_CONFIG_INPUT_DEBOUNCE documentation is that the driver must
> > return 0 if debouncing is disabled.
Indeed, I also agree it should return 0 here.
We will fix this, thanks!
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Suspicious debounce handling code in pintctrl-baytrail
2017-01-26 14:00 ` Jean Delvare
2017-01-26 14:08 ` Mika Westerberg
@ 2017-01-26 14:13 ` Shevchenko, Andriy
2017-01-26 14:15 ` Shevchenko, Andriy
1 sibling, 1 reply; 8+ messages in thread
From: Shevchenko, Andriy @ 2017-01-26 14:13 UTC (permalink / raw)
To: mika.westerberg@linux.intel.com, jdelvare@suse.de
Cc: Ciocan, Cristina, linux-gpio@vger.kernel.org,
linus.walleij@linaro.org, heikki.krogerus@linux.intel.com
On Thu, 2017-01-26 at 15:00 +0100, Jean Delvare wrote:
> Hi Mika, hello Andy,
>
> On Thu, 26 Jan 2017 15:43:41 +0200, Mika Westerberg wrote:
> > On Thu, Jan 26, 2017 at 02:20:20PM +0100, Jean Delvare wrote:
> Thanks for the pointer, I wasn't aware of that patch. Looks overall
> good, but:
>
> + case 0:
> + conf &= BYT_DEBOUNCE_EN;
> + break;
>
> looks suspicious to me. I think ~BYT_DEBOUNCE_EN was intended?
Yes!
> Furthermore I would expect conf |= BYT_DEBOUNCE_EN in the other cases,
> otherwise disabling debounce once will prevent you from enabling it
> forever.
Yes.
> Also Andy's patch doesn't seem to address my second point:
>
> > Additionally, I suspect that in the "get" path, the following is
> > wrong:
> >
> > case PIN_CONFIG_INPUT_DEBOUNCE:
> > if (!(conf & BYT_DEBOUNCE_EN))
> > return -EINVAL;
> >
> > I'm not familiar with the pinctrl interface but my understanding of
> > the PIN_CONFIG_INPUT_DEBOUNCE documentation is that the driver must
> > return 0 if debouncing is disabled.
>
> ?
I need to check this.
I will address your comments. Thanks for report!
--
Andy Shevchenko <andriy.shevchenko@intel.com>
Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Suspicious debounce handling code in pintctrl-baytrail
2017-01-26 14:13 ` Shevchenko, Andriy
@ 2017-01-26 14:15 ` Shevchenko, Andriy
2017-01-26 14:50 ` mika.westerberg
0 siblings, 1 reply; 8+ messages in thread
From: Shevchenko, Andriy @ 2017-01-26 14:15 UTC (permalink / raw)
To: mika.westerberg@linux.intel.com, jdelvare@suse.de
Cc: Ciocan, Cristina, linux-gpio@vger.kernel.org,
linus.walleij@linaro.org, heikki.krogerus@linux.intel.com
On Thu, 2017-01-26 at 16:13 +0200, Andy Shevchenko wrote:
> On Thu, 2017-01-26 at 15:00 +0100, Jean Delvare wrote:
> > Hi Mika, hello Andy,
> >
> > Additionally, I suspect that in the "get" path, the following is
> > > wrong:
> > >
> > > case PIN_CONFIG_INPUT_DEBOUNCE:
> > > if (!(conf & BYT_DEBOUNCE_EN))
> > > return -EINVAL;
> > >
> > > I'm not familiar with the pinctrl interface but my understanding
> > > of
> > > the PIN_CONFIG_INPUT_DEBOUNCE documentation is that the driver
> > > must
> > > return 0 if debouncing is disabled.
> >
> > ?
No, this is correct.
"...if it is available but disabled it should return -EINVAL"
--
Andy Shevchenko <andriy.shevchenko@intel.com>
Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Suspicious debounce handling code in pintctrl-baytrail
2017-01-26 14:08 ` Mika Westerberg
@ 2017-01-26 14:24 ` Jean Delvare
0 siblings, 0 replies; 8+ messages in thread
From: Jean Delvare @ 2017-01-26 14:24 UTC (permalink / raw)
To: Mika Westerberg
Cc: Cristina Ciocan, Linus Walleij, Heikki Krogerus, linux-gpio,
Andy Shevchenko
On Thu, 26 Jan 2017 16:08:11 +0200, Mika Westerberg wrote:
> We will fix this, thanks!
Great, thanks.
BTW I think that Andy's patch which fixes a bug that "even might break
something physically" would deserve to be Cc'd to stable@ (once the fix
itself is fixed, that is.)
--
Jean Delvare
SUSE L3 Support
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Suspicious debounce handling code in pintctrl-baytrail
2017-01-26 14:15 ` Shevchenko, Andriy
@ 2017-01-26 14:50 ` mika.westerberg
0 siblings, 0 replies; 8+ messages in thread
From: mika.westerberg @ 2017-01-26 14:50 UTC (permalink / raw)
To: Shevchenko, Andriy
Cc: jdelvare@suse.de, Ciocan, Cristina, linux-gpio@vger.kernel.org,
linus.walleij@linaro.org, heikki.krogerus@linux.intel.com
On Thu, Jan 26, 2017 at 02:15:21PM +0000, Shevchenko, Andriy wrote:
> On Thu, 2017-01-26 at 16:13 +0200, Andy Shevchenko wrote:
> > On Thu, 2017-01-26 at 15:00 +0100, Jean Delvare wrote:
> > > Hi Mika, hello Andy,
> > >
>
> > > Additionally, I suspect that in the "get" path, the following is
> > > > wrong:
> > > >
> > > > case PIN_CONFIG_INPUT_DEBOUNCE:
> > > > if (!(conf & BYT_DEBOUNCE_EN))
> > > > return -EINVAL;
> > > >
> > > > I'm not familiar with the pinctrl interface but my understanding
> > > > of
> > > > the PIN_CONFIG_INPUT_DEBOUNCE documentation is that the driver
> > > > must
> > > > return 0 if debouncing is disabled.
> > >
> > > ?
>
> No, this is correct.
> "...if it is available but disabled it should return -EINVAL"
OK, thanks Andy for checking it up.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-01-26 14:55 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-01-26 13:20 Suspicious debounce handling code in pintctrl-baytrail Jean Delvare
2017-01-26 13:43 ` Mika Westerberg
2017-01-26 14:00 ` Jean Delvare
2017-01-26 14:08 ` Mika Westerberg
2017-01-26 14:24 ` Jean Delvare
2017-01-26 14:13 ` Shevchenko, Andriy
2017-01-26 14:15 ` Shevchenko, Andriy
2017-01-26 14:50 ` mika.westerberg
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).