summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2018-08-21 14:49:30 +0200
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2018-09-28 12:08:54 +0200
commitef3a439172950c0a9e582784929559b2d5b3bf81 (patch)
treed85b79f604b0f4272b2d63e7e73872b1d5f311aa
parent87123df10ba43492e2f8d20da5d92c56057db316 (diff)
colibri imx6: use dynamic ddr calibration
Some Colibri iMX6 IT were found which were freezing at higher temperature. Using the SPL to do a dynamic calibration at each boot fixes the issue. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-rw-r--r--board/toradex/colibri_imx6/colibri_imx6.c9
-rw-r--r--configs/colibri_imx6_defconfig1
-rw-r--r--configs/colibri_imx6_tezi_defconfig1
3 files changed, 11 insertions, 0 deletions
diff --git a/board/toradex/colibri_imx6/colibri_imx6.c b/board/toradex/colibri_imx6/colibri_imx6.c
index c4e24fcda7..f3181a0fa1 100644
--- a/board/toradex/colibri_imx6/colibri_imx6.c
+++ b/board/toradex/colibri_imx6/colibri_imx6.c
@@ -1089,6 +1089,10 @@ static void ddr_init(int *table, int size)
writel(table[2 * i + 1], table[2 * i]);
}
+static struct mx6_ddr_sysinfo ddr_sysinfo = {
+ .dsize = 2,
+};
+
static void spl_dram_init(void)
{
int minc, maxc;
@@ -1105,6 +1109,7 @@ static void spl_dram_init(void)
#ifndef CONFIG_SPL_SILENT_CONSOLE
puts("Commercial temperature grade DDR3 timings, 32bit bus width.\n");
#endif
+ ddr_sysinfo.dsize = 1;
ddr_init(mx6s_dcd_table, ARRAY_SIZE(mx6s_dcd_table));
}
break;
@@ -1120,11 +1125,15 @@ static void spl_dram_init(void)
#ifndef CONFIG_SPL_SILENT_CONSOLE
puts("Industrial temperature grade DDR3 timings, 32bit bus width.\n");
#endif
+ ddr_sysinfo.dsize = 1;
ddr_init(mx6s_dcd_table, ARRAY_SIZE(mx6s_dcd_table));
}
break;
};
udelay(100);
+ /* Perform DDR DRAM calibration */
+ mmdc_do_write_level_calibration(&ddr_sysinfo);
+ mmdc_do_dqs_calibration(&ddr_sysinfo);
}
static iomux_v3_cfg_t const gpio_reset_pad[] = {
diff --git a/configs/colibri_imx6_defconfig b/configs/colibri_imx6_defconfig
index 0f7449b2f0..cd02f98ae3 100644
--- a/configs/colibri_imx6_defconfig
+++ b/configs/colibri_imx6_defconfig
@@ -4,6 +4,7 @@ CONFIG_SPL_GPIO_SUPPORT=y
CONFIG_SPL_LIBCOMMON_SUPPORT=y
CONFIG_SPL_LIBGENERIC_SUPPORT=y
CONFIG_SPL_SILENT_CONSOLE=y
+CONFIG_MX6_DDRCAL=y
CONFIG_TARGET_COLIBRI_IMX6=y
CONFIG_SPL_I2C_SUPPORT=y
CONFIG_SPL_MMC_SUPPORT=y
diff --git a/configs/colibri_imx6_tezi_defconfig b/configs/colibri_imx6_tezi_defconfig
index ce20822c8d..919eee6fc5 100644
--- a/configs/colibri_imx6_tezi_defconfig
+++ b/configs/colibri_imx6_tezi_defconfig
@@ -5,6 +5,7 @@ CONFIG_SPL_LIBCOMMON_SUPPORT=y
CONFIG_SPL_LIBGENERIC_SUPPORT=y
# CONFIG_TDX_CFG_BLOCK_USB_GADGET_PID is not set
CONFIG_TDX_EASY_INSTALLER=y
+CONFIG_MX6_DDRCAL=y
CONFIG_TARGET_COLIBRI_IMX6=y
CONFIG_SPL_I2C_SUPPORT=y
CONFIG_SPL_MMC_SUPPORT=y