/*******************************************************************************
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.  Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.

********************************************************************************
Marvell Commercial License Option

If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.

********************************************************************************
Marvell GPL License Option

If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.

THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED.  The GPL License provides additional details about this warranty
disclaimer.
********************************************************************************
Marvell BSD License Option

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.

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

#ifndef __INCmvDram
#define __INCmvDram

#ifdef __cplusplus
extern "C" {
#endif

#include "ddr2/mvDramIf.h"

#define MAX_DIMM_NUM 			2
#define SPD_SIZE			128

/* Dimm spd offsets */
#define DIMM_MEM_TYPE 					2
#define DIMM_ROW_NUM 					3
#define DIMM_COL_NUM 					4
#define DIMM_MODULE_BANK_NUM 				5
#define DIMM_DATA_WIDTH 				6
#define DIMM_VOLT_IF 					8
#define DIMM_MIN_CC_AT_MAX_CAS 				9
#define DIMM_ERR_CHECK_TYPE 				11
#define DIMM_REFRESH_INTERVAL 				12
#define DIMM_SDRAM_WIDTH 				13
#define DIMM_ERR_CHECK_DATA_WIDTH 			14
#define DIMM_MIN_CLK_DEL 				15
#define DIMM_BURST_LEN_SUP 				16
#define DIMM_DEV_BANK_NUM 				17
#define DIMM_SUP_CAL 					18
#define DIMM_DDR2_TYPE_INFORMATION          		20	/* DDR2 only */
#define DIMM_BUF_ADDR_CONT_IN 				21
#define DIMM_MIN_CC_AT_MAX_CAS_MINUS1			23
#define DIMM_MIN_CC_AT_MAX_CAS_MINUS2			25
#define DIMM_MIN_ROW_PRECHARGE_TIME			27
#define DIMM_MIN_ROW_ACTIVE_TO_ROW_ACTIVE		28
#define DIMM_MIN_RAS_TO_CAS_DELAY			29
#define DIMM_MIN_RAS_PULSE_WIDTH			30
#define DIMM_BANK_DENSITY				31
#define DIMM_MIN_WRITE_RECOVERY_TIME        		36
#define DIMM_MIN_WRITE_TO_READ_CMD_DELAY    		37
#define DIMM_MIN_READ_TO_PRECH_CMD_DELAY    		38
#define DIMM_MIN_REFRESH_TO_ACTIVATE_CMD    		42
#define DIMM_SPD_VERSION    				62

/* Dimm Memory Type values */
#define DIMM_MEM_TYPE_SDRAM					0x4
#define DIMM_MEM_TYPE_DDR1 					0x7
#define DIMM_MEM_TYPE_DDR2 					0x8

#define DIMM_MODULE_MANU_OFFS 		64
#define DIMM_MODULE_MANU_SIZE 		8
#define DIMM_MODULE_VEN_OFFS 		73
#define DIMM_MODULE_VEN_SIZE 		25
#define DIMM_MODULE_ID_OFFS 		99
#define DIMM_MODULE_ID_SIZE 		18

/* enumeration for voltage levels. */
typedef enum _mvDimmVoltageIf {
	TTL_5V_TOLERANT,
	LVTTL,
	HSTL_1_5V,
	SSTL_3_3V,
	SSTL_2_5V,
	VOLTAGE_UNKNOWN,
} MV_DIMM_VOLTAGE_IF;

/* enumaration for SDRAM CAS Latencies. */
typedef enum _mvDimmSdramCas {
	SD_CL_1 = 1,
	SD_CL_2,
	SD_CL_3,
	SD_CL_4,
	SD_CL_5,
	SD_CL_6,
	SD_CL_7,
	SD_FAULT
} MV_DIMM_SDRAM_CAS;

/* DIMM information structure */
typedef struct _mvDimmInfo {
	MV_MEMORY_TYPE memoryType;	/* DDR or SDRAM */

	MV_U8 spdRawData[SPD_SIZE];	/* Content of SPD-EEPROM copied 1:1  */

	/* DIMM dimensions */
	MV_U32 numOfRowAddr;
	MV_U32 numOfColAddr;
	MV_U32 numOfModuleBanks;
	MV_U32 dataWidth;
	MV_U32 errorCheckType;	/* ECC , PARITY.. */
	MV_U32 sdramWidth;	/* 4,8,16 or 32 */
	MV_U32 errorCheckDataWidth;	/* 0 - no, 1 - Yes */
	MV_U32 burstLengthSupported;
	MV_U32 numOfBanksOnEachDevice;
	MV_U32 suportedCasLatencies;
	MV_U32 refreshInterval;
	MV_U32 dimmBankDensity;
	MV_U32 dimmTypeInfo;	/* DDR2 only */
	MV_U32 dimmAttributes;

	/* DIMM timing parameters */
	MV_U32 minCycleTimeAtMaxCasLatPs;
	MV_U32 minCycleTimeAtMaxCasLatMinus1Ps;
	MV_U32 minCycleTimeAtMaxCasLatMinus2Ps;
	MV_U32 minRowPrechargeTime;
	MV_U32 minRowActiveToRowActive;
	MV_U32 minRasToCasDelay;
	MV_U32 minRasPulseWidth;
	MV_U32 minWriteRecoveryTime;	/* DDR2 only */
	MV_U32 minWriteToReadCmdDelay;	/* DDR2 only */
	MV_U32 minReadToPrechCmdDelay;	/* DDR2 only */
	MV_U32 minRefreshToActiveCmd;	/* DDR2 only */

	/* Parameters calculated from the extracted DIMM information */
	MV_U32 size;	/* 16,64,128,256 or 512 MByte in MB units */
	MV_U32 deviceDensity;	/* 16,64,128,256 or 512 Mbit in MB units  */
	MV_U32 numberOfDevices;

} MV_DIMM_INFO;

MV_STATUS mvDramBankInfoGet(MV_U32 bankNum, MV_DRAM_BANK_INFO *pBankInfo);
MV_STATUS dimmSpdGet(MV_U32 dimmNum, MV_DIMM_INFO *pDimmInfo);
MV_VOID dimmSpdPrint(MV_U32 dimmNum, MV_U32 sysClock);
MV_STATUS dimmSpdCpy(MV_VOID);

#ifdef __cplusplus
}
#endif
#endif				/* __INCmvDram */
