From 02cba32824185a28605130e7a7ae6dd79f3e4fa6 Mon Sep 17 00:00:00 2001 From: Bai Ping Date: Fri, 2 Mar 2018 13:14:00 +0800 Subject: plat: imx8mq: fix boot hang on ddr4/ddr3l board Currently, DDR3L/DDR4 board don't support DDR DVFS, So skip ddr switch 3200 mts if the DDR is not LPDDR4. Signed-off-by: Bai Ping --- plat/imx/imx8mq/ddr/lpddr4_dvfs.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'plat') diff --git a/plat/imx/imx8mq/ddr/lpddr4_dvfs.c b/plat/imx/imx8mq/ddr/lpddr4_dvfs.c index 8f37fc7d..bd96bbac 100644 --- a/plat/imx/imx8mq/ddr/lpddr4_dvfs.c +++ b/plat/imx/imx8mq/ddr/lpddr4_dvfs.c @@ -17,6 +17,9 @@ #include "lpddr4_dvfs.h" +#define DDRC_LPDDR4 (1 << 5) +#define DDR_TYPE_MASK 0x3f + /* lock used for DDR DVFS */ spinlock_t dfs_lock; /* IRQ used for DDR DVFS */ @@ -26,9 +29,15 @@ static volatile bool wait_ddrc_hwffc_done = true; static unsigned int init_fsp = 0x1; +static inline int get_ddr_type(void) +{ + return mmio_read_32(IMX_DDRC_BASE + DDRC_MSTR(0)) & DDR_TYPE_MASK; +} + void lpddr4_switch_to_3200(void) { - lpddr4_dvfs_swffc(init_fsp, 0x0); + if (get_ddr_type() == DDRC_LPDDR4) + lpddr4_dvfs_swffc(init_fsp, 0x0); } /* -- cgit v1.2.3