pinctrl: intel: Restore the pins that used to be in Direct IRQ mode
Subsystems (3)
PATCH 1/1 pinctrl: intel: Restore the pins that used to be in Direct IRQ mode
If the firmware mangled the register contents too much, check the saved value for the Direct IRQ mode. If it matches, we will restore the pin state.
---
Jim, this is a bit simplified version than what you tested. But it shouldn't be a functional changes. Anyway, it would be nice if you have a chance to give this a try.
Linus, I don't expect more to come for this cycle, feel free to apply directly.
drivers/pinctrl/intel/pinctrl-intel.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
drivers/pinctrl/intel/pinctrl-intel.c +13 -3
@@ -1709,6 +1709,12 @@ const struct intel_pinctrl_soc_data *intel_pinctrl_get_soc_data(struct platform_EXPORT_SYMBOL_GPL (intel_pinctrl_get_soc_data);#ifdef CONFIG_PM_SLEEP +static bool __intel_gpio_is_direct_irq (u32 value) +{ +return (value &PADCFG0_GPIROUTIOXAPIC ) && (value &PADCFG0_GPIOTXDIS ) && + (__intel_gpio_get_gpio_mode (value) ==PADCFG0_PMODE_GPIO ); +} +static bool intel_pinctrl_should_save (struct intel_pinctrl *pctrl,unsigned int pin) {const struct pin_desc *pd =pin_desc_get (pctrl->pctldev, pin);
@@ -1742,8 +1748,7 @@ static bool intel_pinctrl_should_save(struct intel_pinctrl *pctrl, unsigned int* See https://bugzilla.kernel.org/show_bug.cgi?id=214749. */ value =readl (intel_get_padcfg (pctrl, pin,PADCFG0 )); -if ((value &PADCFG0_GPIROUTIOXAPIC ) && (value &PADCFG0_GPIOTXDIS ) && - (__intel_gpio_get_gpio_mode (value) ==PADCFG0_PMODE_GPIO )) +if (__intel_gpio_is_direct_irq (value))return true;return false;
@@ -1873,7 +1878,12 @@ int intel_pinctrl_resume_noirq(struct device *dev)for (i =0 ; i < pctrl->soc->npins; i++) {const struct pinctrl_pin_desc *desc = &pctrl->soc->pins[i]; -if (!intel_pinctrl_should_save (pctrl, desc->number)) +if (!(intel_pinctrl_should_save (pctrl, desc->number) || +/* +* If the firmware mangled the register contents too much, +* check the saved value for the Direct IRQ mode. +*/ +__intel_gpio_is_direct_irq (pads[i].padcfg0)))continue ;intel_restore_padcfg (pctrl, desc->number,PADCFG0 , pads[i].padcfg0);
Signature · 1 line
2.39.1
Quoted 8 lines · Andy Shevchenko
If the firmware mangled the register contents too much, check the saved value for the Direct IRQ mode. If it matches, we will restore the pin state.
Reported-by Jim Minter <[email protected]>Fixes 6989ea4881c8 ("pinctrl: intel: Save and restore pins in "direct IRQ" mode")Tested-by Jim Minter <[email protected]>Signed-off-by Andy Shevchenko <[email protected]>
Quoted 8 lines · Andy Shevchenko
If the firmware mangled the register contents too much, check the saved value for the Direct IRQ mode. If it matches, we will restore the pin state.
Reported-by Jim Minter <[email protected]>Fixes 6989ea4881c8 ("pinctrl: intel: Save and restore pins in "direct IRQ" mode")Tested-by Jim Minter <[email protected]>Signed-off-by Andy Shevchenko <[email protected]>
Quoted 7 lines
---
Jim, this is a bit simplified version than what you tested. But it shouldn't be a functional changes. Anyway, it would be nice if you have a chance to give this a try.
Linus, I don't expect more to come for this cycle, feel free to apply directly.
OK no problem, does it go into fixes pronto or for next (v6.3)? I would guess fixes but I never know the difference between urgent and nourgent fixes...
Yours,
Linus Walleij
Quoted 17 lines · Linus Walleij
Quoted 14 lines · Andy Shevchenko
If the firmware mangled the register contents too much, check the saved value for the Direct IRQ mode. If it matches, we will restore the pin state.
Reported-by Jim Minter <[email protected]>Fixes 6989ea4881c8 ("pinctrl: intel: Save and restore pins in "direct IRQ" mode")Tested-by Jim Minter <[email protected]>Signed-off-by Andy Shevchenko <[email protected]>---
Jim, this is a bit simplified version than what you tested. But it shouldn't be a functional changes. Anyway, it would be nice if you have a chance to give this a try.
Quoted 5 lines
Quoted 1 line
Linus, I don't expect more to come for this cycle, feel free to apply directly.
OK no problem, does it go into fixes pronto or for next (v6.3)? I would guess fixes but I never know the difference between urgent and nourgent fixes...
Fixes and kinda urgent (bad user experience with touchpad device).
Thank you!
Signature · 2 lines
With Best Regards, Andy Shevchenko
Quoted 8 lines · Andy Shevchenko
If the firmware mangled the register contents too much, check the saved value for the Direct IRQ mode. If it matches, we will restore the pin state.
Reported-by Jim Minter <[email protected]>Fixes 6989ea4881c8 ("pinctrl: intel: Save and restore pins in "direct IRQ" mode")Tested-by Jim Minter <[email protected]>Signed-off-by Andy Shevchenko <[email protected]>
Patch applied for fixes.
Yours,
Linus Walleij
Quoted 8 lines · Andy Shevchenko
If the firmware mangled the register contents too much, check the saved value for the Direct IRQ mode. If it matches, we will restore the pin state.
Reported-by Jim Minter <jimminter@xxxxxxxxxxxxx>Fixes 6989ea4881c8 ("pinctrl: intel: Save and restore pins in "direct IRQ" mode")Tested-by Jim Minter <jimminter@xxxxxxxxxxxxx>Signed-off-by Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
Quoted 5 lines
---
Jim, this is a bit simplified version than what you tested. But it shouldn't be a functional changes. Anyway, it would be nice if you have a chance to give this a try.
Andy, I retested this simplified patch and it worked fine for me.
Many thanks,
Jim