linux-uconsole/drivers/pinctrl
Mika Westerberg a98e483ca7 pinctrl: cherryview: Prevent possible interrupt storm on resume
commit d2cdf5dc58 upstream.

When the system is suspended to S3 the BIOS might re-initialize certain
GPIO pins back to their original state or it may re-program interrupt mask
of others. For example Acer TravelMate B116-M had BIOS bug where certain
GPIO pin (MF_ISH_GPIO_5) was programmed to trigger on high level, and the
pin state was high once the BIOS gave control to the OS on resume.

This triggers lots of messages like:

 irq 117, desc: ffff88017a61e600, depth: 1, count: 0, unhandled: 0
 ->handle_irq():  ffffffff8109b613, handle_bad_irq+0x0/0x1e0
 ->irq_data.chip(): ffffffffa0020180, chv_pinctrl_exit+0x2d84/0x12 [pinctrl_cherryview]
 ->action():           (null)
    IRQ_NOPROBE set

We reset the mask back to known state in chv_pinctrl_resume() but that is
called only after device interrupts have already been enabled.

Now, this particular issue was fixed by upgrading the BIOS to the latest
(v1.23) but not everybody upgrades their BIOSes so we fix it up in the
driver as well.

Prevent the possible interrupt storm by moving suspend and resume hooks to
be called at _noirq time instead. Since device interrupts are still
disabled we can restore the mask back to known state before interrupt storm
happens.

Reported-by: Christian Steiner <christian.steiner@outlook.de>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-11-18 10:48:34 +01:00
..
bcm pinctrl-bcm2835: Fix cut-and-paste error in "pull" parsing 2016-04-12 09:08:37 -07:00
berlin pinctrl: berlin: fix BG2CD field widths 2015-10-16 16:42:48 +02:00
freescale pinctrl: imx: Do not treat a PIN without MUX register as an error 2016-08-10 11:49:27 +02:00
intel pinctrl: cherryview: Prevent possible interrupt storm on resume 2016-11-18 10:48:34 +01:00
mediatek pinctrl: mediatek: fix dual-edge code defect 2016-06-24 10:18:20 -07:00
meson Here is the bulk of pin control changes for the v4.2 series: 2015-06-24 19:21:02 -07:00
mvebu Here is the bulk of pin control changes for the v4.2 series: 2015-06-24 19:21:02 -07:00
nomadik pinctrl: nomadik: fix pull debug print inversion 2016-04-20 15:42:08 +09:00
qcom pinctrl: fix qcom ssbi drivers for 64-bit compilation 2015-11-17 15:34:06 +01:00
samsung pinctrl: exynos5440: Use off-stack memory for pinctrl_gpio_range 2016-06-07 18:14:35 -07:00
sh-pfc pinctrl: sh-pfc: only use dummy states for non-DT platforms 2016-04-20 15:42:08 +09:00
sirf pinctrl: atlas7: support atlas7 step B changes 2015-10-16 21:56:07 +02:00
spear genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
sunxi pinctrl: sunxi: fix uart1 CTS/RTS pins at PG on A23/A33 2016-09-24 10:07:41 +02:00
uniphier pinctrl: uniphier: fix .pin_dbg_show() callback 2016-10-07 15:23:41 +02:00
vt8500 pinctrl: replace trivial implementations of gpio_chip request/free 2015-10-16 22:20:21 +02:00
core.c drivers/pinctrl: Add the concept of an "init" state 2015-10-27 11:24:23 +01:00
core.h pinctrl: Don't just pretend to protect pinctrl_maps, do it for real 2015-05-06 16:24:28 +02:00
devicetree.c pinctrl: simplify of_pinctrl_get() 2015-07-16 09:39:03 +02:00
devicetree.h
Kconfig pinctrl: remove redundant if conditional from Kconfig 2015-11-17 11:47:47 +01:00
Makefile pinctrl: uniphier: guard uniphier directory with CONFIG_PINCTRL_UNIPHIER 2015-10-31 22:13:07 +01:00
pinconf-generic.c pinctrl: pinconf-generic: add "input-schmitt" DT property 2015-10-02 15:09:11 -07:00
pinconf.c pinctrl: pinconf: remove needless loop 2015-10-31 22:13:07 +01:00
pinconf.h pinctrl: pinconf-generic: Allow driver to specify DT params 2015-01-11 22:32:19 +01:00
pinctrl-adi2-bf54x.c
pinctrl-adi2-bf60x.c added tabs instead of spaces 2015-07-16 09:39:01 +02:00
pinctrl-adi2.c pinctrl: replace trivial implementations of gpio_chip request/free 2015-10-16 22:20:21 +02:00
pinctrl-adi2.h
pinctrl-amd.c pinctrl/amd: Remove the default de-bounce time 2016-09-07 08:32:41 +02:00
pinctrl-amd.h Fix inconsistent spinlock of AMD GPIO driver which can be 2015-04-07 11:36:49 +02:00
pinctrl-as3722.c pinctrl: replace trivial implementations of gpio_chip request/free 2015-10-16 22:20:21 +02:00
pinctrl-at91-pio4.c pinctrl: at91-pio4: use %pr format string for resource 2016-09-24 10:07:42 +02:00
pinctrl-at91.c This is the bulk of GPIO changes for v4.4: 2015-11-02 12:59:12 -08:00
pinctrl-at91.h
pinctrl-coh901.c pinctrl: replace trivial implementations of gpio_chip request/free 2015-10-16 22:20:21 +02:00
pinctrl-coh901.h
pinctrl-digicolor.c pinctrl: replace trivial implementations of gpio_chip request/free 2015-10-16 22:20:21 +02:00
pinctrl-falcon.c staging: drivers: pinctrl: Fixed checkpatch.pl warnings 2015-01-21 11:02:26 +01:00
pinctrl-lantiq.c pinctrl: make pinctrl_register() return proper error code 2015-06-10 14:49:52 +02:00
pinctrl-lantiq.h pinctrl: lantiq: fix include guard #endif comment 2015-03-09 18:10:57 +01:00
pinctrl-lpc18xx.c This is the bulk of pin control changes for the v4.3 development 2015-09-04 10:22:09 -07:00
pinctrl-palmas.c pinctrl: make pinctrl_register() return proper error code 2015-06-10 14:49:52 +02:00
pinctrl-pistachio.c pinctrl: pistachio: fix mfio pll_lock pinmux 2016-09-24 10:07:41 +02:00
pinctrl-rockchip.c This is the bulk of GPIO changes for v4.4: 2015-11-02 12:59:12 -08:00
pinctrl-single.c pinctrl: single: Fix missing flush of posted write for a wakeirq 2016-08-10 11:49:27 +02:00
pinctrl-st.c pinctrl: replace trivial implementations of gpio_chip request/free 2015-10-16 22:20:21 +02:00
pinctrl-tb10x.c pinctrl: make pinctrl_register() return proper error code 2015-06-10 14:49:52 +02:00
pinctrl-tegra-xusb.c pinctrl: tegra-xusb: Correct lane mux options 2015-10-27 17:06:23 +01:00
pinctrl-tegra.c pinctrl: tegra: Only set the gpio range if needed 2015-08-13 16:24:33 +02:00
pinctrl-tegra.h pinctrl: tegra: use signed bitfields for optional fields 2015-03-19 09:20:17 +01:00
pinctrl-tegra20.c pinctrl: tegra: some bits move between registers 2015-03-09 18:10:58 +01:00
pinctrl-tegra30.c pinctrl: tegra: some bits move between registers 2015-03-09 18:10:58 +01:00
pinctrl-tegra114.c pinctrl: tegra: some bits move between registers 2015-03-09 18:10:58 +01:00
pinctrl-tegra124.c pinctrl: tegra: some bits move between registers 2015-03-09 18:10:58 +01:00
pinctrl-tegra210.c pinctrl: tegra: add a driver for Tegra210 2015-03-09 18:10:59 +01:00
pinctrl-tz1090-pdc.c pinctrl: tz1090-pdc: Remove unneded semicolons 2015-10-02 04:06:46 -07:00
pinctrl-tz1090.c pinctrl: tz1090: Remove unneded semicolons 2015-10-02 04:06:46 -07:00
pinctrl-u300.c pinctrl: make pinctrl_register() return proper error code 2015-06-10 14:49:52 +02:00
pinctrl-utils.c
pinctrl-utils.h
pinctrl-xway.c pinctrl: replace trivial implementations of gpio_chip request/free 2015-10-16 22:20:21 +02:00
pinctrl-zynq.c pinctrl: zynq: fix UTF-8 errors 2015-10-31 22:12:59 +01:00
pinmux.c pinctrl: join lines that can be a single line within 80 columns 2015-09-14 09:13:43 +02:00
pinmux.h