
/*******************************************************************************
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 _DDR3_A38X_H
#define _DDR3_A38X_H

#define MAX_INTERFACE_NUM  		(1)
#define MAX_BUS_NUM        		(5)

#include "ddr3_hws_hw_training_def.h"

/*Allow topolgy update from board TWSI device*/
#if ( (!defined(CONFIG_CUSTOMER_BOARD_SUPPORT)) && defined(CONFIG_DDR3) )
/*TBD - Currentry 16Bit mode not supported in DDR4, open this define after 16Bit mode validation*/
#define MV_DDR_TOPOLOGY_UPDATE_FROM_TWSI
#endif

#ifndef CONFIG_CLEARFOG_BOARD /* clear fog board has no pre-burnt AVS values on EFUSE */
	#define CONFIG_AVS_FROM_EFUSE /* Read pre-burnt EFUSE values, to derive requested AVS value for current chip */
#endif
#define ECC_SUPPORT

/*Controler bus divider 1 for 32 bit, 2 for 64 bit*/
#define MV_DDR_CONTROLLER_BUS_WIDTH_MULTIPLIER		1

/*Tune internal training params values*/
#ifdef CONFIG_CLEARFOG_BOARD
	/* SolidRun Armada 38x MicroSOM has short traces on it's DDR clock.
	   using increased internal delay inside the SoC to compensate for that */
	#define MV_TUNE_TRAINING_PARAMS_CK_DELAY 	260
#else
	#define MV_TUNE_TRAINING_PARAMS_CK_DELAY 	160
#endif
#define MV_TUNE_TRAINING_PARAMS_PHYREG3VAL	0xA

#define MV_TUNE_TRAINING_PARAMS_PRI_DATA	123
#define MV_TUNE_TRAINING_PARAMS_NRI_DATA	123
#define MV_TUNE_TRAINING_PARAMS_PRI_CTRL	74
#define MV_TUNE_TRAINING_PARAMS_NRI_CTRL	74

#define MV_TUNE_TRAINING_PARAMS_P_ODT_DATA	45
#define MV_TUNE_TRAINING_PARAMS_N_ODT_DATA	45
#define MV_TUNE_TRAINING_PARAMS_P_ODT_CTRL	45
#define MV_TUNE_TRAINING_PARAMS_N_ODT_CTRL	45

#define MV_TUNE_TRAINING_PARAMS_DIC				0x2
#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_2CS	0x120012
#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_1CS	0x10000
#define MV_TUNE_TRAINING_PARAMS_RTT_NOM			0x44
#define MV_TUNE_TRAINING_PARAMS_RTT_WR_1CS		0x0
#define MV_TUNE_TRAINING_PARAMS_RTT_WR_2CS		0x0

#ifdef CONFIG_DDR4
#define MV_TUNE_TRAINING_PARAMS_P_ODT_DATA_DDR4	0xD
#define MV_TUNE_TRAINING_PARAMS_DIC_DDR4		0x0
#define MV_TUNE_TRAINING_PARAMS_ODT_CONFIG_DDR4	0x330012
#define MV_TUNE_TRAINING_PARAMS_RTT_NOM_DDR4	0x600 /*RZQ/3 = 0x600*/
#define MV_TUNE_TRAINING_PARAMS_RTT_WR			0x400 /*RZQ/1 = 0x400*/
#else
#define MV_TUNE_TRAINING_PARAMS_RTT_WR		0x0 /*off*/
#endif

#define MARVELL_BOARD MARVELL_BOARD_ID_BASE

#define REG_DEVICE_SAR1_ADDR                        0xE4204
#define RST2_CPU_DDR_CLOCK_SELECT_IN_OFFSET         17
#define RST2_CPU_DDR_CLOCK_SELECT_IN_MASK           0x1F

/* DRAM Windows */
#define REG_XBAR_WIN_5_CTRL_ADDR					0x20050
#define REG_XBAR_WIN_5_BASE_ADDR					0x20054

/* DRAM Windows */
#define REG_XBAR_WIN_4_CTRL_ADDR                0x20040
#define REG_XBAR_WIN_4_BASE_ADDR                0x20044
#define REG_XBAR_WIN_4_REMAP_ADDR               0x20048
#define REG_XBAR_WIN_7_REMAP_ADDR               0x20078
#define REG_XBAR_WIN_16_CTRL_ADDR               0x200d0
#define REG_XBAR_WIN_16_BASE_ADDR               0x200d4
#define REG_XBAR_WIN_16_REMAP_ADDR              0x200dc
#define REG_XBAR_WIN_19_CTRL_ADDR               0x200e8

#define REG_FASTPATH_WIN_BASE_ADDR(win)         (0x20180 + (0x8 * win))
#define REG_FASTPATH_WIN_CTRL_ADDR(win)         (0x20184 + (0x8 * win))

/*SatR defined too change topology busWidth and ECC configuration*/
#define DDR_SATR_CONFIG_MASK_WIDTH						0x8
#define DDR_SATR_CONFIG_MASK_ECC 						0x10
#define DDR_SATR_CONFIG_MASK_ECC_PUP					0x20

/********************/
/* Registers offset */
/********************/
#define	REG_SAMPLE_RESET_HIGH_ADDR				0x18600

#define MV_BOARD_REFCLK			MV_BOARD_REFCLK_25MHZ

/*Matrix enables DRAM modes(bus width/ECC) per boardId*/
#define MV_TOPOLOGY_UPDATE_32BIT			0
#define MV_TOPOLOGY_UPDATE_32BIT_ECC		1
#define MV_TOPOLOGY_UPDATE_16BIT			2
#define MV_TOPOLOGY_UPDATE_16BIT_ECC		3
#define MV_TOPOLOGY_UPDATE_16BIT_ECC_PUP3	4
/*			 32Bit,		32bit ECC,	16bit, 		16bit ECC PUP4, 16bit ECC PUP3*/
#define MV_TOPOLOGY_UPDATE  {\
/* RD_NAS_68XX_ID */	{1,		1,		1,		1,		1}, \
/* DB_68XX_ID	  */	{1,		1,		1,		1,		1}, \
/* RD_AP_68XX_ID  */	{1,		0,		1,		0,		1}, \
/* DB_AP_68XX_ID  */	{1,		0,		1,		0,		1}, \
/* DB_GP_68XX_ID  */	{1,		0,		1,		0,		1}, \
/* DB_BP_6821_ID  */	{0,		0,		1,		1,		0}, \
/* DB_AMC_6820_ID */	{1,		1,		1,		1,		1}};

/********************/
/* Registers offset */
/********************/
typedef enum
{
    CPU_1066MHz_DDR_400MHz,
    CPU_RESERVED_DDR_RESERVED0,
    CPU_667MHz_DDR_667MHz,
    CPU_800MHz_DDR_800MHz,
    CPU_RESERVED_DDR_RESERVED1,
    CPU_RESERVED_DDR_RESERVED2,
    CPU_RESERVED_DDR_RESERVED3,
    LAST_FREQ
}MSYS_DDR3_CPU_FREQ;

#define ACTIVE_INTERFACE_MASK			  0x1

#endif /* _DDR3_A38X_H */
