From b0cae87819160f93f6086c4bbd8f30b95928e117 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 16 Nov 2020 11:08:20 +0100 Subject: [PATCH] 4.19-stable patches added patches: mfd-sprd-add-wakeup-capability-for-pmic-irq.patch tick-common-touch-watchdog-in-tick_unfreeze-on-all-cpus.patch --- ...d-add-wakeup-capability-for-pmic-irq.patch | 80 +++++++++++++++++++ queue-4.19/series | 2 + ...atchdog-in-tick_unfreeze-on-all-cpus.patch | 49 ++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 queue-4.19/mfd-sprd-add-wakeup-capability-for-pmic-irq.patch create mode 100644 queue-4.19/tick-common-touch-watchdog-in-tick_unfreeze-on-all-cpus.patch diff --git a/queue-4.19/mfd-sprd-add-wakeup-capability-for-pmic-irq.patch b/queue-4.19/mfd-sprd-add-wakeup-capability-for-pmic-irq.patch new file mode 100644 index 00000000000..30a33409459 --- /dev/null +++ b/queue-4.19/mfd-sprd-add-wakeup-capability-for-pmic-irq.patch @@ -0,0 +1,80 @@ +From a75bfc824a2d33f57ebdc003bfe6b7a9e11e9cb9 Mon Sep 17 00:00:00 2001 +From: Baolin Wang +Date: Tue, 18 Aug 2020 11:41:58 +0800 +Subject: mfd: sprd: Add wakeup capability for PMIC IRQ + +From: Baolin Wang + +commit a75bfc824a2d33f57ebdc003bfe6b7a9e11e9cb9 upstream. + +When changing to use suspend-to-idle to save power, the PMIC irq can not +wakeup the system due to lack of wakeup capability, which will cause +the sub-irqs (such as power key) of the PMIC can not wake up the system. +Thus we can add the wakeup capability for PMIC irq to solve this issue, +as well as removing the IRQF_NO_SUSPEND flag to allow PMIC irq to be +a wakeup source. + +Reported-by: Chunyan Zhang +Signed-off-by: Baolin Wang +Tested-by: Chunyan Zhang +Signed-off-by: Lee Jones +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mfd/sprd-sc27xx-spi.c | 28 +++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +--- a/drivers/mfd/sprd-sc27xx-spi.c ++++ b/drivers/mfd/sprd-sc27xx-spi.c +@@ -212,7 +212,7 @@ static int sprd_pmic_probe(struct spi_de + } + + ret = devm_regmap_add_irq_chip(&spi->dev, ddata->regmap, ddata->irq, +- IRQF_ONESHOT | IRQF_NO_SUSPEND, 0, ++ IRQF_ONESHOT, 0, + &ddata->irq_chip, &ddata->irq_data); + if (ret) { + dev_err(&spi->dev, "Failed to add PMIC irq chip %d\n", ret); +@@ -228,9 +228,34 @@ static int sprd_pmic_probe(struct spi_de + return ret; + } + ++ device_init_wakeup(&spi->dev, true); + return 0; + } + ++#ifdef CONFIG_PM_SLEEP ++static int sprd_pmic_suspend(struct device *dev) ++{ ++ struct sprd_pmic *ddata = dev_get_drvdata(dev); ++ ++ if (device_may_wakeup(dev)) ++ enable_irq_wake(ddata->irq); ++ ++ return 0; ++} ++ ++static int sprd_pmic_resume(struct device *dev) ++{ ++ struct sprd_pmic *ddata = dev_get_drvdata(dev); ++ ++ if (device_may_wakeup(dev)) ++ disable_irq_wake(ddata->irq); ++ ++ return 0; ++} ++#endif ++ ++static SIMPLE_DEV_PM_OPS(sprd_pmic_pm_ops, sprd_pmic_suspend, sprd_pmic_resume); ++ + static const struct of_device_id sprd_pmic_match[] = { + { .compatible = "sprd,sc2731", .data = &sc2731_data }, + {}, +@@ -242,6 +267,7 @@ static struct spi_driver sprd_pmic_drive + .name = "sc27xx-pmic", + .bus = &spi_bus_type, + .of_match_table = sprd_pmic_match, ++ .pm = &sprd_pmic_pm_ops, + }, + .probe = sprd_pmic_probe, + }; diff --git a/queue-4.19/series b/queue-4.19/series index b147e8dd3c7..ae81bc1109e 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -45,3 +45,5 @@ s390-smp-move-rcu_cpu_starting-earlier.patch vfio-platform-fix-reference-leak-in-vfio_platform_op.patch selftests-proc-fix-warning-_gnu_source-redefined.patch tpm_tis-disable-interrupts-on-thinkpad-t490s.patch +tick-common-touch-watchdog-in-tick_unfreeze-on-all-cpus.patch +mfd-sprd-add-wakeup-capability-for-pmic-irq.patch diff --git a/queue-4.19/tick-common-touch-watchdog-in-tick_unfreeze-on-all-cpus.patch b/queue-4.19/tick-common-touch-watchdog-in-tick_unfreeze-on-all-cpus.patch new file mode 100644 index 00000000000..c529286c59e --- /dev/null +++ b/queue-4.19/tick-common-touch-watchdog-in-tick_unfreeze-on-all-cpus.patch @@ -0,0 +1,49 @@ +From 5167c506d62dd9ffab73eba23c79b0a8845c9fe1 Mon Sep 17 00:00:00 2001 +From: Chunyan Zhang +Date: Fri, 10 Jan 2020 16:39:02 +0800 +Subject: tick/common: Touch watchdog in tick_unfreeze() on all CPUs + +From: Chunyan Zhang + +commit 5167c506d62dd9ffab73eba23c79b0a8845c9fe1 upstream. + +Suspend to IDLE invokes tick_unfreeze() on resume. tick_unfreeze() on the +first resuming CPU resumes timekeeping, which also has the side effect of +resetting the softlockup watchdog on this CPU. + +But on the secondary CPUs the watchdog is not reset in the resume / +unfreeze() path, which can result in false softlockup warnings on those +CPUs depending on the time spent in suspend. + +Prevent this by clearing the softlock watchdog in the unfreeze path also +on the secondary resuming CPUs. + +[ tglx: Massaged changelog ] + +Signed-off-by: Chunyan Zhang +Signed-off-by: Thomas Gleixner +Link: https://lore.kernel.org/r/20200110083902.27276-1-chunyan.zhang@unisoc.com +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/time/tick-common.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/kernel/time/tick-common.c ++++ b/kernel/time/tick-common.c +@@ -15,6 +15,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -520,6 +521,7 @@ void tick_unfreeze(void) + trace_suspend_resume(TPS("timekeeping_freeze"), + smp_processor_id(), false); + } else { ++ touch_softlockup_watchdog(); + tick_resume_local(); + } + -- 2.47.3