ddr3libv2: bobk: Integration of Caelum DDR training to CPSS

	-Define Caelum topology
	-Define HW DDR IF mask for Caelum and Cetus
	-Define number of busses per interface for MSYS and TM

Change-Id: I06032166841de705bdef0f2ced25cb7a0550ba3d
Signed-off-by: Margarita Granov <margra@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/23756
Tested-by: Star_Automation <star@marvell.com>
Reviewed-by: Haim Boot <hayim@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/24167
Reviewed-by: Omri Itach <omrii@marvell.com>
Tested-by: Omri Itach <omrii@marvell.com>
diff --git a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Silicon/mvHwsDdr3BobK.c b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Silicon/mvHwsDdr3BobK.c
index 34ecbb7..f1aca0d 100755
--- a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Silicon/mvHwsDdr3BobK.c
+++ b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Silicon/mvHwsDdr3BobK.c
@@ -54,7 +54,8 @@
 #define TM_PLL_REG_DATA(a,b,c)  ((a << 12) + (b << 8) + (c << 2))
 #define R_MOD_W(writeData,readData,mask) ((writeData & mask) | (readData & (~mask)))
 
-#define MAX_TM_INTERFACE_NUM 1 /* TEMPORARY  TBD - should be defined per bobk type */
+#define CETUS_DEV_ID   0xBE00
+#define CAELUM_DEV_ID  0xBC00
 
 /************************** pre-declaration ******************************/
 
@@ -212,7 +213,9 @@
 {
     0xE , 0xD, 0xB, 0x7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 };
-#endif
+
+GT_U32 devId, hwDdrIfMask, hwMaxDdrIfNum;
+
 static MV_DFX_ACCESS interfaceMap[] =
 {
 	/* Pipe	Client*/
@@ -222,7 +225,7 @@
 	{   3,	 1	},
     {   0,	 0	} /* in BOBK interface 4 doesn't belong to TM*/
 };
-
+#endif
 static GT_U8 bobKBwPerFreq[DDR_FREQ_LIMIT] =
 {
     0x3, /*DDR_FREQ_LOW_FREQ*/
@@ -273,10 +276,10 @@
         0,0,0,0,0,0,0,0 , /* dq[ECC]   */
 
 	    /* Interface 1 */
-	    0,0,0,0,0,0,0,0 , /* dq[0:7]   */
-	    0,0,0,0,0,0,0,0 , /* dq[8:15]  */
-	    0,0,0,0,0,0,0,0 , /* dq[16:23] */
-	    0,0,0,0,0,0,0,0 , /* dq[24:31] */
+	    9,0,7,2,8,6,3,1 , /* dq[0:7]   */
+	    9,0,1,6,8,3,2,7 , /* dq[8:15]  */
+	    0,7,1,9,6,2,3,8 , /* dq[16:23] */
+	    9,0,8,3,7,6,2,1 , /* dq[24:31] */
         0,0,0,0,0,0,0,0 , /* dq[ECC]   */
 
 	    /* Interface 2 */
@@ -287,10 +290,10 @@
         0,0,0,0,0,0,0,0 , /* dq[ECC]   */
 
 	    /* Interface 3 */
-	    0,0,0,0,0,0,0,0 , /* dq[0:7]   */
-	    0,0,0,0,0,0,0,0 , /* dq[8:15]  */
-	    0,0,0,0,0,0,0,0 , /* dq[16:23] */
-	    0,0,0,0,0,0,0,0 , /* dq[24:31] */
+	    6,2,8,9,0,1,7,3 , /* dq[0:7]   */
+	    1,3,7,9,0,2,8,6 , /* dq[8:15]  */
+	    2,0,7,1,8,9,6,3 , /* dq[16:23] */
+	    1,6,8,2,0,7,3,9 , /* dq[24:31] */
         0,0,0,0,0,0,0,0 , /* dq[ECC]   */
 
         /* Interface 4 */
@@ -315,6 +318,17 @@
     {{{0x1,1,0,0}, {0x1,1,0,0}, {0x2,0,0,0}, {0x2,0,0,0}, {0,0,0,0}}, SPEED_BIN_DDR_1866M, BUS_WIDTH_16 , MEM_4G, DDR_FREQ_667, 0 ,   0 , MV_HWS_TEMP_HIGH} ,
     {{{0x1,1,0,0}, {0x1,1,0,0}, {0x2,0,0,0}, {0x2,0,0,0}, {0,0,0,0}}, SPEED_BIN_DDR_1866M, BUS_WIDTH_16 , MEM_4G, DDR_FREQ_667, 0 ,   0 , MV_HWS_TEMP_HIGH} },
     0xF  /* Buses mask */
+    },
+    /* 2nd board  - Caelum*/
+    {
+    0xB, /* active interfaces */
+    /*cs_mask, mirror, dqs_swap, ck_swap X PUPs                         speed_bin           memory_width  mem_size  frequency  casL casWL      temperature */
+ {  {{{0x2,1,0,0}, {0x2,1,0,0}, {0x1,0,0,0}, {0x1,0,0,0}, {0,0,0,0}}, SPEED_BIN_DDR_1866M, BUS_WIDTH_16 , MEM_4G, DDR_FREQ_667, 0 ,   0 , MV_HWS_TEMP_HIGH} ,
+    {{{0x2,1,0,0}, {0x2,1,0,0}, {0x1,0,0,0}, {0x1,0,0,0}, {0,0,0,0}}, SPEED_BIN_DDR_1866M, BUS_WIDTH_16 , MEM_4G, DDR_FREQ_667, 0 ,   0 , MV_HWS_TEMP_HIGH} ,
+    {{{0x1,1,0,0}, {0x1,1,0,0}, {0x2,0,0,0}, {0x2,0,0,0}, {0,0,0,0}}, SPEED_BIN_DDR_1866M, BUS_WIDTH_16 , MEM_4G, DDR_FREQ_667, 0 ,   0 , MV_HWS_TEMP_HIGH} ,
+    {{{0x2,1,0,0}, {0x2,1,0,0}, {0x1,0,0,0}, {0x1,0,0,0}, {0,0,0,0}}, SPEED_BIN_DDR_1866M, BUS_WIDTH_16 , MEM_4G, DDR_FREQ_667, 0 ,   0 , MV_HWS_TEMP_HIGH} ,
+    {{{0x1,1,0,0}, {0x1,1,0,0}, {0x2,0,0,0}, {0x2,0,0,0}, {0,0,0,0}}, SPEED_BIN_DDR_1866M, BUS_WIDTH_16 , MEM_4G, DDR_FREQ_667, 0 ,   0 , MV_HWS_TEMP_HIGH} },
+    0xF  /* Buses mask */
     }
 };
 #endif
@@ -393,7 +407,7 @@
 
     return GT_OK;
 }
-
+#if defined(CPSS_BUILD)
 /*****************************************************************************
 Enable Pipe
 ******************************************************************************/
@@ -468,9 +482,30 @@
 {
     GT_U32 interfaceId = 0, dataValue = 0;
 
-    for(interfaceId=0; interfaceId <MAX_TM_INTERFACE_NUM ;interfaceId++)
+    CHECK_STATUS(ddr3TipBobKServerRegRead(devNum, 0x000F8240 ,  &devId, MASK_ALL_BITS));
+
+    if ((devId &0xFFFF) == CETUS_DEV_ID )
+    {
+        /* IN Cetus TM has only 1 IF #0*/
+        hwMaxDdrIfNum = 1;
+        hwDdrIfMask   = 1;
+    }
+    else if ((devId &0xFFFF) == CAELUM_DEV_ID )
+    {
+        /* in Caelum TM may use 3 IFs 0,1,and 3*/
+        hwMaxDdrIfNum = 4;
+        hwDdrIfMask   = 0xB;
+    }
+    else
+          mvPrintf ("Unsupported device ID %x\n", devId);
+
+    for (interfaceId = 0; interfaceId < hwMaxDdrIfNum; interfaceId++)
 	{
-			ddr3TipPipeEnable(devNum, ACCESS_TYPE_UNICAST, interfaceId, GT_TRUE);
+        if(IS_INTERFACE_ACTIVE(topologyMap->interfaceActiveMask, interfaceId) ==  0)/* if the interface doesnt exixst in HW :*/
+            continue;
+        else /* interface exist in HW*/
+        {
+            ddr3TipPipeEnable(devNum, ACCESS_TYPE_UNICAST, interfaceId, GT_TRUE);
 			if (IS_INTERFACE_ACTIVE(topologyMap->interfaceActiveMask, interfaceId) ==  0)
 			{
 				 /*disable in-active interfaces (so they won't be accessed upon multicast)*/
@@ -489,8 +524,9 @@
 			ddr3TipPipeEnable(devNum, ACCESS_TYPE_UNICAST, interfaceId, GT_FALSE);
 
 		}
+    }
 		/* enable access to relevant pipes (according to the pipe mask) */
-		ddr3TipPipeEnable(devNum, ACCESS_TYPE_MULTICAST, interfaceId, GT_TRUE);
+	ddr3TipPipeEnable(devNum, ACCESS_TYPE_MULTICAST, PARAM_NOT_CARE, GT_TRUE);
 
    if (enable)
     {
@@ -660,7 +696,7 @@
 	if (interfaceAccess == ACCESS_TYPE_MULTICAST)
     {
         startIf = 0;
-        endIf = MAX_TM_INTERFACE_NUM-1;
+        endIf = hwMaxDdrIfNum-1;
     }
     else
     {
@@ -677,7 +713,7 @@
    /* ddr3TipPipeEnable(devNum, interfaceAccess, interfaceId, GT_FALSE);*/
     return GT_OK;
 }
-#if !defined(CPSS_BUILD)
+#else /*!defined(CPSS_BUILD)*/
 /******************************************************************************
 * Name:     ddr3TipBobKWrite.
 * Desc:
@@ -829,7 +865,7 @@
     MV_HWS_TIP_CONFIG_FUNC_DB   configFunc;
 	MV_HWS_TOPOLOGY_MAP*        topologyMap = ddr3TipGetTopologyMap(devNum);
     GT_TUNE_TRAINING_PARAMS     tuneParams;
-	GT_U8 numOfBusPerInterface = 5;
+	GT_U8 numOfBusPerInterface;
 
 	if(topologyMap == NULL)
 	{
@@ -843,11 +879,13 @@
     boardId = boardId; /* avoid warnings */
 
 #if defined(CPSS_BUILD)
+    numOfBusPerInterface = 4; /* TM has only 4 buses*/
     configFunc.tipDunitReadFunc = ddr3TipBobKTMRead;
     configFunc.tipDunitWriteFunc = ddr3TipBobKTMWrite;
     configFunc.tipDunitMuxSelectFunc = ddr3TipBobKSelectTMDdrController;
 
 #else
+    numOfBusPerInterface = 5; /*MSYS may have 5 buses*/
     configFunc.tipDunitReadFunc = ddr3TipBobKIFRead;
     configFunc.tipDunitWriteFunc = ddr3TipBobKIFWrite;
     configFunc.tipDunitMuxSelectFunc = ddr3TipBobKSelectCPUDdrController;
@@ -880,7 +918,7 @@
 
 #if defined(CPSS_BUILD)
 	maskTuneFunc = ( INIT_CONTROLLER_MASK_BIT |
-					/*SET_MEDIUM_FREQ_MASK_BIT |*/
+					SET_MEDIUM_FREQ_MASK_BIT |
 					WRITE_LEVELING_MASK_BIT |
 					LOAD_PATTERN_2_MASK_BIT |
 					READ_LEVELING_MASK_BIT |
@@ -927,7 +965,7 @@
     tuneParams.PhyReg3Val = 0xA;
     tuneParams.gRttNom = 0x44;
     tuneParams.gDic = 0x2;
-    tuneParams.uiODTConfig = 0x30000;/*/0x120012;*/
+    tuneParams.uiODTConfig = 0x120012;
     tuneParams.gZpriData = 123;
     tuneParams.gZnriData = 123;
     tuneParams.gZpriCtrl = 74;
@@ -936,7 +974,7 @@
     tuneParams.gZnodtData = 45;
     tuneParams.gZpodtCtrl = 45;
     tuneParams.gZnodtCtrl = 45;
-    tuneParams.gRttWR = 0x400;/*0x0;*/
+    tuneParams.gRttWR = 0; /*0x400;0x0;*/
 
     CHECK_STATUS(ddr3TipTuneTrainingParams(devNum, &tuneParams));
 
@@ -998,7 +1036,8 @@
 		#if defined(CPSS_BUILD)
 		/* for CPSS, since topology is not always initialized, it is
 		   needed to set it to default topology */
-		topologyMap = &bobKTopologyMap[0];
+		topologyMap = &bobKTopologyMap[boardId];
+        mvPrintf ("board ID %d, active interface mask = %x\n",boardId,topologyMap->interfaceActiveMask);
 		#else
 		return GT_FAIL;
 		#endif