* 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: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: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: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).