summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/include/asm/arch-imx8m/imx8m_ddr.h2
-rw-r--r--drivers/ddr/imx8m/ddrphy_utils.c8
-rw-r--r--drivers/ddr/imx8m/helper.c4
3 files changed, 14 insertions, 0 deletions
diff --git a/arch/arm/include/asm/arch-imx8m/imx8m_ddr.h b/arch/arm/include/asm/arch-imx8m/imx8m_ddr.h
index ec698cfd88..b319592c93 100644
--- a/arch/arm/include/asm/arch-imx8m/imx8m_ddr.h
+++ b/arch/arm/include/asm/arch-imx8m/imx8m_ddr.h
@@ -46,6 +46,8 @@ struct dram_timing_info {
/* ddr phy PIE */
struct dram_cfg_param *ddrphy_pie;
unsigned int ddrphy_pie_num;
+ /* initialized drate table */
+ unsigned int fsp_table[4];
};
extern struct dram_timing_info dram_timing;
diff --git a/drivers/ddr/imx8m/ddrphy_utils.c b/drivers/ddr/imx8m/ddrphy_utils.c
index c1eace23f1..b7c314ec98 100644
--- a/drivers/ddr/imx8m/ddrphy_utils.c
+++ b/drivers/ddr/imx8m/ddrphy_utils.c
@@ -108,6 +108,10 @@ void wait_ddrphy_training_complete(void)
void ddrphy_init_set_dfi_clk(unsigned int drate)
{
switch (drate) {
+ case 3200:
+ dram_pll_init(DRAM_PLL_OUT_800M);
+ dram_disable_bypass();
+ break;
case 3000:
dram_pll_init(DRAM_PLL_OUT_750M);
dram_disable_bypass();
@@ -120,6 +124,10 @@ void ddrphy_init_set_dfi_clk(unsigned int drate)
dram_pll_init(DRAM_PLL_OUT_400M);
dram_disable_bypass();
break;
+ case 667:
+ dram_pll_init(DRAM_PLL_OUT_167M);
+ dram_disable_bypass();
+ break;
case 400:
dram_enable_bypass(DRAM_BYPASSCLK_400M);
break;
diff --git a/drivers/ddr/imx8m/helper.c b/drivers/ddr/imx8m/helper.c
index f5d1c37f82..dff1e2a962 100644
--- a/drivers/ddr/imx8m/helper.c
+++ b/drivers/ddr/imx8m/helper.c
@@ -131,6 +131,10 @@ void dram_config_save(struct dram_timing_info *timing_info,
saved_timing->ddrphy_trained_csr_num = timing_info->ddrphy_trained_csr_num;
saved_timing->ddrphy_pie_num = timing_info->ddrphy_pie_num;
+ /* save the fsp table */
+ for (i = 0; i < 4; i++)
+ saved_timing->fsp_table[i] = timing_info->fsp_table[i];
+
cfg = (struct dram_cfg_param *)(saved_timing_base + sizeof(*timing_info));
/* save ddrc config */