summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorAdrian Alonso <aalonso@freescale.com>2015-11-10 17:43:18 -0600
committerAdrian Alonso <adrian.alonso@nxp.com>2016-02-03 17:46:12 -0600
commit1ffa63c43b69576e245a2b2f750a7e411227e662 (patch)
tree96d16ac1729fbf9f089eabc617b02f24fb5a46cf /arch
parentdcc0077e58f980421cea74f502169e3c72f6ffe9 (diff)
MLK-11889: arm: imx6: low power mode support for imx6q lpddr2
Add low power suspend mode support for imx6q lpddr2 Save/restore mmdc iomux pads relevant to dual channel lpddr2 memory when enter/exit low power suspend mode. Remove unused macros in suspend-imx6. Signed-off-by: Adrian Alonso <aalonso@freescale.com> Signed-off-by: Anson Huang <b20788@freescale.com> (cherry picked from commit 5ebac6d425b859c51d570489d03684e0c976ef60)
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-imx/pm-imx6.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/pm-imx6.c b/arch/arm/mach-imx/pm-imx6.c
index 0b0268797404..9e0ac42b047b 100644
--- a/arch/arm/mach-imx/pm-imx6.c
+++ b/arch/arm/mach-imx/pm-imx6.c
@@ -314,6 +314,15 @@ static const u32 imx6q_mmdc_io_offset[] __initconst = {
0x74c, /* GPR_ADDS */
};
+static const u32 imx6q_mmdc_io_lpddr2_offset[] __initconst = {
+ 0x5ac, 0x5b4, 0x528, 0x520, /* DQM0 ~ DQM3 */
+ 0x784, 0x788, 0x794, 0x79c, /* GPR_B0DS ~ GPR_B3DS */
+ 0x56c, 0x578, 0x588, 0x594, /* CAS, RAS, SDCLK_0, SDCLK_1 */
+ 0x59c, 0x5a0, 0x750, 0x774, /* SODT0, SODT1, MODE_CTL, MODE */
+ 0x5a8, 0x5b0, 0x524, 0x51c, /* SDQS0 ~ SDQS3 */
+ 0x74c, 0x590, 0x598, 0x57c, /* GRP_ADDS, SDCKE0, SDCKE1, RESET */
+};
+
static const u32 imx6dl_mmdc_io_offset[] __initconst = {
0x470, 0x474, 0x478, 0x47c, /* DQM0 ~ DQM3 */
0x480, 0x484, 0x488, 0x48c, /* DQM4 ~ DQM7 */
@@ -420,6 +429,17 @@ static const struct imx6_pm_socdata imx6q_pm_data __initconst = {
.mmdc_offset = NULL,
};
+static const struct imx6_pm_socdata imx6q_lpddr2_pm_data __initconst = {
+ .mmdc_compat = "fsl,imx6q-mmdc",
+ .src_compat = "fsl,imx6q-src",
+ .iomuxc_compat = "fsl,imx6q-iomuxc",
+ .gpc_compat = "fsl,imx6q-gpc",
+ .mmdc_io_num = ARRAY_SIZE(imx6q_mmdc_io_lpddr2_offset),
+ .mmdc_io_offset = imx6q_mmdc_io_lpddr2_offset,
+ .mmdc_num = 0,
+ .mmdc_offset = NULL,
+};
+
static const struct imx6_pm_socdata imx6dl_pm_data __initconst = {
.mmdc_compat = "fsl,imx6q-mmdc",
.src_compat = "fsl,imx6q-src",
@@ -1141,7 +1161,10 @@ static void __init imx6_pm_common_init(const struct imx6_pm_socdata
void __init imx6q_pm_init(void)
{
- imx6_pm_common_init(&imx6q_pm_data);
+ if (imx_mmdc_get_ddr_type() == IMX_DDR_TYPE_LPDDR2)
+ imx6_pm_common_init(&imx6q_lpddr2_pm_data);
+ else
+ imx6_pm_common_init(&imx6q_pm_data);
}
void __init imx6dl_pm_init(void)