From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Dong Aisheng <aisheng.dong@nxp.com>,
Jassi Brar <jaswinder.singh@linaro.org>,
linux-arm-kernel@lists.infradead.org,
Anson Huang <Anson.Huang@nxp.com>,
Sasha Levin <sashal@kernel.org>
Subject: [PATCH AUTOSEL 5.7 356/388] mailbox: imx: Add context save/restore for suspend/resume
Date: Wed, 17 Jun 2020 21:07:33 -0400 [thread overview]
Message-ID: <20200618010805.600873-356-sashal@kernel.org> (raw)
In-Reply-To: <20200618010805.600873-1-sashal@kernel.org>
From: Dong Aisheng <aisheng.dong@nxp.com>
[ Upstream commit ba5f9fa0ca85a6137fa35efd3a1256d8bb6bc5ff ]
For "mem" mode suspend on i.MX8 SoCs, MU settings could be
lost because its power is off, so save/restore is needed
for MU settings during suspend/resume. However, the restore
can ONLY be done when MU settings are actually lost, for the
scenario of settings NOT lost in "freeze" mode suspend, since
there could be still IPC going on multiple CPUs, restoring the
MU settings could overwrite the TIE by mistake and cause system
freeze, so need to make sure ONLY restore the MU settings when
it is powered off, Anson fixes this by checking whether restore
is actually needed when resume.
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/mailbox/imx-mailbox.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c
index 9d6f0217077b..478308fb82cc 100644
--- a/drivers/mailbox/imx-mailbox.c
+++ b/drivers/mailbox/imx-mailbox.c
@@ -66,6 +66,8 @@ struct imx_mu_priv {
struct clk *clk;
int irq;
+ u32 xcr;
+
bool side_b;
};
@@ -558,12 +560,45 @@ static const struct of_device_id imx_mu_dt_ids[] = {
};
MODULE_DEVICE_TABLE(of, imx_mu_dt_ids);
+static int imx_mu_suspend_noirq(struct device *dev)
+{
+ struct imx_mu_priv *priv = dev_get_drvdata(dev);
+
+ priv->xcr = imx_mu_read(priv, priv->dcfg->xCR);
+
+ return 0;
+}
+
+static int imx_mu_resume_noirq(struct device *dev)
+{
+ struct imx_mu_priv *priv = dev_get_drvdata(dev);
+
+ /*
+ * ONLY restore MU when context lost, the TIE could
+ * be set during noirq resume as there is MU data
+ * communication going on, and restore the saved
+ * value will overwrite the TIE and cause MU data
+ * send failed, may lead to system freeze. This issue
+ * is observed by testing freeze mode suspend.
+ */
+ if (!imx_mu_read(priv, priv->dcfg->xCR))
+ imx_mu_write(priv, priv->xcr, priv->dcfg->xCR);
+
+ return 0;
+}
+
+static const struct dev_pm_ops imx_mu_pm_ops = {
+ SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(imx_mu_suspend_noirq,
+ imx_mu_resume_noirq)
+};
+
static struct platform_driver imx_mu_driver = {
.probe = imx_mu_probe,
.remove = imx_mu_remove,
.driver = {
.name = "imx_mu",
.of_match_table = imx_mu_dt_ids,
+ .pm = &imx_mu_pm_ops,
},
};
module_platform_driver(imx_mu_driver);
--
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-06-18 1:35 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20200618010805.600873-1-sashal@kernel.org>
2020-06-18 1:01 ` [PATCH AUTOSEL 5.7 003/388] clk: sunxi: Fix incorrect usage of round_down() Sasha Levin
2020-06-18 1:01 ` [PATCH AUTOSEL 5.7 007/388] ASoC: SOF: imx8: Fix randbuild error Sasha Levin
2020-06-18 1:01 ` [PATCH AUTOSEL 5.7 017/388] ARM: integrator: Add some Kconfig selections Sasha Levin
2020-06-18 1:01 ` [PATCH AUTOSEL 5.7 018/388] ARM: dts: stm32: Add missing ethernet PHY reset on AV96 Sasha Levin
2020-06-18 1:01 ` [PATCH AUTOSEL 5.7 021/388] arm64: dts: meson-gxbb-kii-pro: fix board compatible Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 024/388] arm64: dts: meson: fixup SCP sram nodes Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 031/388] PCI: brcmstb: Fix window register offset from 4 to 8 Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 039/388] clk: samsung: Mark top ISP and CAM clocks on Exynos542x as critical Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 042/388] usb: roles: Switch on role-switch uevent reporting Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 043/388] serial: 8250: Fix max baud limit in generic 8250 port Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 048/388] arm64: dts: armada-3720-turris-mox: forbid SDR104 on SDIO for FCC purposes Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 049/388] arm64: dts: armada-3720-turris-mox: fix SFP binding Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 050/388] arm64: dts: juno: Fix GIC child nodes Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 056/388] arm64: dts: fvp: " Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 057/388] PCI: aardvark: Don't blindly enable ASPM L0s and don't write to read-only register Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 059/388] arm64: dts: fvp/juno: Fix node address fields Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 062/388] coresight: tmc: Fix TMC mode read in tmc_read_prepare_etb() Sasha Levin
2020-06-18 1:02 ` [PATCH AUTOSEL 5.7 075/388] clk: zynqmp: fix memory leak in zynqmp_register_clocks Sasha Levin
2020-06-18 1:03 ` [PATCH AUTOSEL 5.7 089/388] clk: sprd: fix compile-testing Sasha Levin
2020-06-18 1:03 ` [PATCH AUTOSEL 5.7 094/388] ASoC: meson: fix memory leak of links if allocation of ldata fails Sasha Levin
2020-06-18 1:03 ` [PATCH AUTOSEL 5.7 103/388] ASoC: meson: add missing free_irq() in error path Sasha Levin
2020-06-18 1:03 ` [PATCH AUTOSEL 5.7 108/388] media: s5p-mfc: Properly handle dma_parms for the allocated devices Sasha Levin
2020-06-18 1:03 ` [PATCH AUTOSEL 5.7 114/388] ARM: dts: bcm283x: Use firmware PM driver for V3D Sasha Levin
2020-06-18 1:03 ` [PATCH AUTOSEL 5.7 115/388] arm64: dts: realtek: rtd129x: Fix GIC CPU masks for RTD1293 Sasha Levin
2020-06-18 1:03 ` [PATCH AUTOSEL 5.7 118/388] staging: mt7621-pci: fix PCIe interrupt mapping Sasha Levin
2020-06-18 1:03 ` [PATCH AUTOSEL 5.7 119/388] arm64: dts: mt8173: fix unit name warnings Sasha Levin
2020-06-18 1:03 ` [PATCH AUTOSEL 5.7 122/388] ARM: dts: sun8i-h2-plus-bananapi-m2-zero: Fix led polarity Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 151/388] clk: meson: meson8b: Fix the first parent of vid_pll_in_sel Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 152/388] clk: meson: meson8b: Fix the polarity of the RESET_N lines Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 153/388] clk: meson: meson8b: Fix the vclk_div{1, 2, 4, 6, 12}_en gate bits Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 158/388] arm64: dts: meson-g12b-ugoos-am6: fix board compatible Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 159/388] arm64: dts: meson: fix leds subnodes name Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 161/388] clk: meson: meson8b: Don't rely on u-boot to init all GP_PLL registers Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 164/388] ARM: dts: aspeed: ast2600: Set arch timer always-on Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 165/388] ARM: dts: aspeed: Change KCS nodes to v2 binding Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 168/388] usb: dwc3: meson-g12a: check return of dwc3_meson_g12a_usb_init Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 182/388] PCI: brcmstb: Assert fundamental reset on initialization Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 184/388] remoteproc/mediatek: fix invalid use of sizeof in scp_ipi_init() Sasha Levin
2020-06-18 1:04 ` [PATCH AUTOSEL 5.7 196/388] pinctrl: rockchip: fix memleak in rockchip_dt_node_to_map Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 214/388] arm64: dts: marvell: armada-37xx: Set pcie_reset_pin to gpio function Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 221/388] PCI: aardvark: Train link immediately after enabling training Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 222/388] PCI: aardvark: Improve link training Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 223/388] PCI: aardvark: Issue PERST via GPIO Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 227/388] iommu/arm-smmu-v3: Don't reserve implementation defined register space Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 229/388] usb/ohci-platform: Fix a warning when hibernating Sasha Levin
2020-06-18 9:56 ` Qais Yousef
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 235/388] coresight: Fix support for sparsely populated ports Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 236/388] coresight: etm4x: Fix use-after-free of per-cpu etm drvdata Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 238/388] clk: samsung: exynos5433: Add IGNORE_UNUSED flag to sclk_i2s1 Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 239/388] ARM: dts: meson: Switch existing boards with RGMII PHY to "rgmii-id" Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 244/388] firmware: imx: scu: Fix possible memory leak in imx_scu_probe() Sasha Levin
2020-06-18 1:05 ` [PATCH AUTOSEL 5.7 259/388] PCI: amlogic: meson: Don't use FAST_LINK_MODE to set up link Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 266/388] usb: gadget: lpc32xx_udc: don't dereference ep pointer before null check Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 269/388] pinctrl: Fix return value about devm_platform_ioremap_resource() Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 273/388] mfd: stmfx: Reset chip on resume as supply was disabled Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 274/388] mfd: stmfx: Fix stmfx_irq_init error path Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 275/388] mfd: stmfx: Disable IRQ in suspend to avoid spurious interrupt Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 282/388] clk: bcm2835: Fix return type of bcm2835_register_gate Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 284/388] clk: zynqmp: Fix divider2 calculation Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 292/388] misc: xilinx-sdfec: improve get_user_pages_fast() error handling Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 300/388] ARM: davinci: fix build failure without I2C Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 305/388] usb: dwc3: meson-g12a: fix error path when fetching the reset line fails Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 310/388] mailbox: imx: Fix return in imx_mu_scu_xlate() Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 311/388] mailbox: zynqmp-ipi: Fix NULL vs IS_ERR() check in zynqmp_ipi_mbox_probe() Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 317/388] pwm: imx27: Fix rounding behavior Sasha Levin
2020-06-18 1:06 ` [PATCH AUTOSEL 5.7 321/388] scsi: ufs: Don't update urgent bkops level when toggling auto bkops Sasha Levin
2020-06-18 1:07 ` [PATCH AUTOSEL 5.7 323/388] pinctrl: imxl: Fix an error handling path in 'imx1_pinctrl_core_probe()' Sasha Levin
2020-06-18 1:07 ` [PATCH AUTOSEL 5.7 324/388] pinctrl: sirf: add missing put_device() call in sirfsoc_gpio_probe() Sasha Levin
2020-06-18 1:07 ` [PATCH AUTOSEL 5.7 325/388] pinctrl: freescale: imx: Fix an error handling path in 'imx_pinctrl_probe()' Sasha Levin
2020-06-18 1:07 ` [PATCH AUTOSEL 5.7 326/388] pinctrl: freescale: imx: Use 'devm_of_iomap()' to avoid a resource leak in case of error " Sasha Levin
2020-06-18 1:07 ` Sasha Levin [this message]
2020-06-18 1:07 ` [PATCH AUTOSEL 5.7 357/388] arm64: ftrace: Change CONFIG_FTRACE_WITH_REGS to CONFIG_DYNAMIC_FTRACE_WITH_REGS Sasha Levin
2020-06-18 1:07 ` [PATCH AUTOSEL 5.7 370/388] drm/sun4i: hdmi ddc clk: Fix size of m divider Sasha Levin
2020-06-18 1:07 ` [PATCH AUTOSEL 5.7 372/388] scsi: acornscsi: Fix an error handling path in acornscsi_probe() Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200618010805.600873-356-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=Anson.Huang@nxp.com \
--cc=aisheng.dong@nxp.com \
--cc=jaswinder.singh@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).