diff --git a/arch/arm/mach-imx/pm-imx6.c b/arch/arm/mach-imx/pm-imx6.c index df767169ad2c..f726f7f2000a 100644 --- a/arch/arm/mach-imx/pm-imx6.c +++ b/arch/arm/mach-imx/pm-imx6.c @@ -338,7 +338,7 @@ static const u32 imx6dl_mmdc_io_offset[] __initconst = { 0x74c, /* GPR_ADDS */ }; -static const u32 imx6sl_mmdc_io_offset[] __initconst = { +static const u32 imx6sl_mmdc_io_lpddr2_offset[] __initconst = { 0x30c, 0x310, 0x314, 0x318, /* DQM0 ~ DQM3 */ 0x5c4, 0x5cc, 0x5d4, 0x5d8, /* GPR_B0DS ~ GPR_B3DS */ 0x300, 0x31c, 0x338, 0x5ac, /* CAS, RAS, SDCLK_0, GPR_ADDS */ @@ -346,6 +346,14 @@ static const u32 imx6sl_mmdc_io_offset[] __initconst = { 0x330, 0x334, 0x320, /* SDCKE0, SDCKE1, RESET */ }; +static const u32 imx6sl_mmdc_io_offset[] __initconst = { + 0x30c, 0x310, 0x314, 0x318, /* DQM0 ~ DQM3 */ + 0x344, 0x348, 0x34c, 0x350, /* SDQS0 ~ SDQS3 */ + 0x5c4, 0x5cc, 0x5d4, 0x5d8, /* GPR_B0DS ~ GPR_B3DS */ + 0x300, 0x31c, 0x338, 0x5ac, /* CAS, RAS, SDCLK_0, GPR_ADDS */ + 0x33c, 0x340, 0x5b0, 0x5c0 /* SODT0, SODT1, MODE_CTL, MODE */ +}; + static const u32 imx6sx_mmdc_io_lpddr2_offset[] __initconst = { 0x2ec, 0x2f0, 0x2f4, 0x2f8, /* DQM0 ~ DQM3 */ 0x300, 0x2fc, 0x32c, 0x5f4, /* CAS, RAS, SDCLK_0, GPR_ADDS */ @@ -486,6 +494,17 @@ static const struct imx6_pm_socdata imx6sl_pm_data __initconst = { .mmdc_offset = NULL, }; +static const struct imx6_pm_socdata imx6sl_lpddr2_pm_data __initconst = { + .mmdc_compat = "fsl,imx6sl-mmdc", + .src_compat = "fsl,imx6sl-src", + .iomuxc_compat = "fsl,imx6sl-iomuxc", + .gpc_compat = "fsl,imx6sl-gpc", + .mmdc_io_num = ARRAY_SIZE(imx6sl_mmdc_io_lpddr2_offset), + .mmdc_io_offset = imx6sl_mmdc_io_lpddr2_offset, + .mmdc_num = 0, + .mmdc_offset = NULL, +}; + static const struct imx6_pm_socdata imx6sx_pm_data __initconst = { .mmdc_compat = "fsl,imx6sx-mmdc", .src_compat = "fsl,imx6sx-src", @@ -1307,7 +1326,10 @@ void __init imx6sl_pm_init(void) return; } - imx6_pm_common_init(&imx6sl_pm_data); + if (imx_mmdc_get_ddr_type() == IMX_DDR_TYPE_LPDDR2) + imx6_pm_common_init(&imx6sl_lpddr2_pm_data); + else + imx6_pm_common_init(&imx6sl_pm_data); } void __init imx6sx_pm_init(void)