All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
@ 2015-11-04 18:03 York Sun
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 1/7] driver/ddr/fsl: Update DDR4 RTT values York Sun
                   ` (8 more replies)
  0 siblings, 9 replies; 21+ messages in thread
From: York Sun @ 2015-11-04 18:03 UTC (permalink / raw)
  To: u-boot

This patch set revises the DDR driver to support higher speed for DDR4
under heavy load (two dual-rank DIMMs) for four-chipselect interleaving.
Single quad-rank DIMM is not supported yet.


York Sun (7):
  driver/ddr/fsl: Update DDR4 RTT values
  driver/ddr/fsl: Update DDR4 MR6 for Vref range
  driver/ddr/fsl: Update MR5 RTT park
  driver/ddr/fsl: Update workaround for A008511 for vref range
  driver/ddr/fsl: Update timing config for heavy load
  armv8/ls2085aqds: Update DDR settings for four chip-select case
  armv8/ls2085ardb: Update DDR settings for four chip-select case

 board/freescale/ls2085aqds/ddr.c |   16 ++-
 board/freescale/ls2085ardb/ddr.c |   16 ++-
 drivers/ddr/fsl/ctrl_regs.c      |   48 +++++++-
 drivers/ddr/fsl/fsl_ddr_gen4.c   |   22 ++--
 drivers/ddr/fsl/options.c        |  237 +++++++++++++++++++++++++++++++++++++-
 include/fsl_ddr_sdram.h          |    9 ++
 6 files changed, 325 insertions(+), 23 deletions(-)

-- 
1.7.9.5

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 1/7] driver/ddr/fsl: Update DDR4 RTT values
  2015-11-04 18:03 [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 York Sun
@ 2015-11-04 18:03 ` York Sun
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 2/7] driver/ddr/fsl: Update DDR4 MR6 for Vref range York Sun
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 21+ messages in thread
From: York Sun @ 2015-11-04 18:03 UTC (permalink / raw)
  To: u-boot

DDR4 has different RTT value and code according to JEDEC spec. Update
the macros and options .

Signed-off-by: York Sun <yorksun@freescale.com>
---

 drivers/ddr/fsl/options.c |  237 ++++++++++++++++++++++++++++++++++++++++++++-
 include/fsl_ddr_sdram.h   |    9 ++
 2 files changed, 244 insertions(+), 2 deletions(-)

diff --git a/drivers/ddr/fsl/options.c b/drivers/ddr/fsl/options.c
index 3c09c64..791d644 100644
--- a/drivers/ddr/fsl/options.c
+++ b/drivers/ddr/fsl/options.c
@@ -29,7 +29,240 @@ struct dynamic_odt {
 	unsigned int odt_rtt_wr;
 };
 
-#if defined(CONFIG_SYS_FSL_DDR3) || defined(CONFIG_SYS_FSL_DDR4)
+#ifdef CONFIG_SYS_FSL_DDR4
+/* Quad rank is not verified yet due availability.
+ * Replacing 20 OHM with 34 OHM since DDR4 doesn't have 20 OHM option
+ */
+static const struct dynamic_odt single_Q[4] = {
+	{	/* cs0 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_CS_AND_OTHER_DIMM,
+		DDR4_RTT_34_OHM,	/* unverified */
+		DDR4_RTT_120_OHM
+	},
+	{	/* cs1 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_NEVER,
+		DDR4_RTT_OFF,
+		DDR4_RTT_120_OHM
+	},
+	{	/* cs2 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_CS_AND_OTHER_DIMM,
+		DDR4_RTT_34_OHM,
+		DDR4_RTT_120_OHM
+	},
+	{	/* cs3 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_NEVER,	/* tied high */
+		DDR4_RTT_OFF,
+		DDR4_RTT_120_OHM
+	}
+};
+
+static const struct dynamic_odt single_D[4] = {
+	{	/* cs0 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_ALL,
+		DDR4_RTT_40_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs1 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_NEVER,
+		DDR4_RTT_OFF,
+		DDR4_RTT_OFF
+	},
+	{0, 0, 0, 0},
+	{0, 0, 0, 0}
+};
+
+static const struct dynamic_odt single_S[4] = {
+	{	/* cs0 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_ALL,
+		DDR4_RTT_40_OHM,
+		DDR4_RTT_OFF
+	},
+	{0, 0, 0, 0},
+	{0, 0, 0, 0},
+	{0, 0, 0, 0},
+};
+
+static const struct dynamic_odt dual_DD[4] = {
+	{	/* cs0 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_SAME_DIMM,
+		DDR4_RTT_120_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs1 */
+		FSL_DDR_ODT_OTHER_DIMM,
+		FSL_DDR_ODT_OTHER_DIMM,
+		DDR4_RTT_34_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs2 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_SAME_DIMM,
+		DDR4_RTT_120_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs3 */
+		FSL_DDR_ODT_OTHER_DIMM,
+		FSL_DDR_ODT_OTHER_DIMM,
+		DDR4_RTT_34_OHM,
+		DDR4_RTT_OFF
+	}
+};
+
+static const struct dynamic_odt dual_DS[4] = {
+	{	/* cs0 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_SAME_DIMM,
+		DDR4_RTT_120_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs1 */
+		FSL_DDR_ODT_OTHER_DIMM,
+		FSL_DDR_ODT_OTHER_DIMM,
+		DDR4_RTT_34_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs2 */
+		FSL_DDR_ODT_OTHER_DIMM,
+		FSL_DDR_ODT_ALL,
+		DDR4_RTT_34_OHM,
+		DDR4_RTT_120_OHM
+	},
+	{0, 0, 0, 0}
+};
+static const struct dynamic_odt dual_SD[4] = {
+	{	/* cs0 */
+		FSL_DDR_ODT_OTHER_DIMM,
+		FSL_DDR_ODT_ALL,
+		DDR4_RTT_34_OHM,
+		DDR4_RTT_120_OHM
+	},
+	{0, 0, 0, 0},
+	{	/* cs2 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_SAME_DIMM,
+		DDR4_RTT_120_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs3 */
+		FSL_DDR_ODT_OTHER_DIMM,
+		FSL_DDR_ODT_OTHER_DIMM,
+		DDR4_RTT_34_OHM,
+		DDR4_RTT_OFF
+	}
+};
+
+static const struct dynamic_odt dual_SS[4] = {
+	{	/* cs0 */
+		FSL_DDR_ODT_OTHER_DIMM,
+		FSL_DDR_ODT_ALL,
+		DDR4_RTT_34_OHM,
+		DDR4_RTT_120_OHM
+	},
+	{0, 0, 0, 0},
+	{	/* cs2 */
+		FSL_DDR_ODT_OTHER_DIMM,
+		FSL_DDR_ODT_ALL,
+		DDR4_RTT_34_OHM,
+		DDR4_RTT_120_OHM
+	},
+	{0, 0, 0, 0}
+};
+
+static const struct dynamic_odt dual_D0[4] = {
+	{	/* cs0 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_SAME_DIMM,
+		DDR4_RTT_40_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs1 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_NEVER,
+		DDR4_RTT_OFF,
+		DDR4_RTT_OFF
+	},
+	{0, 0, 0, 0},
+	{0, 0, 0, 0}
+};
+
+static const struct dynamic_odt dual_0D[4] = {
+	{0, 0, 0, 0},
+	{0, 0, 0, 0},
+	{	/* cs2 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_SAME_DIMM,
+		DDR4_RTT_40_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs3 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_NEVER,
+		DDR4_RTT_OFF,
+		DDR4_RTT_OFF
+	}
+};
+
+static const struct dynamic_odt dual_S0[4] = {
+	{	/* cs0 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_CS,
+		DDR4_RTT_40_OHM,
+		DDR4_RTT_OFF
+	},
+	{0, 0, 0, 0},
+	{0, 0, 0, 0},
+	{0, 0, 0, 0}
+
+};
+
+static const struct dynamic_odt dual_0S[4] = {
+	{0, 0, 0, 0},
+	{0, 0, 0, 0},
+	{	/* cs2 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_CS,
+		DDR4_RTT_40_OHM,
+		DDR4_RTT_OFF
+	},
+	{0, 0, 0, 0}
+
+};
+
+static const struct dynamic_odt odt_unknown[4] = {
+	{	/* cs0 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_CS,
+		DDR4_RTT_120_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs1 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_CS,
+		DDR4_RTT_120_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs2 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_CS,
+		DDR4_RTT_120_OHM,
+		DDR4_RTT_OFF
+	},
+	{	/* cs3 */
+		FSL_DDR_ODT_NEVER,
+		FSL_DDR_ODT_CS,
+		DDR4_RTT_120_OHM,
+		DDR4_RTT_OFF
+	}
+};
+#elif defined(CONFIG_SYS_FSL_DDR3)
 static const struct dynamic_odt single_Q[4] = {
 	{	/* cs0 */
 		FSL_DDR_ODT_NEVER,
@@ -259,7 +492,7 @@ static const struct dynamic_odt odt_unknown[4] = {
 		DDR3_RTT_OFF
 	}
 };
-#else	/* CONFIG_SYS_FSL_DDR3 || CONFIG_SYS_FSL_DDR4 */
+#else	/* CONFIG_SYS_FSL_DDR3 */
 static const struct dynamic_odt single_Q[4] = {
 	{0, 0, 0, 0},
 	{0, 0, 0, 0},
diff --git a/include/fsl_ddr_sdram.h b/include/fsl_ddr_sdram.h
index c79fce0..4b022d4 100644
--- a/include/fsl_ddr_sdram.h
+++ b/include/fsl_ddr_sdram.h
@@ -33,6 +33,15 @@
 #define DDR3_RTT_20_OHM		4 /* RTT_Nom = RZQ/12 */
 #define DDR3_RTT_30_OHM		5 /* RTT_Nom = RZQ/8 */
 
+#define DDR4_RTT_OFF		0
+#define DDR4_RTT_60_OHM		1	/* RZQ/4 */
+#define DDR4_RTT_120_OHM	2	/* RZQ/2 */
+#define DDR4_RTT_40_OHM		3	/* RZQ/6 */
+#define DDR4_RTT_240_OHM	4	/* RZQ/1 */
+#define DDR4_RTT_48_OHM		5	/* RZQ/5 */
+#define DDR4_RTT_80_OHM		6	/* RZQ/3 */
+#define DDR4_RTT_34_OHM		7	/* RZQ/7 */
+
 #define DDR2_RTT_OFF		0
 #define DDR2_RTT_75_OHM		1
 #define DDR2_RTT_150_OHM	2
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 2/7] driver/ddr/fsl: Update DDR4 MR6 for Vref range
  2015-11-04 18:03 [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 York Sun
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 1/7] driver/ddr/fsl: Update DDR4 RTT values York Sun
@ 2015-11-04 18:03 ` York Sun
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 3/7] driver/ddr/fsl: Update MR5 RTT park York Sun
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 21+ messages in thread
From: York Sun @ 2015-11-04 18:03 UTC (permalink / raw)
  To: u-boot

MR6 bit 6 is set accrodingly for range 1 or 2, per JEDEC spec.

Signed-off-by: York Sun <yorksun@freescale.com>
---

 drivers/ddr/fsl/ctrl_regs.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/ddr/fsl/ctrl_regs.c b/drivers/ddr/fsl/ctrl_regs.c
index 8543679..36bf647 100644
--- a/drivers/ddr/fsl/ctrl_regs.c
+++ b/drivers/ddr/fsl/ctrl_regs.c
@@ -1186,6 +1186,9 @@ static void set_ddr_sdram_mode_10(const unsigned int ctrl_num,
 
 	esdmode6 = ((tccdl_min - 4) & 0x7) << 10;
 
+	if (popts->ddr_cdr2 & DDR_CDR2_VREF_RANGE_2)
+		esdmode6 |= 1 << 6;	/* Range 2 */
+
 	ddr->ddr_sdram_mode_10 = (0
 				 | ((esdmode6 & 0xffff) << 16)
 				 | ((esdmode7 & 0xffff) << 0)
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 3/7] driver/ddr/fsl: Update MR5 RTT park
  2015-11-04 18:03 [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 York Sun
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 1/7] driver/ddr/fsl: Update DDR4 RTT values York Sun
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 2/7] driver/ddr/fsl: Update DDR4 MR6 for Vref range York Sun
@ 2015-11-04 18:03 ` York Sun
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 4/7] driver/ddr/fsl: Update workaround for A008511 for vref range York Sun
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 21+ messages in thread
From: York Sun @ 2015-11-04 18:03 UTC (permalink / raw)
  To: u-boot

For four chip-selects enabled case, RTT is parked on all of them.

Signed-off-by: York Sun <yorksun@freescale.com>
---

 drivers/ddr/fsl/ctrl_regs.c |   19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/drivers/ddr/fsl/ctrl_regs.c b/drivers/ddr/fsl/ctrl_regs.c
index 36bf647..99714bf 100644
--- a/drivers/ddr/fsl/ctrl_regs.c
+++ b/drivers/ddr/fsl/ctrl_regs.c
@@ -1117,10 +1117,18 @@ static void set_ddr_sdram_mode_9(fsl_ddr_cfg_regs_t *ddr,
 	unsigned short esdmode4 = 0;	/* Extended SDRAM mode 4 */
 	unsigned short esdmode5;	/* Extended SDRAM mode 5 */
 	int rtt_park = 0;
-
+	bool four_cs = false;
+
+#if CONFIG_CHIP_SELECTS_PER_CTRL == 4
+	if ((ddr->cs[0].config & SDRAM_CS_CONFIG_EN) &&
+	    (ddr->cs[1].config & SDRAM_CS_CONFIG_EN) &&
+	    (ddr->cs[2].config & SDRAM_CS_CONFIG_EN) &&
+	    (ddr->cs[3].config & SDRAM_CS_CONFIG_EN))
+		four_cs = true;
+#endif
 	if (ddr->cs[0].config & SDRAM_CS_CONFIG_EN) {
 		esdmode5 = 0x00000500;	/* Data mask enable, RTT_PARK CS0 */
-		rtt_park = 1;
+		rtt_park = four_cs ? 0 : 1;
 	} else {
 		esdmode5 = 0x00000400;	/* Data mask enabled */
 	}
@@ -1130,7 +1138,10 @@ static void set_ddr_sdram_mode_9(fsl_ddr_cfg_regs_t *ddr,
 				 | ((esdmode5 & 0xffff) << 0)
 				);
 
-	/* only mode_9 use 0x500, others use 0x400 */
+	/* Normally only the first enabled CS use 0x500, others use 0x400
+	 * But when four chip-selects are all enabled, all mode registers
+	 * need 0x500 to park.
+	 */
 
 	debug("FSLDDR: ddr_sdram_mode_9) = 0x%08x\n", ddr->ddr_sdram_mode_9);
 	if (unq_mrs_en) {	/* unique mode registers are supported */
@@ -1138,7 +1149,7 @@ static void set_ddr_sdram_mode_9(fsl_ddr_cfg_regs_t *ddr,
 			if (!rtt_park &&
 			    (ddr->cs[i].config & SDRAM_CS_CONFIG_EN)) {
 				esdmode5 |= 0x00000500;	/* RTT_PARK */
-				rtt_park = 1;
+				rtt_park = four_cs ? 0 : 1;
 			} else {
 				esdmode5 = 0x00000400;
 			}
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 4/7] driver/ddr/fsl: Update workaround for A008511 for vref range
  2015-11-04 18:03 [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 York Sun
                   ` (2 preceding siblings ...)
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 3/7] driver/ddr/fsl: Update MR5 RTT park York Sun
@ 2015-11-04 18:03 ` York Sun
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 5/7] driver/ddr/fsl: Update timing config for heavy load York Sun
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 21+ messages in thread
From: York Sun @ 2015-11-04 18:03 UTC (permalink / raw)
  To: u-boot

The workaround requires different setting for range 1 vs 2.
Also adjust timeout value for waiting for controller to be idle.

Signed-off-by: York Sun <yorksun@freescale.com>
---

 drivers/ddr/fsl/fsl_ddr_gen4.c |   22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/drivers/ddr/fsl/fsl_ddr_gen4.c b/drivers/ddr/fsl/fsl_ddr_gen4.c
index 49e4688..70ce1b8 100644
--- a/drivers/ddr/fsl/fsl_ddr_gen4.c
+++ b/drivers/ddr/fsl/fsl_ddr_gen4.c
@@ -54,6 +54,9 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
 #endif
 #ifdef CONFIG_SYS_FSL_ERRATUM_A008511
 	u32 temp32, mr6;
+	u32 vref_seq1[3] = {0x80, 0x96, 0x16};	/* for range 1 */
+	u32 vref_seq2[3] = {0xc0, 0xf0, 0x70};	/* for range 2 */
+	u32 *vref_seq = vref_seq1;
 #endif
 #ifdef CONFIG_FSL_DDR_BIST
 	u32 mtcr, err_detect, err_sbe;
@@ -307,16 +310,21 @@ step2:
 	/* This erraum only applies to verion 5.2.0 */
 	if (fsl_ddr_get_version(ctrl_num) == 0x50200) {
 		/* Wait for idle */
-		timeout = 200;
+		timeout = 40;
 		while (!(ddr_in32(&ddr->debug[1]) & 0x2) &&
 		       (timeout > 0)) {
-			udelay(100);
+			udelay(1000);
 			timeout--;
 		}
 		if (timeout <= 0) {
 			printf("Controler %d timeout, debug_2 = %x\n",
 			       ctrl_num, ddr_in32(&ddr->debug[1]));
 		}
+
+		/* The vref setting sequence is different for range 2 */
+		if (regs->ddr_cdr2 & DDR_CDR2_VREF_RANGE_2)
+			vref_seq = vref_seq2;
+
 		/* Set VREF */
 		for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
 			if (!(regs->cs[i].config & SDRAM_CS_CONFIG_EN))
@@ -327,17 +335,17 @@ step2:
 				 MD_CNTL_CS_SEL(i)			|
 				 MD_CNTL_MD_SEL(6)			|
 				 0x00200000;
-			temp32 = mr6 | 0xc0;
+			temp32 = mr6 | vref_seq[0];
 			set_wait_for_bits_clear(&ddr->sdram_md_cntl,
 						temp32, MD_CNTL_MD_EN);
 			udelay(1);
 			debug("MR6 = 0x%08x\n", temp32);
-			temp32 = mr6 | 0xf0;
+			temp32 = mr6 | vref_seq[1];
 			set_wait_for_bits_clear(&ddr->sdram_md_cntl,
 						temp32, MD_CNTL_MD_EN);
 			udelay(1);
 			debug("MR6 = 0x%08x\n", temp32);
-			temp32 = mr6 | 0x70;
+			temp32 = mr6 | vref_seq[2];
 			set_wait_for_bits_clear(&ddr->sdram_md_cntl,
 						temp32, MD_CNTL_MD_EN);
 			udelay(1);
@@ -347,10 +355,10 @@ step2:
 		ddr_out32(&ddr->debug[28], 0);		/* Enable deskew */
 		ddr_out32(&ddr->debug[1], 0x400);	/* restart deskew */
 		/* wait for idle */
-		timeout = 200;
+		timeout = 40;
 		while (!(ddr_in32(&ddr->debug[1]) & 0x2) &&
 		       (timeout > 0)) {
-			udelay(100);
+			udelay(1000);
 			timeout--;
 		}
 		if (timeout <= 0) {
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 5/7] driver/ddr/fsl: Update timing config for heavy load
  2015-11-04 18:03 [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 York Sun
                   ` (3 preceding siblings ...)
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 4/7] driver/ddr/fsl: Update workaround for A008511 for vref range York Sun
@ 2015-11-04 18:03 ` York Sun
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 6/7] armv8/ls2085aqds: Update DDR settings for four chip-select case York Sun
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 21+ messages in thread
From: York Sun @ 2015-11-04 18:03 UTC (permalink / raw)
  To: u-boot

In case four chip-selects are all active, the turnaround times need to
increase to avoid overlapping under heavy load.

Signed-off-by: York Sun <yorksun@freescale.com>
---

 drivers/ddr/fsl/ctrl_regs.c |   26 ++++++++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/ddr/fsl/ctrl_regs.c b/drivers/ddr/fsl/ctrl_regs.c
index 99714bf..0bfcd34 100644
--- a/drivers/ddr/fsl/ctrl_regs.c
+++ b/drivers/ddr/fsl/ctrl_regs.c
@@ -317,7 +317,24 @@ static void set_timing_cfg_0(const unsigned int ctrl_num,
 
 	/* for faster clock, need more time for data setup */
 	trwt_mclk = (data_rate/1000000 > 1900) ? 3 : 2;
-	twrt_mclk = 1;
+
+	/*
+	 * for single quad-rank DIMM and two-slot DIMMs
+	 * to avoid ODT overlap
+	 */
+	switch (avoid_odt_overlap(dimm_params)) {
+	case 2:
+		twrt_mclk = 2;
+		twwt_mclk = 2;
+		trrt_mclk = 2;
+		break;
+	default:
+		twrt_mclk = 1;
+		twwt_mclk = 1;
+		trrt_mclk = 0;
+		break;
+	}
+
 	act_pd_exit_mclk = picos_to_mclk(ctrl_num, txp);
 	pre_pd_exit_mclk = act_pd_exit_mclk;
 	/*
@@ -1822,6 +1839,7 @@ static void set_timing_cfg_4(fsl_ddr_cfg_regs_t *ddr,
 	unsigned int wrt = 0; /* Write-to-read turnaround for same CS */
 	unsigned int rrt = 0; /* Read-to-read turnaround for same CS */
 	unsigned int wwt = 0; /* Write-to-write turnaround for same CS */
+	unsigned int trwt_mclk = 0;	/* ext_rwt */
 	unsigned int dll_lock = 0; /* DDR SDRAM DLL Lock Time */
 
 #if defined(CONFIG_SYS_FSL_DDR3) || defined(CONFIG_SYS_FSL_DDR4)
@@ -1835,17 +1853,21 @@ static void set_timing_cfg_4(fsl_ddr_cfg_regs_t *ddr,
 		wwt = 2;	/* BL/2 + 2 clocks */
 	}
 #endif
-
 #ifdef CONFIG_SYS_FSL_DDR4
 	dll_lock = 2;	/* tDLLK = 1024 clocks */
 #elif defined(CONFIG_SYS_FSL_DDR3)
 	dll_lock = 1;	/* tDLLK = 512 clocks from spec */
 #endif
+
+	if (popts->trwt_override)
+		trwt_mclk = popts->trwt;
+
 	ddr->timing_cfg_4 = (0
 			     | ((rwt & 0xf) << 28)
 			     | ((wrt & 0xf) << 24)
 			     | ((rrt & 0xf) << 20)
 			     | ((wwt & 0xf) << 16)
+			     | ((trwt_mclk & 0xc) << 12)
 			     | (dll_lock & 0x3)
 			     );
 	debug("FSLDDR: timing_cfg_4 = 0x%08x\n", ddr->timing_cfg_4);
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 6/7] armv8/ls2085aqds: Update DDR settings for four chip-select case
  2015-11-04 18:03 [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 York Sun
                   ` (4 preceding siblings ...)
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 5/7] driver/ddr/fsl: Update timing config for heavy load York Sun
@ 2015-11-04 18:03 ` York Sun
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 7/7] armv8/ls2085ardb: " York Sun
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 21+ messages in thread
From: York Sun @ 2015-11-04 18:03 UTC (permalink / raw)
  To: u-boot

When 4 chip-selects are used, vref should use range 1 and CDT uses 80 ohm,
and 2T timing is enabled.

Signed-off-by: York Sun <yorksun@freescale.com>
---

 board/freescale/ls2085aqds/ddr.c |   16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/board/freescale/ls2085aqds/ddr.c b/board/freescale/ls2085aqds/ddr.c
index 8d71ae1..d8562b1 100644
--- a/board/freescale/ls2085aqds/ddr.c
+++ b/board/freescale/ls2085aqds/ddr.c
@@ -131,10 +131,18 @@ found:
 	popts->zq_en = 1;
 
 	if (ddr_freq < 2350) {
-		popts->ddr_cdr1 = DDR_CDR1_DHC_EN |
-				  DDR_CDR1_ODT(DDR_CDR_ODT_60ohm);
-		popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_60ohm) |
-				  DDR_CDR2_VREF_RANGE_2;
+		if (pdimm[0].n_ranks == 2 && pdimm[1].n_ranks == 2) {
+			/* four chip-selects */
+			popts->ddr_cdr1 = DDR_CDR1_DHC_EN |
+					  DDR_CDR1_ODT(DDR_CDR_ODT_80ohm);
+			popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_80ohm);
+			popts->twot_en = 1; /* enable 2T timing */
+		} else {
+			popts->ddr_cdr1 = DDR_CDR1_DHC_EN |
+					  DDR_CDR1_ODT(DDR_CDR_ODT_60ohm);
+			popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_60ohm) |
+					  DDR_CDR2_VREF_RANGE_2;
+		}
 	} else {
 		popts->ddr_cdr1 = DDR_CDR1_DHC_EN |
 				  DDR_CDR1_ODT(DDR_CDR_ODT_100ohm);
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 7/7] armv8/ls2085ardb: Update DDR settings for four chip-select case
  2015-11-04 18:03 [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 York Sun
                   ` (5 preceding siblings ...)
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 6/7] armv8/ls2085aqds: Update DDR settings for four chip-select case York Sun
@ 2015-11-04 18:03 ` York Sun
  2015-11-05  8:03 ` [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 Joakim Tjernlund
  2015-12-15  0:41 ` York Sun
  8 siblings, 0 replies; 21+ messages in thread
From: York Sun @ 2015-11-04 18:03 UTC (permalink / raw)
  To: u-boot

When 4 chip-selects are used, vref should use range 1 and CDT uses 80 ohm,
and 2T timing is enabled.

Signed-off-by: York Sun <yorksun@freescale.com>

---

 board/freescale/ls2085ardb/ddr.c |   16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/board/freescale/ls2085ardb/ddr.c b/board/freescale/ls2085ardb/ddr.c
index 8d71ae1..e1d6aa1 100644
--- a/board/freescale/ls2085ardb/ddr.c
+++ b/board/freescale/ls2085ardb/ddr.c
@@ -131,10 +131,18 @@ found:
 	popts->zq_en = 1;
 
 	if (ddr_freq < 2350) {
-		popts->ddr_cdr1 = DDR_CDR1_DHC_EN |
-				  DDR_CDR1_ODT(DDR_CDR_ODT_60ohm);
-		popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_60ohm) |
-				  DDR_CDR2_VREF_RANGE_2;
+		if (pdimm[0].n_ranks == 2 && pdimm[1].n_ranks == 2) {
+			/* four chip-selects */
+			popts->ddr_cdr1 = DDR_CDR1_DHC_EN |
+					  DDR_CDR1_ODT(DDR_CDR_ODT_80ohm);
+			popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_80ohm);
+			popts->twot_en = 1;	/* enable 2T timing */
+		} else {
+			popts->ddr_cdr1 = DDR_CDR1_DHC_EN |
+					  DDR_CDR1_ODT(DDR_CDR_ODT_60ohm);
+			popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_60ohm) |
+					  DDR_CDR2_VREF_RANGE_2;
+		}
 	} else {
 		popts->ddr_cdr1 = DDR_CDR1_DHC_EN |
 				  DDR_CDR1_ODT(DDR_CDR_ODT_100ohm);
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-04 18:03 [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 York Sun
                   ` (6 preceding siblings ...)
  2015-11-04 18:03 ` [U-Boot] [PATCH v1 7/7] armv8/ls2085ardb: " York Sun
@ 2015-11-05  8:03 ` Joakim Tjernlund
  2015-11-05  8:23   ` Yuantian Tang
  2015-12-15  0:41 ` York Sun
  8 siblings, 1 reply; 21+ messages in thread
From: Joakim Tjernlund @ 2015-11-05  8:03 UTC (permalink / raw)
  To: u-boot

On Wed, 2015-11-04 at 10:03 -0800, York Sun wrote:
> This patch set revises the DDR driver to support higher speed for DDR4
> under heavy load (two dual-rank DIMMs) for four-chipselect interleaving.
> Single quad-rank DIMM is not supported yet.

Hi York

Seeing these patches reminds me about something I have been mening to ask,
Is it possible init the ddr controller/ddr ram (using ECC also) but
still retain (parts of) memory contents?

I am looking at keeping data at the end of memory when performing a
warm start, but still init the controll/ddr ram (without D_INIT set).
This way one could pick up any changes to DDR timing if needed.
Before reboot, ddr ram is set to Self Refresh(SR).

 Jocke  

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-05  8:03 ` [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 Joakim Tjernlund
@ 2015-11-05  8:23   ` Yuantian Tang
  2015-11-05  9:55     ` Joakim Tjernlund
  0 siblings, 1 reply; 21+ messages in thread
From: Yuantian Tang @ 2015-11-05  8:23 UTC (permalink / raw)
  To: u-boot

Hi Jocke,

we achieved deep sleep mode that did exactly what you asked for.
If waken up from deep sleep, soc will resume from uboot and re-initialized DDR controller with contents untouched.
Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP related code.

Regards,
Yuantian

> -----Original Message-----
> From: Joakim Tjernlund [mailto:joakim.tjernlund at transmode.se]
> Sent: Thursday, November 05, 2015 4:04 PM
> To: Sun York-R58495 <yorksun@freescale.com>; u-boot at lists.denx.de
> Cc: curt at cumulusnetworks.com; Sharma Bhupesh-B45370
> <bhupesh.sharma@freescale.com>; trini at konsulko.com;
> l.majewski at samsung.com; Tang Yuantian-B29983
> <Yuantian.Tang@freescale.com>; Kushwaha Prabhakar-B32579
> <prabhakar@freescale.com>; Liu Shengzhou-B36685
> <Shengzhou.Liu@freescale.com>; yamada.m at jp.panasonic.com
> Subject: Re: [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for
> LSCH3
> 
> On Wed, 2015-11-04 at 10:03 -0800, York Sun wrote:
> > This patch set revises the DDR driver to support higher speed for DDR4
> > under heavy load (two dual-rank DIMMs) for four-chipselect interleaving.
> > Single quad-rank DIMM is not supported yet.
> 
> Hi York
> 
> Seeing these patches reminds me about something I have been mening to
> ask, Is it possible init the ddr controller/ddr ram (using ECC also) but still
> retain (parts of) memory contents?
> 
> I am looking at keeping data at the end of memory when performing a warm
> start, but still init the controll/ddr ram (without D_INIT set).
> This way one could pick up any changes to DDR timing if needed.
> Before reboot, ddr ram is set to Self Refresh(SR).
> 
>  Jocke

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-05  8:23   ` Yuantian Tang
@ 2015-11-05  9:55     ` Joakim Tjernlund
  2015-11-05 17:42       ` York Sun
  0 siblings, 1 reply; 21+ messages in thread
From: Joakim Tjernlund @ 2015-11-05  9:55 UTC (permalink / raw)
  To: u-boot

On Thu, 2015-11-05 at 08:23 +0000, Yuantian Tang wrote:
> Hi Jocke,
> 
> we achieved deep sleep mode that did exactly what you asked for.
> If waken up from deep sleep, soc will resume from uboot and re-initialized DDR controller with contents
> untouched.
> Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP related code.

Looking at it now and it looks the same as for ddr3? Some questions though:
 289		if (is_warm_boot()) {
 289                 /* enter self-refresh */
 290                 temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
 291                 temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
 292                 ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);

Why do you need to force SR here? The DDR RAM must already be in SR at this point?
I come from CPU reset state so my DDR controller has HW default values so
this does not feel safe.

 293                 /* do board specific memory setup */
 294                 board_mem_sleep_setup();
 295 
 296                 temp_sdram_cfg = (ddr_in32(&ddr->sdram_cfg) | SDRAM_CFG_BI);
SDRAM_CFG_BI skips a lot(all?) init of DDR RAM. What if you want to change some DDR RAM
timing/config due to a bug? Then you would have to force a cold start.

Do you use ECC? Seems to be some issues with ECC if you skip D_INIT

 Jocke

> 
> Regards,
> Yuantian
> 
> > -----Original Message-----
> > From: Joakim Tjernlund [mailto:joakim.tjernlund at transmode.se]
> > Sent: Thursday, November 05, 2015 4:04 PM
> > To: Sun York-R58495 <yorksun@freescale.com>; u-boot at lists.denx.de
> > Cc: curt at cumulusnetworks.com; Sharma Bhupesh-B45370
> > <bhupesh.sharma@freescale.com>; trini at konsulko.com;
> > l.majewski at samsung.com; Tang Yuantian-B29983
> > <Yuantian.Tang@freescale.com>; Kushwaha Prabhakar-B32579
> > <prabhakar@freescale.com>; Liu Shengzhou-B36685
> > <Shengzhou.Liu@freescale.com>; yamada.m at jp.panasonic.com
> > Subject: Re: [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for
> > LSCH3
> > 
> > On Wed, 2015-11-04 at 10:03 -0800, York Sun wrote:
> > > This patch set revises the DDR driver to support higher speed for DDR4
> > > under heavy load (two dual-rank DIMMs) for four-chipselect interleaving.
> > > Single quad-rank DIMM is not supported yet.
> > 
> > Hi York
> > 
> > Seeing these patches reminds me about something I have been mening to
> > ask, Is it possible init the ddr controller/ddr ram (using ECC also) but still
> > retain (parts of) memory contents?
> > 
> > I am looking at keeping data at the end of memory when performing a warm
> > start, but still init the controll/ddr ram (without D_INIT set).
> > This way one could pick up any changes to DDR timing if needed.
> > Before reboot, ddr ram is set to Self Refresh(SR).
> > 
> >  Jocke

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-05  9:55     ` Joakim Tjernlund
@ 2015-11-05 17:42       ` York Sun
  2015-11-05 18:19         ` Joakim Tjernlund
  2015-11-06  2:24         ` Yuantian Tang
  0 siblings, 2 replies; 21+ messages in thread
From: York Sun @ 2015-11-05 17:42 UTC (permalink / raw)
  To: u-boot



On 11/05/2015 01:55 AM, Joakim Tjernlund wrote:
> On Thu, 2015-11-05 at 08:23 +0000, Yuantian Tang wrote:
>> Hi Jocke,
>>
>> we achieved deep sleep mode that did exactly what you asked for.
>> If waken up from deep sleep, soc will resume from uboot and re-initialized DDR controller with contents
>> untouched.
>> Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP related code.
> 
> Looking at it now and it looks the same as for ddr3? Some questions though:
>  289		if (is_warm_boot()) {
>  289                 /* enter self-refresh */
>  290                 temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
>  291                 temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
>  292                 ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
> 
> Why do you need to force SR here? The DDR RAM must already be in SR at this point?
> I come from CPU reset state so my DDR controller has HW default values so
> this does not feel safe.

This may be redundant. If the code runs to this line, it should come back from a
deep sleep. The core is in reset state but the DDR controller is not. It should
be in self-refresh mode. I will leave that to Yuantian to comment.

> 
>  293                 /* do board specific memory setup */
>  294                 board_mem_sleep_setup();
>  295 
>  296                 temp_sdram_cfg = (ddr_in32(&ddr->sdram_cfg) | SDRAM_CFG_BI);
> SDRAM_CFG_BI skips a lot(all?) init of DDR RAM. What if you want to change some DDR RAM
> timing/config due to a bug? Then you would have to force a cold start.
> 
> Do you use ECC? Seems to be some issues with ECC if you skip D_INIT
> 

To perform a warm start, the data in DDR is preserved. So you don't need to init
the data again for ECC. To preserve data, you cannot run D_INIT again, which
will destroy the data for sure.

York

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-05 17:42       ` York Sun
@ 2015-11-05 18:19         ` Joakim Tjernlund
  2015-11-05 18:29           ` York Sun
  2015-11-06  2:24         ` Yuantian Tang
  1 sibling, 1 reply; 21+ messages in thread
From: Joakim Tjernlund @ 2015-11-05 18:19 UTC (permalink / raw)
  To: u-boot

On Thu, 2015-11-05 at 09:42 -0800, York Sun wrote:
> 
> On 11/05/2015 01:55 AM, Joakim Tjernlund wrote:
> > On Thu, 2015-11-05 at 08:23 +0000, Yuantian Tang wrote:
> > > Hi Jocke,
> > > 
> > > we achieved deep sleep mode that did exactly what you asked for.
> > > If waken up from deep sleep, soc will resume from uboot and re-initialized DDR controller with contents
> > > untouched.
> > > Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP related code.
> > 
> > Looking at it now and it looks the same as for ddr3? Some questions though:
> >  289		if (is_warm_boot()) {
> >  289                 /* enter self-refresh */
> >  290                 temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
> >  291                 temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
> >  292                 ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
> > 
> > Why do you need to force SR here? The DDR RAM must already be in SR at this point?
> > I come from CPU reset state so my DDR controller has HW default values so
> > this does not feel safe.
> 
> This may be redundant. If the code runs to this line, it should come back from a
> deep sleep. The core is in reset state but the DDR controller is not. It should
> be in self-refresh mode. I will leave that to Yuantian to comment.

OK

> 
> > 
> >  293                 /* do board specific memory setup */
> >  294                 board_mem_sleep_setup();
> >  295 
> >  296                 temp_sdram_cfg = (ddr_in32(&ddr->sdram_cfg) | SDRAM_CFG_BI);
> > SDRAM_CFG_BI skips a lot(all?) init of DDR RAM. What if you want to change some DDR RAM
> > timing/config due to a bug? Then you would have to force a cold start.
> > 
> > Do you use ECC? Seems to be some issues with ECC if you skip D_INIT
> > 
> 
> To perform a warm start, the data in DDR is preserved. So you don't need to init
> the data again for ECC. To preserve data, you cannot run D_INIT again, which
> will destroy the data for sure.

yes, but what about SDRAM_CFG_BI? Why do you need to set that here?
I much rather just skip D_INIT and reconfigure DDR RAM, just in case one wants
to correct some aspect of DDR config in later releases and feels a lot more robust.

Our systems cannot be coldstarted just because you upgrade SW on them.

 Jocke

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-05 18:19         ` Joakim Tjernlund
@ 2015-11-05 18:29           ` York Sun
  2015-11-05 19:53             ` Joakim Tjernlund
  0 siblings, 1 reply; 21+ messages in thread
From: York Sun @ 2015-11-05 18:29 UTC (permalink / raw)
  To: u-boot



On 11/05/2015 10:19 AM, Joakim Tjernlund wrote:
> On Thu, 2015-11-05 at 09:42 -0800, York Sun wrote:
>>
>> On 11/05/2015 01:55 AM, Joakim Tjernlund wrote:
>>> On Thu, 2015-11-05 at 08:23 +0000, Yuantian Tang wrote:
>>>> Hi Jocke,
>>>>
>>>> we achieved deep sleep mode that did exactly what you asked for.
>>>> If waken up from deep sleep, soc will resume from uboot and re-initialized DDR controller with contents
>>>> untouched.
>>>> Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP related code.
>>>
>>> Looking at it now and it looks the same as for ddr3? Some questions though:
>>>  289		if (is_warm_boot()) {
>>>  289                 /* enter self-refresh */
>>>  290                 temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
>>>  291                 temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
>>>  292                 ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
>>>
>>> Why do you need to force SR here? The DDR RAM must already be in SR at this point?
>>> I come from CPU reset state so my DDR controller has HW default values so
>>> this does not feel safe.
>>
>> This may be redundant. If the code runs to this line, it should come back from a
>> deep sleep. The core is in reset state but the DDR controller is not. It should
>> be in self-refresh mode. I will leave that to Yuantian to comment.
> 
> OK
> 
>>
>>>
>>>  293                 /* do board specific memory setup */
>>>  294                 board_mem_sleep_setup();
>>>  295 
>>>  296                 temp_sdram_cfg = (ddr_in32(&ddr->sdram_cfg) | SDRAM_CFG_BI);
>>> SDRAM_CFG_BI skips a lot(all?) init of DDR RAM. What if you want to change some DDR RAM
>>> timing/config due to a bug? Then you would have to force a cold start.
>>>
>>> Do you use ECC? Seems to be some issues with ECC if you skip D_INIT
>>>
>>
>> To perform a warm start, the data in DDR is preserved. So you don't need to init
>> the data again for ECC. To preserve data, you cannot run D_INIT again, which
>> will destroy the data for sure.
> 
> yes, but what about SDRAM_CFG_BI? Why do you need to set that here?
> I much rather just skip D_INIT and reconfigure DDR RAM, just in case one wants
> to correct some aspect of DDR config in later releases and feels a lot more robust.
> 
> Our systems cannot be coldstarted just because you upgrade SW on them.

Jocke,

If your memory has been intialized, you can set [BI] bit to bypass
re-initialization. It does different things than D_INIT. In short, D_INIT
initialize the data, i.e. the content of DDR, while BI bypassing initializing
DDR memory (or "chip" if that is easier to understand).

York

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-05 18:29           ` York Sun
@ 2015-11-05 19:53             ` Joakim Tjernlund
  2015-11-05 20:47               ` York Sun
  0 siblings, 1 reply; 21+ messages in thread
From: Joakim Tjernlund @ 2015-11-05 19:53 UTC (permalink / raw)
  To: u-boot

On Thu, 2015-11-05 at 10:29 -0800, York Sun wrote:
> 
> On 11/05/2015 10:19 AM, Joakim Tjernlund wrote:
> > On Thu, 2015-11-05 at 09:42 -0800, York Sun wrote:
> > > 
> > > On 11/05/2015 01:55 AM, Joakim Tjernlund wrote:
> > > > On Thu, 2015-11-05 at 08:23 +0000, Yuantian Tang wrote:
> > > > > Hi Jocke,
> > > > > 
> > > > > we achieved deep sleep mode that did exactly what you asked for.
> > > > > If waken up from deep sleep, soc will resume from uboot and re-initialized DDR controller with
> > > > > contents
> > > > > untouched.
> > > > > Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP related code.
> > > > 
> > > > Looking at it now and it looks the same as for ddr3? Some questions though:
> > > >  289		if (is_warm_boot()) {
> > > >  289                 /* enter self-refresh */
> > > >  290                 temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
> > > >  291                 temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
> > > >  292                 ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
> > > > 
> > > > Why do you need to force SR here? The DDR RAM must already be in SR at this point?
> > > > I come from CPU reset state so my DDR controller has HW default values so
> > > > this does not feel safe.
> > > 
> > > This may be redundant. If the code runs to this line, it should come back from a
> > > deep sleep. The core is in reset state but the DDR controller is not. It should
> > > be in self-refresh mode. I will leave that to Yuantian to comment.
> > 
> > OK
> > 
> > > 
> > > > 
> > > >  293                 /* do board specific memory setup */
> > > >  294                 board_mem_sleep_setup();
> > > >  295 
> > > >  296                 temp_sdram_cfg = (ddr_in32(&ddr->sdram_cfg) | SDRAM_CFG_BI);
> > > > SDRAM_CFG_BI skips a lot(all?) init of DDR RAM. What if you want to change some DDR RAM
> > > > timing/config due to a bug? Then you would have to force a cold start.
> > > > 
> > > > Do you use ECC? Seems to be some issues with ECC if you skip D_INIT
> > > > 
> > > 
> > > To perform a warm start, the data in DDR is preserved. So you don't need to init
> > > the data again for ECC. To preserve data, you cannot run D_INIT again, which
> > > will destroy the data for sure.
> > 
> > yes, but what about SDRAM_CFG_BI? Why do you need to set that here?
> > I much rather just skip D_INIT and reconfigure DDR RAM, just in case one wants
> > to correct some aspect of DDR config in later releases and feels a lot more robust.
> > 
> > Our systems cannot be coldstarted just because you upgrade SW on them.
> 
> Jocke,
> 
> If your memory has been intialized, you can set [BI] bit to bypass
> re-initialization. It does different things than D_INIT. In short, D_INIT
> initialize the data, i.e. the content of DDR, while BI bypassing initializing
> DDR memory (or "chip" if that is easier to understand).

Yes, that is what I want, reinit of chip, but not data contents.
I wrote why:
"just in case one wants to correct some aspect of DDR config in later releases and feels a lot more robust"

 Jocke

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-05 19:53             ` Joakim Tjernlund
@ 2015-11-05 20:47               ` York Sun
  2015-11-12  7:35                 ` Joakim Tjernlund
  0 siblings, 1 reply; 21+ messages in thread
From: York Sun @ 2015-11-05 20:47 UTC (permalink / raw)
  To: u-boot



On 11/05/2015 11:53 AM, Joakim Tjernlund wrote:
> On Thu, 2015-11-05 at 10:29 -0800, York Sun wrote:
>>
>> On 11/05/2015 10:19 AM, Joakim Tjernlund wrote:
>>> On Thu, 2015-11-05 at 09:42 -0800, York Sun wrote:
>>>>
>>>> On 11/05/2015 01:55 AM, Joakim Tjernlund wrote:
>>>>> On Thu, 2015-11-05 at 08:23 +0000, Yuantian Tang wrote:
>>>>>> Hi Jocke,
>>>>>>
>>>>>> we achieved deep sleep mode that did exactly what you asked for.
>>>>>> If waken up from deep sleep, soc will resume from uboot and re-initialized DDR controller with
>>>>>> contents
>>>>>> untouched.
>>>>>> Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP related code.
>>>>>
>>>>> Looking at it now and it looks the same as for ddr3? Some questions though:
>>>>>  289		if (is_warm_boot()) {
>>>>>  289                 /* enter self-refresh */
>>>>>  290                 temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
>>>>>  291                 temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
>>>>>  292                 ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
>>>>>
>>>>> Why do you need to force SR here? The DDR RAM must already be in SR at this point?
>>>>> I come from CPU reset state so my DDR controller has HW default values so
>>>>> this does not feel safe.
>>>>
>>>> This may be redundant. If the code runs to this line, it should come back from a
>>>> deep sleep. The core is in reset state but the DDR controller is not. It should
>>>> be in self-refresh mode. I will leave that to Yuantian to comment.
>>>
>>> OK
>>>
>>>>
>>>>>
>>>>>  293                 /* do board specific memory setup */
>>>>>  294                 board_mem_sleep_setup();
>>>>>  295 
>>>>>  296                 temp_sdram_cfg = (ddr_in32(&ddr->sdram_cfg) | SDRAM_CFG_BI);
>>>>> SDRAM_CFG_BI skips a lot(all?) init of DDR RAM. What if you want to change some DDR RAM
>>>>> timing/config due to a bug? Then you would have to force a cold start.
>>>>>
>>>>> Do you use ECC? Seems to be some issues with ECC if you skip D_INIT
>>>>>
>>>>
>>>> To perform a warm start, the data in DDR is preserved. So you don't need to init
>>>> the data again for ECC. To preserve data, you cannot run D_INIT again, which
>>>> will destroy the data for sure.
>>>
>>> yes, but what about SDRAM_CFG_BI? Why do you need to set that here?
>>> I much rather just skip D_INIT and reconfigure DDR RAM, just in case one wants
>>> to correct some aspect of DDR config in later releases and feels a lot more robust.
>>>
>>> Our systems cannot be coldstarted just because you upgrade SW on them.
>>
>> Jocke,
>>
>> If your memory has been intialized, you can set [BI] bit to bypass
>> re-initialization. It does different things than D_INIT. In short, D_INIT
>> initialize the data, i.e. the content of DDR, while BI bypassing initializing
>> DDR memory (or "chip" if that is easier to understand).
> 
> Yes, that is what I want, reinit of chip, but not data contents.
> I wrote why:
> "just in case one wants to correct some aspect of DDR config in later releases and feels a lot more robust"

Jocke,

I am not 100% sure. I will take this question to our DDR designer.

York

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-05 17:42       ` York Sun
  2015-11-05 18:19         ` Joakim Tjernlund
@ 2015-11-06  2:24         ` Yuantian Tang
  2015-11-06 11:10           ` Joakim Tjernlund
  1 sibling, 1 reply; 21+ messages in thread
From: Yuantian Tang @ 2015-11-06  2:24 UTC (permalink / raw)
  To: u-boot



> -----Original Message-----
> From: York Sun [mailto:yorksun at freescale.com]
> Sent: Friday, November 06, 2015 1:42 AM
> To: Joakim Tjernlund <joakim.tjernlund@transmode.se>; Tang Yuantian-
> B29983 <Yuantian.Tang@freescale.com>; u-boot at lists.denx.de
> Cc: Kushwaha Prabhakar-B32579 <prabhakar@freescale.com>; Sharma
> Bhupesh-B45370 <bhupesh.sharma@freescale.com>; trini at konsulko.com;
> Liu Shengzhou-B36685 <Shengzhou.Liu@freescale.com>;
> curt at cumulusnetworks.com; l.majewski at samsung.com;
> yamada.m at jp.panasonic.com
> Subject: Re: [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for
> LSCH3
> 
> 
> 
> On 11/05/2015 01:55 AM, Joakim Tjernlund wrote:
> > On Thu, 2015-11-05 at 08:23 +0000, Yuantian Tang wrote:
> >> Hi Jocke,
> >>
> >> we achieved deep sleep mode that did exactly what you asked for.
> >> If waken up from deep sleep, soc will resume from uboot and
> >> re-initialized DDR controller with contents untouched.
> >> Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP
> related code.
> >
> > Looking at it now and it looks the same as for ddr3? Some questions though:
> >  289		if (is_warm_boot()) {
> >  289                 /* enter self-refresh */
> >  290                 temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
> >  291                 temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
> >  292                 ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
> >
> > Why do you need to force SR here? The DDR RAM must already be in SR at
> this point?
> > I come from CPU reset state so my DDR controller has HW default values
> > so this does not feel safe.
> 
> This may be redundant. If the code runs to this line, it should come back from
> a deep sleep. The core is in reset state but the DDR controller is not. It should
> be in self-refresh mode. I will leave that to Yuantian to comment.
> 
This is mandatory.  the steps are: re-enter SR mode, enable DDR controller, exit SR mode. We do that to smooth the transition and avoid any glitch caused when controller takes over memory.

Regards,
Yuantian
 
> >
> >  293                 /* do board specific memory setup */
> >  294                 board_mem_sleep_setup();
> >  295
> >  296                 temp_sdram_cfg = (ddr_in32(&ddr->sdram_cfg) |
> SDRAM_CFG_BI);
> > SDRAM_CFG_BI skips a lot(all?) init of DDR RAM. What if you want to
> > change some DDR RAM timing/config due to a bug? Then you would have
> to force a cold start.
> >
> > Do you use ECC? Seems to be some issues with ECC if you skip D_INIT
> >
> 
> To perform a warm start, the data in DDR is preserved. So you don't need to
> init the data again for ECC. To preserve data, you cannot run D_INIT again,
> which will destroy the data for sure.
> 
> York

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-06  2:24         ` Yuantian Tang
@ 2015-11-06 11:10           ` Joakim Tjernlund
  0 siblings, 0 replies; 21+ messages in thread
From: Joakim Tjernlund @ 2015-11-06 11:10 UTC (permalink / raw)
  To: u-boot

On Fri, 2015-11-06 at 02:24 +0000, Yuantian Tang wrote:
> 
> > -----Original Message-----
> > From: York Sun [mailto:yorksun at freescale.com]
> > Sent: Friday, November 06, 2015 1:42 AM
> > To: Joakim Tjernlund <joakim.tjernlund@transmode.se>; Tang Yuantian-
> > B29983 <Yuantian.Tang@freescale.com>; u-boot at lists.denx.de
> > Cc: Kushwaha Prabhakar-B32579 <prabhakar@freescale.com>; Sharma
> > Bhupesh-B45370 <bhupesh.sharma@freescale.com>; trini at konsulko.com;
> > Liu Shengzhou-B36685 <Shengzhou.Liu@freescale.com>;
> > curt at cumulusnetworks.com; l.majewski at samsung.com;
> > yamada.m at jp.panasonic.com
> > Subject: Re: [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for
> > LSCH3
> > 
> > 
> > 
> > On 11/05/2015 01:55 AM, Joakim Tjernlund wrote:
> > > On Thu, 2015-11-05 at 08:23 +0000, Yuantian Tang wrote:
> > > > Hi Jocke,
> > > > 
> > > > we achieved deep sleep mode that did exactly what you asked for.
> > > > If waken up from deep sleep, soc will resume from uboot and
> > > > re-initialized DDR controller with contents untouched.
> > > > Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP
> > related code.
> > > 
> > > Looking at it now and it looks the same as for ddr3? Some questions though:
> > >  289		if (is_warm_boot()) {
> > >  289                 /* enter self-refresh */
> > >  290                 temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
> > >  291                 temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
> > >  292                 ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
> > > 
> > > Why do you need to force SR here? The DDR RAM must already be in SR at
> > this point?
> > > I come from CPU reset state so my DDR controller has HW default values
> > > so this does not feel safe.
> > 
> > This may be redundant. If the code runs to this line, it should come back from
> > a deep sleep. The core is in reset state but the DDR controller is not. It should
> > be in self-refresh mode. I will leave that to Yuantian to comment.
> > 
> This is mandatory.  the steps are: re-enter SR mode, enable DDR controller, exit SR mode. We do that to 
> smooth the transition and avoid any glitch caused when controller takes over memory.

hmm, why not do this always? I can't hurt normal operation I think.
It would be less special code for this type of operation.

 Jocke

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-05 20:47               ` York Sun
@ 2015-11-12  7:35                 ` Joakim Tjernlund
  2015-11-12 16:43                   ` York Sun
  0 siblings, 1 reply; 21+ messages in thread
From: Joakim Tjernlund @ 2015-11-12  7:35 UTC (permalink / raw)
  To: u-boot

On Thu, 2015-11-05 at 12:47 -0800, York Sun wrote:
> 
> On 11/05/2015 11:53 AM, Joakim Tjernlund wrote:
> > On Thu, 2015-11-05 at 10:29 -0800, York Sun wrote:
> > > 
> > > On 11/05/2015 10:19 AM, Joakim Tjernlund wrote:
> > > > On Thu, 2015-11-05 at 09:42 -0800, York Sun wrote:
> > > > > 
> > > > > On 11/05/2015 01:55 AM, Joakim Tjernlund wrote:
> > > > > > On Thu, 2015-11-05 at 08:23 +0000, Yuantian Tang wrote:
> > > > > > > Hi Jocke,
> > > > > > > 
> > > > > > > we achieved deep sleep mode that did exactly what you asked for.
> > > > > > > If waken up from deep sleep, soc will resume from uboot and re-initialized DDR controller with
> > > > > > > contents
> > > > > > > untouched.
> > > > > > > Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP related code.
> > > > > > 
> > > > > > Looking at it now and it looks the same as for ddr3? Some questions though:
> > > > > > ?289		if (is_warm_boot()) {
> > > > > > ?289?????????????????/* enter self-refresh */
> > > > > > ?290?????????????????temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
> > > > > > ?291?????????????????temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
> > > > > > ?292?????????????????ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
> > > > > > 
> > > > > > Why do you need to force SR here? The DDR RAM must already be in SR at this point?
> > > > > > I come from CPU reset state so my DDR controller has HW default values so
> > > > > > this does not feel safe.
> > > > > 
> > > > > This may be redundant. If the code runs to this line, it should come back from a
> > > > > deep sleep. The core is in reset state but the DDR controller is not. It should
> > > > > be in self-refresh mode. I will leave that to Yuantian to comment.
> > > > 
> > > > OK
> > > > 
> > > > > 
> > > > > > 
> > > > > > ?293?????????????????/* do board specific memory setup */
> > > > > > ?294?????????????????board_mem_sleep_setup();
> > > > > > ?295 
> > > > > > ?296?????????????????temp_sdram_cfg = (ddr_in32(&ddr->sdram_cfg) | SDRAM_CFG_BI);
> > > > > > SDRAM_CFG_BI skips a lot(all?) init of DDR RAM. What if you want to change some DDR RAM
> > > > > > timing/config due to a bug? Then you would have to force a cold start.
> > > > > > 
> > > > > > Do you use ECC? Seems to be some issues with ECC if you skip D_INIT
> > > > > > 
> > > > > 
> > > > > To perform a warm start, the data in DDR is preserved. So you don't need to init
> > > > > the data again for ECC. To preserve data, you cannot run D_INIT again, which
> > > > > will destroy the data for sure.
> > > > 
> > > > yes, but what about SDRAM_CFG_BI? Why do you need to set that here?
> > > > I much rather just skip D_INIT and reconfigure DDR RAM, just in case one wants
> > > > to correct some aspect of DDR config in later releases and feels a lot more robust.
> > > > 
> > > > Our systems cannot be coldstarted just because you upgrade SW on them.
> > > 
> > > Jocke,
> > > 
> > > If your memory has been intialized, you can set [BI] bit to bypass
> > > re-initialization. It does different things than D_INIT. In short, D_INIT
> > > initialize the data, i.e. the content of DDR, while BI bypassing initializing
> > > DDR memory (or "chip" if that is easier to understand).
> > 
> > Yes, that is what I want, reinit of chip, but not data contents.
> > I wrote why:
> > "just in case one wants to correct some aspect of DDR config in later releases and feels a lot more
> > robust"
> 
> Jocke,
> 
> I am not 100% sure. I will take this question to our DDR designer.

I am really want to know ...

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-12  7:35                 ` Joakim Tjernlund
@ 2015-11-12 16:43                   ` York Sun
  0 siblings, 0 replies; 21+ messages in thread
From: York Sun @ 2015-11-12 16:43 UTC (permalink / raw)
  To: u-boot



On 11/11/2015 11:35 PM, Joakim Tjernlund wrote:
> On Thu, 2015-11-05 at 12:47 -0800, York Sun wrote:
>>
>> On 11/05/2015 11:53 AM, Joakim Tjernlund wrote:
>>> On Thu, 2015-11-05 at 10:29 -0800, York Sun wrote:
>>>>
>>>> On 11/05/2015 10:19 AM, Joakim Tjernlund wrote:
>>>>> On Thu, 2015-11-05 at 09:42 -0800, York Sun wrote:
>>>>>>
>>>>>> On 11/05/2015 01:55 AM, Joakim Tjernlund wrote:
>>>>>>> On Thu, 2015-11-05 at 08:23 +0000, Yuantian Tang wrote:
>>>>>>>> Hi Jocke,
>>>>>>>>
>>>>>>>> we achieved deep sleep mode that did exactly what you asked for.
>>>>>>>> If waken up from deep sleep, soc will resume from uboot and re-initialized DDR controller with
>>>>>>>> contents
>>>>>>>> untouched.
>>>>>>>> Please refer to drivers/ddr/fsl/fsl_ddr_gen4.c and look at DEEP_SLEEP related code.
>>>>>>>
>>>>>>> Looking at it now and it looks the same as for ddr3? Some questions though:
>>>>>>>  289		if (is_warm_boot()) {
>>>>>>>  289                 /* enter self-refresh */
>>>>>>>  290                 temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
>>>>>>>  291                 temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
>>>>>>>  292                 ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
>>>>>>>
>>>>>>> Why do you need to force SR here? The DDR RAM must already be in SR at this point?
>>>>>>> I come from CPU reset state so my DDR controller has HW default values so
>>>>>>> this does not feel safe.
>>>>>>
>>>>>> This may be redundant. If the code runs to this line, it should come back from a
>>>>>> deep sleep. The core is in reset state but the DDR controller is not. It should
>>>>>> be in self-refresh mode. I will leave that to Yuantian to comment.
>>>>>
>>>>> OK
>>>>>
>>>>>>
>>>>>>>
>>>>>>>  293                 /* do board specific memory setup */
>>>>>>>  294                 board_mem_sleep_setup();
>>>>>>>  295 
>>>>>>>  296                 temp_sdram_cfg = (ddr_in32(&ddr->sdram_cfg) | SDRAM_CFG_BI);
>>>>>>> SDRAM_CFG_BI skips a lot(all?) init of DDR RAM. What if you want to change some DDR RAM
>>>>>>> timing/config due to a bug? Then you would have to force a cold start.
>>>>>>>
>>>>>>> Do you use ECC? Seems to be some issues with ECC if you skip D_INIT
>>>>>>>
>>>>>>
>>>>>> To perform a warm start, the data in DDR is preserved. So you don't need to init
>>>>>> the data again for ECC. To preserve data, you cannot run D_INIT again, which
>>>>>> will destroy the data for sure.
>>>>>
>>>>> yes, but what about SDRAM_CFG_BI? Why do you need to set that here?
>>>>> I much rather just skip D_INIT and reconfigure DDR RAM, just in case one wants
>>>>> to correct some aspect of DDR config in later releases and feels a lot more robust.
>>>>>
>>>>> Our systems cannot be coldstarted just because you upgrade SW on them.
>>>>
>>>> Jocke,
>>>>
>>>> If your memory has been intialized, you can set [BI] bit to bypass
>>>> re-initialization. It does different things than D_INIT. In short, D_INIT
>>>> initialize the data, i.e. the content of DDR, while BI bypassing initializing
>>>> DDR memory (or "chip" if that is easier to understand).
>>>
>>> Yes, that is what I want, reinit of chip, but not data contents.
>>> I wrote why:
>>> "just in case one wants to correct some aspect of DDR config in later releases and feels a lot more
>>> robust"
>>
>> Jocke,
>>
>> I am not 100% sure. I will take this question to our DDR designer.
> 
> I am really want to know ...
> 

I haven't heard anything back yet.

York

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3
  2015-11-04 18:03 [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 York Sun
                   ` (7 preceding siblings ...)
  2015-11-05  8:03 ` [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 Joakim Tjernlund
@ 2015-12-15  0:41 ` York Sun
  8 siblings, 0 replies; 21+ messages in thread
From: York Sun @ 2015-12-15  0:41 UTC (permalink / raw)
  To: u-boot



On 11/05/2015 02:03 AM, York Sun wrote:
> This patch set revises the DDR driver to support higher speed for DDR4
> under heavy load (two dual-rank DIMMs) for four-chipselect interleaving.
> Single quad-rank DIMM is not supported yet.
> 
> 
> York Sun (7):
>   driver/ddr/fsl: Update DDR4 RTT values
>   driver/ddr/fsl: Update DDR4 MR6 for Vref range
>   driver/ddr/fsl: Update MR5 RTT park
>   driver/ddr/fsl: Update workaround for A008511 for vref range
>   driver/ddr/fsl: Update timing config for heavy load
>   armv8/ls2085aqds: Update DDR settings for four chip-select case
>   armv8/ls2085ardb: Update DDR settings for four chip-select case
> 
>  board/freescale/ls2085aqds/ddr.c |   16 ++-
>  board/freescale/ls2085ardb/ddr.c |   16 ++-
>  drivers/ddr/fsl/ctrl_regs.c      |   48 +++++++-
>  drivers/ddr/fsl/fsl_ddr_gen4.c   |   22 ++--
>  drivers/ddr/fsl/options.c        |  237 +++++++++++++++++++++++++++++++++++++-
>  include/fsl_ddr_sdram.h          |    9 ++
>  6 files changed, 325 insertions(+), 23 deletions(-)
> 

Changed subject from ls2085a to ls2080a.
Applied to fsl-qoriq master. Awaiting upstream.

York

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2015-12-15  0:41 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-04 18:03 [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 York Sun
2015-11-04 18:03 ` [U-Boot] [PATCH v1 1/7] driver/ddr/fsl: Update DDR4 RTT values York Sun
2015-11-04 18:03 ` [U-Boot] [PATCH v1 2/7] driver/ddr/fsl: Update DDR4 MR6 for Vref range York Sun
2015-11-04 18:03 ` [U-Boot] [PATCH v1 3/7] driver/ddr/fsl: Update MR5 RTT park York Sun
2015-11-04 18:03 ` [U-Boot] [PATCH v1 4/7] driver/ddr/fsl: Update workaround for A008511 for vref range York Sun
2015-11-04 18:03 ` [U-Boot] [PATCH v1 5/7] driver/ddr/fsl: Update timing config for heavy load York Sun
2015-11-04 18:03 ` [U-Boot] [PATCH v1 6/7] armv8/ls2085aqds: Update DDR settings for four chip-select case York Sun
2015-11-04 18:03 ` [U-Boot] [PATCH v1 7/7] armv8/ls2085ardb: " York Sun
2015-11-05  8:03 ` [U-Boot] [PATCH v1 0/7] Enable high speed and heavy load for DDR4 for LSCH3 Joakim Tjernlund
2015-11-05  8:23   ` Yuantian Tang
2015-11-05  9:55     ` Joakim Tjernlund
2015-11-05 17:42       ` York Sun
2015-11-05 18:19         ` Joakim Tjernlund
2015-11-05 18:29           ` York Sun
2015-11-05 19:53             ` Joakim Tjernlund
2015-11-05 20:47               ` York Sun
2015-11-12  7:35                 ` Joakim Tjernlund
2015-11-12 16:43                   ` York Sun
2015-11-06  2:24         ` Yuantian Tang
2015-11-06 11:10           ` Joakim Tjernlund
2015-12-15  0:41 ` York Sun

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.