/******************************************************************************
*              Copyright (c) Marvell International Ltd. and its affiliates
*
* This software file (the "File") is owned and distributed by Marvell
* International Ltd. and/or its affiliates ("Marvell") under the following
* alternative licensing terms.
* If you received this File from Marvell, you may opt to use, redistribute
* and/or modify this File under the following licensing terms.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*  -   Redistributions of source code must retain the above copyright notice,
*       this list of conditions and the following disclaimer.
*  -   Redistributions in binary form must reproduce the above copyright
*       notice, this list of conditions and the following disclaimer in the
*       documentation and/or other materials provided with the distribution.
*  -    Neither the name of Marvell nor the names of its contributors may be
*       used to endorse or promote products derived from this software without
*       specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************
* mvDdr3TrainingIpFlow.h
*
* DESCRIPTION:
*
*
* FILE REVISION NUMBER:
*       $Revision: 39 $
*
*******************************************************************************/




#ifndef _MV_DDR3_TRAININGIP_FLOW_H_
#define _MV_DDR3_TRAININGIP_FLOW_H_

#include "mvDdr3TrainingIp.h"
#include "mvDdr3TrainingIpPbs.h"
#ifdef CONFIG_DDR4
#include "mvDdr4TrainingIpFlow.h"
#endif

#ifdef __cplusplus
   extern "C"
   {
#endif


/******************************** defined ***************************************/
#define MV_DDR_ILLEGAL_PARAMETER   GT_FAIL
#define MV_DDR_INTERFACE_EXTERNAL_FUNC_NOT_IMPLEMENTED GT_FAIL
#define MV_DDR_INTERFACE_INTERNAL_FUNC_NOT_IMPLEMENTED GT_FAIL
#define MV_DDR_POLLING_TIMEOUT GT_FAIL
#define MV_DDR_INTERFACE_NOT_IMPLEMENTED GT_FAIL
#define MAX_CHANNELS 4

#define MRS0_CMD (0x3)
#define MRS1_CMD (0x4)
#define MRS2_CMD (0x8)
#define MRS3_CMD (0x9)
/******************************************************************************/
/* Definitions of INTERFACE registers                                             */
/******************************************************************************/

#define READ_BUFFER_SELECT                   0x14a4

/******************************************************************************/
/* Definitions of PHY registers                                               */
/******************************************************************************/

#define PBS_PATTERN_LENGTH (2)
#define RL_PATTERN_LENGTH (2)
#define KILLER_PATTERN_LENGTH (32)
#define KILLER_PATTERN_DQ_NUMBER (8)
#define PATTERN_MAXIMUM_LENGTH (64)
#define EXT_ACCESS_BURST_LENGTH (8)
#define  CHIP_ID                0
#define IS_INTERFACE_ACTIVE( _uiInterfaceMask_ , _uiInterfaceId_ )   ( _uiInterfaceMask_ & ( 1 << _uiInterfaceId_ ) ) 
#define IS_BUS_ACTIVE( _uiInterfaceMask_ , _uiInterfaceId_ )   ( _uiInterfaceMask_ & ( 1 << _uiInterfaceId_ ) ) 
#define GET_TOPOLOGY_NUM_OF_BUSES(devNum)   (ddr3TipGetTopologyMap(devNum)->numOfBusPerInterface)

#define DDR3_IS_ECC_PUP3_MODE(_uiInterfaceMask_)	((_uiInterfaceMask_ == 0xB)?(GT_TRUE):(GT_FALSE))
#define DDR3_IS_ECC_PUP4_MODE(_uiInterfaceMask_)	((((_uiInterfaceMask_ & 0x10) == 0))?(GT_FALSE):(GT_TRUE))
#define DDR3_IS_16BIT_DRAM_MODE(_activeBusMask_)	((((_activeBusMask_ & 0x4) == 0))?(GT_TRUE):(GT_FALSE))

#define MEGA                        (1000000)
#define MAXIMUM_NUMBER_OF_POLLING   (1000)
#define BUS_WIDTH_IN_BITS           (8)
#define CLOCK_TIME_PSEC             (7800000000)
#define NUM_OF_KILLER_PATTERNS      (8)
/*DFX address Space
Table 2: DFX address space
Address Bits   Value   Description
[31 : 20]   0x?   DFX base address � bases PCIe mapping
[19 : 15]   0...NumberOfClient-1   Client Index inside pipe. See also Table 1 MultiCast = d�29 Broadcast =d�28
[14 : 13]   2'b01   Access to Client Internal Register
[12 : 0]   Client Internal Register offset   See related Client Registers
[14 : 13]   2'b00   Access to Ram Wrappers Internal Register
[12 : 6]   0�NumberOfRams-1   Ram Index inside Client
[5 : 0]   Ram Wrapper Internal Register offset   See related Ram Wrappers Registers
*/

/* nsec */
#define  TREFI_LOW                        (7800)
#define  TREFI_HIGH                       (3900)

#define  TR2R_VALUE_REG                   (0x180)
#define  TR2R_MASK_REG                    (0x180)
#define  TRFC_MASK_REG                    (0x7f)
#define  TR2W_MASK_REG                    (0x600)
#define  TW2W_HIGH_VALUE_REG              (0x1800)
#define  TW2W_HIGH_MASK_REG               (0xF800)
#define  TRFC_HIGH_VALUE_REG              (0x20000)
#define  TRFC_HIGH_MASK_REG               (0x70000)
#define  TR2R_HIGH_VALUE_REG              (0x0)
#define  TR2R_HIGH_MASK_REG               (0x380000)
#define  TMOD_VALUE_REG                   (0x16000000)
#define  TMOD_MASK_REG                    (0x1E000000)
#define  T_VALUE_REG                      (0x40000000)
#define  T_MASK_REG                       (0xC0000000)
#define  AUTO_ZQC_TIMING                  (15384)
#define  WRITE_XBAR_PORT1                 (0xC03F8077)
#define  READ_XBAR_PORT1                  (0xC03F8073)
#define  DISABLE_DDR_TUNING_DATA          (0x02294285)
#define  ENABLE_DDR_TUNING_DATA           (0x12294285)


#if defined(CONFIG_ARMADA_38X) || defined (CONFIG_ALLEYCAT3) || defined (CONFIG_ARMADA_39X)
#define ODPG_TRAINING_STATUS_REG          (0x18488)
#define ODPG_TRAINING_TRIGGER_REG         (0x1030)
#define ODPG_STATUS_DONE_REG         	  (0x16FC)
#define ODPG_ENABLE_REG                   (0x186D4)//KW28
#define ODPG_ENABLE_OFFS                  (0)
#define ODPG_DISABLE_OFFS                 (8)
#else
#define ODPG_TRAINING_STATUS_REG          (0x1030)
#endif

#define ODPG_TRAINING_CONTROL_REG         (0x1034)
#define ODPG_OBJ1_OPCODE_REG              (0x103C)
#define ODPG_OBJ1_ITER_CNT_REG            (0x10B4)
#define CALIB_OBJ_PRFA_REG                (0x10C4)
#define ODPG_WRITE_LEVELING_DONE_CNTR_REG (0x10F8)
#define ODPG_WRITE_READ_MODE_ENABLE_REG   (0x10FC)
#define TRAINING_OPCODE_1_REG             (0x10B4)
#define SDRAM_CONFIGURATION_REG           (0x1400)
#define DDR_CONTROL_LOW_REG               (0x1404)
#define SDRAM_TIMING_LOW_REG              (0x1408)
#define SDRAM_TIMING_HIGH_REG             (0x140C)
#define SDRAM_ACCESS_CONTROL_REG          (0x1410)
#define SDRAM_OPEN_PAGE_CONTROL_REG       (0x1414)
#define SDRAM_OPERATION_REG               (0x1418)
#define DUNIT_CONTROL_HIGH_REG            (0x1424)
#define ODT_TIMING_LOW                    (0x1428)
#define DDR_TIMING_REG                    (0x142c)
#define ODT_TIMING_HI_REG                 (0x147c)
#define SDRAM_INIT_CONTROL_REG            (0x1480)
#define SDRAM_ODT_CONTROL_HIGH_REG        (0x1498)
#define DUNIT_ODT_CONTROL_REG             (0x149c)
#define READ_BUFFER_SELECT_REG            (0x14a4)
#define DUNIT_MMASK_REG                   (0x14b0)
#define CALIB_MACHINE_CTRL_REG            (0x14cc)
#define DRAM_DLL_TIMING_REG               (0x14E0)
#define DRAM_ZQ_INIT_TIMIMG_REG           (0x14E4)
#define DRAM_ZQ_TIMING_REG                (0x14E8)
#define DFS_REG                           (0x1528)
#define READ_DATA_SAMPLE_DELAY            (0x1538)
#define READ_DATA_READY_DELAY             (0x153C)
#define TRAINING_REG                      (0x15B0)
#define TRAINING_SW_1_REG                 (0x15B4)
#define TRAINING_SW_2_REG                 (0x15B8)
#define TRAINING_PATTERN_BASE_ADDRESS_REG (0x15BC)
#define TRAINING_DBG_1_REG                (0x15C0)
#define TRAINING_DBG_2_REG                (0x15C4)
#define TRAINING_DBG_3_REG                (0x15C8)
#define RANK_CTRL_REG                     (0x15E0)
#define TIMING_REG                        (0x15E4)
#define DRAM_PHY_CONFIGURATION            (0x15EC)
#define MR0_REG                           (0x15D0)
#define MR1_REG                           (0x15D4)
#define MR2_REG                           (0x15D8)
#define MR3_REG                           (0x15DC)
#define TIMING_REG                        (0x15E4)
#define ODPG_CTRL_CONTROL_REG             (0x1600)
#define ODPG_DATA_CONTROL_REG             (0x1630)
#define ODPG_PATTERN_ADDR_OFFSET_REG      (0x1638)
#define ODPG_DATA_BUF_SIZE_REG            (0x163C)
#define PHY_LOCK_STATUS_REG               (0x1674)
#define PHY_REG_FILE_ACCESS               (0x16A0)
#define TRAINING_WRITE_LEVELING_REG       (0x16AC)
#define ODPG_PATTERN_ADDR_REG             (0x16B0)
#define ODPG_PATTERN_DATA_HI_REG          (0x16B4)
#define ODPG_PATTERN_DATA_LOW_REG         (0x16B8) 
#define ODPG_BIST_LAST_FAIL_ADDR_REG      (0x16BC)
#define ODPG_BIST_DATA_ERROR_COUNTER_REG  (0x16C0)
#define ODPG_BIST_FAILED_DATA_HI_REG      (0x16C4)
#define ODPG_BIST_FAILED_DATA_LOW_REG     (0x16C8)
#define ODPG_WRITE_DATA_ERROR_REG         (0x16CC)
#define CS_ENABLE_REG                     (0x16D8)
#define WR_LEVELING_DQS_PATTERN_REG       (0x16DC)

#if defined(CONFIG_ARMADA_38X) || defined (CONFIG_ALLEYCAT3) || defined (CONFIG_ARMADA_39X)
#define ODPG_BIST_DONE                    (0x186D4)
#define ODPG_BIST_DONE_BIT_OFFS           (0)
#define ODPG_BIST_DONE_BIT_VALUE          (0)
#else
#define ODPG_BIST_DONE                    (0x16FC)
#endif

#if defined(CONFIG_ARMADA_38X) || defined (CONFIG_ALLEYCAT3) || defined (CONFIG_ARMADA_39X)
#define RESULT_CONTROL_BYTE_PUP_0_REG     (0x1830)
#define RESULT_CONTROL_BYTE_PUP_1_REG     (0x1834)
#define RESULT_CONTROL_BYTE_PUP_2_REG     (0x1838)
#define RESULT_CONTROL_BYTE_PUP_3_REG     (0x183C)
#define RESULT_CONTROL_BYTE_PUP_4_REG     (0x18B0)
										  
#define RESULT_CONTROL_PUP_0_BIT_0_REG    (0x18B4)
#define RESULT_CONTROL_PUP_0_BIT_1_REG    (0x18B8)
#define RESULT_CONTROL_PUP_0_BIT_2_REG    (0x18BC)
#define RESULT_CONTROL_PUP_0_BIT_3_REG    (0x18C0)
#define RESULT_CONTROL_PUP_0_BIT_4_REG    (0x18C4)
#define RESULT_CONTROL_PUP_0_BIT_5_REG    (0x18C8)
#define RESULT_CONTROL_PUP_0_BIT_6_REG    (0x18CC)
#define RESULT_CONTROL_PUP_0_BIT_7_REG    (0x18F0)
#define RESULT_CONTROL_PUP_1_BIT_0_REG    (0x18F4)
#define RESULT_CONTROL_PUP_1_BIT_1_REG    (0x18F8)
#define RESULT_CONTROL_PUP_1_BIT_2_REG    (0x18FC)
#define RESULT_CONTROL_PUP_1_BIT_3_REG    (0x1930)
#define RESULT_CONTROL_PUP_1_BIT_4_REG    (0x1934)
#define RESULT_CONTROL_PUP_1_BIT_5_REG    (0x1938)
#define RESULT_CONTROL_PUP_1_BIT_6_REG    (0x193C)
#define RESULT_CONTROL_PUP_1_BIT_7_REG    (0x19B0)
#define RESULT_CONTROL_PUP_2_BIT_0_REG    (0x19B4)
#define RESULT_CONTROL_PUP_2_BIT_1_REG    (0x19B8)
#define RESULT_CONTROL_PUP_2_BIT_2_REG    (0x19BC)
#define RESULT_CONTROL_PUP_2_BIT_3_REG    (0x19C0)
#define RESULT_CONTROL_PUP_2_BIT_4_REG    (0x19C4)
#define RESULT_CONTROL_PUP_2_BIT_5_REG    (0x19C8)
#define RESULT_CONTROL_PUP_2_BIT_6_REG    (0x19CC)
#define RESULT_CONTROL_PUP_2_BIT_7_REG    (0x19F0)
#define RESULT_CONTROL_PUP_3_BIT_0_REG    (0x19F4)
#define RESULT_CONTROL_PUP_3_BIT_1_REG    (0x19F8)
#define RESULT_CONTROL_PUP_3_BIT_2_REG    (0x19FC)
#define RESULT_CONTROL_PUP_3_BIT_3_REG    (0x1A30)
#define RESULT_CONTROL_PUP_3_BIT_4_REG    (0x1A34)
#define RESULT_CONTROL_PUP_3_BIT_5_REG    (0x1A38)
#define RESULT_CONTROL_PUP_3_BIT_6_REG    (0x1A3C)
#define RESULT_CONTROL_PUP_3_BIT_7_REG    (0x1AB0)
#define RESULT_CONTROL_PUP_4_BIT_0_REG    (0x1AB4)
#define RESULT_CONTROL_PUP_4_BIT_1_REG    (0x1AB8)
#define RESULT_CONTROL_PUP_4_BIT_2_REG    (0x1ABC)
#define RESULT_CONTROL_PUP_4_BIT_3_REG    (0x1AC0)
#define RESULT_CONTROL_PUP_4_BIT_4_REG    (0x1AC4)
#define RESULT_CONTROL_PUP_4_BIT_5_REG    (0x1AC8)
#define RESULT_CONTROL_PUP_4_BIT_6_REG    (0x1ACC)
#define RESULT_CONTROL_PUP_4_BIT_7_REG    (0x1AF0)
#else
#define RESULT_CONTROL_BYTE_PUP_0_REG     (0x1830)
#define RESULT_CONTROL_BYTE_PUP_1_REG     (0x1834)
#define RESULT_CONTROL_BYTE_PUP_2_REG     (0x1838)
#define RESULT_CONTROL_BYTE_PUP_3_REG     (0x183C)

#define RESULT_CONTROL_PUP_0_BIT_0_REG    (0x18B0)
#define RESULT_CONTROL_PUP_0_BIT_1_REG    (0x18B4)
#define RESULT_CONTROL_PUP_0_BIT_2_REG    (0x18B8)
#define RESULT_CONTROL_PUP_0_BIT_3_REG    (0x18BC)
#define RESULT_CONTROL_PUP_0_BIT_4_REG    (0x18C0)
#define RESULT_CONTROL_PUP_0_BIT_5_REG    (0x18C4)
#define RESULT_CONTROL_PUP_0_BIT_6_REG    (0x18C8)
#define RESULT_CONTROL_PUP_0_BIT_7_REG    (0x18CC)
#define RESULT_CONTROL_PUP_1_BIT_0_REG    (0x18F0)
#define RESULT_CONTROL_PUP_1_BIT_1_REG    (0x18F4)
#define RESULT_CONTROL_PUP_1_BIT_2_REG    (0x18F8)
#define RESULT_CONTROL_PUP_1_BIT_3_REG    (0x18FC)
#define RESULT_CONTROL_PUP_1_BIT_4_REG    (0x1930)
#define RESULT_CONTROL_PUP_1_BIT_5_REG    (0x1934)
#define RESULT_CONTROL_PUP_1_BIT_6_REG    (0x1938)
#define RESULT_CONTROL_PUP_1_BIT_7_REG    (0x193C)
#define RESULT_CONTROL_PUP_2_BIT_0_REG    (0x19B0)
#define RESULT_CONTROL_PUP_2_BIT_1_REG    (0x19B4)
#define RESULT_CONTROL_PUP_2_BIT_2_REG    (0x19B8)
#define RESULT_CONTROL_PUP_2_BIT_3_REG    (0x19BC)
#define RESULT_CONTROL_PUP_2_BIT_4_REG    (0x19C0)
#define RESULT_CONTROL_PUP_2_BIT_5_REG    (0x19C4)
#define RESULT_CONTROL_PUP_2_BIT_6_REG    (0x19C8)
#define RESULT_CONTROL_PUP_2_BIT_7_REG    (0x19CC)
#define RESULT_CONTROL_PUP_3_BIT_0_REG    (0x19F0)
#define RESULT_CONTROL_PUP_3_BIT_1_REG    (0x19F4)
#define RESULT_CONTROL_PUP_3_BIT_2_REG    (0x19F8)
#define RESULT_CONTROL_PUP_3_BIT_3_REG    (0x19FC)
#define RESULT_CONTROL_PUP_3_BIT_4_REG    (0x1A30)
#define RESULT_CONTROL_PUP_3_BIT_5_REG    (0x1A34)
#define RESULT_CONTROL_PUP_3_BIT_6_REG    (0x1A38)
#define RESULT_CONTROL_PUP_3_BIT_7_REG    (0x1A3C)

/*Should not be used in non-a38x cases*/
#define RESULT_CONTROL_BYTE_PUP_4_REG     (0x18B0)
#define RESULT_CONTROL_PUP_4_BIT_0_REG    (0x1AB4)
#define RESULT_CONTROL_PUP_4_BIT_1_REG    (0x1AB8)
#define RESULT_CONTROL_PUP_4_BIT_2_REG    (0x1ABC)
#define RESULT_CONTROL_PUP_4_BIT_3_REG    (0x1AC0)
#define RESULT_CONTROL_PUP_4_BIT_4_REG    (0x1AC4)
#define RESULT_CONTROL_PUP_4_BIT_5_REG    (0x1AC8)
#define RESULT_CONTROL_PUP_4_BIT_6_REG    (0x1ACC)
#define RESULT_CONTROL_PUP_4_BIT_7_REG    (0x1AF0)

#endif

#define WL_PHY_REG                        (0x0)
#define WRITE_CENTRALIZATION_PHY_REG      (0x1)
#define RL_PHY_REG                        (0x2)
#define READ_CENTRALIZATION_PHY_REG       (0x3)
#define PBS_RX_PHY_REG       			  (0x50)
#define PBS_TX_PHY_REG       			  (0x10)
#define PHY_CONTROL_PHY_REG               (0x90)
#define BW_PHY_REG                        (0x92)
#define RATE_PHY_REG                      (0x94)
#define CMOS_CONFIG_PHY_REG               (0xA2)
#define PAD_ZRI_CALIB_PHY_REG             (0xA4)
#define PAD_ODT_CALIB_PHY_REG             (0xA6)
#define PAD_CONFIG_PHY_REG                (0xA8)
#define PAD_PRE_DISABLE_PHY_REG           (0xA9)
#define TEST_ADLL_REG                     (0xBF)
#define CSn_IOB_VREF_REG(cs)              (0xDB + (cs * 12))
#define CSn_IO_BASE_VREF_REG(cs)          (0xD0 + (cs * 12))

#define RESULT_DB_PHY_REG_ADDR			0xC0
#define RESULT_DB_PHY_REG_RX_OFFSET		5
#define RESULT_DB_PHY_REG_TX_OFFSET		0

#define PHY_WRITE_DELAY( _uiCs_ )            WL_PHY_REG /* TBD - for NP5 use only CS 0 */
/*( ( _uiCs_ == 0 ) ? 0x0 : 0x4 )*/
#define PHY_READ_DELAY( _uiCs_ )             RL_PHY_REG /* TBD - for NP5 use only CS 0 */


#define DDR0_ADDR_1                       (0xF8258)
#define DDR0_ADDR_2                       (0xF8254)
#define DDR1_ADDR_1                       (0xF8270)
#define DDR1_ADDR_2                       (0xF8270)
#define DDR2_ADDR_1                       (0xF825c)
#define DDR2_ADDR_2                       (0xF825c)
#define DDR3_ADDR_1                       (0xF8264)
#define DDR3_ADDR_2                       (0xF8260)
#define DDR4_ADDR_1                       (0xF8274)
#define DDR4_ADDR_2                       (0xF8274)

#define GENERAL_PURPOSE_RESERVED0_REG           0x182E0

#define GET_BLOCK_ID_MAX_FREQ( _devNum_ , _uiBlockId_ )   800000
#define CS0_RD_LVL_REF_DLY_OFFS   0
#define CS0_RD_LVL_REF_DLY_LEN   0
#define CS0_RD_LVL_PH_SEL_OFFS   0
#define CS0_RD_LVL_PH_SEL_LEN   0

#define CS_REGISTER_ADDR_OFFSET  4
#define CALIBRATED_OBJECTS_REG_ADDR_OFFSET   0x10

#define MAX_POLLING_ITERATIONS              (100000)

#define NUM_BYTES                   (3)

#define IF_LOOP(cnt,start,end)    for( cnt = (start);  cnt <= (end); cnt++)
#define VALIDATE_IF_ACTIVE(mask,id)    if (IS_INTERFACE_ACTIVE(mask, id) ==  GT_FALSE)  { continue;   }
#define VALIDATE_BUS_ACTIVE(mask,id)    if (IS_BUS_ACTIVE(mask, id) ==  GT_FALSE)  { continue;   }

#define PHASE_REG_OFFSET   (32)
#define NUM_BYTES_IN_BURST (31)
#define NUM_OF_CS          (4)
#define CS_REG_VALUE(csNum)   (csMaskReg[csNum])
#define ADLL_LENGTH (32)


/************************* Enums ***********************************************/



/************************* Structures ***********************************************/

typedef struct
{
    MV_HWS_WL_SUPP  stage; 
    GT_BOOL         isPupFail;
}WriteSuppResultStruct;

typedef struct
{
   MV_HWS_PageSize ePageSize_8_BITS;
      /* page size in 8 bits bus width */
   MV_HWS_PageSize ePageSize_16_BITS;   
      /* page size in 16 bits bus width */
   GT_U32 uiPageMask;
      /* Mask used in register */
}PageElement;


/******************************************************************************
* Name:     ddr3TipWriteLevelingStaticConfig.
* Desc:     Configure the write leveling parameters
* Args:     devNum     - channel id.
*           interfaceId - memory interface 
*           frequency   - frequency (Mhz)
*           roundTripDelayArr 
* Notes:    For Internal Use
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    ddr3TipWriteLevelingStaticConfig
( 
    GT_U32				devNum,
    GT_U32				interfaceId,
    MV_HWS_DDR_FREQ     frequency,
    GT_U32				*roundTripDelayArr 
);

/******************************************************************************
* Name:     ddr3TipReadLevelingStaticConfig.
* Desc:     Configure the read leveling parameters
* Args:     devNum     
*           interfaceId
*           frequency
*           totalRoundTripDelayArr
* Notes:    For Internal Use
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    ddr3TipReadLevelingStaticConfig
(
    GT_U32             devNum,
    GT_U32             interfaceId,
    MV_HWS_DDR_FREQ    frequency,
    GT_U32             *totalRoundTripDelayArr
);

/******************************************************************************
* Name:     mvHwsDdr3TipIFWrite.
* Desc:     Write to Interface.
* Args:     devNum           - channel id.
*           interfaceAccess  - Interface access type (multicast/unicast)
*           interfaceId      - INTERFACE ID. for broadcast use 0xFF
*           regAddr          - register address
*           dataValue        - data to write
*           mask
* Notes:    For Internal Use
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    mvHwsDdr3TipIFWrite
( 
    GT_U32                devNum,
    MV_HWS_ACCESS_TYPE    interfaceAccess,
    GT_U32                interfaceId, 
    GT_U32                regAddr, 
    GT_U32                dataValue,
    GT_U32                mask 
);


/******************************************************************************
* Name:     ddr3TipIfPolling.
* Desc:     Poll  Interface.
* Args:
* Notes:    For Internal Use
* Returns:  OK if success, other error code if fail.
*/

  GT_STATUS    ddr3TipIfPolling
( 
    GT_U32                devNum,
    MV_HWS_ACCESS_TYPE	  accessType,
    GT_U32                interfaceId,
    GT_U32                expValue,
    GT_U32                mask,
    GT_U32                offset,
    GT_U32                pollTries
);

/******************************************************************************
* Name:     mvHwsDdr3TipIFRead.
* Desc:     Read from Interface.
* Args:     
* Notes:    For Internal Use    In case of multicast read, the return variable should be an array
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    mvHwsDdr3TipIFRead
( 
    GT_U32                devNum,
    MV_HWS_ACCESS_TYPE    interfaceAccess,
    GT_U32                interfaceId, 
    GT_U32                regAddr, 
    GT_U32                *data,
    GT_U32                mask 
);


GT_STATUS    ddr3TipBusReadModifyWrite
( 
    GT_U32      devNum,
    MV_HWS_ACCESS_TYPE		accessType,
    GT_U32      interfaceId, 
    GT_U32      phyId, 
    MV_HWS_DDR_PHY     phyType, 
    GT_U32      regAddr, 
    GT_U32      dataValue,
    GT_U32      regMask 
);


/******************************************************************************
* Name:     mvHwsDdr3TipBUSRead.
* Desc:     Read from phy.
* Args:     
* Notes:    For Internal Use    In case of multicast read, the return variable should be an array
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    mvHwsDdr3TipBUSRead
( 
    GT_U32              devNum,
    GT_U32              interfaceId, 
    MV_HWS_ACCESS_TYPE  phyAccess,
    GT_U32              phyId, 
    MV_HWS_DDR_PHY      phyType, 
    GT_U32              regAddr, 
    GT_U32              *data  
);


/******************************************************************************
* Name:     mvHwsDdr3TipBUSWrite.
* Desc:     Write to phy.
* Args:     uiChannel     - channel id.
*           eInterfaceAccess  - Interface unit access (unicast/multicast)
*           uiInterfaceId     - INTERFACE ID. for broadcast use 0xFF
*           ePhyAccess    - Phy unit access (unicast/multicast)
*           uiPhyId       - PHY ID. for broadcast use 0xFF
*           ePhyType      - phy Type (data/Control)
*           regAddr     - register address
*           regData        - data to write
* Notes:    For Internal Use
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    mvHwsDdr3TipBUSWrite
(  
    GT_U32              devNum,
    MV_HWS_ACCESS_TYPE  eInterfaceAccess,
    GT_U32              uiInterfaceId, 
    MV_HWS_ACCESS_TYPE  ePhyAccess,
    GT_U32              uiPhyId, 
    MV_HWS_DDR_PHY      ePhyType, 
    GT_U32              regAddr, 
    GT_U32              dataValue 
);

/******************************************************************************
* Name:     ddr3TipFreqSet
* Desc:     Set frequency of the DDR memory.
* Args:     devNum       - channel id.
*           eAccess           - unicast/multicast
*           uiInterfaceId     - INTERFACE ID. for broadcast use 0xFF
*           eMemoryType       - memory type  
*           memoryFreq        - target frequency
* Notes:
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipFreqSet
( 
    GT_U32        devNum,
    MV_HWS_ACCESS_TYPE    eAccess,
    GT_U32        uiInterfaceId,
    MV_HWS_DDR_FREQ       memoryFreq 
);

/******************************************************************************
* Name:     ddr3TipAdjustDqs
* Desc:     Adjust DQS Bit
* Args:     devNum       - channel id.
* Notes:
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS ddr3TipAdjustDqs
(
    GT_U32        devNum
);


/******************************************************************************
* Name:     ddr3TipInitController.
* Desc:     Initilize DDR Controller
* Args:     devNum - channel ID 
* Notes:    For Internal Use
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    ddr3TipInitController( GT_U32    devNum);



/******************************************************************************
* Name:     ddr3TipExtRead.
* Desc:     read from external memory
* Args:     devNum - channel ID 
*         uiInterfaceId - interface ID
*         regAddr - memory address
*         uiNumOfBursts - number of bursts to write, each burst is 8*4 bytes
*         puiAddr - pointer to array of 32bits register, where we insert the data read from memory 
* Notes:    For internal use only
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    ddr3TipExtRead
(  
    GT_U32      devNum,
    GT_U32      uiInterfaceId,
    GT_U32      regAddr,
    GT_U32      uiNumOfBursts,
    GT_U32*     puiAddr
);

/******************************************************************************
* Name:     ddr3TipExtWrite.
* Desc:     write to external memory
* Args:     devNum - channel ID 
*         uiInterfaceId - interface ID
*         regAddr - memory address
*         uiNumOfBursts - number of bursts to write, each burst is 8*4 bytes
*         puiAddr - pointer to array of 32bits register to be written into memory
* Notes:    For internal use only
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipExtWrite
( 
    GT_U32      devNum,
    GT_U32      uiInterfaceId,
    GT_U32      regAddr,
    GT_U32      uiNumOfBursts,
    GT_U32*     puiAddr
);


/******************************************************************************
* Name:     ddr3TipDDR3DynamicReadLeveling.
* Desc:     Dynmaic read leveling
* Args:     devNum - device number
*           uiFreq
* Notes:
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipDynamicReadLeveling(  GT_U32               devNum,
                                          GT_U32              uiFreq);
/******************************************************************************
* Name:     ddr3TipDDR3LegacyDynamicReadLeveling.
* Desc:     Dynmaic read leveling
* Args:     devNum - device number
*           uiFreq
* Notes:
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipLegacyDynamicReadLeveling(  GT_U32               devNum);


/******************************************************************************
* Name:     ddr3TipDDR3DynamicPerBitReadLeveling.
* Desc:     Dynmaic read leveling
* Args:     devNum - device number
*           uiFreq
* Notes:
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipDynamicPerBitReadLeveling(  GT_U32               devNum,
                                                GT_U32              uiFreq);


/******************************************************************************
* Name:     ddr3TipLegacyDynamicWriteLeveling.
* Desc:     Dynmaic write leveling
* Args:     devNum - device number
* Notes:
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipLegacyDynamicWriteLeveling(  GT_U32    devNum);

/******************************************************************************
* Name:     ddr3TipDynamicWriteLeveling.
* Desc:     Dynmaic write leveling
* Args:     devNum - device number
* Notes:
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipDynamicWriteLeveling(  GT_U32    devNum);

/******************************************************************************
* Name:     ddr3TipDynamicWriteLevelingSupp.
* Desc:     Dynamic write leveling supplementary
* Args:     devNum
* Notes:    
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipDynamicWriteLevelingSupp(GT_U32    devNum);

/******************************************************************************
* Name:     ddr3TipStaticInitController.
* Desc:     Init controller with predefined values 
* Args:     devNum - channel ID 
* Notes:    For internal use only
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipStaticInitController( GT_U32    devNum );

/******************************************************************************
* Name:     ddr3TipConfigurePhy.
* Desc:     Init phy controller with predefined values 
* Args:     devNum - channel ID 
* Notes:    For internal use only
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipConfigurePhy( GT_U32    devNum );

/******************************************************************************
* Name:     ddr3TipLoadPatternToOdpg.
* Desc:     Load pattern to ODPG 
* Args:     devNum - channel ID 
*           ePattern
* Notes:    For internal use only
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipLoadPatternToOdpg
(   
    GT_U32              devNum,
    MV_HWS_ACCESS_TYPE  accessType,
    GT_U32              uiInterfaceId,
    MV_HWS_PATTERN      pattern,
	GT_U32              loadAddr
);

/******************************************************************************
* Name:     ddr3TipLoadPatternToMem.
* Desc:     Load expected Pattern to external memory
* Args:     TBD
* Notes:    
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipLoadPatternToMem
(  
	GT_U32	        devNum,
	MV_HWS_PATTERN  ePattern
);

/******************************************************************************
* Name:     ddr3TipConfigureOdpg.
* Desc:     TBD
* Args:     TBD
* Notes:    
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipConfigureOdpg
(      
	GT_U32					devNum,
	MV_HWS_ACCESS_TYPE		accessType,
	GT_U32                  interfaceId,
	MV_HWS_DIRECTION    	direction,
	GT_U32                  txPhases,
	GT_U32                  txBurstSize,
	GT_U32                  uiRxPhases,
	GT_U32                  delayBetweenBurst,
	GT_U32                  rdMode,
	GT_U32                  csNum,
	GT_U32                  addrStressJump,
	GT_U32                  singlePattern
);


/******************************************************************************
* Init Debug Variables
*/
 GT_STATUS  ddr3TipSetAtr
(
    GT_U32 devNum,
    GT_U32 flagId, 
    GT_U32 value
);

 /******************************************************************************
* Name:     ddr3TipWriteMRSCmd.
* Desc:     Write MRS 1
* Args:     TBD
* Notes:    
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipWriteMRSCmd
(
    GT_U32        devNum,
    GT_U32        *csMaskArr,
    GT_U32        cmd,
    GT_U32        data,
    GT_U32        mask
);

 /******************************************************************************
* Name:     ddr3TipIFRead.
* Desc:     
* Args:     
* Notes:    
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipIFRead
(
    GT_U8                 devNum,
    MV_HWS_ACCESS_TYPE    interfaceAccess,
    GT_U32                interfaceId, 
    GT_U32                regAddr, 
    GT_U32                *data,
    GT_U32                mask 
);

 /******************************************************************************
* Name:     ddr3TipIFWrite.
* Desc:     
* Args:     
* Notes:    
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipIFWrite
(
    GT_U8                 devNum,
    MV_HWS_ACCESS_TYPE    interfaceAccess,
    GT_U32                interfaceId, 
    GT_U32                regAddr, 
    GT_U32                dataValue,
    GT_U32                mask 
);

 /******************************************************************************
* Name:     ddr3TipWriteCsResult.
* Desc:     
* Args:     
* Notes:    
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    ddr3TipWriteCsResult
(
    GT_U32 devNum,
    GT_U32 offset
);

/******************************************************************************
* Name:     ddr3TipGetFirstActiveIf.
* Desc:     returns the first active interface
* Args:
* Notes:
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS ddr3TipGetFirstActiveIf
(
    GT_U8   devNum,
    GT_U32  interfaceMask,
    GT_U32  *ifId
);



GT_STATUS GetCentrlization(GT_32 direction, GT_32 adll[12*4]);

GT_BOOL GetRL(GT_32 RL[12*4]);

GT_BOOL GetWL(GT_32 WL[12*4]);

GT_STATUS    ddr3TipResetFifoPtr(GT_U32 devNum);

GT_BOOL readPupValue(GT_32 PupValues[MAX_INTERFACE_NUM*MAX_BUS_NUM], int regAddr, GT_U32 mask);

GT_BOOL readAdllValue(GT_U32 PupValues[MAX_INTERFACE_NUM*MAX_BUS_NUM], int regAddr, GT_U32 mask);

GT_BOOL writeAdllValue(GT_U32 PupValues[MAX_INTERFACE_NUM*MAX_BUS_NUM], int regAddr);


/******************************************************************************
* Name:     ddr3TipTuneTrainingParams.
* Desc:     Set key training params
* Args:
* Notes:
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS ddr3TipTuneTrainingParams
(
    GT_U32                  devNum,
    GT_TUNE_TRAINING_PARAMS *params
);

#ifdef __cplusplus
   }
#endif

#endif /* _MV_DDR3_TRAININGIP_FLOW_H_ */


