From: Greg Kroah-Hartman Date: Mon, 16 Nov 2020 10:08:42 +0000 (+0100) Subject: 5.4-stable patches X-Git-Tag: v4.4.244~59 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=199e78f0df549f3b01d15f4c06c10c59840696de;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: mfd-sprd-add-wakeup-capability-for-pmic-irq.patch tick-common-touch-watchdog-in-tick_unfreeze-on-all-cpus.patch --- diff --git a/queue-5.4/mfd-sprd-add-wakeup-capability-for-pmic-irq.patch b/queue-5.4/mfd-sprd-add-wakeup-capability-for-pmic-irq.patch new file mode 100644 index 00000000000..a9ab893b6f7 --- /dev/null +++ b/queue-5.4/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 +@@ -204,7 +204,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); +@@ -220,9 +220,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 }, + {}, +@@ -234,6 +259,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-5.4/series b/queue-5.4/series index de30359ddc9..6a0776d4d61 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -82,3 +82,5 @@ riscv-set-text_offset-correctly-for-m-mode.patch i2c-sh_mobile-implement-atomic-transfers.patch tpm_tis-disable-interrupts-on-thinkpad-t490s.patch spi-bcm2835-remove-use-of-uninitialized-gpio-flags-variable.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-5.4/tick-common-touch-watchdog-in-tick_unfreeze-on-all-cpus.patch b/queue-5.4/tick-common-touch-watchdog-in-tick_unfreeze-on-all-cpus.patch new file mode 100644 index 00000000000..a527480bc09 --- /dev/null +++ b/queue-5.4/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 +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -558,6 +559,7 @@ void tick_unfreeze(void) + trace_suspend_resume(TPS("timekeeping_freeze"), + smp_processor_id(), false); + } else { ++ touch_softlockup_watchdog(); + tick_resume_local(); + } +