summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx/pm-imx7.c
diff options
context:
space:
mode:
authorAnson Huang <Anson.Huang@nxp.com>2016-05-31 03:18:52 +0800
committerLeonard Crestez <leonard.crestez@nxp.com>2018-08-24 12:41:33 +0300
commit8df0fd081d1dbccafcad77a8ecae9f50b33ced66 (patch)
tree2b45044505a6ec81a6f12b66c3be966db34fab5d /arch/arm/mach-imx/pm-imx7.c
parent40bff27a27fb6c993953a1155b25603703c9833f (diff)
MLK-12861-2 ARM: imx: enable necessary clock for RDC resume on i.mx7d
When Mega/Fast Mix off in DSM mode, RDC recovery needs PCIe/PXP/EIM clock to be enabled, otherwise, with M4 enabled, DSM resume will fail. We only enable them before entering DSM and hardware will disable them when DSM is entered and they will be re-enabled after resume, then in low level resume phase, we will disable them again. Signed-off-by: Anson Huang <Anson.Huang@nxp.com> (cherry picked from commit e28ae270b6e23a6b5ba86112592bc2b767c68f8d)
Diffstat (limited to 'arch/arm/mach-imx/pm-imx7.c')
-rw-r--r--arch/arm/mach-imx/pm-imx7.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/pm-imx7.c b/arch/arm/mach-imx/pm-imx7.c
index ab3714225264..f092e80ad786 100644
--- a/arch/arm/mach-imx/pm-imx7.c
+++ b/arch/arm/mach-imx/pm-imx7.c
@@ -78,6 +78,8 @@
#define CCM_LPCG_START 0x4040
#define CCM_LPCG_STEP 0x10
+#define CCM_EIM_LPCG 0x4160
+#define CCM_PXP_LPCG 0x44c0
#define CCM_PCIE_LPCG 0x4600
#define BM_CCM_ROOT_POST_PODF 0x3f
@@ -715,12 +717,16 @@ static int imx7_pm_enter(suspend_state_t state)
imx_gpcv2_pre_suspend(true);
if (imx_gpcv2_is_mf_mix_off()) {
/*
- * per design requirement, EXSC for PCIe/EIM
+ * per design requirement, EXSC for PCIe/EIM/PXP
* will need clock to recover RDC setting on
* resume, so enable PCIe/EIM LPCG for RDC
* recovery when M/F mix off
*/
writel_relaxed(0x3, pm_info->ccm_base.vbase +
+ CCM_EIM_LPCG);
+ writel_relaxed(0x3, pm_info->ccm_base.vbase +
+ CCM_PXP_LPCG);
+ writel_relaxed(0x3, pm_info->ccm_base.vbase +
CCM_PCIE_LPCG);
/* stop m4 if mix will also be shutdown */
if (imx_src_is_m4_enabled() && imx_mu_is_m4_in_stop()) {
@@ -760,6 +766,10 @@ static int imx7_pm_enter(suspend_state_t state)
if (imx_gpcv2_is_mf_mix_off() ||
imx7_pm_is_resume_from_lpsr()) {
writel_relaxed(0x0, pm_info->ccm_base.vbase +
+ CCM_EIM_LPCG);
+ writel_relaxed(0x0, pm_info->ccm_base.vbase +
+ CCM_PXP_LPCG);
+ writel_relaxed(0x0, pm_info->ccm_base.vbase +
CCM_PCIE_LPCG);
memcpy(ocram_base, ocram_saved_in_ddr, ocram_size);
imx7_console_restore(console_saved_reg);