ddr: update DGL parameters per CS
- current DGL parameters were set to 2 CS.
- in this patch, the DGL is configured according to the DGL number.
- the DGL is per device therefore, it needs to be updated in each
silicon configuration h file.
Note: BC2 can work without ODT pin so RTT Write is used
in order to save power.
Change-Id: I725e1ac8992f06c78634282ce6e71ab79ceb17c4
Signed-off-by: hayim <hayim@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/24596
Reviewed-by: Omri Itach <omrii@marvell.com>
Tested-by: Omri Itach <omrii@marvell.com>
diff --git a/tools/marvell/bin_hdr/inc/ddr3_soc/a38x/ddr3_a38x.h b/tools/marvell/bin_hdr/inc/ddr3_soc/a38x/ddr3_a38x.h
old mode 100644
new mode 100755
index 8130cd9..99bdace
--- a/tools/marvell/bin_hdr/inc/ddr3_soc/a38x/ddr3_a38x.h
+++ b/tools/marvell/bin_hdr/inc/ddr3_soc/a38x/ddr3_a38x.h
@@ -104,9 +104,12 @@
#define MV_TUNE_TRAINING_PARAMS_P_ODT_CTRL 45
#define MV_TUNE_TRAINING_PARAMS_N_ODT_CTRL 45
-#define MV_TUNE_TRAINING_PARAMS_DIC 0x2
-#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG 0x120012
-#define MV_TUNE_TRAINING_PARAMS_RTT_NOM 0x44
+#define MV_TUNE_TRAINING_PARAMS_DIC 0x2
+#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_2CS 0x120012
+#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_1CS 0x10000
+#define MV_TUNE_TRAINING_PARAMS_RTT_NOM 0x44
+#define MV_TUNE_TRAINING_PARAMS_RTT_WR_1CS 0x0
+#define MV_TUNE_TRAINING_PARAMS_RTT_WR_2CS 0x0
#ifdef CONFIG_DDR4
#define MV_TUNE_TRAINING_PARAMS_P_ODT_DATA_DDR4 0xD
diff --git a/tools/marvell/bin_hdr/inc/ddr3_soc/msys/ddr3_msys_ac3_vars.h b/tools/marvell/bin_hdr/inc/ddr3_soc/msys/ddr3_msys_ac3_vars.h
old mode 100644
new mode 100755
index f6d3bdf..f8dd185
--- a/tools/marvell/bin_hdr/inc/ddr3_soc/msys/ddr3_msys_ac3_vars.h
+++ b/tools/marvell/bin_hdr/inc/ddr3_soc/msys/ddr3_msys_ac3_vars.h
@@ -89,10 +89,12 @@
#define MV_TUNE_TRAINING_PARAMS_P_ODT_CTRL 45
#define MV_TUNE_TRAINING_PARAMS_N_ODT_CTRL 45
-#define MV_TUNE_TRAINING_PARAMS_DIC 0x2
-#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG 0x120012
-#define MV_TUNE_TRAINING_PARAMS_RTT_NOM 0x44
-#define MV_TUNE_TRAINING_PARAMS_RTT_WR 0x0 /*off*/
+#define MV_TUNE_TRAINING_PARAMS_DIC 0x2
+#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_2CS 0x120012
+#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_1CS 0x10000
+#define MV_TUNE_TRAINING_PARAMS_RTT_NOM 0x44
+#define MV_TUNE_TRAINING_PARAMS_RTT_WR_1CS 0x0 /* off */
+#define MV_TUNE_TRAINING_PARAMS_RTT_WR_2CS 0x0 /* off */
typedef struct __mvDramModes {
char *mode_name;
diff --git a/tools/marvell/bin_hdr/inc/ddr3_soc/msys/ddr3_msys_bc2_vars.h b/tools/marvell/bin_hdr/inc/ddr3_soc/msys/ddr3_msys_bc2_vars.h
old mode 100644
new mode 100755
index 07ff13d..634a671
--- a/tools/marvell/bin_hdr/inc/ddr3_soc/msys/ddr3_msys_bc2_vars.h
+++ b/tools/marvell/bin_hdr/inc/ddr3_soc/msys/ddr3_msys_bc2_vars.h
@@ -82,10 +82,12 @@
#define MV_TUNE_TRAINING_PARAMS_P_ODT_CTRL 45
#define MV_TUNE_TRAINING_PARAMS_N_ODT_CTRL 45
-#define MV_TUNE_TRAINING_PARAMS_DIC 0x2
-#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG 0x120012
-#define MV_TUNE_TRAINING_PARAMS_RTT_NOM 0x44
-#define MV_TUNE_TRAINING_PARAMS_RTT_WR 0x200 /*RZQ/4*/
+#define MV_TUNE_TRAINING_PARAMS_DIC 0x2
+#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_2CS 0x120012
+#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_1CS 0x10000
+#define MV_TUNE_TRAINING_PARAMS_RTT_NOM 0x44
+#define MV_TUNE_TRAINING_PARAMS_RTT_WR_1CS 0x200 /*RZQ/4*/
+#define MV_TUNE_TRAINING_PARAMS_RTT_WR_2CS 0x200 /*RZQ/4*/
typedef struct __mvDramMcInit {
MV_U32 reg_addr;
diff --git a/tools/marvell/bin_hdr/src_ddr/ddr3_init_tipv2.c b/tools/marvell/bin_hdr/src_ddr/ddr3_init_tipv2.c
index 30b926f..0255f77 100755
--- a/tools/marvell/bin_hdr/src_ddr/ddr3_init_tipv2.c
+++ b/tools/marvell/bin_hdr/src_ddr/ddr3_init_tipv2.c
@@ -120,6 +120,20 @@
MV_HWS_TOPOLOGY_MAP *topology
);
+extern MV_STATUS ddr3TipGetFirstActiveIf
+(
+ MV_U8 devNum,
+ MV_U32 interfaceMask,
+ MV_U32 *ifId
+);
+
+extern MV_STATUS mvCalcCsNum
+(
+ MV_U32 devNum,
+ MV_U32 interfaceId,
+ MV_U32 *csNum
+);
+
extern MV_U32 ddr3TipGetInitFreq();
extern MV_VOID ddr3HwsSetLogLevel(
@@ -137,6 +151,9 @@
static MV_U32 ddr3GetStaticDdrMode(void);
#endif
+/* global parameter (defined in TIP lib which holds the DDR topology */
+extern MV_HWS_TOPOLOGY_MAP *topologyMap;
+
/*Set 1 to use dynamic DUNIT configuration,
set 0(supported for A380 and AC3) to configure DUNIT in values set by ddr3TipInitSpecificRegConfig*/
MV_U8 genericInitController = 1;
@@ -823,8 +840,18 @@
static MV_STATUS ddr3HwsTuneTrainingParams(MV_U8 devNum)
{
MV_TUNE_TRAINING_PARAMS params;
+ MV_U32 interfaceId;
+ MV_U32 csNum;
MV_STATUS status;
+ /* initilaize the global ddr topology */
+ CHECK_STATUS(ddr3GetTopologyMap(&topologyMap));
+
+ /* get first active interface */
+ CHECK_STATUS(ddr3TipGetFirstActiveIf(devNum, topologyMap->interfaceActiveMask, &interfaceId));
+
+ CHECK_STATUS(mvCalcCsNum(devNum, interfaceId, &csNum));
+
/*NOTE: do not remove any field initilization*/
params.ckDelay = MV_TUNE_TRAINING_PARAMS_CK_DELAY;
params.PhyReg3Val = MV_TUNE_TRAINING_PARAMS_PHYREG3VAL;
@@ -840,14 +867,22 @@
params.gZnodtCtrl = MV_TUNE_TRAINING_PARAMS_N_ODT_CTRL;
params.gDic = MV_TUNE_TRAINING_PARAMS_DIC;
- params.uiODTConfig = MV_TUNE_TRAINING_PARAMS_ODT_CONFIG;
params.gRttNom = MV_TUNE_TRAINING_PARAMS_RTT_NOM;
- params.gRttWR = MV_TUNE_TRAINING_PARAMS_RTT_WR;
-#ifdef CONFIG_DDR4
+#ifdef CONFIG_DDR3
+ if (csNum == 1) {
+ params.gRttWR = MV_TUNE_TRAINING_PARAMS_RTT_WR_1CS;
+ params.uiODTConfig = MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_1CS;
+ } else {
+ params.gRttWR = MV_TUNE_TRAINING_PARAMS_RTT_WR_2CS;
+ params.uiODTConfig = MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_2CS;
+ }
+#else /* CONFIG_DDR3 */
+ /* DDR4 */
params.gZpodtData = MV_TUNE_TRAINING_PARAMS_P_ODT_DATA_DDR4;
params.uiODTConfig = MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_DDR4;
params.gRttNom = MV_TUNE_TRAINING_PARAMS_RTT_NOM_DDR4;
+ params.gRttWR = MV_TUNE_TRAINING_PARAMS_RTT_WR;
params.gDic = MV_TUNE_TRAINING_PARAMS_DIC_DDR4;
#endif