/******************************************************************************
*              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.
*******************************************************************************
* mvDdr3TrainingIp.h
*
* DESCRIPTION:
*
*
* FILE REVISION NUMBER:
*       $Revision: 67 $
*
*******************************************************************************/

#ifndef _MV_DDR3_TRAININGIP_H_
#define _MV_DDR3_TRAININGIP_H_

#include "mvDdr3TrainingIpDef.h"
#include "mvDdrTopologyDef.h"
#include "mvDdrTrainingIpDb.h"

#ifdef __cplusplus
   extern "C"
   {
#endif

#ifdef CONFIG_DDR4
#define DDR3_TIP_VERSION_STRING "DDR4 Training Sequence - Ver TIP-0.21."
#else
#define DDR3_TIP_VERSION_STRING "DDR3 Training Sequence - Ver TIP-1.46."
#endif

#define MAX_CS_NUM         (4)
#define MAX_TOTAL_BUS_NUM  (MAX_INTERFACE_NUM * MAX_BUS_NUM)
#define MAX_DQ_NUM         (40)

#define GET_MIN(arg1,arg2) (arg1<arg2) ? (arg1) : (arg2);
#define GET_MAX(arg1,arg2) (arg1<arg2) ? (arg2) : (arg1);

#define INIT_CONTROLLER_MASK_BIT          0x00000001
#define STATIC_LEVELING_MASK_BIT          0x00000002
#define SET_LOW_FREQ_MASK_BIT             0x00000004
#define LOAD_PATTERN_MASK_BIT             0x00000008
#define SET_MEDIUM_FREQ_MASK_BIT          0x00000010
#define WRITE_LEVELING_MASK_BIT           0x00000020
#define LOAD_PATTERN_2_MASK_BIT           0x00000040
#define READ_LEVELING_MASK_BIT            0x00000080
#define SW_READ_LEVELING_MASK_BIT         0x00000100
#define WRITE_LEVELING_SUPP_MASK_BIT      0x00000200
#define PBS_RX_MASK_BIT                   0x00000400
#define PBS_TX_MASK_BIT                   0x00000800
#define SET_TARGET_FREQ_MASK_BIT          0x00001000
#define ADJUST_DQS_MASK_BIT               0x00002000
#define WRITE_LEVELING_TF_MASK_BIT        0x00004000
#define LOAD_PATTERN_HIGH_MASK_BIT		  0x00008000
#define READ_LEVELING_TF_MASK_BIT         0x00010000
#define WRITE_LEVELING_SUPP_TF_MASK_BIT   0x00020000
#define DM_PBS_TX_MASK_BIT                0x00040000
#define CENTRALIZATION_RX_MASK_BIT        0x00100000
#define CENTRALIZATION_TX_MASK_BIT        0x00200000
#define TX_EMPHASIS_MASK_BIT              0x00400000
#define PER_BIT_READ_LEVELING_TF_MASK_BIT 0x00800000
#define VREF_CALIBRATION_MASK_BIT		  0x01000000

/* DDR4 Specific Training Mask bits */
#ifdef CONFIG_DDR4
#define RECEIVER_CALIBRATION_MASK_BIT     0x04000000
#define WL_PHASE_CORRECTION_MASK_BIT      0x08000000
#define DQ_VREF_CALIBRATION_MASK_BIT      0x10000000
#define DQ_MAPPING_MASK_BIT               0x20000000
#endif

typedef enum
{ 
    TEST_FAILED  =  0,
    TEST_SUCCESS =  1,
    NO_TEST_DONE =  2
}MV_HWS_RESULT;


typedef enum
{
    RESULT_PER_BIT,
    RESULT_PER_BYTE
} MV_HWS_TRAINING_RESULT;


/************************* Definitions ***********************************************/
typedef enum
{
	INIT_CONTROLLER,
	STATIC_LEVELING,
	SET_LOW_FREQ,
	LOAD_PATTERN,
	SET_MEDIUM_FREQ,
	WRITE_LEVELING,
	LOAD_PATTERN_2,
	READ_LEVELING,
#ifdef CONFIG_DDR4
	SW_READ_LEVELING,
#endif
	WRITE_LEVELING_SUPP,
	PBS_RX,
	PBS_TX,
	SET_TARGET_FREQ,
	ADJUST_DQS,
	WRITE_LEVELING_TF,
	READ_LEVELING_TF,
	WRITE_LEVELING_SUPP_TF,
	DM_PBS_TX,
	VREF_CALIBRATION,
	CENTRALIZATION_RX,
	CENTRALIZATION_TX,
	TX_EMPHASIS,
	LOAD_PATTERN_HIGH,
	PER_BIT_READ_LEVELING_TF,
#ifdef CONFIG_DDR4
	RECEIVER_CALIBRATION,
	WL_PHASE_CORRECTION,
	DQ_VREF_CALIBRATION,
	DQ_MAPPING,
#endif
	MAX_STAGE_LIMIT
}AUTO_TUNE_STAGE;


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


typedef enum 
{
   ACCESS_TYPE_UNICAST = 0,
   ACCESS_TYPE_MULTICAST = 1
} MV_HWS_ACCESS_TYPE;

typedef enum 
{
   ALGO_TYPE_DYNAMIC,
   ALGO_TYPE_STATIC

} MV_HWS_ALGO_TYPE;

/************************* Structures ***********************************************/
typedef struct
{
    GT_BOOL isCtrl64Bit;
    GT_BOOL doMrsPhy;
    GT_BOOL initPhy;
    GT_BOOL msysInit;
}InitCntrParam;


/***********************************************/
typedef struct 
{
   GT_U8   numOfPhasesTx;
   GT_U8   txBurstSize;
   GT_U8   delayBetweenBursts;
   GT_U8   numOfPhasesRx;
   GT_U32   startAddr;
   GT_U8   patternLen;

}PatternInfo;


/***********************************/

/* CL value for each frequency */
typedef struct
{
  GT_U8 clVal[DDR_FREQ_LIMIT];

}ClValuePerFreq;


typedef struct
{
    GT_U8                  csNum;
    GT_U8                  numOfCs;
} CsElement;

typedef struct
{
   /*32 bits representing MRS bits*/
   GT_U32                  regMR0[MAX_INTERFACE_NUM];
   GT_U32                  regMR1[MAX_INTERFACE_NUM];
   GT_U32                  regMR2[MAX_INTERFACE_NUM];
   GT_U32                  regMR3[MAX_INTERFACE_NUM];
   /*each element in array represent read_data_sample register delay for a specific interface.
   each register, 4 bits [0+CS*8 to 4+CS*8] represent Number of DDR cycles from read command 
   until data is ready to be fetched from the PHY, when accessing CS.*/
   GT_U32                  readDataSample[MAX_INTERFACE_NUM];
   /* each element in array represent read_data_sample register delay for a specific interface.
      each register, 4 bits [0+CS*8 to 4+CS*8] represent the total delay from read command until 
      opening the read mask, when accessing CS. This field defines the delay 
      in DDR cycles granularity.*/
   GT_U32                  uiReadDataReady[MAX_INTERFACE_NUM];
} Mode;


typedef struct
{
	GT_U8	            isSupported;
	GT_U8	            bwPerFreq;
    GT_U8	            ratePerFreq;
} MV_HWS_TIP_FREQ_CONFIG_INFO;

typedef struct
{
    GT_U32 csRegValue;
    GT_U32 csCbeValue;
} MV_HWS_CS_CONFIG_INFO;



typedef struct {
	GT_U8	pipe;
	GT_U8	client;
} MV_DFX_ACCESS;


typedef struct
{
	MV_DFX_ACCESS	        *dfxTable;
} MV_HWS_XSB_INFO;

/************************* Declarations ***********************************************/
/******************************************************************************
* Name:     ddr3TipRegisterDqTable
* Desc:     Register DQ table
* Args:     devNum     - device number
*           table        - whether to enable or disable the server
* Notes:
* Returns:  GT_OK if success, other error code if fail.
*/
GT_STATUS ddr3TipRegisterDqTable
(
    GT_U32          devNum,
	GT_U32			*table
);

/******************************************************************************
* Name:     mvHwsDdr3TipSelectDdrController.
* Desc:     Enable/Disable access to Marvell's server.
* Args:     devNum     - device number
*           enable        - whether to enable or disable the server
* Notes:
* Returns:  GT_OK if success, other error code if fail.
*/
GT_STATUS    mvHwsDdr3TipSelectDdrController
(
    GT_U32   devNum,
    GT_BOOL  enable 
);

/******************************************************************************
* Name:     mvHwsDdr3TipInitController.
* Desc:     Initialize DDR Controller
* Args:     devNum - device number 
*           initCntrPrm - init controller parameters
* Notes:    For Internal Use
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    mvHwsDdr3TipInitController
( 
    GT_U32          devNum,
    InitCntrParam   *initCntrPrm    
);

/******************************************************************************
* Name:     mvHwsDdr3TipLoadTopologyMap.
* Desc:     Load  topology map
* Args:     devNum     - device number.
*           topology - topology map pointer
* Notes:
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    mvHwsDdr3TipLoadTopologyMap
( 
    GT_U32                  devNum,
    MV_HWS_TOPOLOGY_MAP     *topology 
);

/******************************************************************************
* Name:     mvHwsDdr3TipRunAlg.
* Desc:     Execute the DDR3 algorithm.
* Args:     devNum     - device number.
*           algoType - algorithm type
* Notes:
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    mvHwsDdr3TipRunAlg
(
    GT_U32              devNum,
    MV_HWS_ALGO_TYPE    algoType
);

/*****************************************************************************
Get DDR version
******************************************************************************/
/******************************************************************************
* Name:     mvHwsDdr3TipVersionGet
* Desc:     Return DDR version string
* Args:
*
*
* Notes:
* Returns:  OK if success, other error code if fail.
*/
const GT_CHAR* mvHwsDdr3TipVersionGet(void);

/******************************************************************************
* Name:     mvHwsDdr3TipModeRead.
* Desc:     read Mode registers
* Args:     devNum - Device number
*           modeInfo - pointer to mode info struct
*
* Notes:
* Returns:  OK if success, other error code if fail.
*/
GT_STATUS    mvHwsDdr3TipModeRead
( 
    GT_U32            devNum,
    Mode              *modeInfo
);

/******************************************************************************
* Name:     mvHwsDdr3TipReadTrainingResult.
* Desc:     read training result
* Args:     devNum
*           result
*
* Notes:
* Returns:  OK if success, other error code if fail.
*/

GT_STATUS    mvHwsDdr3TipReadTrainingResult
(
    GT_U32          devNum,
    MV_HWS_RESULT   result[MAX_STAGE_LIMIT][MAX_INTERFACE_NUM]
);

/*****************************************************************************
Check if pup search is locked
******************************************************************************/
/******************************************************************************
* Name:     ddr3TipIsPupLock
* Desc:     Check if pup is lock
* Args:     pupBuf
*           readMode
*
* Notes:
* Returns:  OK if success, other error code if fail.
*/

GT_BOOL   ddr3TipIsPupLock
(
    GT_U32                   *pupBuf,
    MV_HWS_TRAINING_RESULT   readMode
);

/*****************************************************************************
Get minimum buffer value
******************************************************************************/
/******************************************************************************
* Name:     ddr3TipGetBufMin
* Desc:     Return buffer's minimum value
* Args:     bufPtr
*
*
* Notes:
* Returns:  OK if success, other error code if fail.
*/

GT_U8 ddr3TipGetBufMin
(
    GT_U8* bufPtr
);

/*****************************************************************************
Get maximum buffer value
******************************************************************************/
/******************************************************************************
* Name:     ddr3TipGetBufMax
* Desc:     Return buffer's maximum value
* Args:     bufPtr
*
*
* Notes:
* Returns:  OK if success, other error code if fail.
*/

GT_U8 ddr3TipGetBufMax
(
    GT_U8* bufPtr
);

#ifdef __cplusplus
   }
#endif

/*****************************************************************************/

#endif /* _MV_DDR3_TRAININGIP_H_ */


