blob: eba88b74ddf441ae75081faaf0c50807e4432307 [file] [log] [blame]
/******************************************************************************
* 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.22."
#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_ */