This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DDR3 Problem



Hi again!

We have developed a Centaurus (8148) module with 4x256 MB (2 at each EMIF) with 1 CS (16-Bit data each=32-Bit total). We operate it with a CLK of 400 MHz. Currently we
want to access and configure the DDR3 registers in order to access it at Low-Level C.

We use the following .gel file:

 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Project		: TIDM814x
File		: TIDM814x_ddr.gel
Purpose		: TIDM814x DDR initialization for DDR2/3 interface 
Platform	: TI DM814x EVM
Version	Hystory	
---------------
Version		Date			Who		 		Description 		
-------		-----------		------		 	-----------
Ver7.0   	27-Sept-2011	raj@ti.com	 	DDR2/DDR3 Configurations for different speeds

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


	#define PRCM_BASE_ADDR			0x48180000
	#define DMM_BASE_ADDR			0x4E000000
	#define EMIF4_0_CFG_BASE_ADDR	0x4C000000
	#define EMIF4_1_CFG_BASE_ADDR	0x4D000000 
	#define GPMC_MEM_BASE_ADDR		0x02000000
	#define DDR_MEM_BASE_ADDR		0x80000000
	#define DUCATI_BASE_ADDR	    0x55020000
	#define DUCATI_MMU_CFG			0x55080000
	#define CTRL_MODULE_BASE_ADDR	0x48140000
	#define GEM_L2RAM_BASE_ADDR		0x40800000
	
	/* Control Module*/
	#define	CM_CTRL_CLKCTRL			0x481815c4
	#define DSPBOOTADDR				(CTRL_MODULE_BASE_ADDR + 0x0048) 
	#define DSPMEM_SLEEP			(CTRL_MODULE_BASE_ADDR + 0x0650) 
	#define CM_ALWON_L3_SLOW_CLKSTCTRL	(PRCM_BASE_ADDR + 0x1400)
	
	/*UART*/
	#define CM_ALWON_UART_0_CLKCTRL 	(PRCM_BASE_ADDR + 0x1550)
	#define CM_ALWON_UART_1_CLKCTRL 	(PRCM_BASE_ADDR + 0x1554)
	#define CM_ALWON_UART_2_CLKCTRL 	(PRCM_BASE_ADDR + 0x1558)
	#define CM_DEFAULT_DUCATI_CLKSTCTRL	(PRCM_BASE_ADDR + 0x0518)
	#define CM_DEFAULT_DUCATI_CLKCTRL	(PRCM_BASE_ADDR + 0x0574)
	#define RM_DEFAULT_RSTCTRL			(PRCM_BASE_ADDR + 0x0B10)
	#define RM_DEFAULT_RSTST			(PRCM_BASE_ADDR + 0x0B14)
	#define CM_ALWON_OCMC_0_CLKSTCTRL	(PRCM_BASE_ADDR + 0x1414) 
	#define CM_ALWON_OCMC_0_CLKCTRL		(PRCM_BASE_ADDR + 0x15B4) 
	#define CM_ALWON_GPMC_CLKCTRL		(PRCM_BASE_ADDR + 0x15D0) 
	
	#define CM_ALWON_L3_SLOW_CLKSTCTRL		(PRCM_BASE_ADDR + 0x1400)
	#define OCMC0RAM_BASE_ADDR 				0x40300000
	#define OCMC1RAM_BASE_ADDR 				0x40400000
	
	#define CM_DEFAULT_L3_FAST_CLKSTCTRL	(PRCM_BASE_ADDR + 0x0508)    
	#define CM_DEFAULT_EMIF_0_CLKCTRL		(PRCM_BASE_ADDR + 0x0520)
	#define CM_DEFAULT_EMIF_1_CLKCTRL    	(PRCM_BASE_ADDR + 0x0524)
	#define CM_DEFAULT_DMM_CLKCTRL 			(PRCM_BASE_ADDR + 0x0528)
	#define CM_DEFAULT_FW_CLKCTRL 			(PRCM_BASE_ADDR + 0x052C)
		
	#define	   DDR0_PHY_BASE_ADDR	0x47C0C400
	#define	   DDR1_PHY_BASE_ADDR	0x47C0C800
	#define	   DDR0_IO_CTRL	       0x48140E04
	#define	   DDR1_IO_CTRL	       0x48140E08
	#define	   VTP0_CTRL_REG       0x48140E0C
	#define	   VTP1_CTRL_REG       0x48140E10
	#define	   EMIF4_0_CFG_BASE_ADDR		0x4C000000
	#define    EMIF4_1_CFG_BASE_ADDR		0x4D000000 
	#define	   DMM_BASE_ADDR			0x4E000000
	
	//-DMM & EMIF4 MMR Declaration
	#define DMM_LISA_MAP__0					(DMM_BASE_ADDR + 0x40)
	#define DMM_LISA_MAP__1					(DMM_BASE_ADDR + 0x44)
	#define DMM_LISA_MAP__2					(DMM_BASE_ADDR + 0x48)
	#define DMM_LISA_MAP__3					(DMM_BASE_ADDR + 0x4C)
	#define DMM_PAT_BASE_ADDR 				(DMM_BASE_ADDR + 0x460)
	
	#define EMIF4_0_SDRAM_CONFIG			(EMIF4_0_CFG_BASE_ADDR + 0x08)	
	#define EMIF4_0_SDRAM_CONFIG2			(EMIF4_0_CFG_BASE_ADDR + 0x0C)	
	#define EMIF4_0_SDRAM_REF_CTRL			(EMIF4_0_CFG_BASE_ADDR + 0x10)	
	#define EMIF4_0_SDRAM_REF_CTRL_SHADOW		(EMIF4_0_CFG_BASE_ADDR + 0x14)	
	#define EMIF4_0_SDRAM_TIM_1			(EMIF4_0_CFG_BASE_ADDR + 0x18)	
	#define EMIF4_0_SDRAM_TIM_1_SHADOW		(EMIF4_0_CFG_BASE_ADDR + 0x1C)	
	#define EMIF4_0_SDRAM_TIM_2			(EMIF4_0_CFG_BASE_ADDR + 0x20)	
	#define EMIF4_0_SDRAM_TIM_2_SHADOW		(EMIF4_0_CFG_BASE_ADDR + 0x24)	
	#define EMIF4_0_SDRAM_TIM_3			(EMIF4_0_CFG_BASE_ADDR + 0x28)	
	#define EMIF4_0_SDRAM_TIM_3_SHADOW		(EMIF4_0_CFG_BASE_ADDR + 0x2C)	
	#define EMIF4_0_DDR_PHY_CTRL_1			(EMIF4_0_CFG_BASE_ADDR + 0xE4)	
	#define EMIF4_0_DDR_PHY_CTRL_1_SHADOW		(EMIF4_0_CFG_BASE_ADDR + 0xE8)	
	#define EMIF4_0_SDRAM_ZQCR					(EMIF4_0_CFG_BASE_ADDR + 0xC8)	
	#define EMIF4_0_RDWR_LVL_RMP_CTRL		(EMIF4_0_CFG_BASE_ADDR + 0xD8)	
	#define EMIF4_0_RDWR_LVL_CTRL			(EMIF4_0_CFG_BASE_ADDR + 0xDC)	
	
	
	#define EMIF4_1_SDRAM_CONFIG			(EMIF4_1_CFG_BASE_ADDR + 0x08)	
	#define EMIF4_1_SDRAM_CONFIG2			(EMIF4_1_CFG_BASE_ADDR + 0x0C)	
	#define EMIF4_1_SDRAM_REF_CTRL			(EMIF4_1_CFG_BASE_ADDR + 0x10)	
	#define EMIF4_1_SDRAM_REF_CTRL_SHADOW		(EMIF4_1_CFG_BASE_ADDR + 0x14)	
	#define EMIF4_1_SDRAM_TIM_1			(EMIF4_1_CFG_BASE_ADDR + 0x18)	
	#define EMIF4_1_SDRAM_TIM_1_SHADOW		(EMIF4_1_CFG_BASE_ADDR + 0x1C)	
	#define EMIF4_1_SDRAM_TIM_2			(EMIF4_1_CFG_BASE_ADDR + 0x20)	
	#define EMIF4_1_SDRAM_TIM_2_SHADOW		(EMIF4_1_CFG_BASE_ADDR + 0x24)	
	#define EMIF4_1_SDRAM_TIM_3			(EMIF4_1_CFG_BASE_ADDR + 0x28)	
	#define EMIF4_1_SDRAM_TIM_3_SHADOW		(EMIF4_1_CFG_BASE_ADDR + 0x2C)	
	#define EMIF4_1_DDR_PHY_CTRL_1			(EMIF4_1_CFG_BASE_ADDR + 0xE4)	 
	#define EMIF4_1_DDR_PHY_CTRL_1_SHADOW		(EMIF4_1_CFG_BASE_ADDR + 0xE8)	 
	#define EMIF4_1_SDRAM_ZQCR					(EMIF4_1_CFG_BASE_ADDR + 0xC8)	
	#define EMIF4_1_RDWR_LVL_RMP_CTRL		(EMIF4_1_CFG_BASE_ADDR + 0xD8)	
	#define EMIF4_1_RDWR_LVL_CTRL			(EMIF4_1_CFG_BASE_ADDR + 0xDC)	
	
	
	//- DDR0 Phy MMRs
	#define	   CMD0_REG_PHY0_CTRL_SLAVE_RATIO_0	(0x01C + DDR0_PHY_BASE_ADDR)
	#define	   CMD0_REG_PHY0_DLL_LOCK_DIFF_0 	(0x028 + DDR0_PHY_BASE_ADDR)
	#define	   CMD0_REG_PHY0_INVERT_CLKOUT_0 	(0x02C + DDR0_PHY_BASE_ADDR)
	#define	   CMD1_REG_PHY0_CTRL_SLAVE_RATIO_0 	(0x050 + DDR0_PHY_BASE_ADDR)
	#define	   CMD1_REG_PHY0_DLL_LOCK_DIFF_0	(0x05C + DDR0_PHY_BASE_ADDR)
	#define	   CMD1_REG_PHY0_INVERT_CLKOUT_0	(0x060 + DDR0_PHY_BASE_ADDR)
	#define	   CMD2_REG_PHY0_CTRL_SLAVE_RATIO_0	(0x084 + DDR0_PHY_BASE_ADDR)
	#define	   CMD2_REG_PHY0_DLL_LOCK_DIFF_0	(0x090 + DDR0_PHY_BASE_ADDR)
	#define	   CMD2_REG_PHY0_INVERT_CLKOUT_0	(0x094 + DDR0_PHY_BASE_ADDR)
	
	#define	   DATA0_REG_PHY0_RD_DQS_SLAVE_RATIO_0	(0x0C8 + DDR0_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY0_WR_DQS_SLAVE_RATIO_0	(0x0DC + DDR0_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY0_WRLVL_INIT_RATIO_0	(0x0F0 + DDR0_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY0_WRLVL_INIT_MODE_0 	(0x0F8 + DDR0_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY0_GATELVL_INIT_RATIO_0 	(0x0FC + DDR0_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY0_GATELVL_INIT_MODE_0 	(0x104 + DDR0_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY0_RD_DQS_GATE_SLAVE_RATIO_0 (0x108 + DDR0_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY0_WR_DATA_SLAVE_RATIO_0 (0x120 + DDR0_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY0_USE_RANK0_DELAYS 	(0x134 + DDR0_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY0_DLL_LOCK_DIFF_0 	(0x138 + DDR0_PHY_BASE_ADDR)
	
	#define	   DATA1_REG_PHY0_RD_DQS_SLAVE_RATIO_0 	(0x16C + DDR0_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY0_WR_DQS_SLAVE_RATIO_0 	(0x180 + DDR0_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY0_WRLVL_INIT_RATIO_0 	(0x194 + DDR0_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY0_WRLVL_INIT_MODE_0 	(0x19C + DDR0_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY0_GATELVL_INIT_RATIO_0 	(0x1A0 + DDR0_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY0_GATELVL_INIT_MODE_0 	(0x1A8 + DDR0_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY0_RD_DQS_GATE_SLAVE_RATIO_0 (0x1AC + DDR0_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY0_WR_DATA_SLAVE_RATIO_0 (0x1C4 + DDR0_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY0_USE_RANK0_DELAYS 	(0x1D8 + DDR0_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY0_DLL_LOCK_DIFF_0 	(0x1DC + DDR0_PHY_BASE_ADDR)
	
	#define	   DATA2_REG_PHY0_RD_DQS_SLAVE_RATIO_0 	(0x210 + DDR0_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY0_WR_DQS_SLAVE_RATIO_0 	(0x224 + DDR0_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY0_WRLVL_INIT_RATIO_0 	(0x238 + DDR0_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY0_WRLVL_INIT_MODE_0 	(0x240 + DDR0_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY0_GATELVL_INIT_RATIO_0 	(0x244 + DDR0_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY0_GATELVL_INIT_MODE_0 	(0x24C + DDR0_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY0_RD_DQS_GATE_SLAVE_RATIO_0 (0x250 + DDR0_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY0_WR_DATA_SLAVE_RATIO_0 (0x268 + DDR0_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY0_USE_RANK0_DELAYS 	(0x27C + DDR0_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY0_DLL_LOCK_DIFF_0 	(0x280 + DDR0_PHY_BASE_ADDR)
	
	#define	   DATA3_REG_PHY0_RD_DQS_SLAVE_RATIO_0 	(0x2B4 + DDR0_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY0_WR_DQS_SLAVE_RATIO_0 	(0x2C8 + DDR0_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY0_WRLVL_INIT_RATIO_0 	(0x2DC + DDR0_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY0_WRLVL_INIT_MODE_0 	(0x2E4 + DDR0_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY0_GATELVL_INIT_RATIO_0 	(0x2E8 + DDR0_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY0_GATELVL_INIT_MODE_0 	(0x2F0 + DDR0_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY0_RD_DQS_GATE_SLAVE_RATIO_0 (0x2F4 + DDR0_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY0_WR_DATA_SLAVE_RATIO_0 (0x30C + DDR0_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY0_USE_RANK0_DELAYS 	(0x320 + DDR0_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY0_DLL_LOCK_DIFF_0 	(0x324 + DDR0_PHY_BASE_ADDR)
	
	
	//- DDR1 Phy MMRs
	#define	   CMD0_REG_PHY1_CTRL_SLAVE_RATIO_0	(0x01C + DDR1_PHY_BASE_ADDR)
	#define	   CMD0_REG_PHY1_DLL_LOCK_DIFF_0 	(0x028 + DDR1_PHY_BASE_ADDR)
	#define	   CMD0_REG_PHY1_INVERT_CLKOUT_0 	(0x02C + DDR1_PHY_BASE_ADDR)
	#define	   CMD1_REG_PHY1_CTRL_SLAVE_RATIO_0 	(0x050 + DDR1_PHY_BASE_ADDR)
	#define	   CMD1_REG_PHY1_DLL_LOCK_DIFF_0	(0x05C + DDR1_PHY_BASE_ADDR)
	#define	   CMD1_REG_PHY1_INVERT_CLKOUT_0	(0x060 + DDR1_PHY_BASE_ADDR)
	#define	   CMD2_REG_PHY1_CTRL_SLAVE_RATIO_0	(0x084 + DDR1_PHY_BASE_ADDR)
	#define	   CMD2_REG_PHY1_DLL_LOCK_DIFF_0	(0x090 + DDR1_PHY_BASE_ADDR)
	#define	   CMD2_REG_PHY1_INVERT_CLKOUT_0	(0x094 + DDR1_PHY_BASE_ADDR)
	
	#define	   DATA0_REG_PHY1_RD_DQS_SLAVE_RATIO_0	(0x0C8 + DDR1_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY1_WR_DQS_SLAVE_RATIO_0	(0x0DC + DDR1_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY1_WRLVL_INIT_RATIO_0	(0x0F0 + DDR1_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY1_WRLVL_INIT_MODE_0 	(0x0F8 + DDR1_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY1_GATELVL_INIT_RATIO_0 	(0x0FC + DDR1_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY1_GATELVL_INIT_MODE_0 	(0x104 + DDR1_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY1_RD_DQS_GATE_SLAVE_RATIO_0 (0x108 + DDR1_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY1_WR_DATA_SLAVE_RATIO_0 (0x120 + DDR1_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY1_USE_RANK0_DELAYS 	(0x134 + DDR1_PHY_BASE_ADDR)
	#define	   DATA0_REG_PHY1_DLL_LOCK_DIFF_0 	(0x138 + DDR1_PHY_BASE_ADDR)
	
	#define	   DATA1_REG_PHY1_RD_DQS_SLAVE_RATIO_0 	(0x16C + DDR1_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY1_WR_DQS_SLAVE_RATIO_0 	(0x180 + DDR1_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY1_WRLVL_INIT_RATIO_0 	(0x194 + DDR1_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY1_WRLVL_INIT_MODE_0 	(0x19C + DDR1_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY1_GATELVL_INIT_RATIO_0 	(0x1A0 + DDR1_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY1_GATELVL_INIT_MODE_0 	(0x1A8 + DDR1_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY1_RD_DQS_GATE_SLAVE_RATIO_0 (0x1AC + DDR1_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY1_WR_DATA_SLAVE_RATIO_0 (0x1C4 + DDR1_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY1_USE_RANK0_DELAYS 	(0x1D8 + DDR1_PHY_BASE_ADDR)
	#define	   DATA1_REG_PHY1_DLL_LOCK_DIFF_0 	(0x1DC + DDR1_PHY_BASE_ADDR)
	
	#define	   DATA2_REG_PHY1_RD_DQS_SLAVE_RATIO_0 	(0x210 + DDR1_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY1_WR_DQS_SLAVE_RATIO_0 	(0x224 + DDR1_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY1_WRLVL_INIT_RATIO_0 	(0x238 + DDR1_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY1_WRLVL_INIT_MODE_0 	(0x240 + DDR1_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY1_GATELVL_INIT_RATIO_0 	(0x244 + DDR1_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY1_GATELVL_INIT_MODE_0 	(0x24C + DDR1_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY1_RD_DQS_GATE_SLAVE_RATIO_0 (0x250 + DDR1_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY1_WR_DATA_SLAVE_RATIO_0 (0x268 + DDR1_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY1_USE_RANK0_DELAYS 	(0x27C + DDR1_PHY_BASE_ADDR)
	#define	   DATA2_REG_PHY1_DLL_LOCK_DIFF_0 	(0x280 + DDR1_PHY_BASE_ADDR)
	
	#define	   DATA3_REG_PHY1_RD_DQS_SLAVE_RATIO_0 	(0x2B4 + DDR1_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY1_WR_DQS_SLAVE_RATIO_0 	(0x2C8 + DDR1_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY1_WRLVL_INIT_RATIO_0 	(0x2DC + DDR1_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY1_WRLVL_INIT_MODE_0 	(0x2E4 + DDR1_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY1_GATELVL_INIT_RATIO_0 	(0x2E8 + DDR1_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY1_GATELVL_INIT_MODE_0 	(0x2F0 + DDR1_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY1_RD_DQS_GATE_SLAVE_RATIO_0 (0x2F4 + DDR1_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY1_WR_DATA_SLAVE_RATIO_0 (0x30C + DDR1_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY1_USE_RANK0_DELAYS 	(0x320 + DDR1_PHY_BASE_ADDR)
	#define	   DATA3_REG_PHY1_DLL_LOCK_DIFF_0 	(0x324 + DDR1_PHY_BASE_ADDR)
	
	#define    DATA_MACRO_0             0
	#define    DATA_MACRO_1             1
	#define    DATA_MACRO_2             2
	#define    DATA_MACRO_3             3
	#define    DDR_PHY0		  0
	#define    DDR_PHY1		  1
	
	#define    DDR_FREQ		 800 
	
	//- Common DDR PHY parameters
	#define	   PHY_INVERT_CLKOUT_DEFINE		 		0
	#define	   DDR3_PHY_INVERT_CLKOUT_ON	 		1
	#define	   DDR3_PHY_INVERT_CLKOUT_OFF	 		0
	
	#define	   PHY_REG_USE_RANK0_DELAY_DEFINE	 	0
	#define	   mDDR_PHY_REG_USE_RANK0_DELAY_DEFINE	1
	#define	   PHY_DLL_LOCK_DIFF_DEFINE 	        0x4
	#define	   PHY_CMD0_DLL_LOCK_DIFF_DEFINE		0x4
	
	#define	   PHY_GATELVL_INIT_CS0_DEFINE          0x0
	#define	   PHY_WRLVL_INIT_CS0_DEFINE		 	0x0
	
	#define	   PHY_GATELVL_INIT_CS1_DEFINE          0x0
	#define	   PHY_WRLVL_INIT_CS1_DEFINE		 	0x0
	#define	   PHY_CTRL_SLAVE_RATIO_CS1_DEFINE      0x80 
	
	//- DDR2 parameters
	
	#define    DDR2_EMIF_DDRPHYCR_DEFINE	0x00173208
		
	#define    DDR2_EMIF_TIM1_DEFINE			0x0888E4E2 
	#define    DDR2_EMIF_TIM2_DEFINE			0x202D31D2 
	#define    DDR2_EMIF_TIM3_DEFINE			0x500002AF
	#define    DDR2_EMIF_REF_CTRL_DEFINE		0x00000A25
	#define    DDR2_EMIF_SDRAM_CONFIG_DEFINE	0x41801832
	
	#define	   DDR2_PHY_0_RD_DQS_CS0_DEFINE		0x34
	#define	   DDR2_PHY_0_WR_DQS_CS0_DEFINE		0x22
	#define	   DDR2_PHY_0_RD_DQS_GATE_CS0_DEFINE	0xe4
	#define	   DDR2_PHY_0_WR_DATA_CS0_DEFINE		0x48
	#define	   DDR2_PHY_CTRL_SLAVE_RATIO_CS0_DEFINE       0x80
	
	#define	   DDR2_PHY_1_RD_DQS_CS0_DEFINE		0x32
	#define	   DDR2_PHY_1_WR_DQS_CS0_DEFINE		0x22
	#define	   DDR2_PHY_1_RD_DQS_GATE_CS0_DEFINE	0xf2
	#define	   DDR2_PHY_1_WR_DATA_CS0_DEFINE		0x44
	//- DDR3 parameters
	
	#define    DDR3_EMIF_REF_CTRL_DEFINE1			0x00004000
	#define    DDR3_EMIF_SDRAM_ZQCR_DEFINE  		0x50074BE1

	
	//DDR3 300 MHz - CL=5,CWL=5
	#define    DDR3_EMIF_TIM1_DEFINE_300			0x0888A394
	#define    DDR3_EMIF_TIM2_DEFINE_300			0x20237FE2
	#define    DDR3_EMIF_TIM3_DEFINE_300			0x501F820F
	#define    DDR3_EMIF_REF_CTRL_DEFINE2_300		0x00000924
	#define    DDR3_EMIF_SDRAM_CONFIG_DEFINE_300	0x61C009B2
	#define    DDR3_EMIF_DDRPHYCR_DEFINE_300	0x00173208
	
	//DDR3 333 MHz - CL=6,CWL=5
	#define    DDR3_EMIF_TIM1_DEFINE_333			0x0888B414
	#define    DDR3_EMIF_TIM2_DEFINE_333			0x20277FE2
	#define    DDR3_EMIF_TIM3_DEFINE_333			0x501F824F
	#define    DDR3_EMIF_REF_CTRL_DEFINE2_333		0x00000A25
	#define    DDR3_EMIF_SDRAM_CONFIG_DEFINE_333	0x61C011B2
	#define    DDR3_EMIF_DDRPHYCR_DEFINE_333	0x00173209
	
	//MODIFIED
	//DDR3 400 MHz - CL=6,CWL=5
	//TIM
	#define    DDR3_EMIF_TIM1_DEFINE_400			0x0AAAD4DB
	#define    DDR3_EMIF_TIM2_DEFINE_400			0x20437FDA
	#define    DDR3_EMIF_TIM3_DEFINE_400			0x531F83FF
	//SDRRCR
	#define    DDR3_EMIF_REF_CTRL_DEFINE2_400		0x10000C30
	//SDRCR
	#define    DDR3_EMIF_SDRAM_CONFIG_DEFINE_400	0x61C012B3
	//PHYCR
	#define    DDR3_EMIF_DDRPHYCR_DEFINE_400        0x0017320A
	
	//DDR3 450 MHz - CL=7,CWL=6
	#define    DDR3_EMIF_TIM1_DEFINE_450			0x0CCCF55C
	#define    DDR3_EMIF_TIM2_DEFINE_450			0x30357FE2
	#define    DDR3_EMIF_TIM3_DEFINE_450			0x501F831F
	#define    DDR3_EMIF_REF_CTRL_DEFINE2_450		0x00000DB6
	#define    DDR3_EMIF_SDRAM_CONFIG_DEFINE_450	0x61C119B2
	#define    DDR3_EMIF_DDRPHYCR_DEFINE_450	0x0017320A
	
	//DDR3 533 MHz - CL=8,CWL=6
	#define    DDR3_EMIF_TIM1_DEFINE_533			0x0EEF2664
	#define    DDR3_EMIF_TIM2_DEFINE_533			0x303F7FE2
	#define    DDR3_EMIF_TIM3_DEFINE_533			0x501F83AF
	#define    DDR3_EMIF_REF_CTRL_DEFINE2_533		0x0000103D
	#define    DDR3_EMIF_SDRAM_CONFIG_DEFINE_533	0x61C121B2
	#define    DDR3_EMIF_DDRPHYCR_DEFINE_533	0x0017320B
	
	//DDR3 666 MHz - CL=9,CWL=7
	#define    DDR3_EMIF_TIM1_DEFINE_666			0x1333782C
	#define    DDR3_EMIF_TIM2_DEFINE_666			0x404F7FE2
	#define    DDR3_EMIF_TIM3_DEFINE_666			0x501F849F
	#define    DDR3_EMIF_REF_CTRL_DEFINE2_666		0x0000144A
	#define    DDR3_EMIF_SDRAM_CONFIG_DEFINE_666	0x61C229B2
	#define    DDR3_EMIF_DDRPHYCR_DEFINE_666		0x0017320C
	
	//MODIFIED DDR3 Timing Paramters
	#define	   DDR3_PHY_CTRL_SLAVE_RATIO_CS0_DEFINE       0x80
	
	#define	   DDR3_PHY_0_RD_DQS_CS0_DEFINE   	0x3d   
	#define	   DDR3_PHY_0_WR_DQS_CS0_DEFINE		0x1d 
	#define	   DDR3_PHY_0_RD_DQS_GATE_CS0_DEFINE	0x9b 
	#define	   DDR3_PHY_0_WR_DATA_CS0_DEFINE		0x3b 
	
	#define	   DDR3_PHY_1_RD_DQS_CS0_DEFINE   0x3d    
	#define	   DDR3_PHY_1_WR_DQS_CS0_DEFINE		0x1d
	#define	   DDR3_PHY_1_RD_DQS_GATE_CS0_DEFINE	0x9b 
	#define	   DDR3_PHY_1_WR_DATA_CS0_DEFINE		0x3b
	
	//- mDDR parameters
	#define    mDDR_EMIF_READ_LATENCY_DEFINE	0x5
	#define    mDDR_EMIF_TIM1_DEFINE			0x0888831B
	#define    mDDR_EMIF_TIM2_DEFINE			0x221A31C0
	#define    mDDR_EMIF_TIM3_DEFINE			0x00000157
	#define    mDDR_EMIF_REF_CTRL_DEFINE		0x10000618
	#define    mDDR_EMIF_SDRAM_CONFIG_DEFINE	0x20000EA2
	
	#define	   mDDR_PHY_RD_DQS_CS0_DEFINE	 	0x42
	#define	   mDDR_PHY_WR_DQS_CS0_DEFINE		0x19	
	#define	   mDDR_PHY_RD_DQS_GATE_CS0_DEFINE	0x128
	#define	   mDDR_PHY_WR_DATA_CS0_DEFINE   	0x56
	#define	   mDDR_PHY_CTRL_SLAVE_RATIO_CS0_DEFINE       0x80

	
	//Pincntrl Configurations
	#define PINCNTL68	(CTRL_MODULE_BASE_ADDR + 0x090C)
	#define PINCNTL69	(CTRL_MODULE_BASE_ADDR + 0x0910)
	#define PINCNTL72	(CTRL_MODULE_BASE_ADDR + 0x091C)
	#define PINCNTL73	(CTRL_MODULE_BASE_ADDR + 0x0920)
	#define PINCNTL59	(CTRL_MODULE_BASE_ADDR + 0x08e8)
	#define PINCNTL60	(CTRL_MODULE_BASE_ADDR + 0x08ec)
	#define PINCNTL89	(CTRL_MODULE_BASE_ADDR + 0x0960)
	#define PINCNTL90	(CTRL_MODULE_BASE_ADDR + 0x0964)
	#define PINCNTL91	(CTRL_MODULE_BASE_ADDR + 0x0968)
	#define PINCNTL92	(CTRL_MODULE_BASE_ADDR + 0x096C)
	#define PINCNTL93	(CTRL_MODULE_BASE_ADDR + 0x0970)
	#define PINCNTL94	(CTRL_MODULE_BASE_ADDR + 0x0974)
	#define PINCNTL95	(CTRL_MODULE_BASE_ADDR + 0x0978)
	#define PINCNTL96	(CTRL_MODULE_BASE_ADDR + 0x097C)
	#define PINCNTL97	(CTRL_MODULE_BASE_ADDR + 0x0980)
	#define PINCNTL98	(CTRL_MODULE_BASE_ADDR + 0x0984)
	#define PINCNTL99	(CTRL_MODULE_BASE_ADDR + 0x0988)
	#define PINCNTL100	(CTRL_MODULE_BASE_ADDR + 0x098C)
	#define PINCNTL101	(CTRL_MODULE_BASE_ADDR + 0x0990)
	#define PINCNTL102	(CTRL_MODULE_BASE_ADDR + 0x0994)
	#define PINCNTL103	(CTRL_MODULE_BASE_ADDR + 0x0998)
	#define PINCNTL104	(CTRL_MODULE_BASE_ADDR + 0x099C)
	
	#define PINCNTL105	(CTRL_MODULE_BASE_ADDR + 0x09A0)
	#define PINCNTL106	(CTRL_MODULE_BASE_ADDR + 0x09A4)
	#define PINCNTL107	(CTRL_MODULE_BASE_ADDR + 0x09A8)
	#define PINCNTL108	(CTRL_MODULE_BASE_ADDR + 0x09AC)
	#define PINCNTL109	(CTRL_MODULE_BASE_ADDR + 0x09B0)
	#define PINCNTL110	(CTRL_MODULE_BASE_ADDR + 0x09B4)
	#define PINCNTL111	(CTRL_MODULE_BASE_ADDR + 0x09B8)
	#define PINCNTL112	(CTRL_MODULE_BASE_ADDR + 0x09BC)
	#define PINCNTL122	(CTRL_MODULE_BASE_ADDR + 0x09E4)
	#define PINCNTL123	(CTRL_MODULE_BASE_ADDR + 0x09E8)
	#define PINCNTL124	(CTRL_MODULE_BASE_ADDR + 0x09EC)
	#define PINCNTL125	(CTRL_MODULE_BASE_ADDR + 0x09F0)
	#define PINCNTL126	(CTRL_MODULE_BASE_ADDR + 0x09F4)
	#define PINCNTL127	(CTRL_MODULE_BASE_ADDR + 0x09F8)
	#define PINCNTL128	(CTRL_MODULE_BASE_ADDR + 0x09FC)
	#define PINCNTL129	(CTRL_MODULE_BASE_ADDR + 0x0A00)
	#define	PINCNTL130	(CTRL_MODULE_BASE_ADDR + 0x0A04)
	#define	PINCNTL131	(CTRL_MODULE_BASE_ADDR + 0x0A08)
	#define	PINCNTL132	(CTRL_MODULE_BASE_ADDR + 0x0A0C)
	#define	PINCNTL133	(CTRL_MODULE_BASE_ADDR + 0x0A10)
	#define PINCNTL235	(CTRL_MODULE_BASE_ADDR + 0x0BA8)
	#define PINCNTL243	(CTRL_MODULE_BASE_ADDR + 0x0BC8)
	#define PINCNTL244	(CTRL_MODULE_BASE_ADDR + 0x0BCC)
	#define PINCNTL245	(CTRL_MODULE_BASE_ADDR + 0x0BD0)
	#define PINCNTL246	(CTRL_MODULE_BASE_ADDR + 0x0BD4)
	#define PINCNTL247	(CTRL_MODULE_BASE_ADDR + 0x0BD8)
	#define PINCNTL248	(CTRL_MODULE_BASE_ADDR + 0x0BDC)
	#define PINCNTL249	(CTRL_MODULE_BASE_ADDR + 0x0BE0)
	#define PINCNTL250	(CTRL_MODULE_BASE_ADDR + 0x0BE4)
	#define PINCNTL251	(CTRL_MODULE_BASE_ADDR + 0x0BE8)
	#define PINCNTL252	(CTRL_MODULE_BASE_ADDR + 0x0BEC)
	#define PINCNTL253	(CTRL_MODULE_BASE_ADDR + 0x0BF0)
	#define PINCNTL254	(CTRL_MODULE_BASE_ADDR + 0x0BF4)
	#define PINCNTL255	(CTRL_MODULE_BASE_ADDR + 0x0BF8)
	#define PINCNTL256	(CTRL_MODULE_BASE_ADDR + 0x0BFC)
	#define PINCNTL257	(CTRL_MODULE_BASE_ADDR + 0x0C00)
	#define PINCNTL258	(CTRL_MODULE_BASE_ADDR + 0x0C04)

    #define WR_MEM_32(addr, data)    *(unsigned int*)(addr)=(unsigned int)(data)
    #define RD_MEM_32(addr) 	  	 *(unsigned int*)(addr)
    #define UWORD32 			     unsigned int

    /***    PLL,Control Base Adress  Base Address   ***********/
    #define PLL_BASE_ADDRESS         0x481C5000 
    #define CONTROL_BASE_ADDRESS     0x48140000
    #define OSC_SRC_CTRL            (PLL_BASE_ADDRESS+0x02c0)
    #define ARM_SRC_CLK             (PLL_BASE_ADDRESS+0x02c4)
   
    /***    Top Level ADPLLJ  Base Address   ***********/
    #define L3_PLL_BASE             (PLL_BASE_ADDRESS+0x110)
    #define IVA_PLL_BASE            (PLL_BASE_ADDRESS+0x0E0)
    #define DSS_PLL_BASE            (PLL_BASE_ADDRESS+0x170)
    #define SGX_PLL_BASE            (PLL_BASE_ADDRESS+0x0B0)
    #define DSP_PLL_BASE            (PLL_BASE_ADDRESS+0x080)
    #define ISS_PLL_BASE            (PLL_BASE_ADDRESS+0x140)
    #define USB_PLL_BASE            (PLL_BASE_ADDRESS+0x260)
    #define AUDIO_PLL_BASE          (PLL_BASE_ADDRESS+0x230)
    #define VIDEO_0_PLL_BASE        (PLL_BASE_ADDRESS+0x1A0)
    #define VIDEO_1_PLL_BASE        (PLL_BASE_ADDRESS+0x1D0)
    #define HDMI_PLL_BASE           (PLL_BASE_ADDRESS+0x200)
    #define DDR_PLL_BASE            (PLL_BASE_ADDRESS+0x290)
	
	/********** ADPLL intrnal Offset Registers  ***********/
    #define CLKCTRL 				0x4
    #define TENABLE 				0x8
    #define TENABLEDIV 				0xC
    #define M2NDIV  				0x10
    #define MN2DIV 				    0x14
    #define STATUS 				    0x24

	/*********** MODENA ADPLLS REGISTERS  *********/
	#define MODENAPLL_CLKCTRL		(PLL_BASE_ADDRESS+0x04c) 
    #define MODENAPLL_TENABLE		(PLL_BASE_ADDRESS+0x050) 
    #define MODENAPLL_TENABLEDIV    (PLL_BASE_ADDRESS+0x054)	
    #define MODENAPLL_M2NDIV    	(PLL_BASE_ADDRESS+0x058) 
    #define MODENAPLL_MN2DIV    	(PLL_BASE_ADDRESS+0x05c) 
    #define MODENAPLL_STATUS		(PLL_BASE_ADDRESS+0x06c) 
	
   /********   SATA PLL REGISTERS   **************/
    #define SATA_PLLCFG0            (CONTROL_BASE_ADDRESS+0x720) 
    #define SATA_PLLCFG1            (CONTROL_BASE_ADDRESS+0x724) 
    #define SATA_PLLCFG2            (CONTROL_BASE_ADDRESS+0x728) 
    #define SATA_PLLCFG3            (CONTROL_BASE_ADDRESS+0x72c) 
    #define SATA_PLLCFG4            (CONTROL_BASE_ADDRESS+0x730) 
    #define SATA_PLLSTATUS          (CONTROL_BASE_ADDRESS+0x734)
    #define SATA_RXSTATUS           (CONTROL_BASE_ADDRESS+0x738)
    #define SATA_TXSTATUS           (CONTROL_BASE_ADDRESS+0x73c)
 
   /********   PCIE PLL REGISTERS   **************/
    #define PCIE_PLLCFG0            (CONTROL_BASE_ADDRESS+0x6D8) 
    #define PCIE_PLLCFG1            (CONTROL_BASE_ADDRESS+0x6DC) 
    #define PCIE_PLLCFG2            (CONTROL_BASE_ADDRESS+0x6E0) 
    #define PCIE_PLLCFG3            (CONTROL_BASE_ADDRESS+0x6E4) 
    #define PCIE_PLLCFG4            (CONTROL_BASE_ADDRESS+0x6E8) 
    #define PCIE_PLLSTATUS          (CONTROL_BASE_ADDRESS+0x6EC)
    #define PCIE_RXSTATUS           (CONTROL_BASE_ADDRESS+0x6F0)
    #define PCIE_TXSTATUS           (CONTROL_BASE_ADDRESS+0x6F4)
    #define SERDES_REFCLK_CTL 	    (CONTROL_BASE_ADDRESS+0xE24)


    #define CONTROL_STATUS          (CTRL_MODULE_BASE_ADDR + 0x040)
	#define BANDGAP0_TRIM       	(CTRL_MODULE_BASE_ADDR + 0x44C)
	#define BANDGAP1_TRIM       	(CTRL_MODULE_BASE_ADDR + 0x454)
	#define PLL_SUBSYSTEM_BASE_ADDR PLL_BASE_ADDRESS
	#define DSPPLL_CLOCK_CONTROL    (PLL_SUBSYSTEM_BASE_ADDR + 0x084)
	#define SGXPLL_CLOCK_CONTROL    (PLL_SUBSYSTEM_BASE_ADDR + 0x0B4)
	#define IVAPLL_CLOCK_CONTROL    (PLL_SUBSYSTEM_BASE_ADDR + 0x0E4)
	#define L3PLL_CLOCK_CONTROL     (PLL_SUBSYSTEM_BASE_ADDR + 0x114)
	#define ISSPLL_CLOCK_CONTROL    (PLL_SUBSYSTEM_BASE_ADDR + 0x144)
	#define DSSPLL_CLOCK_CONTROL    (PLL_SUBSYSTEM_BASE_ADDR + 0x174)
	#define VID0PLL_CLOCK_CONTROL   (PLL_SUBSYSTEM_BASE_ADDR + 0x1A4)
	#define VID1PLL_CLOCK_CONTROL   (PLL_SUBSYSTEM_BASE_ADDR + 0x1D4)
	#define HDMIPLL_CLOCK_CONTROL   (PLL_SUBSYSTEM_BASE_ADDR + 0x204)
	#define AUDIOPLL_CLOCK_CONTROL  (PLL_SUBSYSTEM_BASE_ADDR + 0x234)
	#define USBPLL_CLOCK_CONTROL    (PLL_SUBSYSTEM_BASE_ADDR + 0x264)
	#define DDRPLL_CLOCK_CONTROL    (PLL_SUBSYSTEM_BASE_ADDR + 0x294)
	#define MODENAPLL_CLOCK_CONTROL (PLL_SUBSYSTEM_BASE_ADDR + 0x04C)


/*************************************************************************************************************
      						     ADPLLJ CLKCNTRL REGISTER CONFIGURATIONS
      						     
***************************************************************************************************************/      
	// ADPLLJ_CLKCRTL_Register Value Configurations
	#define ADPLLJ_CLKCRTL_HS2       0x00000801 //HS2 Mode,TINTZ =1  --used by all PLL's except HDMI 
	#define ADPLLJ_CLKCRTL_HS1       0x00001001 //HS1 Mode,TINTZ =1  --used only for HDMI 
	#define ADPLLJ_CLKCRTL_CLKDCO    0x200a0000 // Enable CLKDCOEN,CLKLDOEN,CLKDCOPWDNZ -- used for HDMI,USB


/****************************************************************************************************************/
   // CONTROL MMMR LOCK and UNLOCK Registers
   
	#define control_pllss_mmr_lock                     0x481C5040
	#define control_mmr_lock0                          0x48140060
	#define control_mmr_lock1                          0x48140064
	#define control_mmr_lock2                          0x48140068
	#define control_mmr_lock3                          0x4814006c
	#define control_mmr_lock4                          0x48140070
	
	#define control_pllss_mmr_lock_unlock_val          0x1EDA4C3D
	#define control_mmr_lock0_unlock_val               0x2FF1AC2B
	#define control_mmr_lock1_unlock_val               0xF757FDC0
	#define control_mmr_lock2_unlock_val               0xE2BC3A6D
	#define control_mmr_lock3_unlock_val               0x1EBF131D
	#define control_mmr_lock4_unlock_val               0x6F361E05
	

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



/*******************************************************************************************************                               
    ****                               
    ****                                   ********* RANGE ************             
    ****   REF_CLK       = (OSC_FREQ)/N+1  [  REF_CLK < 2.5MHz      ] 
    ****   DCOCLK_HS2    = (REF_CLK)*M     [500  < DCOCLK < 1000MHz ] 
    ****   DCOCLK_HS1    = (REF_CLK)*M     [1000 < DCOCLK < 2000MHz ]--used for HDMI CLKDCO    
    ****   CLKOUT        =  DCOCLK/M2      [10   < CLKOUT < 2000MHz ]
    ****   N+1 			           		   [1..256]
    ****   M    		           		   [2..4095]
    ****   M2    		           		   [1..127]
    ****
    ****
	******************************************************************************************************/

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

 
int HSMODE,CLKOUT = 0;

PLL_SETUP(){
	   //pll_name (CLKINP,N , M, M2);
		cmdMPUPLL(CLKIN,1, 60 ,1);
		 
		cmdL3PLL(CLKIN,19,800,4);
		 
		cmdDSPPLL(CLKIN,19, 500, 1);
		 
		cmdDSSPLL(CLKIN,19, 800, 4);
		 
		cmdISSPLL(CLKIN,19, 800 ,2);
		 
		cmdIVAPLL(CLKIN,19, 532, 2);
		 
		cmdSGXPLL(CLKIN,19, 800, 4);
		 
		cmdUSBPLL(CLKIN,19,960,5);
		 
        cmdVIDEO0PLL(CLKIN,19, 540,10);
		 
	    cmdVIDEO1PLL(CLKIN,19, 594,4);
		 
	   	cmdHDMIPLL(CLKIN,19, 1485,10);
		 
//	    cmdDDRPLL(CLKIN,19,DDR_FREQ, 2); //DDR PLL config now done as a part of DDR hotmenus
	   
	   	cmdAUDIOPLL(CLKIN,19,800,4);

	   //cmdSATAPLL();

	   //cmdPCIEPLL();
 
}

	cmdMPUPLL(int CLKIN,int N, int M, int M2)
	{
	    MODENA_PLL_Config(CLKIN,N,M,M2);
	      GEL_TextOut("\t MODENA ADPLLJ CLKOUT  value is  = %d \n",,,,,CLKOUT);
	}
	
	cmdL3PLL(int CLKIN,int N, int M, int M2)
	{
		DCOCLK_COMP(CLKIN,N,M);
		if(HSMODE == 2){ 
			PLL_Clocks_Config(L3_PLL_BASE,CLKIN,N,M,M2,ADPLLJ_CLKCRTL_HS2); 
			GEL_TextOut("\t L3  ADPLLJ CLKOUT  value is  = %d \n",,,,,CLKOUT);
		}
		else if (HSMODE == 1){
			PLL_Clocks_Config(L3_PLL_BASE,CLKIN,N,M,M2,ADPLLJ_CLKCRTL_HS1); 
			GEL_TextOut("\t L3  ADPLLJ CLKOUT  value is  = %d \n",,,,,CLKOUT);
		}
		else {
			GEL_TextOut("\t L3 PLL NOT Configured.Wrong DCOCLK Output\n");
		}

	}

	  cmdDDRPLL(int CLKIN,int N, int M, int M2)
	{
			DCOCLK_COMP(CLKIN,N,M);
			if(HSMODE == 2){  
				PLL_Clocks_Config(DDR_PLL_BASE,CLKIN,N,M,M2,ADPLLJ_CLKCRTL_HS2); 
		         GEL_TextOut("\tDM814x DDR DPLL CLKOUT  value is  = %d \n",,,,,CLKOUT);
			}
		    else if (HSMODE == 1){
				PLL_Clocks_Config(DDR_PLL_BASE,CLKIN,N,M,M2,ADPLLJ_CLKCRTL_HS1); 
		         GEL_TextOut("\tDM814x DDR DPLL CLKOUT  value is  = %d \n",,,,,CLKOUT);
	        }
		    else {
				      GEL_TextOut("\t DDR PLL NOT Configured.Wrong DCOCLK Output\n");
		    }
	
		
	}
	 
	int CLKIN =	20; 
	
	wait_delay(UWORD32 noopcount)
	 {
	 int i;
	  for(i=0;i<noopcount;i++)
	  {
	  }
	 }
	 

	PLL_Clocks_Config(UWORD32 Base_Address,UWORD32 CLKIN,UWORD32 N,UWORD32 M,UWORD32 M2,UWORD32 CLKCTRL_VAL)
	{
	    UWORD32 m2nval,mn2val,read_clkctrl,clk_out,ref_clk,clkout_dco = 0;
	    m2nval = (M2<<16) | N;
	    mn2val =  M;
		ref_clk     = CLKIN/(N+1);
	    clkout_dco  = ref_clk*M;
	    clk_out     = clkout_dco/M2;
	    WR_MEM_32(Base_Address+CLKCTRL, RD_MEM_32(Base_Address+CLKCTRL)|0x00800000);
		while (( (RD_MEM_32(Base_Address+STATUS)) & 0x00000101) != 0x00000101);
	    WR_MEM_32(Base_Address+CLKCTRL, RD_MEM_32(Base_Address+CLKCTRL)& 0xfffffffe);
		wait_delay(3);
		WR_MEM_32((Base_Address+M2NDIV    ),m2nval);
		WR_MEM_32((Base_Address+MN2DIV    ),mn2val);
		wait_delay(3);
		WR_MEM_32((Base_Address+TENABLEDIV),0x1);
		wait_delay(3);
		WR_MEM_32((Base_Address+TENABLEDIV),0x0);
		wait_delay(3);
		WR_MEM_32((Base_Address+TENABLE   ),0x1);
		wait_delay(3);
		WR_MEM_32((Base_Address+TENABLE   ),0x0);
		wait_delay(3);
		read_clkctrl = RD_MEM_32(Base_Address+CLKCTRL);
		//configure the TINITZ(bit0) and CLKDCO BITS IF REQUIRED
		WR_MEM_32(Base_Address+CLKCTRL,(read_clkctrl & 0xff7fe3ff) | CLKCTRL_VAL);
		read_clkctrl = RD_MEM_32(Base_Address+CLKCTRL);
		// poll for the freq,phase lock to occur
		while (( (RD_MEM_32(Base_Address+STATUS)) & 0x00000600) != 0x00000600);
		//wait fot the clocks to get stabized
		wait_delay(10);
	    CLKOUT    = clk_out;
	}
	


	
	 MODENA_PLL_Config(UWORD32 CLKIN,UWORD32 N,UWORD32 M,UWORD32 M2)
	{
	    UWORD32 rval_ctrl,ref_clk,clk_out = 0;
	    UWORD32 m2nval,mn2val = 0;
		ref_clk     = CLKIN/(N+1);
	    clk_out     = (ref_clk*M)/M2;
	
		m2nval = (M2<<16) | N; //need to check the bit position of M2
	    mn2val =  M;
	    WR_MEM_32(MODENAPLL_M2NDIV      ,m2nval);         
	    WR_MEM_32(MODENAPLL_MN2DIV      ,mn2val);        
		WR_MEM_32(MODENAPLL_TENABLEDIV  ,0x1);  
		wait_delay(3);
	    WR_MEM_32(MODENAPLL_TENABLEDIV  ,0x0);
		wait_delay(3);
	    WR_MEM_32(MODENAPLL_TENABLE     ,0x1);
		wait_delay(3);
	    WR_MEM_32(MODENAPLL_TENABLE     ,0x0);
		wait_delay(3);
	    rval_ctrl = RD_MEM_32(MODENAPLL_CLKCTRL);
	    WR_MEM_32(MODENAPLL_CLKCTRL,(rval_ctrl & 0xff7fffff) | 0x1);
	    while (( (RD_MEM_32(MODENAPLL_STATUS)) & 0x00000600) != 0x00000600);
		wait_delay(10);
		CLKOUT = clk_out;
		
	}

	DCOCLK_COMP(int CLKIN,int N, int M)
	{
		int DCOCLK;
		DCOCLK = (CLKIN/(N+1))*M;
		
		if(DCOCLK >= 500 && DCOCLK < 1000){
			HSMODE = 2;  //HS2 Mode 
		}
		else if(DCOCLK >= 1000 && DCOCLK < 2000){
			HSMODE = 1;  //HS1 Mode
		}
		else HSMODE = 0;  //wrong configuration
	
	}


	  ControlModule_ClkEnable()
	{
		GEL_TextOut("\tPRCM for Control Module in Progress \n");	 									
		//Enable the  Clocks
		WR_MEM_32(CM_CTRL_CLKCTRL,   2);
		while(((RD_MEM_32(CM_CTRL_CLKCTRL)&0x30000))!=0x30000);	
	    GEL_TextOut("\tPRCM for Control Module Done \n");	 									
	}

	  PrcmAlwayOnClkEnable()
	{
		unsigned int fail=0, k=0;
		GEL_TextOut("\tPRCM for OCMCRAM0/1 Initialization in Progress \n");	 									
		/*Enable the OCMC0RAM Clocks*/
		WR_MEM_32(CM_ALWON_OCMC_0_CLKSTCTRL, 2);
		WR_MEM_32(CM_ALWON_OCMC_0_CLKCTRL,   2);
		while(((RD_MEM_32(CM_ALWON_OCMC_0_CLKSTCTRL) & 0x100)>>8)!=1);
		while(((RD_MEM_32(CM_ALWON_OCMC_0_CLKCTRL)&0x30000)>>17)!=0);
	    GEL_TextOut("\tPRCM for OCMCRAM0 Initialization Done \n");	 									
	
	
		/*for(k=0; k<SIZE; k++) {
		  WR_MEM_32(OCMC0RAM_BASE_ADDR+4*k, 0x12345678+k);
		  }	
	    for(k=0;  k<SIZE; k++) {
	      if(RD_MEM_32(OCMC0RAM_BASE_ADDR+4*k) != (0x12345678+k) ) {
		    fail++;
		    }
		  }
	
	    if(fail!=0) {
		   GEL_TextOut("\tOCMCRAM0 Accesses FAILED \n");	 										
		   }
	
		GEL_TextOut("\tOCMCRAM0 Accesses PASSED \n");	 										
	*/
	}


	
	Unlock_PLL_Control_MMR()
	{
		WR_MEM_32(control_pllss_mmr_lock,control_pllss_mmr_lock_unlock_val);
		WR_MEM_32(control_mmr_lock0,control_mmr_lock0_unlock_val);
		WR_MEM_32(control_mmr_lock1,control_mmr_lock1_unlock_val);
		WR_MEM_32(control_mmr_lock2,control_mmr_lock2_unlock_val);
		WR_MEM_32(control_mmr_lock3,control_mmr_lock3_unlock_val);
		WR_MEM_32(control_mmr_lock4,control_mmr_lock4_unlock_val);
		GEL_TextOut("\n PLL and Control MMR unlock done ... \n");   
	}
	
	
	hotmenu ADPLL_CLOCKS_ENABLE_API()
	{
		GEL_TextOut("\t ****  TIDM814x ADPLL INIT is in progress ......... \n");	
		PLL_SETUP();
		GEL_TextOut("\t ****  TIDM814x ADPLL INIT is completed *********** \n");	
	}
	
	ControlModule_ClkEnable_API()
	{
	    ControlModule_ClkEnable();
	}
	  
		PrcmAlwayOnClkEnable_API()
	{
			PrcmAlwayOnClkEnable();
	}
 

/*******************************************************************************************************
  
                   EMIF/DDR FUNCTIONS

********************************************************************************************************************/
	
	cmd_DDR2_EMIF0_EMIF1_Config(UWORD32 ddr2_phy_0_rd_dqs_cs0_arg,UWORD32 ddr2_phy_0_wr_dqs_cs0_arg,UWORD32 ddr2_phy_0_RD_DQS_GATE_cs0_arg,UWORD32 ddr2_phy_0_wr_data_cs0_arg,UWORD32 ddr2_phy_1_rd_dqs_cs0_arg,UWORD32 ddr2_phy_1_wr_dqs_cs0_arg,UWORD32 ddr2_phy_1_RD_DQS_GATE_cs0_arg,UWORD32 ddr2_phy_1_wr_data_cs0_arg,UWORD32 ddr2_emif_read_latency_arg,UWORD32 ddr2_emif_tim1_arg,UWORD32 ddr2_emif_tim2_arg,UWORD32 ddr2_emif_tim3_arg,UWORD32 ddr2_emif_ref_ctrl_arg,UWORD32 ddr2_emif_sdram_config_arg)
	{
	
		Emif_PRCM_Clk_Enable();
		GEL_TextOut("\tDM814x DDR,DMM PRCM configuration is Done \n");
		Cmd_Macro_Config(DDR_PHY0,PHY_INVERT_CLKOUT_DEFINE,DDR2_PHY_CTRL_SLAVE_RATIO_CS0_DEFINE,PHY_CMD0_DLL_LOCK_DIFF_DEFINE);
		Data_Macro_Config(DATA_MACRO_0,DDR_PHY0,ddr2_phy_0_rd_dqs_cs0_arg,ddr2_phy_0_wr_dqs_cs0_arg,ddr2_phy_0_RD_DQS_GATE_cs0_arg,ddr2_phy_0_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_1,DDR_PHY0,ddr2_phy_0_rd_dqs_cs0_arg,ddr2_phy_0_wr_dqs_cs0_arg,ddr2_phy_0_RD_DQS_GATE_cs0_arg,ddr2_phy_0_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_2,DDR_PHY0,ddr2_phy_0_rd_dqs_cs0_arg,ddr2_phy_0_wr_dqs_cs0_arg,ddr2_phy_0_RD_DQS_GATE_cs0_arg,ddr2_phy_0_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_3,DDR_PHY0,ddr2_phy_0_rd_dqs_cs0_arg,ddr2_phy_0_wr_dqs_cs0_arg,ddr2_phy_0_RD_DQS_GATE_cs0_arg,ddr2_phy_0_wr_data_cs0_arg);
	
		Cmd_Macro_Config(DDR_PHY1,PHY_INVERT_CLKOUT_DEFINE,DDR2_PHY_CTRL_SLAVE_RATIO_CS0_DEFINE,PHY_CMD0_DLL_LOCK_DIFF_DEFINE);
		Data_Macro_Config(DATA_MACRO_0,DDR_PHY1,ddr2_phy_1_rd_dqs_cs0_arg,ddr2_phy_1_wr_dqs_cs0_arg,ddr2_phy_1_RD_DQS_GATE_cs0_arg,ddr2_phy_1_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_1,DDR_PHY1,ddr2_phy_1_rd_dqs_cs0_arg,ddr2_phy_1_wr_dqs_cs0_arg,ddr2_phy_1_RD_DQS_GATE_cs0_arg,ddr2_phy_1_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_2,DDR_PHY1,ddr2_phy_1_rd_dqs_cs0_arg,ddr2_phy_1_wr_dqs_cs0_arg,ddr2_phy_1_RD_DQS_GATE_cs0_arg,ddr2_phy_1_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_3,DDR_PHY1,ddr2_phy_1_rd_dqs_cs0_arg,ddr2_phy_1_wr_dqs_cs0_arg,ddr2_phy_1_RD_DQS_GATE_cs0_arg,ddr2_phy_1_wr_data_cs0_arg);
		GEL_TextOut("\tDM814x DDR PHY Configuration is Done \n");
		WR_MEM_32(DDR0_IO_CTRL,0x00030303);
		WR_MEM_32(DDR1_IO_CTRL,0x00030303);
		GEL_TextOut("\tDM814x DDR IO Control Configuration is Done \n");
		
		Vtp_Enable();
		GEL_TextOut("\tDM814x VTP Configuration is Done \n");
		
		/*Program the DMM to Access EMIF0 and EMIF1*/
		WR_MEM_32(DMM_LISA_MAP__0, 0x80600100);
		WR_MEM_32(DMM_LISA_MAP__1, 0x80600100);
		WR_MEM_32(DMM_LISA_MAP__2, 0xC0600200);
		WR_MEM_32(DMM_LISA_MAP__3, 0xC0600200);
			
		while(RD_MEM_32(DMM_LISA_MAP__0)!=0x80600100);
		while(RD_MEM_32(DMM_LISA_MAP__1)!=0x80600100);
		while(RD_MEM_32(DMM_LISA_MAP__2)!=0xC0600200);
		while(RD_MEM_32(DMM_LISA_MAP__3)!=0xC0600200);
	
		WR_MEM_32(DMM_PAT_BASE_ADDR, 0x80000000);

		GEL_TextOut("\tDM814x DMM LISA register Configuration is Done\n");
	
		Emif0_MMR_Config(ddr2_emif_read_latency_arg,ddr2_emif_tim1_arg,ddr2_emif_tim2_arg,ddr2_emif_tim3_arg,ddr2_emif_ref_ctrl_arg,ddr2_emif_sdram_config_arg);
		Emif1_MMR_Config(ddr2_emif_read_latency_arg,ddr2_emif_tim1_arg,ddr2_emif_tim2_arg,ddr2_emif_tim3_arg,ddr2_emif_ref_ctrl_arg,ddr2_emif_sdram_config_arg);
		
	}
	
	cmd_DDR3_EMIF0_EMIF1_Config(UWORD32 ddr3_phy_0_rd_dqs_cs0_arg,UWORD32 ddr3_phy_0_wr_dqs_cs0_arg,UWORD32 ddr3_phy_0_RD_DQS_GATE_cs0_arg,UWORD32 ddr3_phy_0_wr_data_cs0_arg,UWORD32 ddr3_phy_1_rd_dqs_cs0_arg,UWORD32 ddr3_phy_1_wr_dqs_cs0_arg,UWORD32 ddr3_phy_1_RD_DQS_GATE_cs0_arg,UWORD32 ddr3_phy_1_wr_data_cs0_arg,UWORD32 ddr3_emif_read_latency_arg,UWORD32 ddr3_emif_tim1_arg,UWORD32 ddr3_emif_tim2_arg,UWORD32 ddr3_emif_tim3_arg,UWORD32 ddr3_emif_ref_ctrl_arg,UWORD32 ddr3_emif_sdram_config_arg)
	{
	
		Emif_PRCM_Clk_Enable();
		GEL_TextOut("\tDM814x DDR,DMM PRCM configuration is Done \n");
	
		Cmd_Macro_Config(DDR_PHY0,DDR3_PHY_INVERT_CLKOUT_OFF,DDR3_PHY_CTRL_SLAVE_RATIO_CS0_DEFINE,PHY_CMD0_DLL_LOCK_DIFF_DEFINE);
		Data_Macro_Config(DATA_MACRO_0,DDR_PHY0,ddr3_phy_0_rd_dqs_cs0_arg,ddr3_phy_0_wr_dqs_cs0_arg,ddr3_phy_0_RD_DQS_GATE_cs0_arg,ddr3_phy_0_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_1,DDR_PHY0,ddr3_phy_0_rd_dqs_cs0_arg,ddr3_phy_0_wr_dqs_cs0_arg,ddr3_phy_0_RD_DQS_GATE_cs0_arg,ddr3_phy_0_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_2,DDR_PHY0,ddr3_phy_0_rd_dqs_cs0_arg,ddr3_phy_0_wr_dqs_cs0_arg,ddr3_phy_0_RD_DQS_GATE_cs0_arg,ddr3_phy_0_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_3,DDR_PHY0,ddr3_phy_0_rd_dqs_cs0_arg,ddr3_phy_0_wr_dqs_cs0_arg,ddr3_phy_0_RD_DQS_GATE_cs0_arg,ddr3_phy_0_wr_data_cs0_arg);
	
		Cmd_Macro_Config(DDR_PHY1,DDR3_PHY_INVERT_CLKOUT_OFF,DDR3_PHY_CTRL_SLAVE_RATIO_CS0_DEFINE,PHY_CMD0_DLL_LOCK_DIFF_DEFINE);
		Data_Macro_Config(DATA_MACRO_0,DDR_PHY1,ddr3_phy_1_rd_dqs_cs0_arg,ddr3_phy_1_wr_dqs_cs0_arg,ddr3_phy_1_RD_DQS_GATE_cs0_arg,ddr3_phy_1_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_1,DDR_PHY1,ddr3_phy_1_rd_dqs_cs0_arg,ddr3_phy_1_wr_dqs_cs0_arg,ddr3_phy_1_RD_DQS_GATE_cs0_arg,ddr3_phy_1_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_2,DDR_PHY1,ddr3_phy_1_rd_dqs_cs0_arg,ddr3_phy_1_wr_dqs_cs0_arg,ddr3_phy_1_RD_DQS_GATE_cs0_arg,ddr3_phy_1_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_3,DDR_PHY1,ddr3_phy_1_rd_dqs_cs0_arg,ddr3_phy_1_wr_dqs_cs0_arg,ddr3_phy_1_RD_DQS_GATE_cs0_arg,ddr3_phy_1_wr_data_cs0_arg);
		GEL_TextOut("\tDM814x DDR PHY Configuration is Done \n");
	
		WR_MEM_32(DDR0_IO_CTRL,0x00030303);
		WR_MEM_32(DDR1_IO_CTRL,0x00030303);
		GEL_TextOut("\tDM814x DDR IO Control Configuration is Done \n");
		
		Vtp_Enable();
		GEL_TextOut("\tDM814x VTP Configuration is Done \n");
	
		/*Program the DMM to Access EMIF0 and EMIF1*/
		WR_MEM_32(DMM_LISA_MAP__0, 0x80500200);
		WR_MEM_32(DMM_LISA_MAP__1, 0xA0500200);
		WR_MEM_32(DMM_LISA_MAP__2, 0xC0500100);
		WR_MEM_32(DMM_LISA_MAP__3, 0xE0500100);
			
		while(RD_MEM_32(DMM_LISA_MAP__0)!=0x80500200);
		while(RD_MEM_32(DMM_LISA_MAP__1)!=0xA0500200);
		while(RD_MEM_32(DMM_LISA_MAP__2)!=0xC0500100);
		while(RD_MEM_32(DMM_LISA_MAP__3)!=0xE0500100);
	
		WR_MEM_32(DMM_PAT_BASE_ADDR, 0x80000000);
		GEL_TextOut("\tDM814x DMM LISA register Configuration is Done.\n");
	
		Emif0_MMR_Config(ddr3_emif_read_latency_arg,ddr3_emif_tim1_arg,ddr3_emif_tim2_arg,ddr3_emif_tim3_arg,ddr3_emif_ref_ctrl_arg,ddr3_emif_sdram_config_arg);
		Emif1_MMR_Config(ddr3_emif_read_latency_arg,ddr3_emif_tim1_arg,ddr3_emif_tim2_arg,ddr3_emif_tim3_arg,ddr3_emif_ref_ctrl_arg,ddr3_emif_sdram_config_arg);
		
		/*TODO: put comments if full leveling is not needed*/
		//GEL_TextOut("\tDM814x DMM Leveling Start.\n");
		//WR_MEM_32(EMIF4_1_RDWR_LVL_RMP_CTRL, 0x80000000); //- Bit 31 = 1;
		//WR_MEM_32(EMIF4_1_RDWR_LVL_CTRL, 0x80000000); //- Bit 31 = 1;
		//GEL_TextOut("\tDM814x DMM Leveling Done.\n");
	}

	
	cmd_mDDR_EMIF0_EMIF1_Config(UWORD32 mDDR_phy_rd_dqs_cs0_arg,UWORD32 mDDR_phy_wr_dqs_cs0_arg,UWORD32 mDDR_phy_RD_DQS_GATE_cs0_arg,UWORD32 mDDR_phy_wr_data_cs0_arg,UWORD32 mDDR_emif_read_latency_arg,UWORD32 mDDR_emif_tim1_arg,UWORD32 mDDR_emif_tim2_arg,UWORD32 mDDR_emif_tim3_arg,UWORD32 mDDR_emif_ref_ctrl_arg,UWORD32 mDDR_emif_sdram_config_arg)
	{
		UWORD32 i;
		Emif_PRCM_Clk_Enable();
	
		Cmd_Macro_Config(DDR_PHY0,PHY_INVERT_CLKOUT_DEFINE,mDDR_PHY_CTRL_SLAVE_RATIO_CS0_DEFINE,PHY_CMD0_DLL_LOCK_DIFF_DEFINE);
		Data_Macro_Config(DATA_MACRO_0,ddr_phy0,mDDR_phy_rd_dqs_cs0_arg,mDDR_phy_wr_dqs_cs0_arg,mDDR_phy_RD_DQS_GATE_cs0_arg,mDDR_phy_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_1,ddr_phy0,mDDR_phy_rd_dqs_cs0_arg,mDDR_phy_wr_dqs_cs0_arg,mDDR_phy_RD_DQS_GATE_cs0_arg,mDDR_phy_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_2,ddr_phy0,mDDR_phy_rd_dqs_cs0_arg,mDDR_phy_wr_dqs_cs0_arg,mDDR_phy_RD_DQS_GATE_cs0_arg,mDDR_phy_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_3,ddr_phy0,mDDR_phy_rd_dqs_cs0_arg,mDDR_phy_wr_dqs_cs0_arg,mDDR_phy_RD_DQS_GATE_cs0_arg,mDDR_phy_wr_data_cs0_arg);
	
		Cmd_Macro_Config(DDR_PHY1,PHY_INVERT_CLKOUT_DEFINE,mDDR_PHY_CTRL_SLAVE_RATIO_CS0_DEFINE,PHY_CMD0_DLL_LOCK_DIFF_DEFINE);
		Data_Macro_Config(DATA_MACRO_0,ddr_phy1,mDDR_phy_rd_dqs_cs0_arg,mDDR_phy_wr_dqs_cs0_arg,mDDR_phy_RD_DQS_GATE_cs0_arg,mDDR_phy_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_1,ddr_phy1,mDDR_phy_rd_dqs_cs0_arg,mDDR_phy_wr_dqs_cs0_arg,mDDR_phy_RD_DQS_GATE_cs0_arg,mDDR_phy_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_2,ddr_phy1,mDDR_phy_rd_dqs_cs0_arg,mDDR_phy_wr_dqs_cs0_arg,mDDR_phy_RD_DQS_GATE_cs0_arg,mDDR_phy_wr_data_cs0_arg);
		Data_Macro_Config(DATA_MACRO_3,ddr_phy1,mDDR_phy_rd_dqs_cs0_arg,mDDR_phy_wr_dqs_cs0_arg,mDDR_phy_RD_DQS_GATE_cs0_arg,mDDR_phy_wr_data_cs0_arg);
	
		WR_MEM_32(DATA0_REG_PHY0_USE_RANK0_DELAYS,    mDDR_PHY_REG_USE_RANK0_DELAY_DEFINE);
		WR_MEM_32(DATA1_REG_PHY0_USE_RANK0_DELAYS,    mDDR_PHY_REG_USE_RANK0_DELAY_DEFINE);
		WR_MEM_32(DATA2_REG_PHY0_USE_RANK0_DELAYS,    mDDR_PHY_REG_USE_RANK0_DELAY_DEFINE);
		WR_MEM_32(DATA3_REG_PHY0_USE_RANK0_DELAYS,    mDDR_PHY_REG_USE_RANK0_DELAY_DEFINE);
		
		WR_MEM_32(DATA0_REG_PHY1_USE_RANK0_DELAYS,    mDDR_PHY_REG_USE_RANK0_DELAY_DEFINE);
		WR_MEM_32(DATA1_REG_PHY1_USE_RANK0_DELAYS,    mDDR_PHY_REG_USE_RANK0_DELAY_DEFINE);
		WR_MEM_32(DATA2_REG_PHY1_USE_RANK0_DELAYS,    mDDR_PHY_REG_USE_RANK0_DELAY_DEFINE);	
		WR_MEM_32(DATA3_REG_PHY1_USE_RANK0_DELAYS,    mDDR_PHY_REG_USE_RANK0_DELAY_DEFINE);	
	
		WR_MEM_32(DDR0_IO_CTRL,0x10030303);
		WR_MEM_32(DDR1_IO_CTRL,0x10030303);
	
		Vtp_Enable();
	
		/*Program the DMM to Access EMIF0 and EMIF1*/
		WR_MEM_32(DMM_LISA_MAP__0, 0x80500100);
		WR_MEM_32(DMM_LISA_MAP__1, 0x80500100);
		WR_MEM_32(DMM_LISA_MAP__2, 0xC0500200);
		WR_MEM_32(DMM_LISA_MAP__3, 0xC0500200);
			
		while(RD_MEM_32(DMM_LISA_MAP__0)!=0x80500100);
		while(RD_MEM_32(DMM_LISA_MAP__1)!=0x80500100);
		while(RD_MEM_32(DMM_LISA_MAP__2)!=0xC0500200);
		while(RD_MEM_32(DMM_LISA_MAP__3)!=0xC0500200);
	
		WR_MEM_32(DMM_PAT_BASE_ADDR, 0x80000000);
	
		Emif0_MMR_Config(mDDR_emif_read_latency_arg,mDDR_emif_tim1_arg,mDDR_emif_tim2_arg,mDDR_emif_tim3_arg,mDDR_emif_ref_ctrl_arg,mDDR_emif_sdram_config_arg);
		Emif1_MMR_Config(mDDR_emif_read_latency_arg,mDDR_emif_tim1_arg,mDDR_emif_tim2_arg,mDDR_emif_tim3_arg,mDDR_emif_ref_ctrl_arg,mDDR_emif_sdram_config_arg);
	}
	

	
	
	Data_Macro_Config(UWORD32 dataMacroNum,UWORD32 ddr_phy_num,UWORD32 rd_dqs_cs0,UWORD32 wr_dqs_cs0,UWORD32 RD_DQS_GATE_cs0,UWORD32 wr_data_cs0)
	{
	UWORD32 BaseAddrOffset;
		if(dataMacroNum == DATA_MACRO_0)
			BaseAddrOffset = 0x00;
		else if(dataMacroNum == DATA_MACRO_1)
			BaseAddrOffset = 0xA4;
		else if(dataMacroNum == DATA_MACRO_2)
			BaseAddrOffset = 0x148;
		else if(dataMacroNum == DATA_MACRO_3)
			BaseAddrOffset = 0x1EC;
		if(ddr_phy_num == DDR_PHY1)
			BaseAddrOffset = BaseAddrOffset + 0x400;//- phy1 is at offset of 0x400 from phy0
	
		WR_MEM_32((DATA0_REG_PHY0_RD_DQS_SLAVE_RATIO_0 + BaseAddrOffset), (rd_dqs_cs0 << 10 | rd_dqs_cs0)); 
		WR_MEM_32((DATA0_REG_PHY0_WR_DQS_SLAVE_RATIO_0 + BaseAddrOffset), (wr_dqs_cs0 << 10 | wr_dqs_cs0));
		WR_MEM_32((DATA0_REG_PHY0_WRLVL_INIT_RATIO_0 + BaseAddrOffset),   (PHY_WRLVL_INIT_CS1_DEFINE << 10  | PHY_WRLVL_INIT_CS0_DEFINE));
		WR_MEM_32((DATA0_REG_PHY0_GATELVL_INIT_RATIO_0 + BaseAddrOffset), (PHY_GATELVL_INIT_CS1_DEFINE << 10 | PHY_GATELVL_INIT_CS0_DEFINE));
		WR_MEM_32((DATA0_REG_PHY0_RD_DQS_GATE_SLAVE_RATIO_0 + BaseAddrOffset),(RD_DQS_GATE_cs0 << 10  | RD_DQS_GATE_cs0)); 
		WR_MEM_32((DATA0_REG_PHY0_WR_DATA_SLAVE_RATIO_0 + BaseAddrOffset),(wr_data_cs0 << 10 | wr_data_cs0)); 
		//-WR_MEM_32((DATA0_REG_PHY0_USE_RANK0_DELAYS + BaseAddrOffset),     PHY_REG_USE_RANK0_DELAY_DEFINE);//- default is 0; for mDDR need to set as 1
		WR_MEM_32((DATA0_REG_PHY0_DLL_LOCK_DIFF_0 + BaseAddrOffset),      PHY_DLL_LOCK_DIFF_DEFINE);
	}
	
	Cmd_Macro_Config(UWORD32 ddr_phy_num,UWORD32 invert_clk_out,UWORD32 ctrl_slave_ratio_cs0,UWORD32 cmd_dll_lock_diff)
	{
		if(ddr_phy_num == DDR_PHY0)
		{
		WR_MEM_32(CMD0_REG_PHY0_INVERT_CLKOUT_0, invert_clk_out);
		WR_MEM_32(CMD1_REG_PHY0_INVERT_CLKOUT_0, invert_clk_out);
		WR_MEM_32(CMD2_REG_PHY0_INVERT_CLKOUT_0, invert_clk_out);
	
		WR_MEM_32(CMD0_REG_PHY0_CTRL_SLAVE_RATIO_0,(ctrl_slave_ratio_cs0 << 10 | ctrl_slave_ratio_cs0)); 
		WR_MEM_32(CMD1_REG_PHY0_CTRL_SLAVE_RATIO_0,(ctrl_slave_ratio_cs0 << 10 | ctrl_slave_ratio_cs0)); 
		WR_MEM_32(CMD2_REG_PHY0_CTRL_SLAVE_RATIO_0,(ctrl_slave_ratio_cs0 << 10 | ctrl_slave_ratio_cs0)); 
	
		WR_MEM_32(CMD0_REG_PHY0_DLL_LOCK_DIFF_0,cmd_dll_lock_diff);
		WR_MEM_32(CMD1_REG_PHY0_DLL_LOCK_DIFF_0,cmd_dll_lock_diff);
		WR_MEM_32(CMD2_REG_PHY0_DLL_LOCK_DIFF_0,cmd_dll_lock_diff);
		}
		else if(ddr_phy_num == DDR_PHY1)
		{
			WR_MEM_32(CMD0_REG_PHY1_INVERT_CLKOUT_0, invert_clk_out);
			WR_MEM_32(CMD1_REG_PHY1_INVERT_CLKOUT_0, invert_clk_out);
			WR_MEM_32(CMD2_REG_PHY1_INVERT_CLKOUT_0, invert_clk_out);
		
			WR_MEM_32(CMD0_REG_PHY1_CTRL_SLAVE_RATIO_0,(ctrl_slave_ratio_cs0 << 10 | ctrl_slave_ratio_cs0)); 
			WR_MEM_32(CMD1_REG_PHY1_CTRL_SLAVE_RATIO_0,(ctrl_slave_ratio_cs0 << 10 | ctrl_slave_ratio_cs0)); 
			WR_MEM_32(CMD2_REG_PHY1_CTRL_SLAVE_RATIO_0,(ctrl_slave_ratio_cs0 << 10 | ctrl_slave_ratio_cs0)); 
		
			WR_MEM_32(CMD0_REG_PHY1_DLL_LOCK_DIFF_0,cmd_dll_lock_diff);
			WR_MEM_32(CMD1_REG_PHY1_DLL_LOCK_DIFF_0,cmd_dll_lock_diff);
			WR_MEM_32(CMD2_REG_PHY1_DLL_LOCK_DIFF_0,cmd_dll_lock_diff);
		}
	}
	
	
	Emif0_MMR_Config(UWORD32 read_latency,UWORD32 tim1,UWORD32 tim2,UWORD32 tim3,UWORD32 ref_ctrl,UWORD32 sdram_config)
	{
		/*Program EMIF0 CFG Registers*/
		WR_MEM_32(EMIF4_0_DDR_PHY_CTRL_1, read_latency);
		WR_MEM_32(EMIF4_0_DDR_PHY_CTRL_1_SHADOW, read_latency);
	
		WR_MEM_32(EMIF4_0_SDRAM_TIM_1, tim1);
		WR_MEM_32(EMIF4_0_SDRAM_TIM_1_SHADOW, tim1);
	
		WR_MEM_32(EMIF4_0_SDRAM_TIM_2, tim2);
		WR_MEM_32(EMIF4_0_SDRAM_TIM_2_SHADOW, tim2);
	
		WR_MEM_32(EMIF4_0_SDRAM_TIM_3, tim3);
		WR_MEM_32(EMIF4_0_SDRAM_TIM_3_SHADOW, tim3);
	
		WR_MEM_32(EMIF4_0_SDRAM_CONFIG, sdram_config);
	
		WR_MEM_32(EMIF4_0_SDRAM_REF_CTRL, 0x10000000|DDR3_EMIF_REF_CTRL_DEFINE1); 
		WR_MEM_32(EMIF4_0_SDRAM_REF_CTRL_SHADOW, DDR3_EMIF_REF_CTRL_DEFINE1);
		
		WR_MEM_32(EMIF4_0_SDRAM_ZQCR,DDR3_EMIF_SDRAM_ZQCR_DEFINE);
		
		WR_MEM_32(EMIF4_0_SDRAM_REF_CTRL, DDR3_EMIF_REF_CTRL_DEFINE1); 
		WR_MEM_32(EMIF4_0_SDRAM_REF_CTRL_SHADOW, DDR3_EMIF_REF_CTRL_DEFINE1);
	
		WR_MEM_32(EMIF4_0_SDRAM_REF_CTRL, ref_ctrl); 
		WR_MEM_32(EMIF4_0_SDRAM_REF_CTRL_SHADOW, ref_ctrl);
	}
	
	Emif1_MMR_Config(UWORD32 read_latency,UWORD32 tim1,UWORD32 tim2,UWORD32 tim3,UWORD32 ref_ctrl,UWORD32 sdram_config)
	{
		/*Program EMIF0 CFG Registers*/
		WR_MEM_32(EMIF4_1_DDR_PHY_CTRL_1, read_latency);
		WR_MEM_32(EMIF4_1_DDR_PHY_CTRL_1_SHADOW, read_latency);
	
		WR_MEM_32(EMIF4_1_SDRAM_TIM_1, tim1);
		WR_MEM_32(EMIF4_1_SDRAM_TIM_1_SHADOW, tim1);
	
		WR_MEM_32(EMIF4_1_SDRAM_TIM_2, tim2);
		WR_MEM_32(EMIF4_1_SDRAM_TIM_2_SHADOW, tim2);
	
		WR_MEM_32(EMIF4_1_SDRAM_TIM_3, tim3);
		WR_MEM_32(EMIF4_1_SDRAM_TIM_3_SHADOW, tim3);
	
		
		WR_MEM_32(EMIF4_1_SDRAM_CONFIG, sdram_config);
		
		WR_MEM_32(EMIF4_1_SDRAM_REF_CTRL, 0x10000000|DDR3_EMIF_REF_CTRL_DEFINE1); 
		WR_MEM_32(EMIF4_1_SDRAM_REF_CTRL_SHADOW, DDR3_EMIF_REF_CTRL_DEFINE1);
		
		WR_MEM_32(EMIF4_1_SDRAM_ZQCR,DDR3_EMIF_SDRAM_ZQCR_DEFINE);
		
		WR_MEM_32(EMIF4_1_SDRAM_REF_CTRL, DDR3_EMIF_REF_CTRL_DEFINE1); 
		WR_MEM_32(EMIF4_1_SDRAM_REF_CTRL_SHADOW, DDR3_EMIF_REF_CTRL_DEFINE1);
	
		WR_MEM_32(EMIF4_1_SDRAM_REF_CTRL, ref_ctrl); 
		WR_MEM_32(EMIF4_1_SDRAM_REF_CTRL_SHADOW, ref_ctrl);
	}
	
	
	Emif_PRCM_Clk_Enable()
	{
		WR_MEM_32(CM_DEFAULT_FW_CLKCTRL, 0x2); 		  /*Enable the EMIF FireWall Clocks*/
		WR_MEM_32(CM_DEFAULT_L3_FAST_CLKSTCTRL, 0x2); /*Enable the Power Domain Transition of L3 Fast Domain Peripheral*/
		WR_MEM_32(CM_DEFAULT_EMIF_0_CLKCTRL,    0x2); /*Enable EMIF0 Clock*/
		WR_MEM_32(CM_DEFAULT_EMIF_1_CLKCTRL,    0x2); /*Enable EMIF1 Clock*/
		WR_MEM_32(CM_DEFAULT_DMM_CLKCTRL,       0x2); /*Enable EMIF1 Clock*/
		while((RD_MEM_32(CM_DEFAULT_L3_FAST_CLKSTCTRL) & 0x300)!=0x300);	/*Poll for L3_FAST_GCLK  & DDR_GCLK  are active*/
		while(RD_MEM_32(CM_DEFAULT_EMIF_0_CLKCTRL)!=0x2);		/*Poll for Module is functional*/
		while(RD_MEM_32(CM_DEFAULT_EMIF_1_CLKCTRL)!=0x2);		/*Poll for Module is functional*/
		while(RD_MEM_32(CM_DEFAULT_DMM_CLKCTRL)!=0x2);			/*Poll for Module is functional*/
	}
	
	Vtp_Enable()
	{
		// Write 1 to ENABLE bit
		WR_MEM_32(VTP0_CTRL_REG, RD_MEM_32(VTP0_CTRL_REG) | 0x00000040 ); 
		WR_MEM_32(VTP1_CTRL_REG, RD_MEM_32(VTP1_CTRL_REG) | 0x00000040 ); 
	
		// Write 0 to CLRZ bit
		WR_MEM_32(VTP0_CTRL_REG, RD_MEM_32(VTP0_CTRL_REG) & 0xfffffffe ); 
		WR_MEM_32(VTP1_CTRL_REG, RD_MEM_32(VTP1_CTRL_REG) & 0xfffffffe ); 
		
		// Write 1 to CLRZ bit
		WR_MEM_32(VTP0_CTRL_REG, RD_MEM_32(VTP0_CTRL_REG) | 0x00000001 ); 
		WR_MEM_32(VTP1_CTRL_REG, RD_MEM_32(VTP1_CTRL_REG) | 0x00000001 ); 
	
		// Read VTP control registers & check READY bits
		while( (RD_MEM_32(VTP0_CTRL_REG) & 0x00000020) != 0x20);
		while( (RD_MEM_32(VTP1_CTRL_REG) & 0x00000020) != 0x20);
	}


	/********************************************************************************
            DDR Initialization and Configurations   		
    *********************************************************************************/

   menuitem "TIDM814x DDR Configuration"
   

	hotmenu DDR2_EMIF0_EMIF1_333MHz_Config()
	{
		cmdDDRPLL(CLKIN,19,666, 2);	  
		GEL_TextOut("\tDM814x DDR2 EVM EMIF0 and EMIF1 configuration in progress......... \n");
		cmd_DDR2_EMIF0_EMIF1_Config(DDR2_PHY_0_RD_DQS_CS0_DEFINE,DDR2_PHY_0_WR_DQS_CS0_DEFINE,DDR2_PHY_0_RD_DQS_GATE_CS0_DEFINE,DDR2_PHY_0_WR_DATA_CS0_DEFINE,DDR2_PHY_1_RD_DQS_CS0_DEFINE,DDR2_PHY_1_WR_DQS_CS0_DEFINE,DDR2_PHY_1_RD_DQS_GATE_CS0_DEFINE,DDR2_PHY_1_WR_DATA_CS0_DEFINE,DDR2_EMIF_DDRPHYCR_DEFINE,DDR2_EMIF_TIM1_DEFINE,DDR2_EMIF_TIM2_DEFINE,DDR2_EMIF_TIM3_DEFINE,DDR2_EMIF_REF_CTRL_DEFINE,DDR2_EMIF_SDRAM_CONFIG_DEFINE);
		GEL_TextOut("\tDM814x DDR2 EVM EMIF0 and EMIF1 configuration is DONE. \n");	
	}

	hotmenu DDR2_EMIF0_EMIF1_400MHz_Config()
	{
		cmdDDRPLL(CLKIN,19,800, 2);
		GEL_TextOut("\tDM814x DDR2 EVM EMIF0 and EMIF1 configuration in progress......... \n");
		cmd_DDR2_EMIF0_EMIF1_Config(DDR2_PHY_0_RD_DQS_CS0_DEFINE,DDR2_PHY_0_WR_DQS_CS0_DEFINE,DDR2_PHY_0_RD_DQS_GATE_CS0_DEFINE,DDR2_PHY_0_WR_DATA_CS0_DEFINE,DDR2_PHY_1_RD_DQS_CS0_DEFINE,DDR2_PHY_1_WR_DQS_CS0_DEFINE,DDR2_PHY_1_RD_DQS_GATE_CS0_DEFINE,DDR2_PHY_1_WR_DATA_CS0_DEFINE,DDR2_EMIF_DDRPHYCR_DEFINE,DDR2_EMIF_TIM1_DEFINE,DDR2_EMIF_TIM2_DEFINE,DDR2_EMIF_TIM3_DEFINE,DDR2_EMIF_REF_CTRL_DEFINE,DDR2_EMIF_SDRAM_CONFIG_DEFINE);
		GEL_TextOut("\tDM814x DDR2 EVM EMIF0 and EMIF1 configuration is DONE. \n");	
	}

	hotmenu DDR3_EMIF0_EMIF1_300MHz_Config()
	{
		cmdDDRPLL(CLKIN,19,600, 2);
		GEL_TextOut("\tDM814x DDR3 EVM EMIF0 and EMIF1 configuration in progress......... \n");	
		cmd_DDR3_EMIF0_EMIF1_Config(DDR3_PHY_0_RD_DQS_CS0_DEFINE,DDR3_PHY_0_WR_DQS_CS0_DEFINE,DDR3_PHY_0_RD_DQS_GATE_CS0_DEFINE,DDR3_PHY_0_WR_DATA_CS0_DEFINE,DDR3_PHY_1_RD_DQS_CS0_DEFINE,DDR3_PHY_1_WR_DQS_CS0_DEFINE,DDR3_PHY_1_RD_DQS_GATE_CS0_DEFINE,DDR3_PHY_1_WR_DATA_CS0_DEFINE,DDR3_EMIF_DDRPHYCR_DEFINE_300,DDR3_EMIF_TIM1_DEFINE_300,DDR3_EMIF_TIM2_DEFINE_300,DDR3_EMIF_TIM3_DEFINE_300,DDR3_EMIF_REF_CTRL_DEFINE2_300,DDR3_EMIF_SDRAM_CONFIG_DEFINE_300);
		GEL_TextOut("\tDM814x DDR3 EVM EMIF0 and EMIF1 configuration is DONE. \n");		
	}

		hotmenu DDR3_EMIF0_EMIF1_333MHz_Config()
	{
		cmdDDRPLL(CLKIN,19,666, 2);
		GEL_TextOut("\tDM814x DDR3 EVM EMIF0 and EMIF1 configuration in progress......... \n");	
		cmd_DDR3_EMIF0_EMIF1_Config(DDR3_PHY_0_RD_DQS_CS0_DEFINE,DDR3_PHY_0_WR_DQS_CS0_DEFINE,DDR3_PHY_0_RD_DQS_GATE_CS0_DEFINE,DDR3_PHY_0_WR_DATA_CS0_DEFINE,DDR3_PHY_1_RD_DQS_CS0_DEFINE,DDR3_PHY_1_WR_DQS_CS0_DEFINE,DDR3_PHY_1_RD_DQS_GATE_CS0_DEFINE,DDR3_PHY_1_WR_DATA_CS0_DEFINE,DDR3_EMIF_DDRPHYCR_DEFINE_333,DDR3_EMIF_TIM1_DEFINE_333,DDR3_EMIF_TIM2_DEFINE_333,DDR3_EMIF_TIM3_DEFINE_333,DDR3_EMIF_REF_CTRL_DEFINE2_333,DDR3_EMIF_SDRAM_CONFIG_DEFINE_333);
		GEL_TextOut("\tDM814x DDR3 EVM EMIF0 and EMIF1 configuration is DONE. \n");		
	}
	hotmenu DDR3_EMIF0_EMIF1_400MHz_Config()
	{
		cmdDDRPLL(CLKIN,19,800, 2);
		GEL_TextOut("\tDM814x DDR3 EVM EMIF0 and EMIF1 configuration in progress......... \n");
		cmd_DDR3_EMIF0_EMIF1_Config(DDR3_PHY_0_RD_DQS_CS0_DEFINE,DDR3_PHY_0_WR_DQS_CS0_DEFINE,DDR3_PHY_0_RD_DQS_GATE_CS0_DEFINE,DDR3_PHY_0_WR_DATA_CS0_DEFINE,DDR3_PHY_1_RD_DQS_CS0_DEFINE,DDR3_PHY_1_WR_DQS_CS0_DEFINE,DDR3_PHY_1_RD_DQS_GATE_CS0_DEFINE,DDR3_PHY_1_WR_DATA_CS0_DEFINE,DDR3_EMIF_DDRPHYCR_DEFINE_400,DDR3_EMIF_TIM1_DEFINE_400,DDR3_EMIF_TIM2_DEFINE_400,DDR3_EMIF_TIM3_DEFINE_400,DDR3_EMIF_REF_CTRL_DEFINE2_400,DDR3_EMIF_SDRAM_CONFIG_DEFINE_400);
		GEL_TextOut("\tDM814x DDR3 EVM EMIF0 and EMIF1 configuration is DONE. \n");	
	}
	hotmenu DDR3_EMIF0_EMIF1_450MHz_Config()
	{
		cmdDDRPLL(CLKIN,19,900, 2);
		GEL_TextOut("\tDM814x DDR3 EVM EMIF0 and EMIF1 configuration in progress......... \n");	
		cmd_DDR3_EMIF0_EMIF1_Config(DDR3_PHY_0_RD_DQS_CS0_DEFINE,DDR3_PHY_0_WR_DQS_CS0_DEFINE,DDR3_PHY_0_RD_DQS_GATE_CS0_DEFINE,DDR3_PHY_0_WR_DATA_CS0_DEFINE,DDR3_PHY_1_RD_DQS_CS0_DEFINE,DDR3_PHY_1_WR_DQS_CS0_DEFINE,DDR3_PHY_1_RD_DQS_GATE_CS0_DEFINE,DDR3_PHY_1_WR_DATA_CS0_DEFINE,DDR3_EMIF_DDRPHYCR_DEFINE_450,DDR3_EMIF_TIM1_DEFINE_450,DDR3_EMIF_TIM2_DEFINE_450,DDR3_EMIF_TIM3_DEFINE_450,DDR3_EMIF_REF_CTRL_DEFINE2_450,DDR3_EMIF_SDRAM_CONFIG_DEFINE_450);
		GEL_TextOut("\tDM814x DDR3 EVM EMIF0 and EMIF1 configuration is DONE. \n");		
	}
	hotmenu DDR3_EMIF0_EMIF1_533MHz_Config()
	{
		cmdDDRPLL(CLKIN,19,1066, 2);
		GEL_TextOut("\tDM814x DDR3 EVM EMIF0 and EMIF1 configuration in progress......... \n");
		cmd_DDR3_EMIF0_EMIF1_Config(DDR3_PHY_0_RD_DQS_CS0_DEFINE,DDR3_PHY_0_WR_DQS_CS0_DEFINE,DDR3_PHY_0_RD_DQS_GATE_CS0_DEFINE,DDR3_PHY_0_WR_DATA_CS0_DEFINE,DDR3_PHY_1_RD_DQS_CS0_DEFINE,DDR3_PHY_1_WR_DQS_CS0_DEFINE,DDR3_PHY_1_RD_DQS_GATE_CS0_DEFINE,DDR3_PHY_1_WR_DATA_CS0_DEFINE,DDR3_EMIF_DDRPHYCR_DEFINE_533,DDR3_EMIF_TIM1_DEFINE_533,DDR3_EMIF_TIM2_DEFINE_533,DDR3_EMIF_TIM3_DEFINE_533,DDR3_EMIF_REF_CTRL_DEFINE2_533,DDR3_EMIF_SDRAM_CONFIG_DEFINE_533);
		GEL_TextOut("\tDM814x DDR3 EVM EMIF0 and EMIF1 configuration is DONE. \n");	
	}



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

with the hotmenue command DDR3_400 in CCS 4.2.5 to configure the DDR3 Controller.

Currently EMIF0 looks like it isn't accessible at all,but EMIF1 looks like it works. So we are concentrating on getting EMIF1 fully functional right now.
After executing the DDR3_400 config command, we execute a simple pattern program to check what happens at certain memory locations (read=written?,...)

What we observe is that every 4KiB we get a mirror effect (e.g. val @0x80000000 = val  0x80001000, val @0x80002000 = val  0x80003000,...).

At the moment we're stuck at this point, but we think our register configurations are correct or I least we couldn't find an error in those.

We use the following RAM: MT41J128M16-125 (Micron).

0513.Micron_2Gb_DDR3_SDRAM.pdf

Thanks in advance for your ideas and suggestions.

Regards, Markus

  • Hi,

    I use exactly same RAM as Markus, 4x 253MB, MT41J128M16-125 except using DM8167 instead of DM8168 And I got the following no matter I use the .gel file above or mine, error message as follow:

    CortexA8: Trouble Writing Memory Block at 0x4c000010 on Page 0 of Length 0x4: (Error -2130 @ 0x4C000010) Unable to access device memory. Verify that the memory address is in valid memory. If error persists, confirm configuration, power-cycle board, and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 5.0.791.0) 

    Please help, thanks.

    Best Regards,

    Mike

  • Have you looked up what register/memory is behind that address? Such an error happens if either this address is not used by any module in the processor or the clock region/module has not been activated. Thus a r/w request to that address will run into timeout/exception.

    Btw. we have solved our problem.  It was just a misinterpretation of the page size definitions of TI/Micron.

    Kind Regards,

    Markus

  • Hi Markus,

    Thanks, that is the address of the SDRAM_REF_CTRL register. Should always be accessible.

    I also check and update the page size config but still got problem.

    Best Regards,

    Mike

  • Markus,

    We are using the same 2GB x 16 Micron parts but are seeing very erratic behavior on the upper 16 bit parts on both EMIF interfaces.  Can you post your GEL file settings for the DDR configuration?  I'm not sure if are having register configuration issues or hardware issues.  Based on your post I will look at the page size definitions but any guidance you might have would be greatly appreciated!  

    Thanks,

    Roz