pinctrl: armada-37xx: change suspend/resume time

Message ID 20190108162843.6194-1-miquel.raynal@bootlin.com
State New
Headers show
Series
  • pinctrl: armada-37xx: change suspend/resume time
Related show

Commit Message

Miquel Raynal Jan. 8, 2019, 4:28 p.m.
Armada 3700 PCIe IP relies on the pinctrl IP managed by this
driver. For reasons related to the PCI core's organization when
suspending/resuming, PCI host controller drivers must reconfigure
their register at suspend_noirq()/resume_noirq() which happens after
suspend()/suspend_late() and before resume_early()/resume().

In the current state, after resuming from a suspend to RAM cycle the
PCIe IP is reconfigured before the pinctrl one which produces an
interrupt storm. The solution to support PCIe resume operation is to
change the "priority" of this pinctrl driver PM callbacks to
"_noirq()".

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Linus Walleij Jan. 11, 2019, 8:56 a.m. | #1
On Tue, Jan 8, 2019 at 5:28 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Armada 3700 PCIe IP relies on the pinctrl IP managed by this
> driver. For reasons related to the PCI core's organization when
> suspending/resuming, PCI host controller drivers must reconfigure
> their register at suspend_noirq()/resume_noirq() which happens after
> suspend()/suspend_late() and before resume_early()/resume().
>
> In the current state, after resuming from a suspend to RAM cycle the
> PCIe IP is reconfigured before the pinctrl one which produces an
> interrupt storm. The solution to support PCIe resume operation is to
> change the "priority" of this pinctrl driver PM callbacks to
> "_noirq()".
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>

I suppose this patch requires the three other patches I just applied
for PCIe.

Would be nice to have Gregory's ACK on this patch before I apply
it?

Yours,
Linus Walleij
Gregory CLEMENT Jan. 18, 2019, 2:20 p.m. | #2
Hi Miquel,
 
 On mar., janv. 08 2019, Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Armada 3700 PCIe IP relies on the pinctrl IP managed by this
> driver. For reasons related to the PCI core's organization when
> suspending/resuming, PCI host controller drivers must reconfigure
> their register at suspend_noirq()/resume_noirq() which happens after
> suspend()/suspend_late() and before resume_early()/resume().
>
> In the current state, after resuming from a suspend to RAM cycle the
> PCIe IP is reconfigured before the pinctrl one which produces an
> interrupt storm. The solution to support PCIe resume operation is to
> change the "priority" of this pinctrl driver PM callbacks to
> "_noirq()".
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>

Acked-by: Gregory CLEMENT <gregory.clement@bootlin.com>

Thanks,

Gregory

> ---
>  drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> index 4b9f2cf94431..6462d3ca7ceb 100644
> --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
> @@ -1107,8 +1107,8 @@ static int armada_3700_pinctrl_resume(struct device *dev)
>   * to other IO drivers.
>   */
>  static const struct dev_pm_ops armada_3700_pinctrl_pm_ops = {
> -	.suspend_late = armada_3700_pinctrl_suspend,
> -	.resume_early = armada_3700_pinctrl_resume,
> +	.suspend_noirq = armada_3700_pinctrl_suspend,
> +	.resume_noirq = armada_3700_pinctrl_resume,
>  };
>  
>  #define PINCTRL_ARMADA_37XX_DEV_PM_OPS (&armada_3700_pinctrl_pm_ops)
> -- 
> 2.19.1
>
Linus Walleij Jan. 21, 2019, 1:13 p.m. | #3
On Tue, Jan 8, 2019 at 5:28 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Armada 3700 PCIe IP relies on the pinctrl IP managed by this
> driver. For reasons related to the PCI core's organization when
> suspending/resuming, PCI host controller drivers must reconfigure
> their register at suspend_noirq()/resume_noirq() which happens after
> suspend()/suspend_late() and before resume_early()/resume().
>
> In the current state, after resuming from a suspend to RAM cycle the
> PCIe IP is reconfigured before the pinctrl one which produces an
> interrupt storm. The solution to support PCIe resume operation is to
> change the "priority" of this pinctrl driver PM callbacks to
> "_noirq()".
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>

Patch applied with Gregory's ACK!

Yours,
Linus Walleij

Patch

diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index 4b9f2cf94431..6462d3ca7ceb 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -1107,8 +1107,8 @@  static int armada_3700_pinctrl_resume(struct device *dev)
  * to other IO drivers.
  */
 static const struct dev_pm_ops armada_3700_pinctrl_pm_ops = {
-	.suspend_late = armada_3700_pinctrl_suspend,
-	.resume_early = armada_3700_pinctrl_resume,
+	.suspend_noirq = armada_3700_pinctrl_suspend,
+	.resume_noirq = armada_3700_pinctrl_resume,
 };
 
 #define PINCTRL_ARMADA_37XX_DEV_PM_OPS (&armada_3700_pinctrl_pm_ops)