diff options
author | Adrian Alonso <aalonso@freescale.com> | 2015-11-10 17:43:18 -0600 |
---|---|---|
committer | Adrian Alonso <adrian.alonso@nxp.com> | 2016-02-03 17:46:12 -0600 |
commit | 1ffa63c43b69576e245a2b2f750a7e411227e662 (patch) | |
tree | 96d16ac1729fbf9f089eabc617b02f24fb5a46cf /arch | |
parent | dcc0077e58f980421cea74f502169e3c72f6ffe9 (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.c | 25 |
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) |