ddr3libv2: Added Leveling Sweep tests and additional patterns

	The patterns also may be used for centralization diagnostic run

Change-Id: I1709d75191b9556652d59d28ef64ab421c2eaf79
Signed-off-by: Igor Patrik <igorp@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/19656
Reviewed-on: http://vgitil04.il.marvell.com:8080/24131
Reviewed-by: Omri Itach <omrii@marvell.com>
Tested-by: Omri Itach <omrii@marvell.com>
diff --git a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/h/Driver/ddr3/mvDdr3TrainingIpBist.h b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/h/Driver/ddr3/mvDdr3TrainingIpBist.h
index f3d5ffa..db5c8ac 100644
--- a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/h/Driver/ddr3/mvDdr3TrainingIpBist.h
+++ b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/h/Driver/ddr3/mvDdr3TrainingIpBist.h
@@ -158,6 +158,13 @@
     GT_U32 mode
 );
 
+GT_BOOL ddr3TipRunLevelingSweepTest
+(
+    GT_32 devNum,
+    GT_U32 RepeatNum,
+    GT_U32 direction,
+    GT_U32 mode
+);
 /******************************************************************************
 * Name:     ddr3TipPrintRegs.
 * Desc:     Print Specified Dunit/Pup Registers
diff --git a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/h/Driver/mvDdrTrainingIpDb.h b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/h/Driver/mvDdrTrainingIpDb.h
index e2ba6e1..dd7860a 100755
--- a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/h/Driver/mvDdrTrainingIpDb.h
+++ b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/h/Driver/mvDdrTrainingIpDb.h
@@ -51,7 +51,10 @@
 {
    PATTERN_PBS1,
    PATTERN_PBS2,
+   PATTERN_PBS3,
+   PATTERN_TEST,
    PATTERN_RL,
+   PATTERN_RL2,
    PATTERN_STATIC_PBS,
    PATTERN_KILLER_DQ0,
    PATTERN_KILLER_DQ1,
@@ -61,27 +64,44 @@
    PATTERN_KILLER_DQ5,
    PATTERN_KILLER_DQ6,
    PATTERN_KILLER_DQ7,
-   PATTERN_PBS3,
-   PATTERN_RL2,
-   PATTERN_TEST,
+   PATTERN_VREF,
    PATTERN_FULL_SSO0,
    PATTERN_FULL_SSO1,
    PATTERN_FULL_SSO2,
    PATTERN_FULL_SSO3,
-   PATTERN_VREF,
+   PATTERN_SSO_FULL_XTALK_DQ0,
+   PATTERN_SSO_FULL_XTALK_DQ1,
+   PATTERN_SSO_FULL_XTALK_DQ2,
+   PATTERN_SSO_FULL_XTALK_DQ3,
+   PATTERN_SSO_FULL_XTALK_DQ4,
+   PATTERN_SSO_FULL_XTALK_DQ5,
+   PATTERN_SSO_FULL_XTALK_DQ6,
+   PATTERN_SSO_FULL_XTALK_DQ7,
+   PATTERN_SSO_XTALK_FREE_DQ0,
+   PATTERN_SSO_XTALK_FREE_DQ1,
+   PATTERN_SSO_XTALK_FREE_DQ2,
+   PATTERN_SSO_XTALK_FREE_DQ3,
+   PATTERN_SSO_XTALK_FREE_DQ4,
+   PATTERN_SSO_XTALK_FREE_DQ5,
+   PATTERN_SSO_XTALK_FREE_DQ6,
+   PATTERN_SSO_XTALK_FREE_DQ7,
+   PATTERN_ISI_XTALK_FREE,
    PATTERN_LIMIT
 } MV_HWS_PATTERN;
 #elif defined(CONFIG_DDR4)
-typedef enum 
+typedef enum
 {
-   PATTERN_PBS1,
+   PATTERN_PBS1,/*0*/
    PATTERN_PBS2,
+   PATTERN_PBS3,
+   PATTERN_TEST,
    PATTERN_RL,
+   PATTERN_RL2,
    PATTERN_STATIC_PBS,
    PATTERN_KILLER_DQ0,
    PATTERN_KILLER_DQ1,
    PATTERN_KILLER_DQ2,
-   PATTERN_KILLER_DQ3,
+   PATTERN_KILLER_DQ3,/*10*/
    PATTERN_KILLER_DQ4,
    PATTERN_KILLER_DQ5,
    PATTERN_KILLER_DQ6,
@@ -91,27 +111,41 @@
    PATTERN_KILLER_DQ2_INV,
    PATTERN_KILLER_DQ3_INV,
    PATTERN_KILLER_DQ4_INV,
-   PATTERN_KILLER_DQ5_INV,
+   PATTERN_KILLER_DQ5_INV,/*20*/
    PATTERN_KILLER_DQ6_INV,
    PATTERN_KILLER_DQ7_INV,
    PATTERN_VREF,
    PATTERN_VREF_INV,
-   PATTERN_RESONANCE_1T,
-   PATTERN_RESONANCE_2T,
-   PATTERN_RESONANCE_3T,
-   PATTERN_RESONANCE_4T,
-   PATTERN_RESONANCE_5T,
-   PATTERN_RESONANCE_6T,
-   PATTERN_RESONANCE_7T,
-   PATTERN_RESONANCE_8T,
-   PATTERN_RESONANCE_9T,
-   PATTERN_PBS3,
-   PATTERN_RL2,
-   PATTERN_TEST,
    PATTERN_FULL_SSO0,
    PATTERN_FULL_SSO1,
    PATTERN_FULL_SSO2,
    PATTERN_FULL_SSO3,
+   PATTERN_SSO_FULL_XTALK_DQ0,
+   PATTERN_SSO_FULL_XTALK_DQ1,/*30*/
+   PATTERN_SSO_FULL_XTALK_DQ2,
+   PATTERN_SSO_FULL_XTALK_DQ3,
+   PATTERN_SSO_FULL_XTALK_DQ4,
+   PATTERN_SSO_FULL_XTALK_DQ5,
+   PATTERN_SSO_FULL_XTALK_DQ6,
+   PATTERN_SSO_FULL_XTALK_DQ7,
+   PATTERN_SSO_XTALK_FREE_DQ0,
+   PATTERN_SSO_XTALK_FREE_DQ1,
+   PATTERN_SSO_XTALK_FREE_DQ2,
+   PATTERN_SSO_XTALK_FREE_DQ3,/*40*/
+   PATTERN_SSO_XTALK_FREE_DQ4,
+   PATTERN_SSO_XTALK_FREE_DQ5,
+   PATTERN_SSO_XTALK_FREE_DQ6,
+   PATTERN_SSO_XTALK_FREE_DQ7,
+   PATTERN_ISI_XTALK_FREE,
+   PATTERN_RESONANCE_1T,
+   PATTERN_RESONANCE_2T,
+   PATTERN_RESONANCE_3T,
+   PATTERN_RESONANCE_4T,
+   PATTERN_RESONANCE_5T,/*50*/
+   PATTERN_RESONANCE_6T,
+   PATTERN_RESONANCE_7T,
+   PATTERN_RESONANCE_8T,
+   PATTERN_RESONANCE_9T,
    PATTERN_LIMIT
 }MV_HWS_PATTERN;
 #else
diff --git a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3Debug.c b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3Debug.c
index 96017b1..2df6c86 100755
--- a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3Debug.c
+++ b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3Debug.c
@@ -34,11 +34,16 @@
 
 #ifdef DDR_VIEWER_TOOL
 GT_STATUS printAdll(GT_U32 devNum, GT_U32 adll[MAX_INTERFACE_NUM*MAX_BUS_NUM]);
+GT_STATUS printPh(GT_U32 devNum, GT_U32 adll[MAX_INTERFACE_NUM*MAX_BUS_NUM]);
+
+GT_U8 sweepPatternIndexStart = PATTERN_KILLER_DQ0, sweepPatternIndexEnd = PATTERN_LIMIT;
 static char* ConvertFreq(MV_HWS_DDR_FREQ freq);
 #if defined(EXCLUDE_SWITCH_DEBUG)
 extern MV_HWS_PATTERN sweepPattern;
 GT_U32 ctrlSweepres[ADLL_LENGTH][MAX_INTERFACE_NUM][MAX_BUS_NUM];
 GT_U32 ctrlADLL[MAX_CS_NUM*MAX_INTERFACE_NUM*MAX_BUS_NUM];
+GT_U32 ctrlADLL1[MAX_CS_NUM*MAX_INTERFACE_NUM*MAX_BUS_NUM];
+GT_U32 ctrlLevelPhase[MAX_CS_NUM*MAX_INTERFACE_NUM*MAX_BUS_NUM];
 #endif
 #endif
 
@@ -153,7 +158,7 @@
 extern GT_U32 maskTuneFunc;
 extern GT_U32 freqVal[];
 MV_HWS_TIP_CONFIG_FUNC_DB configFuncInfo[HWS_MAX_DEVICE_NUM];
-GT_U8 isDefaultCentralization = 0 , isTuneResult = 0, isValidateWindowPerIf = 0, isValidateWindowPerPup = 0, sweepCnt = 1, isBistResetBit = 1;
+GT_U8 isDefaultCentralization = 0 , isTuneResult = 0, isValidateWindowPerIf = 0, isValidateWindowPerPup = 0, sweepCnt = 1, isBistResetBit = 1, isRunLevelingSweepTests = 0;
 static MV_HWS_XSB_INFO xsbInfo[HWS_MAX_DEVICE_NUM];
 
 
@@ -436,17 +441,22 @@
 		freq = topologyMap->interfaceParams[firstActiveIf].memoryFreq;
 
         isPupLog = (isValidateWindowPerPup != 0) ? 1:0;
-	mvPrintf("===VALIDATE WINDOW LOG START===\n");
-	mvPrintf("DDR Frequency: %s   ======\n",ConvertFreq(freq));
+		mvPrintf("===VALIDATE WINDOW LOG START===\n");
+		mvPrintf("DDR Frequency: %s   ======\n",ConvertFreq(freq));
         /* print sweep windows */
         ddr3TipRunSweepTest(devNum, sweepCnt, 1 , isPupLog);
         ddr3TipRunSweepTest(devNum, sweepCnt, 0 , isPupLog);
-        ddr3TipPrintAllPbsResult(devNum);
-        ddr3TipPrintWLSuppResult(devNum);
-        mvPrintf("===VALIDATE WINDOW LOG END ===\n");
-	CHECK_STATUS(ddr3TipRestoreDunitRegs(devNum));
-        ddr3TipRegDump(devNum);
 
+		if( isRunLevelingSweepTests == 1 ){
+			ddr3TipRunLevelingSweepTest(devNum, sweepCnt, 0 , isPupLog);
+			ddr3TipRunLevelingSweepTest(devNum, sweepCnt, 1 , isPupLog);
+		}
+
+		ddr3TipPrintAllPbsResult(devNum);
+		ddr3TipPrintWLSuppResult(devNum);
+		mvPrintf("===VALIDATE WINDOW LOG END ===\n");
+		CHECK_STATUS(ddr3TipRestoreDunitRegs(devNum));
+		ddr3TipRegDump(devNum);
     }
 #endif
 
@@ -750,6 +760,57 @@
     return 0;
 }
 
+
+/*****************************************************************************
+Read Phase Value
+******************************************************************************/
+GT_BOOL readPhaseValue(GT_U32 PupValues[MAX_INTERFACE_NUM*MAX_BUS_NUM], int regAddr, GT_U32 mask)
+{
+    GT_U32  dataValue;
+    GT_U32 interfaceId = 0, busId = 0;
+    GT_U32 devNum = 0;
+	GT_U8 octetsPerInterfaceNum = (GT_U8)ddr3TipDevAttrGet(devNum, MV_ATTR_OCTET_PER_INTERFACE);
+
+    /* multi CS support - regAddr is calucalated in calling function with CS offset */
+    for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
+    {
+        VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
+	    for(busId = 0 ; busId < octetsPerInterfaceNum ; busId++)
+	    {
+		VALIDATE_BUS_ACTIVE(topologyMap->activeBusMask, busId)
+                CHECK_STATUS(mvHwsDdr3TipBUSRead(   devNum, interfaceId, ACCESS_TYPE_UNICAST, busId,  DDR_PHY_DATA,  regAddr, &dataValue));
+                PupValues[interfaceId*octetsPerInterfaceNum + busId] = dataValue & mask;
+        }
+	}
+
+	return 0;
+}
+
+/*****************************************************************************
+Write Leveling Value
+******************************************************************************/
+GT_BOOL writeLevelingValue(GT_U32 PupValues[MAX_INTERFACE_NUM*MAX_BUS_NUM], GT_U32 PupPhValues[MAX_INTERFACE_NUM*MAX_BUS_NUM],int regAddr)
+{
+    GT_U32 interfaceId = 0, busId = 0;
+    GT_U32 devNum = 0, data;
+	GT_U8 octetsPerInterfaceNum = (GT_U8)ddr3TipDevAttrGet(devNum, MV_ATTR_OCTET_PER_INTERFACE);
+
+    /* multi CS support - regAddr is calucalated in calling function with CS offset */
+
+    for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
+    {
+        VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
+	    for(busId = 0 ; busId < octetsPerInterfaceNum ; busId++)
+	    {
+		VALIDATE_BUS_ACTIVE(topologyMap->activeBusMask, busId)
+		data = PupValues[interfaceId*octetsPerInterfaceNum+busId] + (PupPhValues[interfaceId*octetsPerInterfaceNum+busId]);
+		CHECK_STATUS(mvHwsDdr3TipBUSWrite(  devNum, ACCESS_TYPE_UNICAST, interfaceId, ACCESS_TYPE_UNICAST, busId, DDR_PHY_DATA, regAddr, data));
+	    }
+
+    }
+    return 0;
+}
+
 #ifndef EXCLUDE_SWITCH_DEBUG
 extern MV_HWS_DDR_FREQ initFreq;
 extern MV_HWS_DDR_FREQ lowFreq;
@@ -1300,6 +1361,25 @@
     mvPrintf("\n");
     return GT_OK;
 }
+GT_STATUS printPh(GT_U32 devNum, GT_U32 adll[MAX_INTERFACE_NUM*MAX_BUS_NUM])
+{
+    GT_U32 i,j;
+    GT_U32 octetsPerInterfaceNum;
+
+    devNum = devNum;
+    octetsPerInterfaceNum = ddr3TipDevAttrGet(devNum, MV_ATTR_OCTET_PER_INTERFACE);
+
+    for(j=0; j< octetsPerInterfaceNum; j++)
+    {
+        VALIDATE_BUS_ACTIVE(topologyMap->activeBusMask, j)
+        for(i=0;i<MAX_INTERFACE_NUM; i++)
+        {
+            mvPrintf("%d ,",adll[i*octetsPerInterfaceNum+j]>>6);
+        }
+    }
+    mvPrintf("\n");
+    return GT_OK;
+}
 #endif
 
 #ifndef EXCLUDE_SWITCH_DEBUG
@@ -1336,65 +1416,6 @@
 
 }
 
-/*******************************************************/
-/* uiTestType = 0-tx , 1 - rx */
-GT_STATUS    ddr3TipSweepTest(GT_U32   devNum, GT_U32 uiTestType, GT_U32 uiMemAddress, GT_U32 isModifyAdll, GT_U32 startIf, GT_U32 endIf, GT_U32 startpup, GT_U32 endpup)
-{
-    GT_U32    busCnt = 0, adllVal = 0, interfaceId, uiPrevAdll, uiMaskBit, end_adll, start_adll;
-    GT_U32 regAddr = 0, iter = 0;
-
-	uiMemAddress = uiMemAddress;
-
-    if (uiTestType == 0)
-    {
-        regAddr = 1;
-        uiMaskBit = 0x3f;
-        start_adll = 0;
-        end_adll = uiMaskBit;
-    }
-    else
-    {
-        regAddr = 3;
-        uiMaskBit = 0x1f;
-        start_adll = 0;
-        end_adll = uiMaskBit;
-    }
-    DEBUG_TRAINING_IP(DEBUG_LEVEL_INFO, ("==============================\n"));
-    DEBUG_TRAINING_IP(DEBUG_LEVEL_INFO, ("Test type %d (0-tx, 1-rx) \n",uiTestType));
-    
-    for(interfaceId = startIf; interfaceId <= endIf; interfaceId++)
-    {
-        VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
-        for(busCnt = startpup; busCnt < endpup; busCnt++)
-        {
-      
-            CHECK_STATUS(mvHwsDdr3TipBUSRead(   devNum, interfaceId,  ACCESS_TYPE_UNICAST, busCnt, DDR_PHY_DATA, regAddr, &uiPrevAdll));
-
-            for(adllVal = start_adll; adllVal <= end_adll; adllVal++)
-            {
-                if (isModifyAdll == 1)
-                {
-                    CHECK_STATUS(ddr3TipBusReadModifyWrite(devNum, ACCESS_TYPE_UNICAST, interfaceId,  busCnt, DDR_PHY_DATA, regAddr, adllVal, uiMaskBit));
-                }
-                for(iter = 0; iter <= debugSweepVal; iter++)
-                {
-                    /*XsbRWTest(devNum, interfaceId, uiMemAddress, testPattern, busCnt, 0);
-					CHECK_STATUS(ddr3TipExtWrite(devNum, interfaceId, uiMemAddress, 1, xsbTestTable[seq]));
-					CHECK_STATUS(ddr3TipExtRead(  devNum, interfaceId, uiMemAddress, 1, dataRead));
-					retTmp = ddr3TipCompare(interfaceId, xsbTestTable[seq], dataRead, 0xff);*/
-				}
-			}
-            if (isModifyAdll == 1)
-            {
-                CHECK_STATUS(mvHwsDdr3TipBUSWrite(   devNum, ACCESS_TYPE_UNICAST, interfaceId,  ACCESS_TYPE_UNICAST,  busCnt, DDR_PHY_DATA, regAddr,  uiPrevAdll));
-            }
-            DEBUG_TRAINING_IP(DEBUG_LEVEL_INFO, ("\n"));
-        }
-        DEBUG_TRAINING_IP(DEBUG_LEVEL_INFO, ("\n"));
-    }
-
-    return GT_OK;
-}
 #endif /* EXCLUDE_SWITCH_DEBUG*/
 #if defined(DDR_VIEWER_TOOL)
 /*****************************************************************************
@@ -1403,7 +1424,7 @@
 GT_BOOL ddr3TipRunSweepTest(GT_32 devNum, GT_U32 RepeatNum, GT_U32 direction, GT_U32 mode)
 {
     GT_U32  pup = 0, startPup = 0, endPup = 0;
-    GT_U32 adll = 0;
+    GT_U32 adll = 0,rep = 0,sweepPatternIndex = 0;
     GT_U32 res[MAX_INTERFACE_NUM] = {0};
     GT_32  interfaceId = 0;
     GT_U32 adllValue = 0;
@@ -1411,10 +1432,10 @@
     MV_HWS_ACCESS_TYPE  pupAccess;
     GT_U32 uiCs;
     GT_U32 maxCs = mvHwsDdr3TipMaxCSGet();
-    GT_U32 octetsPerInterfaceNum = ddr3TipDevAttrGet(devNum, MV_ATTR_OCTET_PER_INTERFACE);
+	GT_U8 octetsPerInterfaceNum = ddr3TipDevAttrGet(devNum, MV_ATTR_OCTET_PER_INTERFACE);
 
     RepeatNum = RepeatNum;
-
+	RepeatNum = 2;
     if ( mode == 1)
     {
         /* per pup */
@@ -1434,7 +1455,7 @@
 		for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
 		{
 			VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
-    			for( pup = startPup ;pup <= endPup ; pup++)
+			for( pup = startPup ;pup <= endPup ; pup++)
 			{
 				ctrlSweepres[adll][interfaceId][pup] = 0;
 			}
@@ -1453,22 +1474,28 @@
 	{
 		for(adll = 0 ; adll < ADLL_LENGTH ; adll++)
 		{
-			adllValue = (direction == 0) ? (adll*2):adll;
-			CHECK_STATUS(mvHwsDdr3TipBUSWrite(  devNum, ACCESS_TYPE_MULTICAST, 0, pupAccess, pup, DDR_PHY_DATA, reg + CS_BYTE_GAP(uiCs), adllValue));
-			mvHwsDdr3RunBist(devNum, sweepPattern, res ,uiCs);
-			/*ddr3TipResetFifoPtr(devNum);*/
-			for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
+			for(rep = 0; rep < RepeatNum ; rep++)
 			{
-				VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
-				ctrlSweepres[adll][interfaceId][pup] = res[interfaceId];
-				if (mode == 1)
+				for(sweepPatternIndex = sweepPatternIndexStart ; sweepPatternIndex < sweepPatternIndexEnd ; sweepPatternIndex++)
 				{
-					CHECK_STATUS(mvHwsDdr3TipBUSWrite(  devNum, ACCESS_TYPE_UNICAST, interfaceId, ACCESS_TYPE_UNICAST, pup, DDR_PHY_DATA, reg + CS_BYTE_GAP(uiCs),  ctrlADLL[interfaceId*uiCs*octetsPerInterfaceNum+pup]));
+					adllValue = (direction == 0) ? (adll*2):adll;
+					CHECK_STATUS(mvHwsDdr3TipBUSWrite(  devNum, ACCESS_TYPE_MULTICAST, 0, pupAccess, pup, DDR_PHY_DATA, reg + CS_BYTE_GAP(uiCs), adllValue));
+					mvHwsDdr3RunBist(devNum, sweepPattern, res ,uiCs);
+					/*ddr3TipResetFifoPtr(devNum);*/
+					for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
+					{
+						VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
+						ctrlSweepres[adll][interfaceId][pup] += res[interfaceId];
+						if (mode == 1)
+						{
+							CHECK_STATUS(mvHwsDdr3TipBUSWrite(  devNum, ACCESS_TYPE_UNICAST, interfaceId, ACCESS_TYPE_UNICAST, pup, DDR_PHY_DATA, reg + CS_BYTE_GAP(uiCs),  ctrlADLL[interfaceId*uiCs*octetsPerInterfaceNum+pup]));
+						}
+					}
 				}
 			}
 		}
 	}
-	mvPrintf("Final,CS %d,%s,Sweep Result,Adll,", uiCs,((direction==0) ? "TX":"RX"));
+	mvPrintf("Final,CS %d,%s,Sweep,Result,Adll,", uiCs,((direction==0) ? "TX":"RX"));
 	for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
 	{
 		VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
@@ -1489,13 +1516,13 @@
 	for(adll = 0 ; adll < ADLL_LENGTH ; adll++)
 	{
 		adllValue = (direction == 0) ? (adll*2):adll;
-		mvPrintf("Final,%s,Sweep Result, %d ,",((direction==0) ? "TX":"RX"),adllValue);
+		mvPrintf("Final,%s,Sweep,Result, %d ,",((direction==0) ? "TX":"RX"),adllValue);
 
 		for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++){
 			VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
 			for( pup=startPup; pup <=endPup; pup++)
 			{
-				mvPrintf("%d , ",ctrlSweepres[adll][interfaceId][pup]);
+				mvPrintf("%8d , ",ctrlSweepres[adll][interfaceId][pup]);
 			}
 		}
 		mvPrintf("\n");
@@ -1512,6 +1539,178 @@
 }
 
 
+GT_BOOL ddr3TipRunLevelingSweepTest(GT_32 devNum, GT_U32 RepeatNum, GT_U32 direction, GT_U32 mode)
+{
+    GT_U32  pup = 0, startPup = 0, endPup = 0, startAdll = 0;
+    GT_U32 adll = 0,rep = 0,sweepPatternIndex = 0;
+	GT_U32  readData[MAX_INTERFACE_NUM];
+    GT_U32 res[MAX_INTERFACE_NUM] = {0};
+    GT_32  interfaceId = 0,gap = 0;
+    GT_32 adllValue = 0;
+    GT_32 reg = (direction == 0) ? WL_PHY_REG : RL_PHY_REG;
+    MV_HWS_ACCESS_TYPE  pupAccess;
+    GT_U32 uiCs;
+    GT_U32 maxCs = mvHwsDdr3TipMaxCSGet();
+	GT_U8 octetsPerInterfaceNum = ddr3TipDevAttrGet(devNum, MV_ATTR_OCTET_PER_INTERFACE);
+    RepeatNum = RepeatNum;
+	RepeatNum = 3;
+    if ( mode == 1)
+    {
+        /* per pup */
+        startPup = 0;
+        endPup = octetsPerInterfaceNum-1;
+        pupAccess = ACCESS_TYPE_UNICAST;
+    }
+    else
+    {
+        startPup = 0;
+        endPup = 0;
+        pupAccess = ACCESS_TYPE_MULTICAST;
+    }
+    for(uiCs=0; uiCs < maxCs; uiCs++){
+		for(adll = 0 ; adll < ADLL_LENGTH ; adll++)
+		{
+			for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
+			{
+				VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
+				for( pup = startPup ;pup <= endPup ; pup++)
+				{
+					ctrlSweepres[adll][interfaceId][pup] = 0;
+				}
+			}
+		}
+
+		for(adll = 0 ; adll < (MAX_INTERFACE_NUM * MAX_BUS_NUM) ; adll++)
+		{
+			ctrlADLL[adll] = 0;
+			ctrlLevelPhase[adll] = 0;
+			ctrlADLL1[adll] = 0;
+		}
+		/*Save Leveling value(after algorithm run)*/
+		readAdllValue(ctrlADLL, (reg + (uiCs * CS_REGISTER_ADDR_OFFSET)) , 0x1F );
+		readPhaseValue(ctrlLevelPhase, (reg + (uiCs * CS_REGISTER_ADDR_OFFSET)) , 0x3<<6 );
+		if(direction == 0)
+		{
+			readAdllValue(ctrlADLL1, (0x1 + (uiCs * CS_REGISTER_ADDR_OFFSET)) , MASK_ALL_BITS );
+		}
+		/*Sweep ADLL  from 0:31 on all I/F on all Pup and perform BIST on each stage.*/
+		for(pup=startPup; pup <=endPup; pup++)
+		{
+			for(adll = 0 ; adll < ADLL_LENGTH ; adll++)
+			{
+				for(rep = 0; rep < RepeatNum ; rep++)
+				{
+					adllValue = (direction == 0) ? (adll*2):(adll*3);
+					for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
+					{
+						startAdll = ctrlADLL[interfaceId*uiCs*octetsPerInterfaceNum+pup] + (ctrlLevelPhase[interfaceId*uiCs*octetsPerInterfaceNum+pup]>>6)*32 ;
+						if(direction == 0)
+						{
+							startAdll = (startAdll>32)?(startAdll-32):0;
+						}else
+						{
+							startAdll = (startAdll>48)?(startAdll-48):0;
+						}
+						if(direction == 0)
+						{
+							adllValue = startAdll + adllValue;
+						}else
+						{
+							adllValue = startAdll + adllValue;
+						}
+						gap = ctrlADLL1[interfaceId*uiCs*octetsPerInterfaceNum+pup] - ctrlADLL[interfaceId*uiCs*octetsPerInterfaceNum+pup];
+						gap = (((adllValue%32) + gap)%64);
+						adllValue = ((adllValue%32) + (((adllValue- (adllValue%32))/32)<<6));
+
+						CHECK_STATUS(mvHwsDdr3TipBUSWrite(  devNum, ACCESS_TYPE_UNICAST, interfaceId, pupAccess, pup, DDR_PHY_DATA, reg + CS_BYTE_GAP(uiCs), adllValue));
+						if(direction == 0)
+						{
+							CHECK_STATUS(mvHwsDdr3TipBUSWrite(  devNum, ACCESS_TYPE_UNICAST, interfaceId, pupAccess, pup, DDR_PHY_DATA, 0x1 + CS_BYTE_GAP(uiCs), gap));
+						}
+					}
+					for(sweepPatternIndex = sweepPatternIndexStart ; sweepPatternIndex < sweepPatternIndexEnd ; sweepPatternIndex++)
+					{
+						mvHwsDdr3RunBist(devNum, sweepPattern, res ,uiCs);
+						ddr3TipResetFifoPtr(devNum);
+						for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
+						{
+							VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
+							if(pup != 4)
+							{
+								ctrlSweepres[adll][interfaceId][pup] += res[interfaceId];
+							}else
+							{
+								CHECK_STATUS(mvHwsDdr3TipIFRead(devNum, ACCESS_TYPE_UNICAST, interfaceId, 0x1458, readData, MASK_ALL_BITS));
+								ctrlSweepres[adll][interfaceId][pup] += readData[interfaceId];
+
+								CHECK_STATUS(mvHwsDdr3TipIFWrite(devNum, ACCESS_TYPE_UNICAST, interfaceId, 0x1458, 0x0 , 0xFFFFFFFF));
+								CHECK_STATUS(mvHwsDdr3TipIFWrite(devNum, ACCESS_TYPE_UNICAST, interfaceId, 0x145C, 0x0 , 0xFFFFFFFF));
+							}
+						}
+					}
+				}
+			}
+			for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
+			{
+				startAdll = ctrlADLL[interfaceId*uiCs*octetsPerInterfaceNum+pup] + ctrlLevelPhase[interfaceId*uiCs*octetsPerInterfaceNum+pup] ;
+				CHECK_STATUS(mvHwsDdr3TipBUSWrite(  devNum, ACCESS_TYPE_UNICAST, interfaceId, pupAccess, pup, DDR_PHY_DATA, reg + CS_BYTE_GAP(uiCs), startAdll));
+				if(direction == 0)
+				{
+					CHECK_STATUS(mvHwsDdr3TipBUSWrite(  devNum, ACCESS_TYPE_UNICAST, interfaceId, pupAccess, pup, DDR_PHY_DATA, 0x1 + CS_BYTE_GAP(uiCs), ctrlADLL1[interfaceId*uiCs*octetsPerInterfaceNum+pup]));
+				}
+			}
+		}
+		mvPrintf("Final,CS %d,%s,Leveling,Result,Adll,", uiCs,((direction==0) ? "TX":"RX"));
+		for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++)
+		{
+			VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
+			if (mode == 1)
+			{
+				for(pup=startPup; pup <=endPup; pup++)
+				{
+					VALIDATE_BUS_ACTIVE(topologyMap->activeBusMask, pup)
+					mvPrintf("I/F%d-PHY%d , ",interfaceId,pup);
+				}
+			}
+			else
+			{
+				mvPrintf("I/F%d , ",interfaceId);
+			}
+		}
+		mvPrintf("\n");
+		for(adll = 0 ; adll < ADLL_LENGTH ; adll++)
+		{
+			adllValue = (direction == 0) ? ((adll*2)-32):((adll*3)-48);
+			mvPrintf("Final,%s,LevelingSweep,Result, %d ,",((direction==0) ? "TX":"RX"),adllValue);
+
+			for(interfaceId = 0; interfaceId <= MAX_INTERFACE_NUM-1; interfaceId++){
+				VALIDATE_IF_ACTIVE(topologyMap->interfaceActiveMask, interfaceId)
+				for( pup=startPup; pup <=endPup; pup++)
+				{
+					mvPrintf("%8d , ",ctrlSweepres[adll][interfaceId][pup]);
+				}
+			}
+			mvPrintf("\n");
+		}
+		/*Write back to the phy the Rx DQS value, we store in the begging. */
+		writeLevelingValue(ctrlADLL,ctrlLevelPhase, (reg +  uiCs * CS_REGISTER_ADDR_OFFSET));
+		if(direction == 0)
+		{
+			writeAdllValue(ctrlADLL1, (0x1 + (uiCs * CS_REGISTER_ADDR_OFFSET)));
+		}
+		/* print adll results */
+		readAdllValue(ctrlADLL, (reg + uiCs * CS_REGISTER_ADDR_OFFSET), MASK_ALL_BITS);
+		mvPrintf("%s,DQS,Leveling,,,",(direction==0) ? "Tx":"Rx");
+		printAdll(devNum, ctrlADLL);
+		printPh(devNum, ctrlLevelPhase);
+	}/*End of CS*/
+
+    ddr3TipResetFifoPtr(devNum);
+    return 0;
+}
+
+
+
 void printTopology(MV_HWS_TOPOLOGY_MAP *pTopologyDB)
 {
 	GT_U32 ui, uj;
diff --git a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3TrainingDb.c b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3TrainingDb.c
index 4f777c9..ad9507d 100755
--- a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3TrainingDb.c
+++ b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3TrainingDb.c
@@ -442,6 +442,85 @@
 	}
 }
 
+inline static GT_U32 patternTableGetSsoFullXtalkWord( GT_U8 bit, GT_U8 index)
+{
+	GT_U8 byte = (1 << bit);
+
+	if( 1 == (index&1) ){
+		byte = ~byte;
+	}
+
+	return (byte || (byte<<8) || (byte<<16) || (byte<<24));
+}
+
+inline static GT_U32 patternTableGetSsoXtalkFreeWord( GT_U8 bit, GT_U8 index)
+{
+	GT_U8 byte = (1 << bit);
+
+	if( 1 == (index&1) ){
+		byte = 0;
+	}
+
+	return (byte || (byte<<8) || (byte<<16) || (byte<<24));
+}
+
+inline static GT_U32 patternTableGetISIWord( GT_U8 index)
+{
+	GT_U8 I0 =  index%32;
+	GT_U8 I1 =  index%8;
+	GT_U32	Word;
+
+	if(I0 > 15)
+	{
+		Word =  ((I1 ==5)|(I1==7))?0xFFFFFFFF:0x0;
+	}else{
+		Word =  (I1 ==6)?0xFFFFFFFF:0x0;
+	}
+
+	Word = ((I0%16)>7)?~Word:Word;
+	return Word;
+}
+
+inline static GT_U32 patternTableGetSsoFullXtalkWord_16( GT_U8 bit, GT_U8 index)
+{
+	GT_U8 byte = (1 << bit);
+
+	if( 1 == (index&1) ){
+		byte = ~byte;
+	}
+
+	return (byte || (byte<<8) || ((~byte)<<16) || ((~byte)<<24));
+}
+
+inline static GT_U32 patternTableGetSsoXtalkFreeWord_16( GT_U8 bit, GT_U8 index)
+{
+	GT_U8 byte = (1 << bit);
+
+	if( 0 == ((index)&1) ){
+		return ((byte<<16) || (byte<<24));
+	}
+	else{
+		return (byte || (byte<<8));
+	}
+
+}
+inline static GT_U32 patternTableGetISIWord_16( GT_U8 index)
+{
+	GT_U8 I0 =  index%16;
+	GT_U8 I1 =  index%4;
+	GT_U32	Word;
+
+	if(I0 > 7)
+	{
+ 		Word = ( I1>1)?0x0000FFFF:0x0;
+	}else{
+		Word =  (I1 ==3)?0xFFFF0000:0x0;
+	}
+
+	Word = ((I0%8)>3)?~Word:Word;
+	return Word;
+}
+
 INLINE static GT_U32 patternTableGetVrefWord(GT_U8 index)
 {
 	if( 0 == ((patternVrefPatternTableMap[index/8] >> (index%8))&1) ){
@@ -551,13 +630,36 @@
 		case PATTERN_VREF:
 			pattern = patternTableGetVrefWord(index);
 			break;
+		case PATTERN_SSO_FULL_XTALK_DQ0:
+		case PATTERN_SSO_FULL_XTALK_DQ1:
+		case PATTERN_SSO_FULL_XTALK_DQ2:
+		case PATTERN_SSO_FULL_XTALK_DQ3:
+		case PATTERN_SSO_FULL_XTALK_DQ4:
+		case PATTERN_SSO_FULL_XTALK_DQ5:
+		case PATTERN_SSO_FULL_XTALK_DQ6:
+		case PATTERN_SSO_FULL_XTALK_DQ7:
+			pattern = patternTableGetSsoFullXtalkWord(type - PATTERN_SSO_FULL_XTALK_DQ0, index);
+			break;
+		case PATTERN_SSO_XTALK_FREE_DQ0:
+		case PATTERN_SSO_XTALK_FREE_DQ1:
+		case PATTERN_SSO_XTALK_FREE_DQ2:
+		case PATTERN_SSO_XTALK_FREE_DQ3:
+		case PATTERN_SSO_XTALK_FREE_DQ4:
+		case PATTERN_SSO_XTALK_FREE_DQ5:
+		case PATTERN_SSO_XTALK_FREE_DQ6:
+		case PATTERN_SSO_XTALK_FREE_DQ7:
+			pattern = patternTableGetSsoXtalkFreeWord(type - PATTERN_SSO_XTALK_FREE_DQ0, index);
+			break;
+		case PATTERN_ISI_XTALK_FREE:
+			pattern = patternTableGetISIWord( index);
+			break;
 		default:
 			pattern = 0;
 			break;
 		}
 	}
 	else{
-	/*16bit patterns*/	
+	/*16bit patterns*/
 		switch(type){
 		case PATTERN_PBS1:
 		case PATTERN_PBS2:
@@ -607,6 +709,29 @@
 		case PATTERN_VREF:
 			pattern = patternTableGetVrefWord16(index);
 			break;
+		case PATTERN_SSO_FULL_XTALK_DQ0:
+		case PATTERN_SSO_FULL_XTALK_DQ1:
+		case PATTERN_SSO_FULL_XTALK_DQ2:
+		case PATTERN_SSO_FULL_XTALK_DQ3:
+		case PATTERN_SSO_FULL_XTALK_DQ4:
+		case PATTERN_SSO_FULL_XTALK_DQ5:
+		case PATTERN_SSO_FULL_XTALK_DQ6:
+		case PATTERN_SSO_FULL_XTALK_DQ7:
+			pattern = patternTableGetSsoFullXtalkWord_16(type - PATTERN_SSO_FULL_XTALK_DQ0, index);
+			break;
+		case PATTERN_SSO_XTALK_FREE_DQ0:
+		case PATTERN_SSO_XTALK_FREE_DQ1:
+		case PATTERN_SSO_XTALK_FREE_DQ2:
+		case PATTERN_SSO_XTALK_FREE_DQ3:
+		case PATTERN_SSO_XTALK_FREE_DQ4:
+		case PATTERN_SSO_XTALK_FREE_DQ5:
+		case PATTERN_SSO_XTALK_FREE_DQ6:
+		case PATTERN_SSO_XTALK_FREE_DQ7:
+			pattern = patternTableGetSsoXtalkFreeWord_16(type - PATTERN_SSO_XTALK_FREE_DQ0, index);
+			break;
+		case PATTERN_ISI_XTALK_FREE:
+			pattern = patternTableGetISIWord_16( index);
+			break;
 		default:
 			pattern = 0;
 			break;
diff --git a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3TrainingIpEngine.c b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3TrainingIpEngine.c
index ca8c251..2423079 100755
--- a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3TrainingIpEngine.c
+++ b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Driver/ddr3/mvHwsDdr3TrainingIpEngine.c
@@ -84,7 +84,10 @@
 /* num tx phases  tx burst   delay between   rx pattern start_address   patternLen*/
    {0x1,	1,	2,  1, 0x0080,  2 },	/* PATTERN_PBS1*/
    {0x1,	1,	2,  1, 0x00C0,  2 },	/* PATTERN_PBS2*/
+   {0x1,	1,	2,  1, 0x0380,  2 },	/* PATTERN_PBS3*/
+   {0x1,	1,	2,  1, 0x0040,  2 },	/* PATTERN_TEST*/
    {0x1,	1,	2,  1, 0x0100,  2 },	/* PATTERN_RL*/
+   {0x1,	1,	2,  1, 0x0000,  2 },	/* PATTERN_RL2*/
    {0xf,	7,  2,	7, 0x0140, 16  },	/* PATTERN_STATIC_PBS*/
    {0xf,	7,  2,	7, 0x0190, 16  },	/* PATTERN_KILLER_DQ0*/
    {0xf,  	7,  2,	7, 0x01D0, 16  },	/* PATTERN_KILLER_DQ1*/
@@ -94,129 +97,195 @@
    {0xf,  	7,  2,	7, 0x02D0, 16  },	/* PATTERN_KILLER_DQ5*/
    {0xf,  	7,  2,	7, 0x0310, 16  },	/* PATTERN_KILLER_DQ6*/
    {0xf,  	7,  2,	7, 0x0350, 16  },	/* PATTERN_KILLER_DQ7*/
-   {0x1,	1,	2,  1, 0x0380,  2 },	/* PATTERN_PBS3*/
-   {0x1,	1,	2,  1, 0x0000,  2 },	/* PATTERN_RL2*/
-   {0x1,	1,	2,  1, 0x0040,  2 },	/* PATTERN_TEST*/
+   {0xf,  	7,  2,	7, 0x04C0, 16  },	/* PATTERN_VREF*/
    {0xf,  	7,  2,	7, 0x03C0, 16  },	/* PATTERN_FULL_SSO_1T*/
    {0xf,  	7,  2,	7, 0x0400, 16  },	/* PATTERN_FULL_SSO_2T*/
    {0xf,  	7,  2,	7, 0x0440, 16  },	/* PATTERN_FULL_SSO_3T*/
    {0xf,  	7,  2,	7, 0x0480, 16  },	/* PATTERN_FULL_SSO_4T*/
-   {0xf,  	7,  2,	7, 0x04C0, 16  }	/* PATTERN_VREF*/
+   {0xf,  	7,  2,	7, 0x6280, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ0*/
+   {0xf,  	7,  2,	7, 0x6680, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ1*/
+   {0xf,  	7,  2,	7, 0x6A80, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ2*/
+   {0xf,  	7,  2,	7, 0x6E80, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ3*/
+   {0xf,  	7,  2,	7, 0x7280, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ4*/
+   {0xf,  	7,  2,	7, 0x7680, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ5*/
+   {0xf,  	7,  2,	7, 0x7A80, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ6*/
+   {0xf,  	7,  2,	7, 0x7E80, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ7*/
+   {0xf,  	7,  2,	7, 0x8280, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ0*/
+   {0xf,  	7,  2,	7, 0x8680, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ1*/
+   {0xf,  	7,  2,	7, 0x8A80, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ2*/
+   {0xf,  	7,  2,	7, 0x8E80, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ3*/
+   {0xf,  	7,  2,	7, 0x9280, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ4*/
+   {0xf,  	7,  2,	7, 0x9680, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ5*/
+   {0xf,  	7,  2,	7, 0x9A80, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ6*/
+   {0xf,  	7,  2,	7, 0x9E80, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ7*/
+   {0xf,  	7,  2,	7, 0xA280, 16  } /* PATTERN_ISI_XTALK_FREE*/
 /*Note: actual start_address is <<3 of defined addess*/
 };
 
 PatternInfo patternTable_32[] =
 {
 /* num tx phases  tx burst   delay between   rx pattern start_address   patternLen*/
-   {0x3, 	0x3,	2,  0x3, 0x0080,  4  }, /* PATTERN_PBS1*/
-   {0x3, 	0x3,	2,  0x3, 0x00C0,  4  }, /* PATTERN_PBS2*/
-   {0x3, 	0x3,	2,  0x3, 0x0100,  4  }, /* PATTERN_RL*/
-   {0x1f,  	0xf,    2,	0xf, 0x0140, 32  }, /* PATTERN_STATIC_PBS*/
-   {0x1f,  	0xf,    2,	0xf, 0x0190, 32  }, /* PATTERN_KILLER_DQ0*/
-   {0x1f,  	0xf,    2,	0xf, 0x01D0, 32  }, /* PATTERN_KILLER_DQ1*/
-   {0x1f,  	0xf,    2,	0xf, 0x0210, 32  }, /* PATTERN_KILLER_DQ2*/
-   {0x1f,  	0xf,    2,	0xf, 0x0250, 32  }, /* PATTERN_KILLER_DQ3*/
-   {0x1f,  	0xf,    2,	0xf, 0x0290, 32  }, /* PATTERN_KILLER_DQ4*/
-   {0x1f,  	0xf,    2,	0xf, 0x02D0, 32  }, /* PATTERN_KILLER_DQ5*/
-   {0x1f,  	0xf,    2,	0xf, 0x0310, 32  }, /* PATTERN_KILLER_DQ6*/
-   {0x1f,  	0xf,    2,	0xf, 0x0350, 32  }, /* PATTERN_KILLER_DQ7*/
-   {0x3, 	0x3,	2,  0x3, 0x0380,  4  }, /* PATTERN_PBS3*/
-   {0x3, 	0x3,	2,  0x3, 0x0000,  4  }, /* PATTERN_RL2*/
-   {0x3, 	0x3,	2,  0x3, 0x0040,  4  }, /* PATTERN_TEST*/
-   {0x1f,  	0xf,    2,	0xf, 0x03C0, 32  }, /* PATTERN_FULL_SSO_1T*/
-   {0x1f,  	0xf,    2,	0xf, 0x0400, 32  }, /* PATTERN_FULL_SSO_2T*/
-   {0x1f,  	0xf,    2,	0xf, 0x0440, 32  }, /* PATTERN_FULL_SSO_3T*/
-   {0x1f,  	0xf,    2,	0xf, 0x0480, 32  }, /* PATTERN_FULL_SSO_4T*/
-   {0x1f,  	0xf,    2,	0xf, 0x04C0, 32  }  /* PATTERN_VREF*/
+   {0x3,	0x3,  2,  0x3, 0x0080,  4 },	/* PATTERN_PBS1*/
+   {0x3,	0x3,  2,  0x3, 0x00C0,  4 },	/* PATTERN_PBS2*/
+   {0x3,	0x3,  2,  0x3, 0x0380,  4 },	/* PATTERN_PBS3*/
+   {0x3,	0x3,  2,  0x3, 0x0040,  4 },	/* PATTERN_TEST*/
+   {0x3,	0x3,  2,  0x3, 0x0100,  4 },	/* PATTERN_RL*/
+   {0x3,	0x3,  2,  0x3, 0x0000,  4 },	/* PATTERN_RL2*/
+   {0x1f,	0xF,  2,  0xf, 0x0140, 32  },	/* PATTERN_STATIC_PBS*/
+   {0x1f,	0xF,  2,  0xf, 0x0190, 32  },	/* PATTERN_KILLER_DQ0*/
+   {0x1f,  	0xF,  2,  0xf, 0x01D0, 32  },	/* PATTERN_KILLER_DQ1*/
+   {0x1f,  	0xF,  2,  0xf, 0x0210, 32  },	/* PATTERN_KILLER_DQ2*/
+   {0x1f,  	0xF,  2,  0xf, 0x0250, 32  },	/* PATTERN_KILLER_DQ3*/
+   {0x1f,  	0xF,  2,  0xf, 0x0290, 32  },	/* PATTERN_KILLER_DQ4*/
+   {0x1f,  	0xF,  2,  0xf, 0x02D0, 32  },	/* PATTERN_KILLER_DQ5*/
+   {0x1f,  	0xF,  2,  0xf, 0x0310, 32  },	/* PATTERN_KILLER_DQ6*/
+   {0x1f,  	0xF,  2,  0xf, 0x0350, 32  },	/* PATTERN_KILLER_DQ7*/
+   {0x1f,  	0xF,  2,  0xf, 0x04C0, 32  },	/* PATTERN_VREF*/
+   {0x1f,  	0xF,  2,  0xf, 0x03C0, 32  },	/* PATTERN_FULL_SSO_1T*/
+   {0x1f,  	0xF,  2,  0xf, 0x0400, 32  },	/* PATTERN_FULL_SSO_2T*/
+   {0x1f,  	0xF,  2,  0xf, 0x0440, 32  },	/* PATTERN_FULL_SSO_3T*/
+   {0x1f,  	0xF,  2,  0xf, 0x0480, 32  },	/* PATTERN_FULL_SSO_4T*/
+   {0x1f,  	0xF,  2,  0xf, 0x6280, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ0*/
+   {0x1f,  	0xF,  2,  0xf, 0x6680, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ1*/
+   {0x1f,  	0xF,  2,  0xf, 0x6A80, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ2*/
+   {0x1f,  	0xF,  2,  0xf, 0x6E80, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ3*/
+   {0x1f,  	0xF,  2,  0xf, 0x7280, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ4*/
+   {0x1f,  	0xF,  2,  0xf, 0x7680, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ5*/
+   {0x1f,  	0xF,  2,  0xf, 0x7A80, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ6*/
+   {0x1f,  	0xF,  2,  0xf, 0x7E80, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ7*/
+   {0x1f,  	0xF,  2,  0xf, 0x8280, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ0*/
+   {0x1f,  	0xF,  2,  0xf, 0x8680, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ1*/
+   {0x1f,  	0xF,  2,  0xf, 0x8A80, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ2*/
+   {0x1f,  	0xF,  2,  0xf, 0x8E80, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ3*/
+   {0x1f,  	0xF,  2,  0xf, 0x9280, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ4*/
+   {0x1f,  	0xF,  2,  0xf, 0x9680, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ5*/
+   {0x1f,  	0xF,  2,  0xf, 0x9A80, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ6*/
+   {0x1f,  	0xF,  2,  0xf, 0x9E80, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ7*/
+   {0x1f,  	0xF,  2,  0xf, 0xA280, 32  } /* PATTERN_ISI_XTALK_FREE*/
+
+
 /*Note: actual start_address is <<3 of defined addess*/
 };
 #else
-
 PatternInfo patternTable_16[] =
 {
 /* num tx phases  tx burst   delay between   rx pattern start_address   patternLen*/
-   {0x1, 	0x1,    2,  0x1, 0x0080,  2  }, /* PATTERN_PBS1*/
-   {0x1, 	0x1,    2,  0x1, 0x00C0,  2  }, /* PATTERN_PBS2*/
-   {0x1, 	0x1,    2,  0x1, 0x0100,  2  }, /* PATTERN_RL*/
-   {0xf,  	0x7,    2,	0x7, 0x0140, 16  }, /* PATTERN_STATIC_PBS*/
-   {0xf,  	0x7,    2,	0x7, 0x0180, 16  }, /* PATTERN_KILLER_DQ0*/
-   {0xf,  	0x7,    2,	0x7, 0x01C0, 16  }, /* PATTERN_KILLER_DQ1*/
-   {0xf,  	0x7,    2,	0x7, 0x0200, 16  }, /* PATTERN_KILLER_DQ2*/
-   {0xf,  	0x7,    2,	0x7, 0x0240, 16  }, /* PATTERN_KILLER_DQ3*/
-   {0xf,  	0x7,    2,	0x7, 0x0280, 16  }, /* PATTERN_KILLER_DQ4*/
-   {0xf,  	0x7,    2,	0x7, 0x02C0, 16  }, /* PATTERN_KILLER_DQ5*/
-   {0xf,  	0x7,    2,	0x7, 0x0300, 16  }, /* PATTERN_KILLER_DQ6*/
-   {0xf,  	0x7,    2,	0x7, 0x0340, 16  }, /* PATTERN_KILLER_DQ7*/
-   {0xf,  	0x7,    2,	0x7, 0x1180, 16  }, /* PATTERN_KILLER_DQ0_EXT*/
-   {0xf,  	0x7,    2,	0x7, 0x11C0, 16  }, /* PATTERN_KILLER_DQ1_EXT*/
-   {0xf,  	0x7,    2,	0x7, 0x1200, 16  }, /* PATTERN_KILLER_DQ2_EXT*/
-   {0xf,  	0x7,    2,	0x7, 0x1240, 16  }, /* PATTERN_KILLER_DQ3_EXT*/
-   {0xf,  	0x7,    2,	0x7, 0x1280, 16  }, /* PATTERN_KILLER_DQ4_EXT*/
-   {0xf,  	0x7,    2,	0x7, 0x12C0, 16  }, /* PATTERN_KILLER_DQ5_EXT*/
-   {0xf,  	0x7,    2,	0x7, 0x1300, 16  }, /* PATTERN_KILLER_DQ6_EXT*/
-   {0xf,  	0x7,    2,	0x7, 0x1340, 16  }, /* PATTERN_KILLER_DQ7_EXT*/
-   {0xf,  	0x7,    2,	0x7, 0x04C0, 16  }, /* PATTERN_VREF*/
-   {0xf,  	0x7,    2,	0x7, 0x14C0, 16  }, /* PATTERN_VREF_INV*/
-   {0xf,  	0x7,    2,	0x7, 0x1500, 16  }, /* PATTERN_RESONANCE_1T*/
-   {0xf,  	0x7,    2,	0x7, 0x1540, 16  }, /* PATTERN_RESONANCE_2T*/
-   {0xf,  	0x7,    2,	0x7, 0x1580, 16  }, /* PATTERN_RESONANCE_3T*/
-   {0xf,  	0x7,    2,	0x7, 0x15C0, 16  }, /* PATTERN_RESONANCE_4T*/
-   {0xf,  	0x7,    2,	0x7, 0x1600, 16  }, /* PATTERN_RESONANCE_5T*/
-   {0xf,  	0x7,    2,	0x7, 0x1640, 16  }, /* PATTERN_RESONANCE_6T*/
-   {0xf,  	0x7,    2,	0x7, 0x1680, 16  }, /* PATTERN_RESONANCE_7T*/
-   {0xf,  	0x7,    2,	0x7, 0x16C0, 16  }, /* PATTERN_RESONANCE_8T*/
-   {0xf,  	0x7,    2,	0x7, 0x1700, 16  }, /* PATTERN_RESONANCE_9T*/
-   {0x3, 	0x1,    2,  0x1, 0x0380,  2  }, /* PATTERN_PBS3*/
-   {0x3, 	0x1,    2,  0x1, 0x0000,  2  }, /* PATTERN_RL2*/
-   {0x3, 	0x1,    2,  0x1, 0x0040,  2  }, /* PATTERN_TEST*/
-   {0x1f,  	0x7,   	2,	0x7, 0x03C0, 16  }, /* PATTERN_FULL_SSO_1T*/
-   {0x1f,  	0x7,   	2,	0x7, 0x0400, 16  }, /* PATTERN_FULL_SSO_2T*/
-   {0x1f,  	0x7,   	2,	0x7, 0x0440, 16  }, /* PATTERN_FULL_SSO_3T*/
-   {0x1f,  	0x7,   	2,	0x7, 0x0480, 16  }  /* PATTERN_FULL_SSO_4T*/
+   {0x1, 	0x1,	2,  0x1, 0x0000,  2  }, /* PATTERN_PBS1*/
+   {0x1, 	0x1,	2,  0x1, 0x0080,  2  }, /* PATTERN_PBS2*/
+   {0x1, 	0x1,	2,  0x1, 0x0100,  2  }, /* PATTERN_PBS3*/
+   {0x1, 	0x1,	2,  0x1, 0x0180,  2  }, /* PATTERN_TEST*/
+   {0x1, 	0x1,	2,  0x1, 0x0200,  2  }, /* PATTERN_RL*/
+   {0x1, 	0x1,	2,  0x1, 0x0280,  2  }, /* PATTERN_RL2*/
+   {0xf,  	0x7,    2,	0x7, 0x0680, 16  }, /* PATTERN_STATIC_PBS*/
+   {0xf,  	0x7,    2,	0x7, 0x0A80, 16  }, /* PATTERN_KILLER_DQ0*/
+   {0xf,  	0x7,    2,	0x7, 0x0E80, 16  }, /* PATTERN_KILLER_DQ1*/
+   {0xf,  	0x7,    2,	0x7, 0x1280, 16  }, /* PATTERN_KILLER_DQ2*/
+   {0xf,  	0x7,    2,	0x7, 0x1680, 16  }, /* PATTERN_KILLER_DQ3*/
+   {0xf,  	0x7,    2,	0x7, 0x1A80, 16  }, /* PATTERN_KILLER_DQ4*/
+   {0xf,  	0x7,    2,	0x7, 0x1E80, 16  }, /* PATTERN_KILLER_DQ5*/
+   {0xf,  	0x7,    2,	0x7, 0x2280, 16  }, /* PATTERN_KILLER_DQ6*/
+   {0xf,  	0x7,    2,	0x7, 0x2680, 16  }, /* PATTERN_KILLER_DQ7*/
+   {0xf,  	0x7,    2,	0x7, 0x2A80, 16  }, /* PATTERN_KILLER_DQ0_INV*/
+   {0xf,  	0x7,    2,	0x7, 0x2E80, 16  }, /* PATTERN_KILLER_DQ1_INV*/
+   {0xf,  	0x7,    2,	0x7, 0x3280, 16  }, /* PATTERN_KILLER_DQ2_INV*/
+   {0xf,  	0x7,    2,	0x7, 0x3680, 16  }, /* PATTERN_KILLER_DQ3_INV*/
+   {0xf,  	0x7,    2,	0x7, 0x3A80, 16  }, /* PATTERN_KILLER_DQ4_INV*/
+   {0xf,  	0x7,    2,	0x7, 0x3E80, 16  }, /* PATTERN_KILLER_DQ5_INV*/
+   {0xf,  	0x7,    2,	0x7, 0x4280, 16  }, /* PATTERN_KILLER_DQ6_INV*/
+   {0xf,  	0x7,    2,	0x7, 0x4680, 16  }, /* PATTERN_KILLER_DQ7_INV*/
+   {0xf,  	0x7,    2,	0x7, 0x4A80, 16  }, /* PATTERN_VREF*/
+   {0xf,  	0x7,    2,	0x7, 0x4E80, 16  }, /* PATTERN_VREF_INV*/
+   {0xf,  	0x7,    2,	0x7, 0x5280, 16  }, /* PATTERN_FULL_SSO_0T*/
+   {0xf,  	0x7,    2,	0x7, 0x5680, 16  }, /* PATTERN_FULL_SSO_1T*/
+   {0xf,  	0x7,    2,	0x7, 0x5A80, 16  }, /* PATTERN_FULL_SSO_2T*/
+   {0xf,  	0x7,    2,	0x7, 0x5E80, 16  }, /* PATTERN_FULL_SSO_3T*/
+   {0xf,  	0x7,    2,	0x7, 0x6280, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ0*/
+   {0xf,  	0x7,    2,	0x7, 0x6680, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ1*/
+   {0xf,  	0x7,    2,	0x7, 0x6A80, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ2*/
+   {0xf,  	0x7,    2,	0x7, 0x6E80, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ3*/
+   {0xf,  	0x7,    2,	0x7, 0x7280, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ4*/
+   {0xf,  	0x7,    2,	0x7, 0x7680, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ5*/
+   {0xf,  	0x7,    2,	0x7, 0x7A80, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ6*/
+   {0xf,  	0x7,    2,	0x7, 0x7E80, 16  }, /* PATTERN_SSO_FULL_XTALK_DQ7*/
+   {0xf,  	0x7,    2,	0x7, 0x8280, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ0*/
+   {0xf,  	0x7,    2,	0x7, 0x8680, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ1*/
+   {0xf,  	0x7,    2,	0x7, 0x8A80, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ2*/
+   {0xf,  	0x7,    2,	0x7, 0x8E80, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ3*/
+   {0xf,  	0x7,    2,	0x7, 0x9280, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ4*/
+   {0xf,  	0x7,    2,	0x7, 0x9680, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ5*/
+   {0xf,  	0x7,    2,	0x7, 0x9A80, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ6*/
+   {0xf,  	0x7,    2,	0x7, 0x9E80, 16  }, /* PATTERN_SSO_XTALK_FREE_DQ7*/
+   {0xf,  	0x7,    2,	0x7, 0xA280, 16  }, /* PATTERN_ISI_XTALK_FREE*/
+   {0xf,  	0x7,    2,	0x7, 0xA680, 16  }, /* PATTERN_RESONANCE_1T*/
+   {0xf,  	0x7,    2,	0x7, 0xAA80, 16  }, /* PATTERN_RESONANCE_2T*/
+   {0xf,  	0x7,    2,	0x7, 0xAE80, 16  }, /* PATTERN_RESONANCE_3T*/
+   {0xf,  	0x7,    2,	0x7, 0xB280, 16  }, /* PATTERN_RESONANCE_4T*/
+   {0xf,  	0x7,    2,	0x7, 0xB680, 16  }, /* PATTERN_RESONANCE_5T*/
+   {0xf,  	0x7,    2,	0x7, 0xBA80, 16  }, /* PATTERN_RESONANCE_6T*/
+   {0xf,  	0x7,    2,	0x7, 0xBE80, 16  }, /* PATTERN_RESONANCE_7T*/
+   {0xf,  	0x7,    2,	0x7, 0xC280, 16  }, /* PATTERN_RESONANCE_8T*/
+   {0xf,  	0x7,    2,	0x7, 0xC680, 16  }  /* PATTERN_RESONANCE_9T*/
 /*Note: actual start_address is <<3 of defined addess*/
 };
 
 PatternInfo patternTable_32[] =
 {
 /* num tx phases  tx burst   delay between   rx pattern start_address   patternLen*/
-   {0x3, 	0x3,	2,  0x3, 0x0080,  4  }, /* PATTERN_PBS1*/
-   {0x3, 	0x3,	2,  0x3, 0x00C0,  4  }, /* PATTERN_PBS2*/
-   {0x3, 	0x3,	2,  0x3, 0x0100,  4  }, /* PATTERN_RL*/
-   {0x1f,  	0xf,    2,	0xf, 0x0140, 32  }, /* PATTERN_STATIC_PBS*/
-   {0x1f,  	0xf,    2,	0xf, 0x0180, 32  }, /* PATTERN_KILLER_DQ0*/
-   {0x1f,  	0xf,    2,	0xf, 0x01C0, 32  }, /* PATTERN_KILLER_DQ1*/
-   {0x1f,  	0xf,    2,	0xf, 0x0200, 32  }, /* PATTERN_KILLER_DQ2*/
-   {0x1f,  	0xf,    2,	0xf, 0x0240, 32  }, /* PATTERN_KILLER_DQ3*/
-   {0x1f,  	0xf,    2,	0xf, 0x0280, 32  }, /* PATTERN_KILLER_DQ4*/
-   {0x1f,  	0xf,    2,	0xf, 0x02C0, 32  }, /* PATTERN_KILLER_DQ5*/
-   {0x1f,  	0xf,    2,	0xf, 0x0300, 32  }, /* PATTERN_KILLER_DQ6*/
-   {0x1f,  	0xf,    2,	0xf, 0x0340, 32  }, /* PATTERN_KILLER_DQ7*/
-   {0x1f,  	0xf,    2,	0xf, 0x1180, 32  }, /* PATTERN_KILLER_DQ0_EXT*/
-   {0x1f,  	0xf,    2,	0xf, 0x11C0, 32  }, /* PATTERN_KILLER_DQ1_EXT*/
-   {0x1f,  	0xf,    2,	0xf, 0x1200, 32  }, /* PATTERN_KILLER_DQ2_EXT*/
-   {0x1f,  	0xf,    2,	0xf, 0x1240, 32  }, /* PATTERN_KILLER_DQ3_EXT*/
-   {0x1f,  	0xf,    2,	0xf, 0x1280, 32  }, /* PATTERN_KILLER_DQ4_EXT*/
-   {0x1f,  	0xf,    2,	0xf, 0x12C0, 32  }, /* PATTERN_KILLER_DQ5_EXT*/
-   {0x1f,  	0xf,    2,	0xf, 0x1300, 32  }, /* PATTERN_KILLER_DQ6_EXT*/
-   {0x1f,  	0xf,    2,	0xf, 0x1340, 32  }, /* PATTERN_KILLER_DQ7_EXT*/
-   {0x1f,  	0xf,    2,	0xf, 0x04C0, 32  }, /* PATTERN_VREF*/
-   {0x1f,  	0xf,    2,	0xf, 0x14C0, 32  }, /* PATTERN_VREF_INV*/
-   {0x1f,  	0xf,    2,	0xf, 0x1500, 32  }, /* PATTERN_RESONANCE_1T*/
-   {0x1f,  	0xf,    2,	0xf, 0x1540, 32  }, /* PATTERN_RESONANCE_2T*/
-   {0x1f,  	0xf,    2,	0xf, 0x1580, 32  }, /* PATTERN_RESONANCE_3T*/
-   {0x1f,  	0xf,    2,	0xf, 0x15C0, 32  }, /* PATTERN_RESONANCE_4T*/
-   {0x1f,  	0xf,    2,	0xf, 0x1600, 32  }, /* PATTERN_RESONANCE_5T*/
-   {0x1f,  	0xf,    2,	0xf, 0x1640, 32  }, /* PATTERN_RESONANCE_6T*/
-   {0x1f,  	0xf,    2,	0xf, 0x1680, 32  }, /* PATTERN_RESONANCE_7T*/
-   {0x1f,  	0xf,    2,	0xf, 0x16C0, 32  }, /* PATTERN_RESONANCE_8T*/
-   {0x1f,  	0xf,    2,	0xf, 0x1700, 32  }, /* PATTERN_RESONANCE_9T*/
-   {0x3, 	0x3,	2,  0x3, 0x0380,  4  }, /* PATTERN_PBS3*/
-   {0x3, 	0x3,	2,  0x3, 0x0000,  4  }, /* PATTERN_RL2*/
-   {0x3, 	0x3,	2,  0x3, 0x0040,  4  }, /* PATTERN_TEST*/
-   {0x1f,  	0xf,    2,	0xf, 0x03C0, 32  }, /* PATTERN_FULL_SSO_1T*/
-   {0x1f,  	0xf,    2,	0xf, 0x0400, 32  }, /* PATTERN_FULL_SSO_2T*/
-   {0x1f,  	0xf,    2,	0xf, 0x0440, 32  }, /* PATTERN_FULL_SSO_3T*/
-   {0x1f,  	0xf,    2,	0xf, 0x0480, 32  }  /* PATTERN_FULL_SSO_4T*/
+   {0x3, 	0x3,	2,  0x3, 0x0000,  4  }, /* PATTERN_PBS1*/
+   {0x3, 	0x3,	2,  0x3, 0x0080,  4  }, /* PATTERN_PBS2*/
+   {0x3, 	0x3,	2,  0x3, 0x0100,  4  }, /* PATTERN_PBS3*/
+   {0x3, 	0x3,	2,  0x3, 0x0180,  4  }, /* PATTERN_TEST*/
+   {0x3, 	0x3,	2,  0x3, 0x0200,  4  }, /* PATTERN_RL*/
+   {0x3, 	0x3,	2,  0x3, 0x0280,  4  }, /* PATTERN_RL2*/
+   {0x1f,  	0xf,    2,	0xf, 0x0680, 32  }, /* PATTERN_STATIC_PBS*/
+   {0x1f,  	0xf,    2,	0xf, 0x0A80, 32  }, /* PATTERN_KILLER_DQ0*/
+   {0x1f,  	0xf,    2,	0xf, 0x0E80, 32  }, /* PATTERN_KILLER_DQ1*/
+   {0x1f,  	0xf,    2,	0xf, 0x1280, 32  }, /* PATTERN_KILLER_DQ2*/
+   {0x1f,  	0xf,    2,	0xf, 0x1680, 32  }, /* PATTERN_KILLER_DQ3*/
+   {0x1f,  	0xf,    2,	0xf, 0x1A80, 32  }, /* PATTERN_KILLER_DQ4*/
+   {0x1f,  	0xf,    2,	0xf, 0x1E80, 32  }, /* PATTERN_KILLER_DQ5*/
+   {0x1f,  	0xf,    2,	0xf, 0x2280, 32  }, /* PATTERN_KILLER_DQ6*/
+   {0x1f,  	0xf,    2,	0xf, 0x2680, 32  }, /* PATTERN_KILLER_DQ7*/
+   {0x1f,  	0xf,    2,	0xf, 0x2A80, 32  }, /* PATTERN_KILLER_DQ0_INV*/
+   {0x1f,  	0xf,    2,	0xf, 0x2E80, 32  }, /* PATTERN_KILLER_DQ1_INV*/
+   {0x1f,  	0xf,    2,	0xf, 0x3280, 32  }, /* PATTERN_KILLER_DQ2_INV*/
+   {0x1f,  	0xf,    2,	0xf, 0x3680, 32  }, /* PATTERN_KILLER_DQ3_INV*/
+   {0x1f,  	0xf,    2,	0xf, 0x3A80, 32  }, /* PATTERN_KILLER_DQ4_INV*/
+   {0x1f,  	0xf,    2,	0xf, 0x3E80, 32  }, /* PATTERN_KILLER_DQ5_INV*/
+   {0x1f,  	0xf,    2,	0xf, 0x4280, 32  }, /* PATTERN_KILLER_DQ6_INV*/
+   {0x1f,  	0xf,    2,	0xf, 0x4680, 32  }, /* PATTERN_KILLER_DQ7_INV*/
+   {0x1f,  	0xf,    2,	0xf, 0x4A80, 32  }, /* PATTERN_VREF*/
+   {0x1f,  	0xf,    2,	0xf, 0x4E80, 32  }, /* PATTERN_VREF_INV*/
+   {0x1f,  	0xf,    2,	0xf, 0x5280, 32  }, /* PATTERN_FULL_SSO_0T*/
+   {0x1f,  	0xf,    2,	0xf, 0x5680, 32  }, /* PATTERN_FULL_SSO_1T*/
+   {0x1f,  	0xf,    2,	0xf, 0x5A80, 32  }, /* PATTERN_FULL_SSO_2T*/
+   {0x1f,  	0xf,    2,	0xf, 0x5E80, 32  }, /* PATTERN_FULL_SSO_3T*/
+   {0x1f,  	0xf,    2,	0xf, 0x6280, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ0*/
+   {0x1f,  	0xf,    2,	0xf, 0x6680, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ1*/
+   {0x1f,  	0xf,    2,	0xf, 0x6A80, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ2*/
+   {0x1f,  	0xf,    2,	0xf, 0x6E80, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ3*/
+   {0x1f,  	0xf,    2,	0xf, 0x7280, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ4*/
+   {0x1f,  	0xf,    2,	0xf, 0x7680, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ5*/
+   {0x1f,  	0xf,    2,	0xf, 0x7A80, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ6*/
+   {0x1f,  	0xf,    2,	0xf, 0x7E80, 32  }, /* PATTERN_SSO_FULL_XTALK_DQ7*/
+   {0x1f,  	0xf,    2,	0xf, 0x8280, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ0*/
+   {0x1f,  	0xf,    2,	0xf, 0x8680, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ1*/
+   {0x1f,  	0xf,    2,	0xf, 0x8A80, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ2*/
+   {0x1f,  	0xf,    2,	0xf, 0x8E80, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ3*/
+   {0x1f,  	0xf,    2,	0xf, 0x9280, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ4*/
+   {0x1f,  	0xf,    2,	0xf, 0x9680, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ5*/
+   {0x1f,  	0xf,    2,	0xf, 0x9A80, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ6*/
+   {0x1f,  	0xf,    2,	0xf, 0x9E80, 32  }, /* PATTERN_SSO_XTALK_FREE_DQ7*/
+   {0x1f,  	0xf,    2,	0xf, 0xA280, 32  }, /* PATTERN_ISI_XTALK_FREE*/
+   {0x1f,  	0xf,    2,	0xf, 0xA680, 32  }, /* PATTERN_RESONANCE_1T*/
+   {0x1f,  	0xf,    2,	0xf, 0xAA80, 32  }, /* PATTERN_RESONANCE_2T*/
+   {0x1f,  	0xf,    2,	0xf, 0xAE80, 32  }, /* PATTERN_RESONANCE_3T*/
+   {0x1f,  	0xf,    2,	0xf, 0xB280, 32  }, /* PATTERN_RESONANCE_4T*/
+   {0x1f,  	0xf,    2,	0xf, 0xB680, 32  }, /* PATTERN_RESONANCE_5T*/
+   {0x1f,  	0xf,    2,	0xf, 0xBA80, 32  }, /* PATTERN_RESONANCE_6T*/
+   {0x1f,  	0xf,    2,	0xf, 0xBE80, 32  }, /* PATTERN_RESONANCE_7T*/
+   {0x1f,  	0xf,    2,	0xf, 0xC280, 32  }, /* PATTERN_RESONANCE_8T*/
+   {0x1f,  	0xf,    2,	0xf, 0xC680, 32  }  /* PATTERN_RESONANCE_9T*/
 /*Note: actual start_address is <<3 of defined addess*/
 };