From 8cd4fa6dfff74b190294141bdc22634a7cb40a30 Mon Sep 17 00:00:00 2001 From: Jacky Bai Date: Fri, 8 May 2020 17:37:24 +0800 Subject: MLK-23821-04 plat: imx8m: Fix the rank to rank issue update umctl2's setting based on phy training CDD value to workaround the rank-to-rank space issue. Signed-off-by: Jacky Bai Reviewed-by: Anson Huang --- plat/imx/imx8m/ddr/dram.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'plat/imx/imx8m/ddr/dram.c') diff --git a/plat/imx/imx8m/ddr/dram.c b/plat/imx/imx8m/ddr/dram.c index b886b931..b206c716 100644 --- a/plat/imx/imx8m/ddr/dram.c +++ b/plat/imx/imx8m/ddr/dram.c @@ -71,6 +71,27 @@ static void get_mr_values(uint32_t (*mr_value)[8]) } } +static void save_rank_setting(void) +{ + uint32_t i, offset; + uint32_t pstate_num = dram_info.num_fsp; + + for(i = 0; i < pstate_num; i++) { + offset = i ? (i + 1) * 0x1000 : 0; + if (dram_info.dram_type == DDRC_LPDDR4) { + dram_info.rank_setting[i][0] = mmio_read_32(DDRC_DRAMTMG2(0) + offset); + } else { + dram_info.rank_setting[i][0] = mmio_read_32(DDRC_DRAMTMG2(0) + offset); + dram_info.rank_setting[i][1] = mmio_read_32(DDRC_DRAMTMG9(0) + offset); + } +#if !defined(PLAT_imx8mq) + dram_info.rank_setting[i][2] = mmio_read_32(DDRC_RANKCTL(0) + offset); +#endif + } +#if defined(PLAT_imx8mq) + dram_info.rank_setting[0][2] = mmio_read_32(DDRC_RANKCTL(0)); +#endif +} /* Restore the ddrc configs */ void dram_umctl2_init(struct dram_timing_info *timing) { @@ -178,6 +199,9 @@ void dram_info_init(unsigned long dram_timing_base) break; dram_info.num_fsp = i; + /* save the DRAMTMG2/9 for rank to rank workaround */ + save_rank_setting(); + /* check if has bypass mode support */ if (dram_info.timing_info->fsp_table[i-1] < 666) dram_info.bypass_mode = true; -- cgit v1.2.3