2023-02-06 14:17:09

by Andy Shevchenko

[permalink] [raw]
Subject: [PATCH v1 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.

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.

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(-)

diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c
index cc3aaba24188..e49f271de936 100644
--- a/drivers/pinctrl/intel/pinctrl-intel.c
+++ b/drivers/pinctrl/intel/pinctrl-intel.c
@@ -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);
--
2.39.1



2023-02-06 14:25:52

by Mika Westerberg

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] pinctrl: intel: Restore the pins that used to be in Direct IRQ mode

On Mon, Feb 06, 2023 at 04:15:59PM +0200, Andy Shevchenko wrote:
> 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]>

Acked-by: Mika Westerberg <[email protected]>

2023-02-06 15:02:47

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] pinctrl: intel: Restore the pins that used to be in Direct IRQ mode

On Mon, Feb 6, 2023 at 3:16 PM Andy Shevchenko
<[email protected]> wrote:

> 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.
>
> 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

2023-02-06 15:06:23

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] pinctrl: intel: Restore the pins that used to be in Direct IRQ mode

On Mon, Feb 06, 2023 at 04:02:27PM +0100, Linus Walleij wrote:
> On Mon, Feb 6, 2023 at 3:16 PM Andy Shevchenko
> <[email protected]> wrote:
>
> > 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.
> >
> > 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!

--
With Best Regards,
Andy Shevchenko



2023-02-07 09:15:10

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] pinctrl: intel: Restore the pins that used to be in Direct IRQ mode

On Mon, Feb 6, 2023 at 3:16 PM Andy Shevchenko
<[email protected]> wrote:

> 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

2023-02-07 17:06:19

by Jim Minter

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] pinctrl: intel: Restore the pins that used to be in Direct IRQ mode

On Mon, Feb 6, 2023 at 3:16 PM Andy Shevchenko
<andriy.shevchenko@xxxxxxxxxxxxxxx> wrote:

> 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>
> ---
>
> 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