From fc444a01c1306fc09a43c9b8e064973f3ba5cb3d Mon Sep 17 00:00:00 2001 From: Jacky Bai Date: Mon, 25 Nov 2019 14:45:32 +0800 Subject: plat: imx8mm: Enable dram retention suuport on imx8mm Enable dram retention support on i.MX8MM. Change-Id: I76ada615d386602e551d572ff4e60ee19bb8e418 Signed-off-by: Jacky Bai --- plat/imx/imx8m/imx8m_psci_common.c | 9 +++++++-- plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c | 6 ++++++ plat/imx/imx8m/imx8mm/include/platform_def.h | 2 ++ plat/imx/imx8m/imx8mm/platform.mk | 4 ++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/plat/imx/imx8m/imx8m_psci_common.c b/plat/imx/imx8m/imx8m_psci_common.c index d6416288..fd5e7147 100644 --- a/plat/imx/imx8m/imx8m_psci_common.c +++ b/plat/imx/imx8m/imx8m_psci_common.c @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -118,8 +119,10 @@ void imx_domain_suspend(const psci_power_state_t *target_state) if (!is_local_state_run(CLUSTER_PWR_STATE(target_state))) imx_set_cluster_powerdown(core_id, CLUSTER_PWR_STATE(target_state)); - if (is_local_state_off(SYSTEM_PWR_STATE(target_state))) + if (is_local_state_off(SYSTEM_PWR_STATE(target_state))) { imx_set_sys_lpm(core_id, true); + dram_enter_retention(); + } } void imx_domain_suspend_finish(const psci_power_state_t *target_state) @@ -127,8 +130,10 @@ void imx_domain_suspend_finish(const psci_power_state_t *target_state) uint64_t mpidr = read_mpidr_el1(); unsigned int core_id = MPIDR_AFFLVL0_VAL(mpidr); - if (is_local_state_off(SYSTEM_PWR_STATE(target_state))) + if (is_local_state_off(SYSTEM_PWR_STATE(target_state))) { + dram_exit_retention(); imx_set_sys_lpm(core_id, false); + } if (!is_local_state_run(CLUSTER_PWR_STATE(target_state))) { imx_clear_rbc_count(); diff --git a/plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c b/plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c index 4c5f4f0d..3ed4dee0 100644 --- a/plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c +++ b/plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -31,6 +32,8 @@ static const mmap_region_t imx_mmap[] = { MAP_REGION_FLAT(IMX_GIC_BASE, IMX_GIC_SIZE, MT_DEVICE | MT_RW), MAP_REGION_FLAT(IMX_AIPS_BASE, IMX_AIPS_SIZE, MT_DEVICE | MT_RW), /* AIPS map */ + MAP_REGION_FLAT(OCRAM_S_BASE, OCRAM_S_SIZE, MT_DEVICE | MT_RW), /* OCRAM_S */ + MAP_REGION_FLAT(IMX_DDRPHY_BASE, IMX_DDR_IPS_SIZE, MT_DEVICE | MT_RW), /* DDRMIX */ {0}, }; @@ -164,6 +167,9 @@ void bl31_platform_setup(void) /* select the CKIL source to 32K OSC */ mmio_write_32(IMX_ANAMIX_BASE + ANAMIX_MISC_CTL, 0x1); + /* Init the dram info */ + dram_info_init(SAVED_DRAM_TIMING_BASE); + plat_gic_driver_init(); plat_gic_init(); diff --git a/plat/imx/imx8m/imx8mm/include/platform_def.h b/plat/imx/imx8m/imx8mm/include/platform_def.h index fc35dac1..96359e56 100644 --- a/plat/imx/imx8m/imx8mm/include/platform_def.h +++ b/plat/imx/imx8m/imx8mm/include/platform_def.h @@ -80,6 +80,7 @@ #define IMX_DDRC_BASE U(0x3d400000) #define IMX_DDRPHY_BASE U(0x3c000000) #define IMX_DDR_IPS_BASE U(0x3d000000) +#define IMX_DDR_IPS_SIZE U(0x1800000) #define IMX_ROM_BASE U(0x0) #define GPV_BASE U(0x32000000) @@ -119,6 +120,7 @@ #define OCRAM_S_BASE U(0x00180000) #define OCRAM_S_SIZE U(0x8000) #define OCRAM_S_LIMIT (OCRAM_S_BASE + OCRAM_S_SIZE) +#define SAVED_DRAM_TIMING_BASE OCRAM_S_BASE #define COUNTER_FREQUENCY 8000000 /* 8MHz */ diff --git a/plat/imx/imx8m/imx8mm/platform.mk b/plat/imx/imx8m/imx8mm/platform.mk index c0cb6c2a..bb644e98 100644 --- a/plat/imx/imx8m/imx8mm/platform.mk +++ b/plat/imx/imx8m/imx8mm/platform.mk @@ -8,6 +8,9 @@ PLAT_INCLUDES := -Iplat/imx/common/include \ -Iplat/imx/imx8m/include \ -Iplat/imx/imx8m/imx8mm/include +IMX_DRAM_SOURCES := plat/imx/imx8m/ddr/dram.c \ + plat/imx/imx8m/ddr/dram_retention.c + IMX_GIC_SOURCES := drivers/arm/gic/v3/gicv3_helpers.c \ drivers/arm/gic/v3/arm_gicv3_common.c \ drivers/arm/gic/v3/gic500.c \ @@ -36,6 +39,7 @@ BL31_SOURCES += plat/imx/common/imx8_helpers.S \ drivers/arm/tzc/tzc380.c \ drivers/delay_timer/delay_timer.c \ drivers/delay_timer/generic_delay_timer.c \ + ${IMX_DRAM_SOURCES} \ ${IMX_GIC_SOURCES} USE_COHERENT_MEM := 1 -- cgit v1.2.3