program_evm: update k2e gel dos2unix conversion DEV.MCSDK-03.01.00.03B
authorSam Nelson <sam.nelson@ti.com>
Thu, 7 Aug 2014 18:19:18 +0000 (14:19 -0400)
committerSam Nelson <sam.nelson@ti.com>
Thu, 7 Aug 2014 18:19:18 +0000 (14:19 -0400)
- Updated README

Signed-off-by: Sam Nelson <sam.nelson@ti.com>
program_evm/gel/README.txt
program_evm/gel/evmk2e.gel

index decdcb08ed794ee30aa503d300d7f44e9473ca15..c2849983e6e3abaf842e6e4885a60e7d1e048da1 100644 (file)
@@ -1,15 +1,11 @@
-Steps to update GELs for C66x EVMs
+Notes regarding program-evm
 ----------------------------------
 
-1: There are one or more GEL files provided in this directory
+1: There are one or more GEL files provided in this directory. The gels are specifically meant for 
+   Program evm and not recommended to be use for other debugging purposes
 
-2: These GEL files needs to be copied to CCS installation
+2: The Program EVM  assume the CCS is installed in <CCS_INSTALL_DIR> (which is typically C:\Program Files\Texas Instruments\ccsv5 for Windows XP and ~/ti/ccsv5 for Linux)
 
-3: The following steps will assume the CCS is installed in <CCS_INSTALL_DIR> (which is typically C:\Program Files\Texas Instruments\ccsv5 for Windows XP and ~/ti/ccsv5 for Linux)
+3: Close CCS if open
 
-4: Close CCS if open
-
-5: Replace the GEL file present in the <CCS_INSTALL_DIR>/ccs_base/emulation/boards/<BOARD_NAME>/gel directory with the <BOARD_NAME>.gel file present in this directory
-
-6: Repeat step 5 for all gel files present in this directory
 
index 329dcc04031663e42801ba986a9e2122f5f4fe2e..7f52d83aa8f670c9ae8dd21157bca728d093af8f 100644 (file)
-/******************************************************************************\r
- * Copyright (c) 2012 Texas Instruments Incorporated - http://www.ti.com\r
- * \r
- *  Redistribution and use in source and binary forms, with or without \r
- *  modification, are permitted provided that the following conditions \r
- *\r
- *  are met:\r
- *\r
- *    Redistributions of source code must retain the above copyright \r
- *    notice, this list of conditions and the following disclaimer.\r
- *\r
- *\r
- *    Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the     \r
- *    documentation and/or other materials provided with the   \r
- *\r
- *    distribution.\r
- *\r
- *\r
- *    Neither the name of Texas Instruments Incorporated nor the names of\r
- *    its contributors may be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- *\r
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
- *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
- *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
- *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
- *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
- *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
- *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
- *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
- *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- * \r
- *****************************************************************************\r
- *\r
- *  Filename:          evmtci6638k2k.gel\r
- *  Description:       Utility GEL for use with the TCI6638K2K EVM. This GEL has \r
- *                                             functions that initialize the chip PLL's and the DDR3A  interfaces. \r
- *                                             \r
- *                                             It also includes general utilities that are useful for EVM development\r
- *                       \r
- *                     More functions will be added as needed. \r
- *       \r
- *     Author: Randy Rosales                 \r
- *     Revision History: \r
- *\r
- *     Revision 0.1\r
- *     -       Initial revision based on the Kepler VDB GEL 32bit_DDR-800_Kepler_PLL_and_DDR3_Init_Silicon_Rev15.gel put together for Kepler bringup by Pragna Paranji\r
- *  -  Added in GEL system clock frequency estimation functions written by WenZhong Liu to help debug core PLL instability\r
- *             +       dspPollDSPClockFreq will estimate the clock based on a comparison with windows system clock time\r
- *   Revision 0.2 - pparanji\r
- *       - Added DDR3A  memory test capabilities.\r
- *     Revision 0.3 - pparanji\r
- *      - Added the following configurations\r
- *          DDR3A 32bit - DDR800, DDR1066, DDR1333\r
- *              \r
- *              DSP core PLL @ 122.88 MHz to 614.4 MHz operation \r
- *                                             122.88 MHz to 737.28 MHz operation \r
- *                                             122.88 MHz to 983.04 MHz operation \r
- *                                             122.88 MHz  to 1.2 GHz operation \r
- *                                             122.88 MHz  to 1.2 GHz operation \r
- *                                             \r
- *              ARM PLL @              100 MHz to 1.0 GHz operation \r
- *                                             100 MHz to 1.4 GHz operation \r
- *                                             175 MHz to 1.4 GHz operation \r
- *       Rev 1.2 -  - pparanji\r
- *       ------ Updates  DDR3A  to single rank configurations\r
- *       Rev 1.3 - pparanji\r
- *       ------  Updated timing on DDR3A-1066 and DDR3A-1333\r
- *     Rev 1.4 - csmith\r
- *     ------  Updated PA PLL config and Tetris PLL config\r
- *\r
- ---------------------------------------------------------------------------*/\r
-\r
-#define GEL_VERSION         1.0\r
-\r
-// Timeout definitions\r
-int _GEL_Global_Timeout1 = 0;\r
-\r
-#define TIMEOUT_ID 10\r
-// Global timeout value\r
-#define GTIMEOUT 2000\r
-//*****************************************************\r
-// Power definitions\r
-#define PSC_BASE            0x02350000\r
-#define PSC_PTCMD           *( unsigned int* )( PSC_BASE+0x120 )\r
-#define PSC_PTSTAT          *( unsigned int* )( PSC_BASE+0x128 )\r
-#define PSC_PDCTL_BASE      ( PSC_BASE+0x300 )\r
-#define PSC_MDSTAT_BASE     ( PSC_BASE+0x800 )\r
-#define PSC_MDCTL_BASE      ( PSC_BASE+0xA00 )\r
-\r
-// Modules on power domain 0\r
-// Always on\r
-// Modules on power domain 0\r
-#define LPSC_TSIP      (4)     \r
-// Modules on power domain 1\r
-#define LPSC_DEBUG     (5)\r
-#define LPSC_TETB      (6)     \r
-\r
-// Modules on power domain 2\r
-#define LPSC_PA        (7)\r
-#define LPSC_SGMII     (8)\r
-#define LPSC_SA        (9)\r
-\r
-// Modules on power domain 3\r
-#define LPSC_PCIE      (10)\r
-\r
-\r
-// Modules on power domain 5\r
-#define LPSC_HYPERLINK     (12)\r
-\r
-// Modules on power domain 6\r
-#define LPSC_SR     (13)\r
-\r
-// Modules on power domain 7\r
-#define LPSC_MSMCRAM   (14)\r
-\r
-// Modules on power domain 8\r
-#define LPSC_C66X_COREPAC_0   (15)\r
-\r
-// Modules on power domain 16\r
-#define LPSC_DDR3_0      (23)\r
-\r
-// Modules on power domain 18\r
-#define LPSC_PCIE_1      (27)\r
-\r
-// Modules on power domain 29\r
-#define LPSC_XGE     (50)              \r
-\r
-// Modules on power domain 31\r
-#define LPSC_ARM    (52)\r
-\r
-\r
-// Power domains definitions\r
-#define PD0         (0)     // Power Domain-0\r
-#define PD1         (1)     // Power Domain-1\r
-#define PD2         (2)     // Power Domain-2\r
-#define PD3         (3)     // Power Domain-3\r
-#define PD5         (5)     // Power Domain-5\r
-#define PD6         (6)     // Power Domain-6\r
-#define PD7         (7)     // Power Domain-7\r
-#define PD8         (8)     // Power Domain-8\r
-#define PD16        (16)    // Power Domain-16\r
-#define PD18        (18)    // Power Domain-18\r
-#define PD29        (29)    // Power Domain-29\r
-#define PD31        (31)    // Power Domain-31\r
-\r
-#define PSC_SYNCRESET (0x1)\r
-#define PSC_DISABLE   (0x2)\r
-#define PSC_ENABLE    (0x3)\r
-\r
-#define CHIP_LEVEL_REG              0x02620000\r
-\r
-/******************* PLL registers **********************************/\r
-/*Boot cfg registers*/\r
-#define KICK0                       *(unsigned int*)(CHIP_LEVEL_REG + 0x0038)\r
-#define KICK1                       *(unsigned int*)(CHIP_LEVEL_REG + 0x003C)\r
-#define KICK0_UNLOCK                (0x83E70B13)\r
-#define KICK1_UNLOCK                (0x95A4F1E0)\r
-#define KICK_LOCK                   0\r
-#define TINPSEL                     *(unsigned int*)(CHIP_LEVEL_REG + 0x0300)\r
-#define TOUTPSEL                    *(unsigned int*)(CHIP_LEVEL_REG + 0x0304)\r
-#define MAINPLLCTL0                 *(unsigned int*)(CHIP_LEVEL_REG + 0x0350) \r
-#define MAINPLLCTL1                 *(unsigned int*)(CHIP_LEVEL_REG + 0x0354) \r
-#define MAIN_PLLD_OFFSET            0\r
-#define MAIN_PLLD_MASK              0xFFFFFFC0\r
-#define MAIN_PLLM_OFFSET            12\r
-#define MAIN_PLLM_MASK              0xFFF80FFF\r
-#define MAIN_BWADJ0_OFFSET          24\r
-#define MAIN_BWADJ0_MASK            0x00FFFFFF\r
-#define MAIN_ENSAT_OFFSET           6\r
-#define MAIN_ENSAT_MASK             0xFFFFFFBF\r
-#define MAIN_BWADJ1_OFFSET          0\r
-#define MAIN_BWADJ1_MASK            0xFFFFFFF0\r
-\r
-#define OBSCLKCTL                   *(unsigned int*)(CHIP_LEVEL_REG + 0x0C80)  //TODO: Reserved in K2H datashet\r
-\r
-/* PA PLL Registers */\r
-#define BYPASS_BIT_SHIFT 23\r
-#define CLKF_BIT_SHIFT   6\r
-#define CLKD_BIT_SHIFT   0\r
-#define DEVSTAT    (*((unsigned int *) 0x02620020))\r
-#define PAPLLCTL0                 *(unsigned int*)(CHIP_LEVEL_REG + 0x0358) \r
-#define PAPLLCTL1                 *(unsigned int*)(CHIP_LEVEL_REG + 0x035C) \r
-#define PASSCLKSEL_MASK    (1 << 17)    /* Tells the configuration of the PASSCLKSEL pin */\r
-#define PA_PLL_BYPASS_MASK (1 << BYPASS_BIT_SHIFT)    /* Tells whether the PA PLL is in BYPASS mode or not */\r
-#define PA_PLL_CLKOD_MASK  (0x00780000) /* Tells the output divider value for the PA PLL */\r
-#define PA_PLL_CLKF_MASK   (0x0007FFC0) /* Tells the multiplier value for the PA PLL */\r
-#define PA_PLL_CLKR_MASK   (0x0000003F) /* Tells the divider value for the PA PLL */\r
-#define PA_PLL_RESET_MASK  (0x00004000)\r
-\r
-\r
-#define CHIP_MISC1                  *(unsigned int*)(CHIP_LEVEL_REG + 0x0C7C)\r
-#define ARMPLL_ENABLE_OFFSET        13\r
-\r
-\r
-#define DDR3APLLCTL0                   *(unsigned int*)(CHIP_LEVEL_REG + 0x0360)\r
-#define DDR3APLLCTL1                   *(unsigned int*)(CHIP_LEVEL_REG + 0x0364)\r
-\r
-//******************************************************\r
-// PLL 1 definitions (DSP and ARM clock and subsystems)\r
-#define PLL1_BASE                   0x02310000\r
-#define PLL1_PLLCTL                 (*(unsigned int*)(PLL1_BASE + 0x100))   // PLL1 Control\r
-#define PLL1_SECCTL                 (*(unsigned int*)(PLL1_BASE + 0x108))   // PLL1 Secondary Control\r
-#define PLL1_PLLM                   (*(unsigned int*)(PLL1_BASE + 0x110))   // PLL1 Multiplier\r
-#define PLL1_DIV1                   (*(unsigned int*)(PLL1_BASE + 0x118))   // DIV1 divider\r
-#define PLL1_DIV2                   (*(unsigned int*)(PLL1_BASE + 0x11C))   // DIV2 divider\r
-#define PLL1_DIV3                   (*(unsigned int*)(PLL1_BASE + 0x120))   // DIV3 divider\r
-#define PLL1_CMD                    (*(unsigned int*)(PLL1_BASE + 0x138))   // CMD control\r
-#define PLL1_STAT                   (*(unsigned int*)(PLL1_BASE + 0x13C))   // STAT control\r
-#define PLL1_ALNCTL                 (*(unsigned int*)(PLL1_BASE + 0x140))   // ALNCTL control\r
-#define PLL1_DCHANGE                (*(unsigned int*)(PLL1_BASE + 0x144))   // DCHANGE status\r
-#define PLL1_CKEN                   (*(unsigned int*)(PLL1_BASE + 0x148))   // CKEN control\r
-#define PLL1_CKSTAT                 (*(unsigned int*)(PLL1_BASE + 0x14C))   // CKSTAT status\r
-#define PLL1_SYSTAT                 (*(unsigned int*)(PLL1_BASE + 0x150))   // SYSTAT status\r
-#define PLL1_DIV4                   (*(unsigned int*)(PLL1_BASE + 0x160))   // DIV4 divider\r
-#define PLL1_DIV5                   (*(unsigned int*)(PLL1_BASE + 0x164))   // DIV5 divider\r
-#define PLL1_DIV6                   (*(unsigned int*)(PLL1_BASE + 0x168))   // DIV6 divider\r
-#define PLL1_DIV7                   (*(unsigned int*)(PLL1_BASE + 0x16C))   // DIV7 divider\r
-#define PLL1_DIV8                   (*(unsigned int*)(PLL1_BASE + 0x170))   // DIV8 divider\r
-#define PLL1_DIV9                   (*(unsigned int*)(PLL1_BASE + 0x174))   // DIV9 divider\r
-#define PLL1_DIV10                  (*(unsigned int*)(PLL1_BASE + 0x178))   // DIV10 divider\r
-#define PLL1_DIV11                  (*(unsigned int*)(PLL1_BASE + 0x17C))   // DIV11 divider\r
-#define PLL1_DIV12                  (*(unsigned int*)(PLL1_BASE + 0x180))   // DIV12 divider\r
-#define PLL1_DIV13                  (*(unsigned int*)(PLL1_BASE + 0x184))   // DIV13 divider\r
-#define PLL1_DIV14                  (*(unsigned int*)(PLL1_BASE + 0x188))   // DIV14 divider\r
-#define PLL1_DIV15                  (*(unsigned int*)(PLL1_BASE + 0x18C))   // DIV15 divider\r
-#define PLL1_DIV16                  (*(unsigned int*)(PLL1_BASE + 0x190))   // DIV16 divider\r
-#define PLLPWRDN_OFFSET             1\r
-#define PLLPWRDN_MASK               0xFFFFFFFD\r
-#define PLLRST_OFFSET               3\r
-#define PLLRST_MASK                 0xFFFFFFF7\r
-#define PLLENSRC_OFFSET             5\r
-#define PLLENSRC_MASK               0xFFFFFFDF\r
-#define PLLEN_OFFSET                0\r
-#define PLLEN_MASK                  0xFFFFFFFE\r
-#define OUTPUT_DIVIDE_OFFSET        19\r
-#define OUTPUT_DIVIDE_MASK          0xFF87FFFF    \r
-#define BYPASS_OFFSET               23\r
-#define BYPASS_MASK                 0xFF7FFFFF\r
-#define PLLM_OFFSET                 0\r
-#define PLLM_MASK                   0xFFFFFFC0\r
-#define GOSET_OFFSET                0\r
-#define GOSET_MASK                  0xFFFFFFFE\r
-#define GOSTAT_OFFSET               0\r
-#define GOSTAT_MASK                 0xFFFFFFFE\r
-\r
-#define OUTPUT_DIVIDE_OFFSET        19\r
-#define OUTPUT_DIVIDE_MASK          0xFF87FFFF   \r
-\r
-// ARMPLL definitions\r
-#define SEC_PLLCTL0_PLLM_OFFSET     6\r
-#define SEC_PLLCTL0_PLLM_MASK       0xFFFF003F\r
-#define SEC_PLLCTL0_BWADJ_OFFSET    24\r
-#define SEC_PLLCTL0_BWADJ_MASK      0x00FFFFFF\r
-#define SEC_PLLCTL0_OD_OFFSET       19\r
-#define SEC_PLLCTL0_OD_MASK         0xFF87FFFF\r
-#define SEC_PLLCTL0_BYPASS_OFFSET   23\r
-#define SEC_PLLCTL0_BYPASS_MASK     0xFF7FFFFF\r
-#define SEC_PLLCTL1_RESET_OFFSET    14\r
-#define SEC_PLLCTL1_RESET_MASK      0xFFFFBFFF\r
-#define SEC_PLLCTL1_PWRDWN_OFFSET   15\r
-#define SEC_PLLCTL1_PWRDWN_MASK     0xFFFF7FFF\r
-#define SEC_PLLCTL1_ENSTAT_OFFSET   6\r
-#define SEC_PLLCTL1_ENSTAT_MASK     0xFFFFFFBF\r
-\r
-/*----------------DDR3A Register definition---------------------*/\r
-\r
-#define DDR3A_BASE_ADDR (0x21010000)\r
-#define DDR3A_STATUS   (*(int*)(DDR3A_BASE_ADDR + 0x00000004))\r
-#define DDR3A_SDCFG    (*(int*)(DDR3A_BASE_ADDR + 0x00000008))\r
-#define DDR3A_SDRFC    (*(int*)(DDR3A_BASE_ADDR + 0x00000010))\r
-#define DDR3A_SDTIM1   (*(int*)(DDR3A_BASE_ADDR + 0x00000018))\r
-#define DDR3A_SDTIM2   (*(int*)(DDR3A_BASE_ADDR + 0x0000001C))\r
-#define DDR3A_SDTIM3   (*(int*)(DDR3A_BASE_ADDR + 0x00000020))\r
-#define DDR3A_SDTIM4   (*(int*)(DDR3A_BASE_ADDR + 0x00000028))\r
-#define DDR3A_ZQCFG    (*(int*)(DDR3A_BASE_ADDR + 0x000000C8))\r
-#define DDR3A_TMPALRT  (*(int*)(DDR3A_BASE_ADDR + 0x000000CC))\r
-#define DDR3A_DDRPHYC  (*(int*)(DDR3A_BASE_ADDR + 0x000000E4))\r
-\r
-#define DDR3A_PHY_CFG_BASE (0x02329000)\r
-#define DDR3A_PIR    (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000004))\r
-#define DDR3A_PGCR0  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000008))\r
-#define DDR3A_PGCR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000000C))\r
-#define DDR3A_PGCR2  (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000008C))\r
-#define DDR3A_PGSR0  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000010))\r
-#define DDR3A_PGSR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000014))\r
-#define DDR3A_PLLCR  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000018))\r
-#define DDR3A_PTR0   (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000001C))\r
-#define DDR3A_PTR1   (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000020))\r
-#define DDR3A_PTR2   (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000024))\r
-#define DDR3A_PTR3   (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000028))\r
-#define DDR3A_PTR4   (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000002C))\r
-#define DDR3A_DSGCR  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000040))\r
-#define DDR3A_DCR    (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000044))\r
-#define DDR3A_MR0    (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000054))\r
-#define DDR3A_MR1    (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000058))\r
-#define DDR3A_MR2    (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000005C))\r
-#define DDR3A_DTCR   (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000068))\r
-#define DDR3A_DTPR0  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000048))\r
-#define DDR3A_DTPR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000004C))\r
-#define DDR3A_DTPR2  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000050))\r
-\r
-#define DDR3A_ZQ0CR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000184))\r
-#define DDR3A_ZQ1CR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000194))\r
-#define DDR3A_ZQ2CR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x000001A4))\r
-#define DDR3A_ZQ3CR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x000001B4))\r
-\r
-#define DDR3A_DATX8_8 (*(int*)(DDR3A_PHY_CFG_BASE + 0x000003C0))\r
-\r
-\r
-#define DDR3_TEST_START_ADDRESS (*(int*)(0x80000000))\r
-\r
-#define IODDRM_MASK            0x00000180  \r
-#define ZCKSEL_MASK            0x01800000\r
-#define CL_MASK                                   0x00000072\r
-#define WR_MASK                                   0x00000E00\r
-#define BL_MASK                                   0x00000003\r
-#define RRMODE_MASK            0x00040000\r
-#define UDIMM_MASK             0x20000000\r
-#define BYTEMASK_MASK          0x0000FC00\r
-#define MPRDQ_MASK             0x00000080\r
-#define PDQ_MASK               0x00000070\r
-#define NOSRA_MASK             0x08000000\r
-#define ECC_MASK               0x00000001\r
-#define RRMODE_MASK            0x00040000\r
-\r
-#define DDR3A_DX0GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x000001C4)) //0x71\r
-#define DDR3A_DX1GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000204)) //0x81\r
-#define DDR3A_DX2GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000244)) //0x91\r
-#define DDR3A_DX3GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000284)) //0xA1\r
-#define DDR3A_DX4GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x000002C4)) //0xB1\r
-#define DDR3A_DX5GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000304)) //0xC1\r
-#define DDR3A_DX6GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000344)) //0xD1\r
-#define DDR3A_DX7GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000384)) //0xE1\r
-#define DDR3A_DX8GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x000003C4)) //0xF1\r
-\r
-#define DDR3A_TEST_START_ADDRESS (0x80000000)\r
-\r
-#define DDR3A_TEST_END_ADDRESS   (DDR3A_TEST_START_ADDRESS + (4 * 100))\r
-#define DDR3A_BASE_ADDRESS        0x80000000\r
-\r
-\r
-\r
-#define TETRIS_BASE                 0x01E80000\r
-\r
-#define TETRIS_CPU0_PTCMD           *(unsigned int*)(TETRIS_BASE + 0x0400)\r
-#define TETRIS_CPU0_PDSTAT          *(unsigned int*)(TETRIS_BASE + 0x0404)\r
-#define TETRIS_CPU0_PDCTL           *(unsigned int*)(TETRIS_BASE + 0x0408)\r
-\r
-#define TETRIS_CPU1_PTCMD           *(unsigned int*)(TETRIS_BASE + 0x040C)\r
-#define TETRIS_CPU1_PDSTAT          *(unsigned int*)(TETRIS_BASE + 0x0410)\r
-#define TETRIS_CPU1_PDCTL           *(unsigned int*)(TETRIS_BASE + 0x0414)\r
-\r
-#define TETRIS_CPU2_PTCMD           *(unsigned int*)(TETRIS_BASE + 0x0418)\r
-#define TETRIS_CPU2_PDSTAT          *(unsigned int*)(TETRIS_BASE + 0x041C)\r
-#define TETRIS_CPU2_PDCTL           *(unsigned int*)(TETRIS_BASE + 0x0420)\r
-\r
-#define TETRIS_CPU3_PTCMD           *(unsigned int*)(TETRIS_BASE + 0x0424)\r
-#define TETRIS_CPU3_PDSTAT          *(unsigned int*)(TETRIS_BASE + 0x0428)\r
-#define TETRIS_CPU3_PDCTL           *(unsigned int*)(TETRIS_BASE + 0x042C)\r
-\r
-#define SECPLLCTL0                  *(unsigned int*)(CHIP_LEVEL_REG + 0x0370)\r
-#define SECPLLCTL1                  *(unsigned int*)(CHIP_LEVEL_REG + 0x0374)\r
-unsigned int read_val;\r
-\r
-/****************************************************************************\r
- *\r
- * NAME\r
- *      OnTargetConnect\r
- *\r
- * PURPOSE:\r
- *      Setup almost everything ready for a new debug session:\r
- *      DSP modules and EVM board modules, at target connection.\r
- *      Do nothing if target is in realtime mode.\r
- *      This routine is called when you connect to the target board.\r
- *\r
- *      IMPORTANT: this routine won't attempt to connect to the target\r
- *      if the target is not in real-time mode and that the dsp boot\r
- *      mode switches are not set in emulation boot mode.\r
- *\r
- * USAGE\r
- *      This routine is a callback routine and called by CCS only.\r
- *\r
- * RETURN VALUE\r
- *      NONE\r
- *\r
- * REFERENCE\r
- *\r
- ****************************************************************************/\r
-OnTargetConnect()\r
-{\r
-       /*------------------------------------------------------*/\r
-       /* GEL_Reset() is used to deal with the worst case      */\r
-       /* senario of unknown target state.  If for some reason */\r
-       /* a reset is not desired upon target connection,       */\r
-       /* GEL_Reset() may be removed and replaced with         */\r
-       /* something "less brutal" like a cache initialization  */\r
-       /* function.                                            */\r
-       /*------------------------------------------------------*/\r
-       //GEL_Reset();\r
-       //xmc_setup();\r
-       //ddr3_setup();\r
-\r
-       GEL_TextOut("\nConnecting Target...\n");\r
-\r
-       // Check if target is not in real-time mode. If it is in stop mode,\r
-       // initialize everything. In real-time mode, do nothing to connect\r
-       // unobtrusively...\r
-       if (!GEL_IsInRealtimeMode())\r
-       {\r
-               // Validates if emulation boot mode\r
-               if (DEVSTAT & 0x0000000E)\r
-               {\r
-                       GEL_TextOut("No initialization performed since bootmode = %x \n",,,,,(DEVSTAT >> 1 ) & 0xF);\r
-                       GEL_TextOut("You can manually initialize with GlobalDefaultSetup\n");\r
-               }\r
-               else\r
-               {\r
-                       // Comment the following line at production application test\r
-                       // when the application need to initialize everything, but not the\r
-                       // GEL file.\r
-                       Global_Default_Setup_Silent();\r
-               }\r
-       } else {\r
-               GEL_TextOut("No initialization performed in real time mode\n");\r
-       }\r
-}\r
-\r
-/*--------------------------------------------------------------*/\r
-/* OnReset()                                                    */\r
-/* This function is called by CCS when you do Debug->Resest.    */\r
-/* The goal is to put the C6x into a known good state with      */\r
-/* respect to cache, edma and interrupts.                       */\r
-/*--------------------------------------------------------------*/\r
-OnReset( int nErrorCode )\r
-{\r
-}\r
-\r
-/*--------------------------------------------------------------*/\r
-/* xmc_setup()                                                  */\r
-/* XMC MPAX register setting to access DDR3 config space        */\r
-/*--------------------------------------------------------------*/\r
-\r
-#define XMC_BASE_ADDR (0x08000000)\r
-#define XMPAX2_L     (*(int*)(XMC_BASE_ADDR + 0x00000010))\r
-#define XMPAX2_H     (*(int*)(XMC_BASE_ADDR + 0x00000014))\r
-\r
-xmc_setup()\r
-{\r
-       /* mapping for ddr emif registers XMPAX*2 */\r
-\r
-       XMPAX2_L =  0x121010FF;  /* replacement addr + perm */\r
-       XMPAX2_H =  0x2101000B;    /* base addr + seg size (64KB)*/     //"1B"-->"B" by xj\r
-       GEL_TextOut("XMC setup complete.\n");\r
-}\r
-\r
-/****************************************************************************\r
- *\r
- * NAME\r
- *      Global_Default_Setup_Silent\r
- *\r
- * PURPOSE:\r
- *      Setup almost everything ready for a new debug session:\r
- *      DSP modules and EVM board modules.\r
- *\r
- * USAGE\r
- *      This routine can be called as:\r
- *\r
- *      Global_Default_Setup_Silent()\r
- *\r
- * RETURN VALUE\r
- *      NONE\r
- *\r
- * REFERENCE\r
- *\r
- ****************************************************************************/\r
-Global_Default_Setup_Silent()\r
-{\r
-       float gel_ver = GEL_VERSION;\r
-\r
-       // Set DSP cache to pre defined values...\r
-       GEL_TextOut( "TCI6636K2E GEL file Ver is %f \n",,,,, (float) (gel_ver/1.0));\r
-\r
-       //Set_DSP_Cache();\r
-\r
-       // Only core 0 can set these\r
-       if (DNUM == 0)\r
-       {\r
-               // Setup main PLL DSP @ 1 GHz\r
-               Set_Pll1(3); // call Set_Pll1 with index = 3 -> 100 MHz to 1 GHz operation\r
-\r
-               // Setup all Power Domains on\r
-               Set_Psc_All_On();\r
-\r
-               // Setup PA PLL\r
-               PaPllConfig();\r
-\r
-               GEL_TextOut("DDR begin\n");\r
-               xmc_setup();\r
-               ddr3A_64bit_DDR1600_setup();\r
-               GEL_TextOut("DDR done\n");\r
-       }\r
-}\r
-\r
-/****************************************************************************\r
- *\r
- * NAME\r
- *      Set_PSC_State\r
- *\r
- * PURPOSE:\r
- *      Set a new power state for the specified domain id in a power controler\r
- *      domain. Wait for the power transition to complete.\r
- *\r
- * USAGE\r
- *      This routine can be called as:\r
- *\r
- *      Set_PSC_State(unsigned int pd,unsigned int id,unsigned int state)\r
- *\r
- *      pd    - (i) power domain.\r
- *\r
- *      id    - (i) module id to use for module in the specified power domain\r
- *\r
- *      state - (i) new state value to set\r
- *                  0 = RESET\r
- *                  1 = SYNC RESET\r
- *                  2 = DISABLE\r
- *                  3 = ENABLE\r
- *\r
- * RETURN VALUE\r
- *      0 if ok, !=0 for error\r
- *\r
- * REFERENCE\r
- *\r
- ****************************************************************************/\r
-Set_PSC_State(unsigned int pd,unsigned int id,unsigned int state)\r
-{\r
-       unsigned int* mdctl;\r
-       unsigned int* mdstat;\r
-       unsigned int* pdctl;\r
-       int ret=0;\r
-\r
-       // Only core0 can set PSC\r
-       if (DNUM == 0)\r
-       {\r
-               mdctl = ( unsigned int* )(PSC_MDCTL_BASE + ( 4 * id ));\r
-               mdstat = ( unsigned int* )( PSC_MDSTAT_BASE + ( 4 * id ));\r
-               pdctl = ( unsigned int* )(PSC_PDCTL_BASE + ( 4 * pd ));\r
-\r
-               // If state is already set, do nothing\r
-               if ( ( *mdstat & 0x1f ) == state )\r
-               {\r
-                       return(0);\r
-               }\r
-\r
-               // Wait for GOSTAT to clear\r
-               Set_Timeout(GTIMEOUT);\r
-               while( Get_Timeout() && (PSC_PTSTAT & (0x1 << pd)) != 0 );\r
-\r
-               // Check if we got timeout error while waiting\r
-               if (!Get_Timeout())\r
-               {\r
-                       GEL_TextOut( "Set_PSC_State... Timeout Error #01 pd=%d, md=%d!\n",,2,,,pd,id);\r
-                       ret=1;\r
-               }\r
-               else\r
-               {\r
-                       // Set power domain control\r
-                       *pdctl = (*pdctl) | 0x00000001;\r
-\r
-                       // Set MDCTL NEXT to new state\r
-                       *mdctl = ((*mdctl) & ~(0x1f)) | state;\r
-\r
-                       // Start power transition by setting PTCMD GO to 1\r
-                       PSC_PTCMD = (PSC_PTCMD) | (0x1<<pd);\r
-\r
-                       // Wait for PTSTAT GOSTAT to clear\r
-                       Set_Timeout(GTIMEOUT);\r
-                       while( Get_Timeout() && (PSC_PTSTAT & (0x1 << pd)) != 0 );\r
-\r
-                       // Check if we got timeout error while waiting\r
-                       if (!Get_Timeout())\r
-                       {\r
-                               GEL_TextOut( "Set_PSC_State... Timeout Error #02 pd=%d, md=%d!\n",,2,,,pd,id);\r
-                               ret=2;\r
-                       }\r
-                       else\r
-                       {\r
-                               // Verify state changed\r
-                               Set_Timeout(GTIMEOUT);\r
-                               while(Get_Timeout() && ( *mdstat & 0x1f ) != state );\r
-\r
-                               // Check if we got timeout error while waiting\r
-                               if (!Get_Timeout())\r
-                               {\r
-                                       GEL_TextOut( "Set_PSC_State... Timeout Error #03 pd=%d, md=%d!\n",,2,,,pd,id);\r
-                                       ret=3;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               // Kill the currently running timeout\r
-               Kill_Timeout();\r
-       }\r
-       else\r
-       {\r
-               GEL_TextOut("DSP core #%d cannot set PSC.\n",,2,,,DNUM);\r
-       }\r
-\r
-       return(ret);\r
-}\r
-\r
-/****************************************************************************\r
- *\r
- * NAME\r
- *      Set_Timeout\r
- *\r
- * PURPOSE:\r
- *      Starts a timeout period of msec. The running timeout period can be\r
- *      query with Get_Timeout. To kill a running timeout before the end,\r
- *      call Kill_Timeout. Only one timeout period can be used at any time.\r
- *      A timeout period can be used to measure a period of time while doing\r
- *      anything else. Not accurate, sets timer at least as big as desired.\r
- *\r
- * USAGE\r
- *      This routine can be called as:\r
- *\r
- *      Set_Timeout(msec)\r
- *\r
- *      msec - (i) timeout period in msec (not very precise < sec range)\r
- *\r
- * RETURN VALUE\r
- *      NONE\r
- *\r
- * REFERENCE\r
- *\r
- ****************************************************************************/\r
-Set_Timeout(msec)\r
-{\r
-       // Cancel the current timer if not already expired\r
-       GEL_CancelTimer(TIMEOUT_ID);\r
-\r
-       // Starts the timeout period\r
-       _GEL_Global_Timeout1=1;\r
-\r
-       // Setup a callback routine with specified timeout\r
-       GEL_SetTimer(msec, TIMEOUT_ID, "_Timeout_Callback()");\r
-}\r
-\r
-/****************************************************************************\r
- *\r
- * NAME\r
- *      Get_Timeout\r
- *\r
- * PURPOSE:\r
- *      Query the running state of a timeout period started by Set_Timeout.\r
- *      (see Set_Timeout for more info).\r
- *\r
- * USAGE\r
- *      This routine can be called as:\r
- *\r
- *      Get_Timeout()\r
- *\r
- * RETURN VALUE\r
- *      0:expired, 1:running\r
- *\r
- * REFERENCE\r
- *\r
- ****************************************************************************/\r
-Get_Timeout()\r
-{\r
-       if (!_GEL_Global_Timeout1)\r
-       {\r
-               // Cancel the current timer\r
-               GEL_CancelTimer(TIMEOUT_ID);\r
-       }\r
-\r
-       // Return the global timeout status 1=running, 0=expired\r
-       return _GEL_Global_Timeout1;\r
-}\r
-\r
-/****************************************************************************\r
- *\r
- * NAME\r
- *      Kill_Timeout\r
- *\r
- * PURPOSE:\r
- *      Cancel a running timeout period before it expires\r
- *      (see Set_Timeout for more info).\r
- *\r
- * USAGE\r
- *      This routine can be called as:\r
- *\r
- *      Kill_Timeout()\r
- *\r
- * RETURN VALUE\r
- *      NONE\r
- *\r
- * REFERENCE\r
- *\r
- ****************************************************************************/\r
-Kill_Timeout()\r
-{\r
-       // Cancel the current timer\r
-       GEL_CancelTimer(TIMEOUT_ID);\r
-\r
-       // The timeout period is expired\r
-       _GEL_Global_Timeout1=0;\r
-}\r
-\r
-/****************************************************************************\r
- *\r
- * NAME\r
- *      _Timeout_Callback\r
- *\r
- * PURPOSE:\r
- *      Internal Callback function used by Set_timeout\r
- *      (see Set_Timeout for more info).\r
- *\r
- * USAGE\r
- *      This routine must not be called by itself.\r
- *\r
- * RETURN VALUE\r
- *      NONE\r
- *\r
- * REFERENCE\r
- *\r
- ****************************************************************************/\r
-_Timeout_Callback()\r
-{\r
-       // The timeout period is expired\r
-       _GEL_Global_Timeout1=0;\r
-}\r
-\r
-\r
-/****************************************************************************\r
- *\r
- * NAME\r
- *      Set_Psc_All_On\r
- *\r
- * PURPOSE:\r
- *      Enable all PSC modules and DSP power domains on ALWAYSON, and wait\r
- *      for these power transitions to complete.\r
- *\r
- * USAGE\r
- *      This routine can be called as:\r
- *\r
- *      Set_Psc_All_On()\r
- *\r
- * RETURN VALUE\r
- *      NONE\r
- *\r
- * REFERENCE\r
- *\r
- ****************************************************************************/\r
-hotmenu Set_Psc_All_On( )\r
-{\r
-       unsigned int i=0;\r
-\r
-       // Only core0 can set PSC\r
-       if (DNUM == 0)\r
-       {\r
-               GEL_TextOut( "Power on all PSC modules and DSP domains... \n");\r
-\r
-               Set_PSC_State(PD0, LPSC_TSIP, PSC_ENABLE);\r
-               Set_PSC_State(PD1, LPSC_DEBUG, PSC_ENABLE);\r
-               Set_PSC_State(PD1, LPSC_TETB, PSC_ENABLE);\r
-               Set_PSC_State(PD2, LPSC_PA, PSC_ENABLE);\r
-               Set_PSC_State(PD2, LPSC_SGMII, PSC_ENABLE);\r
-//             Set_PSC_State(PD2, LPSC_SA, PSC_ENABLE);\r
-               Set_PSC_State(PD3, LPSC_PCIE, PSC_ENABLE);\r
-               Set_PSC_State(PD5, LPSC_HYPERLINK, PSC_ENABLE);\r
-               Set_PSC_State(PD6, LPSC_SR, PSC_ENABLE);\r
-               Set_PSC_State(PD7, LPSC_MSMCRAM, PSC_ENABLE);\r
-               Set_PSC_State(PD8, LPSC_C66X_COREPAC_0, PSC_ENABLE);\r
-               Set_PSC_State(PD16, LPSC_DDR3_0, PSC_ENABLE);\r
-               Set_PSC_State(PD18, LPSC_PCIE_1, PSC_ENABLE);\r
-               Set_PSC_State(PD29, LPSC_XGE, PSC_ENABLE);\r
-               Set_PSC_State(PD31, LPSC_ARM, PSC_ENABLE);\r
-\r
-               GEL_TextOut( "Power on all PSC modules and DSP domains... Done.\n" );\r
-       }\r
-       else\r
-       {\r
-               GEL_TextOut("DSP core #%d cannot set PSC.\n",,2,,,DNUM);\r
-       }\r
-}\r
-\r
-\r
-//********************************************************************************************************************************\r
-//********************************************************************************************************************************\r
-/*\r
-   Set_Pll1() - This function executes the main PLL initialization \r
-   sequence needed to get the main PLL up after coming out of an initial power up \r
-   before it is locked or after it is already locked.\r
-\r
-   Index value determines multiplier, divier used and clock reference assumed for \r
-   output display. \r
- */\r
-Set_Pll1(int index)\r
-{\r
-       int i, TEMP;\r
-       unsigned int BYPASS_val;     \r
-       unsigned int BWADJ_val;     \r
-       unsigned int OD_val;            \r
-\r
-       float CLKIN_val;\r
-       unsigned int PLLM_val;\r
-       unsigned int PLLD_val;\r
-       unsigned int PLLDIV3_val; //example value for SYSCLK2 (from 6614 spec) Default /2 - Fast Peripherals, (L2, MSMC, DDR3 EMIF, EDMA0...)\r
-       unsigned int PLLDIV4_val; //example value for SYSCLK3 (from 6614 spec) Default /3 - Switch Fabric\r
-       unsigned int PLLDIV7_val; //example value for SYSCLK6 (from 6614 spec) Defualt /6 - Slow Peripherals (UART, SPI, I2C, GPIO...)\r
-\r
-       unsigned int debug_info_on;\r
-       unsigned int delay;\r
-\r
-       if(index == 1){                  // 100 MHz -> 614.28 MHz\r
-               CLKIN_val   = 100;       // setup CLKIN to 614.28 MHz\r
-               PLLM_val    = 43;        // setup PLLM (PLL multiplier) to x43\r
-               PLLD_val    = 1;         // setup PLLD (reference divider) to /1\r
-               OD_val      = 7;         // setup OD to /7\r
-       }\r
-       else if(index == 2){             // 100MHz -> 737.5 MHz\r
-               CLKIN_val   = 100;       // setup CLKIN to 100 MHz\r
-               PLLM_val    = 59;        // setup PLLM (PLL multiplier) to x59\r
-               PLLD_val    = 1;         // setup PLLD (reference divider) to /1\r
-               OD_val      = 8;         // setup OD to  /8\r
-       }\r
-\r
-       else if(index == 3){             // 100MHz -> 1 GHz\r
-               CLKIN_val   = 100;       // setup CLKIN to 100 MHz\r
-               PLLM_val    = 20;        // setup PLLM (PLL multiplier) to x20\r
-               PLLD_val    = 1;         // setup PLLD (reference divider) to /1\r
-               OD_val      = 2;         // setup OD to  /2\r
-       }\r
-\r
-       else if(index == 4){             // 100 MHz -> 1.2 GHz\r
-               CLKIN_val   = 100;       // setup CLKIN to 100 MHz\r
-               PLLM_val    = 24;        // setup PLLM (PLL multiplier) to x24\r
-               PLLD_val    = 1;         // setup PLLD (reference divider) to /1\r
-               OD_val      = 2;         // setup OD to  /2\r
-       }\r
-       else if(index == 5){             // 100 MHz -> 1.35 GHz\r
-               CLKIN_val   = 100;       // setup CLKIN to 100 MHz\r
-               PLLM_val    = 27;        // setup PLLM (PLL multiplier) to x27\r
-               PLLD_val    = 1;         // setup PLLD (reference divider) to /1\r
-               OD_val      = 2;            // setup OD to /2\r
-       }\r
-\r
-\r
-\r
-\r
-       PLLDIV3_val = 3;            // setup PLL output divider 3 to /3\r
-       PLLDIV4_val = 5;            // setup PLL output divider 4 to /3\r
-       PLLDIV7_val = 6;            // setup PLL output divider 7 to /6\r
-\r
-       BYPASS_val      = PLL1_SECCTL & ~BYPASS_MASK;   // get value of the BYPASS field\r
-       BWADJ_val       = (PLLM_val) >> 1;              // setup BWADJ to be 1/2 the value of PLLM\r
-       //OD_val          = 2;                            // setup OD to a fixed /2\r
-\r
-       debug_info_on   = 1;\r
-       delay           = 1000; // fix this!\r
-\r
-       /* Step 1: Unlock Boot Config Registers */\r
-       KICK0 = KICK0_UNLOCK;\r
-       KICK1 = KICK1_UNLOCK;\r
-\r
-       /* Step 2: Check if SECCTL bypass is low or high indicating what state the Main PLL is currently in. if \r
-       the Main PLL is in bypass still (not yet setup) execute the following steps.  */\r
-\r
-       if(BYPASS_val != 0x00000000){ // PLL bypass enabled - Execute PLL setup for PLL fresh out of power on reset\r
-               if(debug_info_on){\r
-                       GEL_TextOut("Detected PLL bypass enabled: SECCTL[BYPASS] = %x\n",,,,, BYPASS_val);\r
-               }\r
-               /* Step 2a: Set MAINPLLCTL1[ENSAT] = 1 - This enables proper biasing of PLL analog circuitry */            \r
-               MAINPLLCTL1 |= (1 << MAIN_ENSAT_OFFSET); \r
-               if(debug_info_on){\r
-                       GEL_TextOut("(2a) MAINPLLCTL1 = %x\n",,,,, MAINPLLCTL1);\r
-               }        \r
-\r
-               /* Step 2b: Set PLLCTL[PLLEN] = 0 This enables bypass in PLL controller MUX */        \r
-               PLL1_PLLCTL &= ~(1 << PLLEN_OFFSET);        \r
-               if(debug_info_on){    \r
-                       GEL_TextOut("(2b) PLLCTL = %x\n",,,,, PLL1_PLLCTL);\r
-               }    \r
-\r
-               /* Step 2c: Set PLLCTL[PLLENSRC] = 0 - This enables PLLEN to control PLL controller MUX */    \r
-               PLL1_PLLCTL &= ~(1 << PLLENSRC_OFFSET);\r
-               if(debug_info_on){    \r
-                       GEL_TextOut("(2c) PLLCTL = %x\n",,,,, PLL1_PLLCTL);\r
-               }    \r
-\r
-               /* Step 2d: Wait 4 reference clock cycles (slowest of ALTCORE or SYSCLK) to make sure \r
-           that the PLL controller MUX switches properly to bypass. */\r
-               if(debug_info_on){    \r
-                       GEL_TextOut("(2d) Delay...\n",,,,,);\r
-               }        \r
-               for(i = 0; i < delay; i++); // this delay is much more than required         \r
-\r
-               /* Step 2e: Set SECCTL[BYPASS] = 1 - enables bypass in PLL MUX */    \r
-               PLL1_SECCTL |= (1 << BYPASS_OFFSET);        \r
-               if(debug_info_on){    \r
-                       GEL_TextOut("(2e) SECCTL = %x\n",,,,, PLL1_SECCTL);\r
-               }    \r
-\r
-               /* Step 2f: Set PLLCTL[PLLPWRDN] = 1 - power down the PLL */        \r
-               PLL1_PLLCTL |= (1 << PLLPWRDN_OFFSET);\r
-               if(debug_info_on){    \r
-                       GEL_TextOut("(2f) PLLCTL = %x\n",,,,, PLL1_PLLCTL);\r
-               }    \r
-\r
-               /* Step 2g: Wait for at least 5us for the PLL to power down */\r
-               if(debug_info_on){    \r
-                       GEL_TextOut("(2g) Delay...\n",,,,,);\r
-               }    \r
-               for(i = 0; i < delay; i++); // this delay is much more than required \r
-\r
-               /* Step 2h: Set PLLCTL[PLLPWRDN] = 0 - Power the PLL back up */    \r
-               PLL1_PLLCTL &= ~(1 << PLLPWRDN_OFFSET);\r
-               if(debug_info_on){    \r
-                       GEL_TextOut("(2h) PLLCTL = %x\n",,,,, PLL1_PLLCTL);\r
-               }            \r
-\r
-       }\r
-       else{ // PLL bypass disabled - Execute PLL setup for PLL that has previously been locked (skip to Step 3)\r
-               if(debug_info_on){    \r
-                       GEL_TextOut("Detected PLL bypass disabled: SECCTL[BYPASS] = %x\n",,,,, BYPASS_val);\r
-               }\r
-\r
-               /* Step 3a: Set PLLCTL[PLLEN] = 0 This enables bypass in PLL controller MUX */        \r
-               PLL1_PLLCTL &= ~(1 << PLLEN_OFFSET);        \r
-               if(debug_info_on){    \r
-                       GEL_TextOut("(3a) PLLCTL = %x\n",,,,, PLL1_PLLCTL);\r
-               }    \r
-\r
-               /* Step 3b: Set PLLCTL[PLLENSRC] = 0 - This enables PLLEN to control PLL controller MUX */    \r
-               PLL1_PLLCTL &= ~(1 << PLLENSRC_OFFSET);\r
-               if(debug_info_on){    \r
-                       GEL_TextOut("(3b) PLLCTL = %x\n",,,,, PLL1_PLLCTL);\r
-               }\r
-\r
-               /* Step 3c: Wait 4 reference clock cycles (slowest of ALTCORE or SYSCLK) to make sure \r
-           that the PLL controller MUX switches properly to bypass. */\r
-               if(debug_info_on){    \r
-                       GEL_TextOut("(3c) Delay...\n",,,,,);\r
-               }        \r
-               for(i = 0; i < delay; i++); // this delay is much more than required       \r
-\r
-       }\r
-\r
-\r
-       /* Step 4: Programming PLLM[5:0] in the PLLM register of the PLL controller and\r
-       programming PLLM[12:6] in the MAINPLLCTL0 register */        \r
-       PLL1_PLLM &= PLLM_MASK;             // clear the PLLM[5:0] bit field\r
-       PLL1_PLLM |= ~PLLM_MASK & (PLLM_val - 1);   // set the PLLM[5:0] bit field to the 6 LSB of PLLM_val\r
-\r
-       if(debug_info_on){\r
-               GEL_TextOut("(4)PLLM[PLLM] = %x\n",,,,, PLL1_PLLM);\r
-       }    \r
-\r
-       MAINPLLCTL0 &= MAIN_PLLM_MASK;      // clear the PLLM[12:6] bit field\r
-       MAINPLLCTL0 |= ~MAIN_PLLM_MASK & (( (PLLM_val - 1) >> 6) << MAIN_PLLM_OFFSET);  // set the PLLM[12:6] bit field to the 7 MSB of PLL_val\r
-\r
-       if(debug_info_on){\r
-               GEL_TextOut("MAINPLLCTL0 = %x\n",,,,, MAINPLLCTL0);\r
-       }\r
-\r
-       /* Step 5: Programming BWADJ[7:0] in the MAINPLLCTL0 register and BWADJ[11:8] in MAINPLLCTL1 register */            \r
-       MAINPLLCTL0 &= MAIN_BWADJ0_MASK;    // clear the MAIN_BWADJ0 bit field\r
-       MAINPLLCTL0 |= ~MAIN_BWADJ0_MASK & ((BWADJ_val - 1) << MAIN_BWADJ0_OFFSET); // set the MAIN_BWADJ[7:0] bit field to the 8 LSB of BWADJ_val\r
-\r
-       if(debug_info_on){\r
-               GEL_TextOut("(5) MAINPLLCTL0 = %x\n",,,,, MAINPLLCTL0);\r
-       }\r
-\r
-       MAINPLLCTL1 &= MAIN_BWADJ1_MASK;    // clear the MAIN_BWADJ1 bit field\r
-       MAINPLLCTL1 |= ~MAIN_BWADJ1_MASK & (( (BWADJ_val - 1) >> 8) << MAIN_BWADJ1_OFFSET); // set the MAIN_BWADJ[11:8] bit field to the 4 MSB of BWADJ_val\r
-\r
-       if(debug_info_on){\r
-               GEL_TextOut("(5) MAINPLLCTL1 = %x\n",,,,, MAINPLLCTL1);\r
-       }\r
-\r
-       /* Step 6: Programming PLLD[5:0] in the MAINPLLCTL0 register */            \r
-       MAINPLLCTL0 &= MAIN_PLLD_MASK;      // clear the PLLD bit field\r
-       MAINPLLCTL0 |= ~MAIN_PLLD_MASK & (PLLD_val - 1);    // set the PLLD[5:0] bit field of PLLD to PLLD_val\r
-\r
-       if(debug_info_on){\r
-               GEL_TextOut("(6) MAINPLLCTL0 = %x\n",,,,, MAINPLLCTL0);\r
-       }\r
-\r
-       /* Step 7: Programming OD[3:0] in the SECCTL register */            \r
-       PLL1_SECCTL &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field\r
-       PLL1_SECCTL |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    \r
-\r
-       if(debug_info_on){\r
-               GEL_TextOut("(7) SECCTL = %x\n",,,,, PLL1_SECCTL);\r
-       }\r
-\r
-       /* Step 8: Following steps are needed to change the default output dividers */            \r
-\r
-       /* Step 8a: Check that the GOSTAT bit in PLLSTAT is cleared to show that no GO\r
-       operation is currently in progress*/\r
-       if(debug_info_on){    \r
-               GEL_TextOut("(8a) Delay...\n",,,,,);\r
-       }    \r
-       while((PLL1_STAT) & 0x00000001);\r
-\r
-       /* Step 8b: Program the RATIO field in PLLDIVn to the desired new divide-down rate.\r
-       If RATIO field is changed, the PLL controller will flag the change in the\r
-       corresponding bit of DCHANGE*/\r
-       PLL1_DIV3 = (PLLDIV3_val-1) | 0x8000;  //Set PLLDIV3\r
-       PLL1_DIV4 = (PLLDIV4_val-1) | 0x8000;  //Set PLLDIV4\r
-       PLL1_DIV7 = (PLLDIV7_val-1) | 0x8000;  //Set PLLDIV7\r
-\r
-       if(debug_info_on){\r
-               GEL_TextOut("PLL1_DIV3 = %x\n",,,,, PLL1_DIV3);\r
-               GEL_TextOut("PLL1_DIV4 = %x\n",,,,, PLL1_DIV4);\r
-               GEL_TextOut("PLL1_DIV7 = %x\n",,,,, PLL1_DIV7);\r
-       }\r
-\r
-       /* Step 8c: Set GOSET bit in PLLCMD to initiate the GO operation to change the divide\r
-       values and align the SYSCLKs as programmed */\r
-       PLL1_CMD |= 0x00000001;\r
-\r
-       /*Step 8d/e: Read the GOSTAT bit in PLLSTAT to make sure the bit returns to 0 to\r
-      indicate that the GO operation has completed */\r
-       if(debug_info_on){    \r
-               GEL_TextOut("(8d/e) Delay...\n",,,,,);\r
-       }    \r
-       while((PLL1_STAT) & 0x00000001);\r
-\r
-       /* Step 9: Set PLLCTL[PLLRST] = 1 - Assert PLL reset (Previously Step 3)*/        \r
-       PLL1_PLLCTL |= (1 << PLLRST_OFFSET);\r
-\r
-       /* Step 10: Wait for the at least 7us for the PLL reset properly (128 CLKIN1 cycles) */        \r
-       if(debug_info_on){    \r
-               GEL_TextOut("(10) Delay...\n",,,,,);\r
-       }    \r
-       for(i=0;i<delay;i++);\r
-\r
-       /* Step 11: Set PLLCTL[PLLRST] = 0 - De-Assert PLL reset */        \r
-       PLL1_PLLCTL &= ~(1 << PLLRST_OFFSET);\r
-\r
-       /* Step 12: Wait for PLL to lock (2000 CLKIN1 cycles) */\r
-       if(debug_info_on){    \r
-               GEL_TextOut("(12) Delay...\n",,,,,);\r
-       }    \r
-       for(i=0;i<delay;i++);\r
-\r
-       /* Step 13: In SECCTL, write BYPASS = 0 (enable PLL mux to switch to PLL mode) */\r
-       PLL1_SECCTL &= ~(1 << BYPASS_OFFSET);        \r
-       if(debug_info_on){    \r
-               GEL_TextOut("(13) SECCTL = %x\n",,,,, PLL1_SECCTL);\r
-       }    \r
-       if(debug_info_on){    \r
-               GEL_TextOut("(Delay...\n",,,,,);\r
-       }    \r
-       for(i=0;i<delay;i++);\r
-       if(debug_info_on){    \r
-               GEL_TextOut("(Delay...\n",,,,,);\r
-       }    \r
-       for(i=0;i<delay;i++);\r
-\r
-       /* Step 14: In PLLCTL, write PLLEN = 1 to enable PLL mode */\r
-       PLL1_PLLCTL |= (1 << PLLEN_OFFSET);        \r
-       if(debug_info_on){    \r
-               GEL_TextOut("(14) PLLCTL = %x\n",,,,, PLL1_PLLCTL);\r
-       }    \r
-\r
-       /* Step 15: Lock Boot Config Registers */\r
-       KICK0 = 0x00000000;\r
-       KICK1 = 0x00000000;\r
-\r
-       GEL_TextOut("PLL has been configured (CLKIN * PLLM / PLLD / PLLOD = PLLOUT):\n",,,,,);\r
-       GEL_TextOut("PLL has been configured (%f MHz * %d / %d / %d = %f MHz)\n",,,,, CLKIN_val, PLLM_val, PLLD_val,OD_val,(CLKIN_val * PLLM_val / PLLD_val / OD_val) );\r
-\r
-}\r
-\r
-\r
-//TODO: May need to change, as currently information is not available\r
-Set_Tetris_Pll(int index)\r
-{\r
-\r
-       unsigned int BWADJ_val;     \r
-       unsigned int OD_val;            \r
-       unsigned int PLLM_val;\r
-       float CLKIN_val;\r
-       int i;\r
-\r
-       GEL_TextOut("Switching on ARM Core 0\n",,,,,);\r
-       TETRIS_CPU0_PDCTL   = 0x00000000;\r
-       TETRIS_CPU0_PTCMD   = 0x00000001;    \r
-\r
-       GEL_TextOut("Switching on ARM Core 1\n",,,,,);\r
-       TETRIS_CPU1_PDCTL   = 0x00000000;\r
-       TETRIS_CPU1_PTCMD   = 0x00000001;    \r
-\r
-       GEL_TextOut("Switching on ARM Core 2\n",,,,,);\r
-       TETRIS_CPU2_PDCTL   = 0x00000000;\r
-       TETRIS_CPU2_PTCMD   = 0x00000001;    \r
-\r
-       GEL_TextOut("Switching on ARM Core 3\n",,,,,);\r
-       TETRIS_CPU3_PDCTL   = 0x00000000;\r
-       TETRIS_CPU3_PTCMD   = 0x00000001;\r
-\r
-       if(index == 1){              // 100 MHz -> 1.0 GHz\r
-               CLKIN_val   = 125;          // setup CLKIN to 125 MHz\r
-               PLLM_val    = 16;           // setup PLLM (PLL multiplier) to x20\r
-               OD_val      = 2;            // setup OD to a fixed /2\r
-       }\r
-       else if(index == 2){            // 100 MHz -> 1.4 GHz\r
-               CLKIN_val   = 125;          // setup CLKIN to 125 MHz\r
-               PLLM_val    = 22;           // setup PLLM (PLL multiplier) to x28\r
-               OD_val      = 2;            // setup OD to a fixed /2\r
-       }\r
-       else if(index == 3){            // 174.825MHz -> 1.4 GHz                //TODO: From where this freq will be available? Not shown in schematic.\r
-\r
-               CLKIN_val   = 174.825;      // setup CLKIN to 174.825 MHz\r
-               PLLM_val    = 16;           // setup PLLM (PLL multiplier) to x16\r
-               OD_val      = 2;            // setup OD to a fixed /2\r
-       }\r
-\r
-       BWADJ_val       = (PLLM_val-1) >> 1;            // setup BWADJ to be 1/2 the value of PLLM\r
-       OD_val          = 2;                            // setup OD to a fixed /2\r
-\r
-       /* Step 1: Unlock Boot Config Registers */\r
-       KICK0 = KICK0_UNLOCK;\r
-       KICK1 = KICK1_UNLOCK;\r
-\r
-       //Step 1 : Assert SEC PLL Reset\r
-       SECPLLCTL1 = ((1 << SEC_PLLCTL1_RESET_OFFSET) | (1 << SEC_PLLCTL1_ENSTAT_OFFSET));\r
-\r
-       //Step 2 : Change CLKF/OD/BWADJ etc. for SEC PLL\r
-       SECPLLCTL0 = ((BWADJ_val << SEC_PLLCTL0_BWADJ_OFFSET) |\r
-                       ((OD_val-1) << SEC_PLLCTL0_OD_OFFSET)|\r
-                       ((PLLM_val-1) << SEC_PLLCTL0_PLLM_OFFSET));\r
-\r
-       //Step 3 : Make sure the resets are held for 5us\r
-       for(i = 0; i < 200000; i++);\r
-\r
-       //Step 4 : Remove SEC PLL reset\r
-       SECPLLCTL1 = (1 << SEC_PLLCTL1_ENSTAT_OFFSET);\r
-\r
-       //Step 5 : Wait for PLL to lock (4000 CLKIN1 cycles)\r
-       for(i = 0; i < 4000; i++);\r
-\r
-       //Step 6 : Get the PLL out of Bypass\r
-       //SECPLLCTL0 &= ~(1 << SEC_PLLCTL0_BYPASS_OFFSET);\r
-       CHIP_MISC1 |= (1 << ARMPLL_ENABLE_OFFSET); \r
-\r
-\r
-       //Step 6 : Lock Boot Config Registers\r
-       KICK0 = 0x00000000;\r
-       KICK1 = 0x00000000;\r
-\r
-       GEL_TextOut("ARM PLL has been configured (%f MHz * %d / %d = %f MHz)\n",,,,, CLKIN_val, PLLM_val, OD_val, (CLKIN_val * PLLM_val)/OD_val);\r
-\r
-}\r
-\r
-\r
-/* Set the desired PA PLL configuration */\r
-PaPllConfig()\r
-{\r
-       unsigned int passclksel = (DEVSTAT & PASSCLKSEL_MASK);\r
-       unsigned int papllctl0val_orig = PAPLLCTL0;\r
-       unsigned int papllctl1val_orig = PAPLLCTL1;\r
-       unsigned int papllctl0val_final;\r
-       unsigned int papllctl1val_final;\r
-       unsigned int papllclkf = 19; //204; // 204; 20 (if PASSREFCLK == 100mhz) Multiply by clkf + 1\r
-       unsigned int papllclkd = 0;  //11;  // 11;   1 (if PASSREFCLK == 100mhz) Divide by clkd + 1\r
-       unsigned int i = 0;\r
-\r
-       if (passclksel != PASSCLKSEL_MASK) GEL_TextOut("WARNING: SYSCLK is the input to the PA PLL.\n");\r
-\r
-       /* Unlock Chip Level Registers */\r
-       KICK0 = KICK0_UNLOCK;\r
-       KICK1 = KICK1_UNLOCK;\r
-\r
-       // PAPLLCTL1 = PAPLLCTL1 | 0x00000040; //Set ENSAT = 1; Set PLL Select to 0 (for SYCLK0 as input of PASS)\r
-       PAPLLCTL1 = PAPLLCTL1 | 0x00002040; //Set ENSAT = 1; Set PLL Select to 1 (for PA PLL as input of PASS)  \r
-\r
-       /*in PAPLLCTL0, clear bypass bit to set the PA PLL in Bypass Mode*/\r
-       //PAPLLCTL0 &= ~(1<<BYPASS_BIT_SHIFT); // Not setting Bypass bit\r
-       PAPLLCTL0 |=  (1<<BYPASS_BIT_SHIFT); // Actually setting bypass bit\r
-\r
-       /*Wait 4 cycles for the slowest of PLLOUT or reference clock source (CLKIN)*/\r
-       for(i=0;i<100;i++);\r
-\r
-       /*In PAPLLCTL1, write PLL reset bit to put the PLL in reset*/\r
-       PAPLLCTL1 |= PA_PLL_RESET_MASK;\r
-\r
-       /* Program the multiplier value */\r
-       PAPLLCTL0 &= (~PA_PLL_CLKF_MASK);          //clear multiplier value\r
-       PAPLLCTL0 &= (~PA_PLL_CLKR_MASK);          //clear divider value\r
-       PAPLLCTL0 |= (papllclkf<<CLKF_BIT_SHIFT);  // set PLLM\r
-       PAPLLCTL0 |= (papllclkd<<CLKD_BIT_SHIFT);  // set PLLD\r
-\r
-\r
-       PAPLLCTL0 &= 0x00FFFFFF;\r
-       PAPLLCTL0 |= ((((papllclkf + 1)>>1)-1)<<24);\r
-\r
-       //PAPLLCTL1 = PAPLLCTL1 | 0x00002000;\r
-\r
-       /*Wait for PLL to properly reset (128 CLKIN1 cycles) */\r
-       for(i=0;i<1000;i++);\r
-\r
-       /* take the PA PLL out of reset */\r
-       PAPLLCTL1 &= (~PA_PLL_RESET_MASK);\r
-\r
-       /*Wait for PLL to lock (2000 CLKIN1 cycles) */\r
-       for(i=0;i<5000;i++);\r
-\r
-       /* enable PLL mode */\r
-       PAPLLCTL0 &= ~(1<<BYPASS_BIT_SHIFT); // actually setting PLL MODE\r
-\r
-       for(i=0;i<4000;i++);\r
-\r
-       /* Lock Chip Level Registers */\r
-       KICK0 = KICK_LOCK;\r
-       KICK1 = KICK_LOCK;\r
-\r
-       papllctl0val_final = PAPLLCTL0;\r
-       papllctl1val_final = PAPLLCTL1;\r
-\r
-       GEL_TextOut("Completed PA PLL Setup\n");\r
-       GEL_TextOut("PAPLLCTL0 - before: 0x%x\t after: 0x%x\n",,,,, papllctl0val_orig, papllctl0val_final);\r
-       GEL_TextOut("PAPLLCTL1 - before: 0x%x\t after: 0x%x\n",,,,, papllctl1val_orig, papllctl1val_final);\r
-\r
-       if ((papllctl0val_final != 0x09080500) || (papllctl1val_final != 0x00002040))\r
-       {\r
-               return 1;\r
-       }\r
-\r
-       return 0;\r
-\r
-}\r
-\r
-//*************************************************************************************************\r
-//*************************************************************************************************\r
-//*************************************************************************************************\r
-//*************************************************************************************************\r
-//*************************************************************************************************\r
-//*************************************************************************************************\r
-\r
-//--------DDR3A Memory test----------------------\r
-\r
-ddr3A_memory_test ()\r
-{\r
-       unsigned int index, value;\r
-\r
-       GEL_TextOut( "DDR3A memory test... Started\n" );\r
-\r
-       /* Write a pattern */\r
-       for (index = DDR3A_TEST_START_ADDRESS; index < DDR3A_TEST_END_ADDRESS; index += 4) {\r
-               *index = index;\r
-       }\r
-\r
-       /* Read and check the pattern */\r
-       for (index = DDR3A_TEST_START_ADDRESS; index < DDR3A_TEST_END_ADDRESS; index += 4) {\r
-\r
-               value = *index;\r
-\r
-               if (value  != index) {\r
-                       GEL_TextOut( "DDR3A memory test... Failed\n" );\r
-                       return -1;\r
-               }\r
-       }\r
-\r
-       /* Write a pattern for complementary values */\r
-       for (index = DDR3A_TEST_START_ADDRESS; index < DDR3A_TEST_END_ADDRESS; index += 4) {\r
-               *index = ~index;\r
-       }\r
-\r
-       /* Read and check the pattern */\r
-       for (index = DDR3A_TEST_START_ADDRESS; index < DDR3A_TEST_END_ADDRESS; index += 4) {\r
-\r
-               value = *index;\r
-\r
-               if (value  != ~index) {\r
-                       GEL_TextOut( "DDR3A memory test... Failed\n" );\r
-                       return -1;\r
-               }\r
-       }\r
-\r
-       GEL_TextOut( "DDR3A memory test... Passed\n" );\r
-       return 0;\r
-\r
-}\r
-\r
-\r
-\r
-/****************************************************************************\r
- *\r
- * NAME\r
- *      Setup_Memory_Map\r
- *\r
- * PURPOSE:\r
- *      Setup the Memory Map for EVMC6678L.\r
- *      Defined memory location avoid debugger access outside these locations.\r
- *\r
- * USAGE\r
- *      This routine can be called as:\r
- *\r
- *      Setup_Memory_Map()\r
- *\r
- * RETURN VALUE\r
- *      NONE\r
- *\r
- * REFERENCE\r
- *      Based on TMS320C6678 datasheet.\r
- *\r
- ****************************************************************************/\r
-hotmenu Setup_Memory_Map( )\r
-{\r
-       GEL_TextOut("Setup_Memory_Map...\n",,);\r
-\r
-       GEL_MapOn( );\r
-       GEL_MapReset( );\r
-\r
-       GEL_MapAddStr( 0x00000000, 0, 0x21400000, "R|W|AS4", 0 );   // \r
-       GEL_MapAddStr( 0x21400000,0, 0x00000080, "R|W|AS4", 0 );   // Hyperlink Config (remote) \r
-       //GEL_MapAddStr( 0x21400080,0, 0x00000080, "R|W|AS4", 0 );   // Hyperlink Config (remote)\r
-       GEL_MapAddStr( 0x21400200, 0, 0xdebffe00, "R|W|AS4", 0 );   // \r
-       GEL_TextOut( "Setup_Memory_Map... Done.\n" );\r
-}\r
-\r
-/*----------------------------------------------------- DDR3A : DDR800, 32bit--------------------------------------------------------------------------*/\r
-ddr3A_32bit_DDR800_setup()\r
-{\r
-       unsigned int multiplier = 3;\r
-       unsigned int divider = 0;\r
-       int temp;\r
-       unsigned int OD_val = 2;\r
-       KICK0 = 0x83E70B13;\r
-       KICK1 = 0x95A4F1E0;\r
-\r
-\r
-       //1.    Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do { \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-       //4.    Clocks are enabled and frequency is stable---------------------------------------\r
-       //DDR3A PLL setup       \r
-       GEL_TextOut ( "DDR3 PLL (PLL2) Setup ... \n");\r
-       //DDR3APLLCTL0 = DDR3APLLCTL0 & 0xFF7FFFFF;\r
-       //      Set ENSAT = 1\r
-       DDR3APLLCTL1 |= 0x00000040;\r
-       // Put the PLL in PLL Mode  \r
-       DDR3APLLCTL0 |= 0x00800000;\r
-       // In PLL Controller, reset the PLL (bit 13 in DDR3APLLCTL1 register) \r
-       DDR3APLLCTL1 |= 0x00002000;\r
-       // Program the necessary multipliers/dividers and BW adjustments            \r
-       // Set the divider values \r
-       DDR3APLLCTL0 &= ~(0x0000003F);\r
-       DDR3APLLCTL0 |= (divider & 0x0000003F);\r
-       /* Step 7: Programming OD[3:0] in the SECCTL register */            \r
-       DDR3APLLCTL0 &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field\r
-       DDR3APLLCTL0 |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    \r
-\r
-       /* Set the Multipler values */\r
-       DDR3APLLCTL0 &= ~(0x0007FFC0);\r
-       DDR3APLLCTL0 |= ((multiplier << 6) & 0x0007FFC0 );\r
-       temp = ((multiplier + 1) >> 1) - 1;\r
-       DDR3APLLCTL0 &= ~(0xFF000000); \r
-       DDR3APLLCTL0 |= ((temp << 24) & 0xFF000000);\r
-       DDR3APLLCTL1 &= ~(0x0000000F);\r
-       DDR3APLLCTL1 |= ((temp >> 8) & 0x0000000F);\r
-       //In DDR3PLLCTL1, write PLLRST = 0 to bring PLL out of reset \r
-       DDR3APLLCTL1 &= ~(0x00002000);\r
-       // Put the PLL in PLL Mode  \r
-       DDR3APLLCTL0 &= ~(0x00800000); // ReSet the Bit 23\r
-       GEL_TextOut( "DDR3 PLL Setup complete, DDR3A clock now running at 400MHz.\n" );\r
-       //DDR3A PLL setup complete ---------------------------------------\r
-\r
-       /*------------------------- Start PHY Configuration -------------------------------*/\r
-\r
-       //DDR3A_PGCR1 = 0x0280C487;\r
-\r
-       //5.a   Program FRQSEL in the PLL Control Register (address offset 0x018).\r
-       DDR3A_PLLCR = 0xDC000; //Set FRQSEL=11, for ctl_clk between 166-275MHz\r
-\r
-       //5.b.  Program WLSTEP=1, IODDRM=1, and ZCKSEL in the PHY General Configuration Register 1 (address offset 0x00C). \r
-       DDR3A_PGCR1 |= (1 << 2); //WLSTEP = 1\r
-\r
-       DDR3A_PGCR1 &= ~(IODDRM_MASK);\r
-       DDR3A_PGCR1 |= (( 1 << 7) & IODDRM_MASK);\r
-\r
-\r
-       DDR3A_PGCR1 &= ~(ZCKSEL_MASK);\r
-       DDR3A_PGCR1 |= (( 1 << 23) & ZCKSEL_MASK);\r
-\r
-\r
-       //5.c.  Program PHY Timing Parameters Register 0-4 (address offset 0x01C - 0x02C).\r
-\r
-       DDR3A_PTR0 = 0x42C21590;\r
-\r
-       DDR3A_PTR1 = 0xCFC712B3;\r
-\r
-       // Maintaining default values of Phy Timing Parameters Register 2 in PUB\r
-\r
-       DDR3A_PTR3 = 0x04430D40;//0x18061A80; \r
-\r
-       DDR3A_PTR4 = 0x06413880;//0x0AAE7100;\r
-\r
-       //5.d.  Program PDQ, MPRDQ, and BYTEMASK in the DRAM Configuration Register (address offset 0x044). \r
-       //              All other fields must be left at their default values.\r
-\r
-       DDR3A_DCR &= ~(PDQ_MASK); //PDQ = 0\r
-       DDR3A_DCR &= ~(MPRDQ_MASK); //MPRDQ = 0\r
-\r
-       DDR3A_DCR &= ~(BYTEMASK_MASK);\r
-       DDR3A_DCR |= (( 1 << 10) & BYTEMASK_MASK);\r
-\r
-\r
-       DDR3A_DCR &= ~(NOSRA_MASK);\r
-       DDR3A_DCR |= (( 1 << 27) & NOSRA_MASK);\r
-\r
-\r
-       DDR3A_DCR &= ~(UDIMM_MASK);\r
-       DDR3A_DCR |= (( 1 << 29) & UDIMM_MASK);\r
-\r
-\r
-       //5.e.  Program DRAM Timing Parameters Register 0-2 (address offset 0x048 - 0x050). \r
-\r
-       DDR3A_DTPR0 = 0x008F6633; //0x50CE6644;\r
-       DDR3A_DTPR1 = 0x12820180;\r
-       DDR3A_DTPR2 = 0x50022A00;\r
-\r
-       //5.f.  Program BL=0, CL, WR, and PD=1 in the Mode Register 0 (address offset 0x054). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_MR0 = 0x00001620;\r
-\r
-\r
-       //5.g.  Program DIC, RTT, and TDQS in the Mode Register 1 (address offset 0x058). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_MR1 = 0x00000006;\r
-\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-       //5.h.  Program Mode Register 2 (address offset 0x05C).\r
-       // Maintaining default values of Program Mode Register 2\r
-       DDR3A_MR2 = 0x00000040;\r
-\r
-       //5.i.  Program DTMPR=1, DTEXD, DTEXG, RANKEN=1 or 3, and RFSHDT=7 in the Data Training Configuration Register (address offset 0x068). \r
-       //All other fields must be left at their default values.\r
-       DDR3A_DTCR = 0x710035C7; //0x710035C7;\r
-\r
-       //5.j.  Program tREFPRD=(5*tREFI/ddr_clk_period) in the PHY General Configuration Register 2 (address offset 0x08C). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_PGCR2 = 0x00F03D09; //NOBUB = 0, FXDLAT = 0       \r
-       //DDR3A_PGCR2 = 0x00F83D09; //NOBUB = 0, FXDLAT = 1 \r
-\r
-       //Set Impedence Register        \r
-       DDR3A_ZQ0CR1 = 0x0000007B; \r
-       DDR3A_ZQ1CR1 = 0x0000007B;\r
-       DDR3A_ZQ2CR1 = 0x0000007B;\r
-\r
-\r
-       //6.    Re-trigger PHY initialization in DDR PHY through the VBUSP interface.\r
-       //6.a.  Program 0x00000033 to the PHY Initialization Register (address offset 0x004) to re-trigger PLL, ZCAL, and DCAL initialization.\r
-\r
-       DDR3A_PIR = 0x00000033;\r
-\r
-       //6.b.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do { \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-\r
-\r
-       // 7.   Trigger DDR3 initialization and leveling/training in DDR PHY through the VBUSP interface.\r
-       // a.   If using a 16-bit wide DDR interface, program DXEN=0 in the DATX8 2-7 General Configuration Registers (address offsets 0x240, 0x280, 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.\r
-       // b.   If using a 32-bit wide DDR interface, program DXEN=0 in the DATX8 4-7 General Configuration Registers (address offsets 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.\r
-       // c.   If ECC is not required, program DXEN=0 in the DATX8 8 General Configuration Register (address offset 0x3C0) to disable the leveling/training for the ECC byte lane.\r
-       // NOTE: Setup supports 64-bit by default,  ECC enable by default.\r
-\r
-       //7.d.  Program 0x0000XF81 to the PHY Initialization Register (address offset 0x004) to trigger DDR3 initialization and leveling/training sequences \r
-\r
-       DDR3A_PIR = 0x0000FF81; //WLADJ - ON\r
-       //DDR3A_PIR = 0x00000781;  //WLADJ - OFF\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-       //7.e.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do {              \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-\r
-       /* End PHY Configuration */             \r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-       /* START EMIF INITIALIZATION\r
-  ++++++++++++++++++SDCFG Register Calculation+++++++++++++++++++\r
-  | 31 - 29  | 28 |27 - 25 | 24   | 23 - 22| 21 - 17 |\r
-  |SDRAM_TYPE|Rsvd|DDR_TERM| DDQS | DYN_ODT|  Rsvd   |\r
-  |  0x011   |  0 | 0x011  | 0x1  |   0x00 |   0x0   |\r
-\r
-  | 16-14 |13 - 12 |  11 - 8 |  7   |6 - 5 |  4  |  3  |  2  |  1 - 0  |\r
-  |   CWL | NM     |   CL    | Rsvd |IBANK | Rsvd|EBANK| Rsvd|PAGE_SIZE|\r
-  |  0x11 | 0x00   |  0x1110 |  0x0 | 0x11 | 0x0 |  0  |  0  |   0x10  |\r
-  SDCFG = 0x0110 0011 0010 0010 0011 0011 1011 0010\r
-  SDCFG = 0x6700486A;//0x63223332\r
-\r
-  SDRAM_TYPE = 3\r
-  DDR_TERM = 3 (RZQ/4 = 1; RZQ/6=3)\r
-  DDQS = 1 \r
-  DYN_ODT = 0 \r
-\r
-  CWL = 3 (CWL5=0; CWL6=1; CWL7=2; CWL8=3)\r
-  NM = 0 (64-bit=0, 32-bit=1, 16-bit=2)\r
-  CL = 14 (CL5=2; CL6=4; CL7=6; CL8=8; CL9=10; CL10=12; CL11=14)\r
-  IBANK = 3 (8bank)\r
-  EBANK = 0 (0 - pad_cs_o_n[0] , 1 - pad_cs_o_n[1:0])\r
-  PAGE_SIZE = 2 (1024page-size=2; 2048page-size=3)\r
-        */\r
-       /* Start DDR3A EMIF Configuration */\r
-       //8.    Configure the EMIF through the VBUSM interface.\r
-       //8.a.  Program all EMIF MMR\92s.\r
-       DDR3A_SDCFG    = 0x62001462     ; //0x6200046A\r
-\r
-       DDR3A_SDTIM1   = 0x0A385022;\r
-       DDR3A_SDTIM2   = 0x00001CA5;\r
-       DDR3A_SDTIM3   = 0x210DFF22;\r
-       DDR3A_SDTIM4   = 0x533F03FF;\r
-\r
-       DDR3A_ZQCFG    = 0x70073200;    \r
-       //8.b.  Program reg_initref_dis=0 in the SDRAM Refresh Control Register (address offset 0x10).\r
-       DDR3A_SDRFC = 0x00000C34;\r
-\r
-       GEL_TextOut("DDR3A initialization complete \n");\r
-       /* End  DDR3A EMIF Configuration */\r
-\r
-}      \r
-\r
-\r
-/*----------------------------------------------------- DDR3A : DDR1066, 32bit--------------------------------------------------------------------------*/\r
-ddr3A_32bit_DDR1066_setup()\r
-{\r
-\r
-       unsigned int multiplier = 15;\r
-       unsigned int divider = 0;\r
-       int temp;\r
-       unsigned int OD_val = 6;\r
-       KICK0 = 0x83E70B13;\r
-       KICK1 = 0x95A4F1E0;\r
-\r
-\r
-       //1.    Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do { \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-       //4.    Clocks are enabled and frequency is stable---------------------------------------\r
-       //DDR3A PLL setup       \r
-       GEL_TextOut ( "DDR3 PLL (PLL2) Setup ... \n");\r
-       //DDR3APLLCTL0 = DDR3APLLCTL0 & 0xFF7FFFFF;\r
-       //      Set ENSAT = 1\r
-       DDR3APLLCTL1 |= 0x00000040;\r
-       // Put the PLL in PLL Mode  \r
-       DDR3APLLCTL0 |= 0x00800000;\r
-       // In PLL Controller, reset the PLL (bit 13 in DDR3APLLCTL1 register) \r
-       DDR3APLLCTL1 |= 0x00002000;\r
-       // Program the necessary multipliers/dividers and BW adjustments            \r
-       // Set the divider values \r
-       DDR3APLLCTL0 &= ~(0x0000003F);\r
-       DDR3APLLCTL0 |= (divider & 0x0000003F);\r
-       /* Step 7: Programming OD[3:0] in the SECCTL register */            \r
-       DDR3APLLCTL0 &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field\r
-       DDR3APLLCTL0 |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    \r
-\r
-       /* Set the Multipler values */\r
-       DDR3APLLCTL0 &= ~(0x0007FFC0);\r
-       DDR3APLLCTL0 |= ((multiplier << 6) & 0x0007FFC0 );\r
-       temp = ((multiplier + 1) >> 1) - 1;\r
-       DDR3APLLCTL0 &= ~(0xFF000000); \r
-       DDR3APLLCTL0 |= ((temp << 24) & 0xFF000000);\r
-       DDR3APLLCTL1 &= ~(0x0000000F);\r
-       DDR3APLLCTL1 |= ((temp >> 8) & 0x0000000F);\r
-       //In DDR3PLLCTL1, write PLLRST = 0 to bring PLL out of reset \r
-       DDR3APLLCTL1 &= ~(0x00002000);\r
-       // Put the PLL in PLL Mode  \r
-       DDR3APLLCTL0 &= ~(0x00800000); // ReSet the Bit 23\r
-       GEL_TextOut( "DDR3 PLL Setup complete, DDR3A clock now running at 533MHz.\n" );\r
-       //DDR3A PLL setup complete ---------------------------------------\r
-\r
-       /*------------------------- Start PHY Configuration -------------------------------*/\r
-\r
-       //DDR3A_PGCR1 = 0x0280C487;\r
-\r
-       //5.a   Program FRQSEL in the PLL Control Register (address offset 0x018).\r
-       DDR3A_PLLCR = 0xDC000; //Set FRQSEL=11, for ctl_clk between 166-275MHz\r
-\r
-       //5.b.  Program WLSTEP=1, IODDRM=1, and ZCKSEL in the PHY General Configuration Register 1 (address offset 0x00C). \r
-       DDR3A_PGCR1 |= (1 << 2); //WLSTEP = 1\r
-\r
-       DDR3A_PGCR1 &= ~(IODDRM_MASK);\r
-       DDR3A_PGCR1 |= (( 1 << 7) & IODDRM_MASK);\r
-\r
-\r
-       DDR3A_PGCR1 &= ~(ZCKSEL_MASK);\r
-       DDR3A_PGCR1 |= (( 1 << 23) & ZCKSEL_MASK);\r
-\r
-\r
-       //5.c.  Program PHY Timing Parameters Register 0-4 (address offset 0x01C - 0x02C).\r
-\r
-       DDR3A_PTR0 = 0x426213CF;\r
-\r
-       DDR3A_PTR1 = 0xCFC712B3;        \r
-\r
-       // Maintaining default values of Phy Timing Parameters Register 2 in PUB\r
-\r
-       DDR3A_PTR3 = 0x05B411AA;//0x09041104;//0x18061A80; \r
-\r
-       DDR3A_PTR4 = 0x0855A0AA;//0x0AAE7100;\r
-\r
-       //5.d.  Program PDQ, MPRDQ, and BYTEMASK in the DRAM Configuration Register (address offset 0x044). \r
-       //              All other fields must be left at their default values.\r
-\r
-       DDR3A_DCR &= ~(PDQ_MASK); //PDQ = 0\r
-\r
-       DDR3A_DCR &= ~(MPRDQ_MASK); //MPRDQ = 0\r
-\r
-       DDR3A_DCR &= ~(BYTEMASK_MASK);\r
-       DDR3A_DCR |= (( 1 << 10) & BYTEMASK_MASK);\r
-\r
-\r
-       DDR3A_DCR &= ~(NOSRA_MASK);\r
-       DDR3A_DCR |= (( 1 << 27) & NOSRA_MASK);\r
-\r
-       //DDR3A_DCR &= ~(UDIMM_MASK);\r
-       //DDR3A_DCR |= (( 1 << 29) & UDIMM_MASK);\r
-\r
-       //RRMODE\r
-       //DDR3A_DSGCR &= ~(RRMODE_MASK); //RR_MODE = 0\r
-\r
-       //DDR3A_DSGCR &= ~(RRMODE_MASK); //RR_MODE = 1\r
-       //DDR3A_DSGCR |= (( 1 << 18) & RRMODE_MASK);\r
-\r
-\r
-       //5.e.  Program DRAM Timing Parameters Register 0-2 (address offset 0x048 - 0x050). \r
-\r
-       DDR3A_DTPR0 = 0x54D47744;//0x6D148844;     //0x6D148844; 0x69137764 ---changed in rev 1.3\r
-\r
-       DDR3A_DTPR1 = 0x1282AA00;//0x12845A00;\r
-       DDR3A_DTPR2 = 0x50023200;\r
-\r
-       //5.f.  Program BL=0, CL, WR, and PD=1 in the Mode Register 0 (address offset 0x054). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_MR0 = 0x00001830;    //0x00001870; \r
-\r
-\r
-       //5.g.  Program DIC, RTT, and TDQS in the Mode Register 1 (address offset 0x058). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_MR1 =  0x00000006; //0x00000044;  ---changed in rev 1.3\r
-\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-       //5.h.  Program Mode Register 2 (address offset 0x05C).\r
-       // Maintaining default values of Program Mode Register 2\r
-       DDR3A_MR2 = 0x00000048;  //18   ---changed in rev 1.3\r
-\r
-\r
-       //5.i.  Program DTMPR=1, DTEXD, DTEXG, RANKEN=1 or 3, and RFSHDT=7 in the Data Training Configuration Register (address offset 0x068). \r
-       //All other fields must be left at their default values.\r
-       DDR3A_DTCR = 0x710035C7; //0x730035C7;\r
-\r
-       //5.j.  Program tREFPRD=(5*tREFI/ddr_clk_period) in the PHY General Configuration Register 2 (address offset 0x08C). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_PGCR2 = 0x00F05161; //NOBUB = 0, FXDLAT = 0       \r
-       //DDR3A_PGCR2 = 0x00F83D09; //NOBUB = 0, FXDLAT = 1 \r
-\r
-\r
-       //Set Impedence Register        \r
-       DDR3A_ZQ0CR1 = 0x0000007B; \r
-       DDR3A_ZQ1CR1 = 0x0000007B;\r
-       DDR3A_ZQ2CR1 = 0x0000007B;\r
-\r
-\r
-\r
-       //6.    Re-trigger PHY initialization in DDR PHY through the VBUSP interface.\r
-       //6.a.  Program 0x00000033 to the PHY Initialization Register (address offset 0x004) to re-trigger PLL, ZCAL, and DCAL initialization.\r
-\r
-       DDR3A_PIR = 0x00000033;\r
-\r
-       //6.b.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do { \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-\r
-\r
-       // 7.   Trigger DDR3 initialization and leveling/training in DDR PHY through the VBUSP interface.\r
-       // a.   If using a 16-bit wide DDR interface, program DXEN=0 in the DATX8 2-7 General Configuration Registers (address offsets 0x240, 0x280, 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.\r
-       // b.   If using a 32-bit wide DDR interface, program DXEN=0 in the DATX8 4-7 General Configuration Registers (address offsets 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.\r
-       // c.   If ECC is not required, program DXEN=0 in the DATX8 8 General Configuration Register (address offset 0x3C0) to disable the leveling/training for the ECC byte lane.\r
-       // NOTE: Setup supports 64-bit by default,  ECC enable by default.\r
-\r
-       //7.d.  Program 0x0000XF81 to the PHY Initialization Register (address offset 0x004) to trigger DDR3 initialization and leveling/training sequences \r
-\r
-       DDR3A_PIR = 0x0000FF81; //WLADJ - ON\r
-       //DDR3A_PIR = 0x00000781;  //WLADJ - OFF\r
-\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-       //7.e.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do {              \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-\r
-       /* End PHY Configuration */             \r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-       /* START EMIF INITIALIZATION\r
-  ++++++++++++++++++SDCFG Register Calculation+++++++++++++++++++\r
-  | 31 - 29  | 28 |27 - 25 | 24   | 23 - 22| 21 - 17 |\r
-  |SDRAM_TYPE|Rsvd|DDR_TERM| DDQS | DYN_ODT|  Rsvd   |\r
-  |  0x011   |  0 | 0x011  | 0x1  |   0x00 |   0x0   |\r
-\r
-  | 16-14 |13 - 12 |  11 - 8 |  7   |6 - 5 |  4  |  3  |  2  |  1 - 0  |\r
-  |   CWL | NM     |   CL    | Rsvd |IBANK | Rsvd|EBANK| Rsvd|PAGE_SIZE|\r
-  |  0x11 | 0x00   |  0x1110 |  0x0 | 0x11 | 0x0 |  0  |  0  |   0x10  |\r
-  SDCFG = 0x0110 0011 0010 0010 0011 0011 1011 0010\r
-  SDCFG = 0x6700486A;//0x63223332\r
-\r
-  SDRAM_TYPE = 3\r
-  DDR_TERM = 3 (RZQ/4 = 1; RZQ/6=3)\r
-  DDQS = 1 \r
-  DYN_ODT = 0 \r
-\r
-  CWL = 3 (CWL5=0; CWL6=1; CWL7=2; CWL8=3)\r
-  NM = 0 (64-bit=0, 32-bit=1, 16-bit=2)\r
-  CL = 14 (CL5=2; CL6=4; CL7=6; CL8=8; CL9=10; CL10=12; CL11=14)\r
-  IBANK = 3 (8bank)\r
-  EBANK = 0 (0 - pad_cs_o_n[0] , 1 - pad_cs_o_n[1:0])\r
-  PAGE_SIZE = 2 (1024page-size=2; 2048page-size=3)\r
-        */\r
-       /* Start DDR3A EMIF Configuration */\r
-       //8.    Configure the EMIF through the VBUSM interface.\r
-       //8.a.  Program all EMIF MMR\92s.\r
-       DDR3A_SDCFG    = 0x62005662; //0x62005662;\r
-       DDR3A_SDTIM1   = 0x0E4C6833; //0x0E4C6833;//0x0E4C6833;\r
-       DDR3A_SDTIM2   = 0x00001CC6;  //0x00001CE7;\r
-       DDR3A_SDTIM3   = 0x3169FF32; //0x323DFF32;\r
-       DDR3A_SDTIM4   = 0x533F054F; //0x533F08AF;\r
-\r
-       DDR3A_ZQCFG    = 0x70073200;//0xF0073200;       \r
-       //8.b.  Program reg_initref_dis=0 in the SDRAM Refresh Control Register (address offset 0x10).\r
-       DDR3A_SDRFC = 0x00001045;\r
-\r
-       GEL_TextOut("DDR3A initialization complete \n");\r
-       /* End  DDR3A EMIF Configuration */\r
-\r
-}\r
-\r
-/*--------------------------------------------------\r
-                       DDR3A : DDR1333,32bit  \r
----------------------------------------------------*/\r
-\r
-ddr3A_32bit_DDR1333_setup()    \r
-{\r
-       unsigned int multiplier = 19;\r
-       unsigned int divider = 0;\r
-       int temp;\r
-       unsigned int OD_val = 6;\r
-       KICK0 = 0x83E70B13;\r
-       KICK1 = 0x95A4F1E0;\r
-\r
-\r
-       //1.    Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do { \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-       //4.    Clocks are enabled and frequency is stable---------------------------------------\r
-       //DDR3A PLL setup       \r
-       GEL_TextOut ( "DDR3 PLL (PLL2) Setup ... \n");\r
-       //DDR3APLLCTL0 = DDR3APLLCTL0 & 0xFF7FFFFF;\r
-       //      Set ENSAT = 1\r
-       DDR3APLLCTL1 |= 0x00000040;\r
-       // Put the PLL in PLL Mode  \r
-       DDR3APLLCTL0 |= 0x00800000;\r
-       // In PLL Controller, reset the PLL (bit 13 in DDR3APLLCTL1 register) \r
-       DDR3APLLCTL1 |= 0x00002000;\r
-       // Program the necessary multipliers/dividers and BW adjustments            \r
-       // Set the divider values \r
-       DDR3APLLCTL0 &= ~(0x0000003F);\r
-       DDR3APLLCTL0 |= (divider & 0x0000003F);\r
-       /* Step 7: Programming OD[3:0] in the SECCTL register */            \r
-       DDR3APLLCTL0 &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field\r
-       DDR3APLLCTL0 |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    \r
-\r
-       /* Set the Multipler values */\r
-       DDR3APLLCTL0 &= ~(0x0007FFC0);\r
-       DDR3APLLCTL0 |= ((multiplier << 6) & 0x0007FFC0 );\r
-       temp = ((multiplier + 1) >> 1) - 1;\r
-       DDR3APLLCTL0 &= ~(0xFF000000); \r
-       DDR3APLLCTL0 |= ((temp << 24) & 0xFF000000);\r
-       DDR3APLLCTL1 &= ~(0x0000000F);\r
-       DDR3APLLCTL1 |= ((temp >> 8) & 0x0000000F);\r
-       //In DDR3PLLCTL1, write PLLRST = 0 to bring PLL out of reset \r
-       DDR3APLLCTL1 &= ~(0x00002000);\r
-       // Put the PLL in PLL Mode  \r
-       DDR3APLLCTL0 &= ~(0x00800000); // ReSet the Bit 23\r
-       GEL_TextOut( "DDR3 PLL Setup complete, DDR3A clock now running at 666 MHz.\n" );\r
-       //DDR3A PLL setup complete ---------------------------------------\r
-\r
-       /*------------------------- Start PHY Configuration -------------------------------*/\r
-\r
-       //DDR3A_PGCR1 = 0x0280C487;\r
-\r
-       //5.a   Program FRQSEL in the PLL Control Register (address offset 0x018).\r
-       DDR3A_PLLCR = 0x0005C000; //Set FRQSEL=01, for ctl_clk between 225-385MHz\r
-\r
-       //5.b.  Program WLSTEP=1, IODDRM=1, and ZCKSEL in the PHY General Configuration Register 1 (address offset 0x00C). \r
-       DDR3A_PGCR1 |= (1 << 2); //WLSTEP = 1\r
-\r
-       DDR3A_PGCR1 &= ~(IODDRM_MASK);\r
-       DDR3A_PGCR1 |= (( 1 << 7) & IODDRM_MASK);\r
-\r
-\r
-       DDR3A_PGCR1 &= ~(ZCKSEL_MASK);\r
-       DDR3A_PGCR1 |= (( 1 << 23) & ZCKSEL_MASK);\r
-\r
-\r
-       //5.c.  Program PHY Timing Parameters Register 0-4 (address offset 0x01C - 0x02C).\r
-\r
-       DDR3A_PTR0 = 0x426213CF;\r
-\r
-       DDR3A_PTR1 = 0xCFC712B3;\r
-\r
-       // Maintaining default values of Phy Timing Parameters Register 2 in PUB\r
-\r
-       DDR3A_PTR3 = 0x07151615;//0x072515C2; //0x0B4515C2;//0x18061A80; \r
-\r
-       DDR3A_PTR4 = 0x0A6A08D5;//0x0AAE7100;\r
-\r
-       //5.d.  Program PDQ, MPRDQ, and BYTEMASK in the DRAM Configuration Register (address offset 0x044). \r
-       //              All other fields must be left at their default values.\r
-\r
-       DDR3A_DCR &= ~(PDQ_MASK); //PDQ = 0\r
-\r
-       DDR3A_DCR &= ~(MPRDQ_MASK); //MPRDQ = 0\r
-\r
-       DDR3A_DCR &= ~(BYTEMASK_MASK);\r
-       DDR3A_DCR |= (( 1 << 10) & BYTEMASK_MASK);\r
-\r
-\r
-       DDR3A_DCR &= ~(NOSRA_MASK);\r
-       DDR3A_DCR |= (( 1 << 27) & NOSRA_MASK);\r
-\r
-\r
-       //DDR3A_DCR &= ~(UDIMM_MASK);\r
-       //DDR3A_DCR |= (( 1 << 29) & UDIMM_MASK);\r
-\r
-\r
-       //5.e.  Program DRAM Timing Parameters Register 0-2 (address offset 0x048 - 0x050). \r
-\r
-       DDR3A_DTPR0 = 0xAD189955;//0x85589975;//0x8558AA55;\r
-       DDR3A_DTPR1 = 0x12835A80;//0x12835A80;//0x12857280;\r
-       DDR3A_DTPR2 = 0x5002C200;\r
-\r
-       //5.f.  Program BL=0, CL, WR, and PD=1 in the Mode Register 0 (address offset 0x054). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_MR0 = 0x00001A60; //50\r
-\r
-\r
-       //5.g.  Program DIC, RTT, and TDQS in the Mode Register 1 (address offset 0x058). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_MR1 = 0x00000006;\r
-\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-       //5.h.  Program Mode Register 2 (address offset 0x05C).\r
-       // Maintaining default values of Program Mode Register 2\r
-       DDR3A_MR2 = 0x00000050;\r
-\r
-       //5.i.  Program DTMPR=1, DTEXD, DTEXG, RANKEN=1 or 3, and RFSHDT=7 in the Data Training Configuration Register (address offset 0x068). \r
-       //All other fields must be left at their default values.\r
-       DDR3A_DTCR = 0x710035C7; //0x730035C7;\r
-\r
-       //5.j.  Program tREFPRD=(5*tREFI/ddr_clk_period) in the PHY General Configuration Register 2 (address offset 0x08C). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_PGCR2 = 0x00F065B9; //NOBUB = 0, FXDLAT = 0       \r
-       //DDR3A_PGCR2 = 0x00F83D09; //NOBUB = 0, FXDLAT = 1 \r
-\r
-       //Set Impedence Register        \r
-       DDR3A_ZQ0CR1 = 0x0000007B; \r
-       DDR3A_ZQ1CR1 = 0x0000007B;\r
-       DDR3A_ZQ2CR1 = 0x0000007B;\r
-       //DDR3A_ZQ3CR1 = 0x0000005D;\r
-\r
-       //6.    Re-trigger PHY initialization in DDR PHY through the VBUSP interface.\r
-       //6.a.  Program 0x00000033 to the PHY Initialization Register (address offset 0x004) to re-trigger PLL, ZCAL, and DCAL initialization.\r
-\r
-       DDR3A_PIR = 0x00000033;\r
-\r
-       //6.b.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do { \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-\r
-\r
-       // 7.   Trigger DDR3 initialization and leveling/training in DDR PHY through the VBUSP interface.\r
-       // a.   If using a 16-bit wide DDR interface, program DXEN=0 in the DATX8 2-7 General Configuration Registers (address offsets 0x240, 0x280, 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.\r
-       // b.   If using a 32-bit wide DDR interface, program DXEN=0 in the DATX8 4-7 General Configuration Registers (address offsets 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.\r
-       // c.   If ECC is not required, program DXEN=0 in the DATX8 8 General Configuration Register (address offset 0x3C0) to disable the leveling/training for the ECC byte lane.\r
-       // NOTE: Setup supports 64-bit by default,  ECC enable by default.\r
-\r
-       //7.d.  Program 0x0000XF81 to the PHY Initialization Register (address offset 0x004) to trigger DDR3 initialization and leveling/training sequences \r
-\r
-       DDR3A_PIR = 0x0000FF81; //WLADJ - ON\r
-       //DDR3A_PIR = 0x00000781;  //WLADJ - OFF\r
-\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-       //7.e.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do {              \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-\r
-       /* End PHY Configuration */             \r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-       /* START EMIF INITIALIZATION\r
-  ++++++++++++++++++SDCFG Register Calculation+++++++++++++++++++\r
-  | 31 - 29  | 28 |27 - 25 | 24   | 23 - 22| 21 - 17 |\r
-  |SDRAM_TYPE|Rsvd|DDR_TERM| DDQS | DYN_ODT|  Rsvd   |\r
-  |  0x011   |  0 | 0x011  | 0x1  |   0x00 |   0x0   |\r
-\r
-  | 16-14 |13 - 12 |  11 - 8 |  7   |6 - 5 |  4  |  3  |  2  |  1 - 0  |\r
-  |   CWL | NM     |   CL    | Rsvd |IBANK | Rsvd|EBANK| Rsvd|PAGE_SIZE|\r
-  |  0x11 | 0x00   |  0x1110 |  0x0 | 0x11 | 0x0 |  0  |  0  |   0x10  |\r
-  SDCFG = 0x0110 0011 0010 0010 0011 0011 1011 0010\r
-  SDCFG = 0x6700486A;//0x63223332\r
-\r
-  SDRAM_TYPE = 3\r
-  DDR_TERM = 3 (RZQ/4 = 1; RZQ/6=3)\r
-  DDQS = 1 \r
-  DYN_ODT = 0 \r
-\r
-  CWL = 3 (CWL5=0; CWL6=1; CWL7=2; CWL8=3)\r
-  NM = 0 (64-bit=0, 32-bit=1, 16-bit=2)\r
-  CL = 14 (CL5=2; CL6=4; CL7=6; CL8=8; CL9=10; CL10=12; CL11=14)\r
-  IBANK = 3 (8bank)\r
-  EBANK = 0 (0 - pad_cs_o_n[0] , 1 - pad_cs_o_n[1:0])\r
-  PAGE_SIZE = 2 (1024page-size=2; 2048page-size=3)\r
-        */\r
-       /* Start DDR3A EMIF Configuration */\r
-       //8.    Configure the EMIF through the VBUSM interface.\r
-       //8.a.  Program all EMIF MMR\92s.\r
-       DDR3A_SDCFG    = 0x62009C62; // 9A62//0x62008C62        ;//0x6600CE62=single rank,0x6600CE6A=dual rank\r
-\r
-       DDR3A_SDTIM1   = 0x125C7C44;\r
-       DDR3A_SDTIM2   = 0x00001D08;\r
-       DDR3A_SDTIM3   = 0x31C1FF43;\r
-       DDR3A_SDTIM4   = 0x543F06AF;\r
-\r
-       DDR3A_ZQCFG    = 0x70073200;    \r
-       //8.b.  Program reg_initref_dis=0 in the SDRAM Refresh Control Register (address offset 0x10).\r
-       DDR3A_SDRFC = 0x00001457;\r
-\r
-       GEL_TextOut("DDR3A initialization complete \n");\r
-       /* End  DDR3A EMIF Configuration */\r
-}\r
-\r
-\r
-/*--------------------------------------------------\r
-                       DDR3A : DDR1600,64bit  \r
----------------------------------------------------*/\r
-\r
-ddr3A_64bit_DDR1600_setup()    \r
-{\r
-       unsigned int multiplier = 7;\r
-       unsigned int divider = 0;\r
-       int temp;\r
-       unsigned int OD_val = 2;\r
-       KICK0 = 0x83E70B13;\r
-       KICK1 = 0x95A4F1E0;\r
-\r
-\r
-       //1.    Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do { \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-       //4.    Clocks are enabled and frequency is stable---------------------------------------\r
-       //DDR3A PLL setup       \r
-       GEL_TextOut ( "DDR3 PLL (PLL2) Setup ... \n");\r
-       //DDR3APLLCTL0 = DDR3APLLCTL0 & 0xFF7FFFFF;\r
-       //      Set ENSAT = 1\r
-       DDR3APLLCTL1 |= 0x00000040;\r
-       // Put the PLL in PLL Mode  \r
-       DDR3APLLCTL0 |= 0x00800000;\r
-       // In PLL Controller, reset the PLL (bit 13 in DDR3APLLCTL1 register) \r
-       DDR3APLLCTL1 |= 0x00002000;\r
-       // Program the necessary multipliers/dividers and BW adjustments            \r
-       // Set the divider values \r
-       DDR3APLLCTL0 &= ~(0x0000003F);\r
-       DDR3APLLCTL0 |= (divider & 0x0000003F);\r
-       /* Step 7: Programming OD[3:0] in the SECCTL register */            \r
-       DDR3APLLCTL0 &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field\r
-       DDR3APLLCTL0 |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    \r
-\r
-       /* Set the Multipler values */\r
-       DDR3APLLCTL0 &= ~(0x0007FFC0);\r
-       DDR3APLLCTL0 |= ((multiplier << 6) & 0x0007FFC0 );\r
-       temp = ((multiplier + 1) >> 1) - 1;\r
-       DDR3APLLCTL0 &= ~(0xFF000000); \r
-       DDR3APLLCTL0 |= ((temp << 24) & 0xFF000000);\r
-       DDR3APLLCTL1 &= ~(0x0000000F);\r
-       DDR3APLLCTL1 |= ((temp >> 8) & 0x0000000F);\r
-       //In DDR3PLLCTL1, write PLLRST = 0 to bring PLL out of reset \r
-       DDR3APLLCTL1 &= ~(0x00002000);\r
-       // Put the PLL in PLL Mode  \r
-       DDR3APLLCTL0 &= ~(0x00800000); // ReSet the Bit 23\r
-       GEL_TextOut( "DDR3 PLL Setup complete, DDR3A clock now running at 666 MHz.\n" );\r
-       //DDR3A PLL setup complete ---------------------------------------\r
-\r
-       /*------------------------- Start PHY Configuration -------------------------------*/\r
-\r
-       //DDR3A_PGCR1 = 0x0280C487;\r
-\r
-       //5.a   Program FRQSEL in the PLL Control Register (address offset 0x018).\r
-       DDR3A_PLLCR = 0x1C000; //Set FRQSEL=00, for ctl_clk between 335-533MHz\r
-\r
-       //5.b.  Program WLSTEP=1, IODDRM=1, and ZCKSEL in the PHY General Configuration Register 1 (address offset 0x00C). \r
-       DDR3A_PGCR1 |= (1 << 2); //WLSTEP = 1\r
-\r
-       DDR3A_PGCR1 &= ~(IODDRM_MASK);\r
-       DDR3A_PGCR1 |= (( 1 << 7) & IODDRM_MASK);\r
-\r
-\r
-       DDR3A_PGCR1 &= ~(ZCKSEL_MASK);\r
-       DDR3A_PGCR1 |= (( 1 << 23) & ZCKSEL_MASK);\r
-\r
-\r
-       //5.c.  Program PHY Timing Parameters Register 0-4 (address offset 0x01C - 0x02C).\r
-\r
-       DDR3A_PTR0 = 0x426213CF;\r
-\r
-       DDR3A_PTR1 = 0xCFC712B3;\r
-\r
-       // Maintaining default values of Phy Timing Parameters Register 2 in PUB\r
-\r
-       DDR3A_PTR3 = 0x08861A80;//0x072515C2; //0x0B4515C2;//0x18061A80; \r
-\r
-       DDR3A_PTR4 = 0x0C827100;//0x0AAE7100;\r
-\r
-       //5.d.  Program PDQ, MPRDQ, and BYTEMASK in the DRAM Configuration Register (address offset 0x044). \r
-       //              All other fields must be left at their default values.\r
-\r
-       DDR3A_DCR &= ~(PDQ_MASK); //PDQ = 0\r
-\r
-       DDR3A_DCR &= ~(MPRDQ_MASK); //MPRDQ = 0\r
-\r
-       DDR3A_DCR &= ~(BYTEMASK_MASK);\r
-       DDR3A_DCR |= (( 1 << 10) & BYTEMASK_MASK);\r
-\r
-\r
-       DDR3A_DCR &= ~(NOSRA_MASK);\r
-       DDR3A_DCR |= (( 1 << 27) & NOSRA_MASK);\r
-\r
-\r
-       //DDR3A_DCR &= ~(UDIMM_MASK);\r
-       //DDR3A_DCR |= (( 1 << 29) & UDIMM_MASK);\r
-\r
-\r
-       //5.e.  Program DRAM Timing Parameters Register 0-2 (address offset 0x048 - 0x050). \r
-\r
-       DDR3A_DTPR0 = 0x011CBB66;//0x85589975;//0x8558AA55;\r
-       DDR3A_DTPR1 = 0x12840300;//0x12835A80;//0x12857280;\r
-       DDR3A_DTPR2 = 0x5002CE00;\r
-\r
-       //5.f.  Program BL=0, CL, WR, and PD=1 in the Mode Register 0 (address offset 0x054). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_MR0 = 0x00001C70; //50\r
-\r
-\r
-       //5.g.  Program DIC, RTT, and TDQS in the Mode Register 1 (address offset 0x058). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_MR1 = 0x00000006;\r
-\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-       //5.h.  Program Mode Register 2 (address offset 0x05C).\r
-       // Maintaining default values of Program Mode Register 2\r
-       DDR3A_MR2 = 0x00000058;\r
-\r
-       //5.i.  Program DTMPR=1, DTEXD, DTEXG, RANKEN=1 or 3, and RFSHDT=7 in the Data Training Configuration Register (address offset 0x068). \r
-       //All other fields must be left at their default values.\r
-       DDR3A_DTCR = 0x710035C7; //0x730035C7;\r
-\r
-       //5.j.  Program tREFPRD=(5*tREFI/ddr_clk_period) in the PHY General Configuration Register 2 (address offset 0x08C). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_PGCR2 = 0x00F07A12; //NOBUB = 0, FXDLAT = 0       \r
-       //DDR3A_PGCR2 = 0x00F83D09; //NOBUB = 0, FXDLAT = 1 \r
-\r
-       //Set Impedence Register        \r
-       DDR3A_ZQ0CR1 = 0x0000007B; \r
-       DDR3A_ZQ1CR1 = 0x0000007B;\r
-       DDR3A_ZQ2CR1 = 0x0000007B;\r
-       //DDR3A_ZQ3CR1 = 0x0000005D;\r
-\r
-       //6.    Re-trigger PHY initialization in DDR PHY through the VBUSP interface.\r
-       //6.a.  Program 0x00000033 to the PHY Initialization Register (address offset 0x004) to re-trigger PLL, ZCAL, and DCAL initialization.\r
-\r
-       DDR3A_PIR = 0x00000033;\r
-\r
-       //6.b.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do { \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-\r
-\r
-       // 7.   Trigger DDR3 initialization and leveling/training in DDR PHY through the VBUSP interface.\r
-       // a.   If using a 16-bit wide DDR interface, program DXEN=0 in the DATX8 2-7 General Configuration Registers (address offsets 0x240, 0x280, 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.\r
-       // b.   If using a 32-bit wide DDR interface, program DXEN=0 in the DATX8 4-7 General Configuration Registers (address offsets 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.\r
-       // c.   If ECC is not required, program DXEN=0 in the DATX8 8 General Configuration Register (address offset 0x3C0) to disable the leveling/training for the ECC byte lane.\r
-       // NOTE: Setup supports 64-bit by default,  ECC enable by default.\r
-\r
-       //7.d.  Program 0x0000XF81 to the PHY Initialization Register (address offset 0x004) to trigger DDR3 initialization and leveling/training sequences \r
-\r
-       DDR3A_PIR = 0x0000FF81; //WLADJ - ON\r
-       //DDR3A_PIR = 0x00000781;  //WLADJ - OFF\r
-\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-       //7.e.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do {              \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-\r
-       /* End PHY Configuration */             \r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-       /* START EMIF INITIALIZATION\r
-  ++++++++++++++++++SDCFG Register Calculation+++++++++++++++++++\r
-  | 31 - 29  | 28 |27 - 25 | 24   | 23 - 22| 21 - 17 |\r
-  |SDRAM_TYPE|Rsvd|DDR_TERM| DDQS | DYN_ODT|  Rsvd   |\r
-  |  0x011   |  0 | 0x011  | 0x1  |   0x00 |   0x0   |\r
-\r
-  | 16-14 |13 - 12 |  11 - 8 |  7   |6 - 5 |  4  |  3  |  2  |  1 - 0  |\r
-  |   CWL | NM     |   CL    | Rsvd |IBANK | Rsvd|EBANK| Rsvd|PAGE_SIZE|\r
-  |  0x11 | 0x00   |  0x1110 |  0x0 | 0x11 | 0x0 |  0  |  0  |   0x10  |\r
-  SDCFG = 0x0110 0011 0010 0010 0011 0011 1011 0010\r
-  SDCFG = 0x6700486A;//0x63223332\r
-\r
-  SDRAM_TYPE = 3\r
-  DDR_TERM = 3 (RZQ/4 = 1; RZQ/6=3)\r
-  DDQS = 1 \r
-  DYN_ODT = 0 \r
-\r
-  CWL = 3 (CWL5=0; CWL6=1; CWL7=2; CWL8=3)\r
-  NM = 0 (64-bit=0, 32-bit=1, 16-bit=2)\r
-  CL = 14 (CL5=2; CL6=4; CL7=6; CL8=8; CL9=10; CL10=12; CL11=14)\r
-  IBANK = 3 (8bank)\r
-  EBANK = 0 (0 - pad_cs_o_n[0] , 1 - pad_cs_o_n[1:0])\r
-  PAGE_SIZE = 2 (1024page-size=2; 2048page-size=3)\r
-        */\r
-       /* Start DDR3A EMIF Configuration */\r
-       //8.    Configure the EMIF through the VBUSM interface.\r
-       //8.a.  Program all EMIF MMR\92s.\r
-       DDR3A_SDCFG    = 0x6200CE62; // 9A62//0x62008C62        ;//0x6600CE62=single rank,0x6600CE6A=dual rank\r
-\r
-       DDR3A_SDTIM1   = 0x166C9455;\r
-       DDR3A_SDTIM2   = 0x00001D4A;\r
-       DDR3A_SDTIM3   = 0x321DFF53;\r
-       DDR3A_SDTIM4   = 0x543F07FF;\r
-\r
-       DDR3A_ZQCFG    = 0x042D3B70;//0x70073200;       \r
-       //8.b.  Program reg_initref_dis=0 in the SDRAM Refresh Control Register (address offset 0x10).\r
-       DDR3A_SDRFC = 0x00001869;\r
-\r
-       GEL_TextOut("DDR3A initialization complete \n");\r
-       /* End  DDR3A EMIF Configuration */\r
-}\r
-\r
-\r
-/*--------------------------------------------------\r
-                       DDR3A : DDR1600,32bit  \r
----------------------------------------------------*/\r
-\r
-ddr3A_32bit_DDR1600_setup()    \r
-{\r
-       unsigned int multiplier = 7;\r
-       unsigned int divider = 0;\r
-       int temp;\r
-       unsigned int OD_val = 2;\r
-       KICK0 = 0x83E70B13;\r
-       KICK1 = 0x95A4F1E0;\r
-\r
-\r
-       //1.    Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do { \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-       //4.    Clocks are enabled and frequency is stable---------------------------------------\r
-       //DDR3A PLL setup       \r
-       GEL_TextOut ( "DDR3 PLL (PLL2) Setup ... \n");\r
-       //DDR3APLLCTL0 = DDR3APLLCTL0 & 0xFF7FFFFF;\r
-       //      Set ENSAT = 1\r
-       DDR3APLLCTL1 |= 0x00000040;\r
-       // Put the PLL in PLL Mode  \r
-       DDR3APLLCTL0 |= 0x00800000;\r
-       // In PLL Controller, reset the PLL (bit 13 in DDR3APLLCTL1 register) \r
-       DDR3APLLCTL1 |= 0x00002000;\r
-       // Program the necessary multipliers/dividers and BW adjustments            \r
-       // Set the divider values \r
-       DDR3APLLCTL0 &= ~(0x0000003F);\r
-       DDR3APLLCTL0 |= (divider & 0x0000003F);\r
-       /* Step 7: Programming OD[3:0] in the SECCTL register */            \r
-       DDR3APLLCTL0 &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field\r
-       DDR3APLLCTL0 |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    \r
-\r
-       /* Set the Multipler values */\r
-       DDR3APLLCTL0 &= ~(0x0007FFC0);\r
-       DDR3APLLCTL0 |= ((multiplier << 6) & 0x0007FFC0 );\r
-       temp = ((multiplier + 1) >> 1) - 1;\r
-       DDR3APLLCTL0 &= ~(0xFF000000); \r
-       DDR3APLLCTL0 |= ((temp << 24) & 0xFF000000);\r
-       DDR3APLLCTL1 &= ~(0x0000000F);\r
-       DDR3APLLCTL1 |= ((temp >> 8) & 0x0000000F);\r
-       //In DDR3PLLCTL1, write PLLRST = 0 to bring PLL out of reset \r
-       DDR3APLLCTL1 &= ~(0x00002000);\r
-       // Put the PLL in PLL Mode  \r
-       DDR3APLLCTL0 &= ~(0x00800000); // ReSet the Bit 23\r
-       GEL_TextOut( "DDR3 PLL Setup complete, DDR3A clock now running at 666 MHz.\n" );\r
-       //DDR3A PLL setup complete ---------------------------------------\r
-\r
-       /*------------------------- Start PHY Configuration -------------------------------*/\r
-\r
-       //DDR3A_PGCR1 = 0x0280C487;\r
-\r
-       //5.a   Program FRQSEL in the PLL Control Register (address offset 0x018).\r
-       DDR3A_PLLCR = 0x1C000; //Set FRQSEL=00, for ctl_clk between 335-533MHz\r
-\r
-       //5.b.  Program WLSTEP=1, IODDRM=1, and ZCKSEL in the PHY General Configuration Register 1 (address offset 0x00C). \r
-       DDR3A_PGCR1 |= (1 << 2); //WLSTEP = 1\r
-\r
-       DDR3A_PGCR1 &= ~(IODDRM_MASK);\r
-       DDR3A_PGCR1 |= (( 1 << 7) & IODDRM_MASK);\r
-\r
-\r
-       DDR3A_PGCR1 &= ~(ZCKSEL_MASK);\r
-       DDR3A_PGCR1 |= (( 1 << 23) & ZCKSEL_MASK);\r
-\r
-\r
-       //5.c.  Program PHY Timing Parameters Register 0-4 (address offset 0x01C - 0x02C).\r
-\r
-       DDR3A_PTR0 = 0x426213CF;\r
-\r
-       DDR3A_PTR1 = 0xCFC712B3;\r
-\r
-       // Maintaining default values of Phy Timing Parameters Register 2 in PUB\r
-\r
-       DDR3A_PTR3 = 0x08861A80;//0x072515C2; //0x0B4515C2;//0x18061A80; \r
-\r
-       DDR3A_PTR4 = 0x0C827100;//0x0AAE7100;\r
-\r
-       //5.d.  Program PDQ, MPRDQ, and BYTEMASK in the DRAM Configuration Register (address offset 0x044). \r
-       //              All other fields must be left at their default values.\r
-\r
-       DDR3A_DCR &= ~(PDQ_MASK); //PDQ = 0\r
-\r
-       DDR3A_DCR &= ~(MPRDQ_MASK); //MPRDQ = 0\r
-\r
-       DDR3A_DCR &= ~(BYTEMASK_MASK);\r
-       DDR3A_DCR |= (( 1 << 10) & BYTEMASK_MASK);\r
-\r
-\r
-       DDR3A_DCR &= ~(NOSRA_MASK);\r
-       DDR3A_DCR |= (( 1 << 27) & NOSRA_MASK);\r
-\r
-\r
-       //DDR3A_DCR &= ~(UDIMM_MASK);\r
-       //DDR3A_DCR |= (( 1 << 29) & UDIMM_MASK);\r
-\r
-\r
-       //5.e.  Program DRAM Timing Parameters Register 0-2 (address offset 0x048 - 0x050). \r
-\r
-       DDR3A_DTPR0 = 0x011CBB66;//0x85589975;//0x8558AA55;\r
-       DDR3A_DTPR1 = 0x12840300;//0x12835A80;//0x12857280;\r
-       DDR3A_DTPR2 = 0x5002CE00;\r
-\r
-       //5.f.  Program BL=0, CL, WR, and PD=1 in the Mode Register 0 (address offset 0x054). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_MR0 = 0x00001C70; //50\r
-\r
-\r
-       //5.g.  Program DIC, RTT, and TDQS in the Mode Register 1 (address offset 0x058). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_MR1 = 0x00000006;\r
-\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-       //5.h.  Program Mode Register 2 (address offset 0x05C).\r
-       // Maintaining default values of Program Mode Register 2\r
-       DDR3A_MR2 = 0x00000058;\r
-\r
-       //5.i.  Program DTMPR=1, DTEXD, DTEXG, RANKEN=1 or 3, and RFSHDT=7 in the Data Training Configuration Register (address offset 0x068). \r
-       //All other fields must be left at their default values.\r
-       DDR3A_DTCR = 0x710035C7; //0x730035C7;\r
-\r
-       //5.j.  Program tREFPRD=(5*tREFI/ddr_clk_period) in the PHY General Configuration Register 2 (address offset 0x08C). \r
-       //All other fields must be left at their default values.\r
-\r
-       DDR3A_PGCR2 = 0x00F07A12; //NOBUB = 0, FXDLAT = 0       \r
-       //DDR3A_PGCR2 = 0x00F83D09; //NOBUB = 0, FXDLAT = 1 \r
-\r
-       //Set Impedence Register        \r
-       DDR3A_ZQ0CR1 = 0x0000007B; \r
-       DDR3A_ZQ1CR1 = 0x0000007B;\r
-       DDR3A_ZQ2CR1 = 0x0000007B;\r
-       //DDR3A_ZQ3CR1 = 0x0000005D;\r
-\r
-       //6.    Re-trigger PHY initialization in DDR PHY through the VBUSP interface.\r
-       //6.a.  Program 0x00000033 to the PHY Initialization Register (address offset 0x004) to re-trigger PLL, ZCAL, and DCAL initialization.\r
-\r
-       DDR3A_PIR = 0x00000033;\r
-\r
-       //6.b.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do { \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-\r
-\r
-       // 7.   Trigger DDR3 initialization and leveling/training in DDR PHY through the VBUSP interface.\r
-       // a.   If using a 16-bit wide DDR interface, program DXEN=0 in the DATX8 2-7 General Configuration Registers (address offsets 0x240, 0x280, 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.\r
-       // b.   If using a 32-bit wide DDR interface, program DXEN=0 in the DATX8 4-7 General Configuration Registers (address offsets 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.\r
-       // c.   If ECC is not required, program DXEN=0 in the DATX8 8 General Configuration Register (address offset 0x3C0) to disable the leveling/training for the ECC byte lane.\r
-       // NOTE: Setup supports 64-bit by default,  ECC enable by default.\r
-\r
-       //7.d.  Program 0x0000XF81 to the PHY Initialization Register (address offset 0x004) to trigger DDR3 initialization and leveling/training sequences \r
-\r
-       DDR3A_PIR = 0x0000FF81; //WLADJ - ON\r
-       //DDR3A_PIR = 0x00000781;  //WLADJ - OFF\r
-\r
-\r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-\r
-       //7.e.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).\r
-       do {              \r
-               read_val = DDR3A_PGSR0;\r
-       } while ((read_val&0x00000001) != 0x00000001);\r
-\r
-\r
-       /* End PHY Configuration */             \r
-       //---------------------------------------------------------------------------------------------------------                                     \r
-       /* START EMIF INITIALIZATION\r
-  ++++++++++++++++++SDCFG Register Calculation+++++++++++++++++++\r
-  | 31 - 29  | 28 |27 - 25 | 24   | 23 - 22| 21 - 17 |\r
-  |SDRAM_TYPE|Rsvd|DDR_TERM| DDQS | DYN_ODT|  Rsvd   |\r
-  |  0x011   |  0 | 0x011  | 0x1  |   0x00 |   0x0   |\r
-\r
-  | 16-14 |13 - 12 |  11 - 8 |  7   |6 - 5 |  4  |  3  |  2  |  1 - 0  |\r
-  |   CWL | NM     |   CL    | Rsvd |IBANK | Rsvd|EBANK| Rsvd|PAGE_SIZE|\r
-  |  0x11 | 0x00   |  0x1110 |  0x0 | 0x11 | 0x0 |  0  |  0  |   0x10  |\r
-  SDCFG = 0x0110 0011 0010 0010 0011 0011 1011 0010\r
-  SDCFG = 0x6700486A;//0x63223332\r
-\r
-  SDRAM_TYPE = 3\r
-  DDR_TERM = 3 (RZQ/4 = 1; RZQ/6=3)\r
-  DDQS = 1 \r
-  DYN_ODT = 0 \r
-\r
-  CWL = 3 (CWL5=0; CWL6=1; CWL7=2; CWL8=3)\r
-  NM = 0 (64-bit=0, 32-bit=1, 16-bit=2)\r
-  CL = 14 (CL5=2; CL6=4; CL7=6; CL8=8; CL9=10; CL10=12; CL11=14)\r
-  IBANK = 3 (8bank)\r
-  EBANK = 0 (0 - pad_cs_o_n[0] , 1 - pad_cs_o_n[1:0])\r
-  PAGE_SIZE = 2 (1024page-size=2; 2048page-size=3)\r
-        */\r
-       /* Start DDR3A EMIF Configuration */\r
-       //8.    Configure the EMIF through the VBUSM interface.\r
-       //8.a.  Program all EMIF MMR\92s.\r
-       DDR3A_SDCFG    = 0x6200DE62; // 9A62//0x62008C62        ;//0x6600CE62=single rank,0x6600CE6A=dual rank\r
-\r
-       DDR3A_SDTIM1   = 0x166C9455;\r
-       DDR3A_SDTIM2   = 0x00001D4A;\r
-       DDR3A_SDTIM3   = 0x321DFF53;\r
-       DDR3A_SDTIM4   = 0x543F07FF;\r
-\r
-       DDR3A_ZQCFG    = 0x70073200;    \r
-       //8.b.  Program reg_initref_dis=0 in the SDRAM Refresh Control Register (address offset 0x10).\r
-       DDR3A_SDRFC = 0x00001869;\r
-\r
-       GEL_TextOut("DDR3A initialization complete \n");\r
-       /* End  DDR3A EMIF Configuration */\r
-}\r
-\r
-/*--------------------------------------------------------------*/\r
-/* TCI66x MENU                                              */\r
-/*--------------------------------------------------------------*/\r
-\r
-menuitem "TCI66x Functions";\r
-\r
-/****************************************************************************\r
- *\r
- * NAME\r
- *      Global_Default_Setup\r
- *\r
- * PURPOSE:\r
- *      Setup almost everything ready for a new debug session:\r
- *      DSP modules and EVM board modules.\r
- *\r
- * USAGE\r
- *      This routine can be called as:\r
- *\r
- *      Global_Default_Setup()\r
- *\r
- * RETURN VALUE\r
- *      NONE\r
- *\r
- * REFERENCE\r
- *\r
- ****************************************************************************/\r
-hotmenu Global_Default_Setup()\r
-{\r
-       GEL_TextOut( "Global Default Setup...\n" );\r
-       Global_Default_Setup_Silent();\r
-       GEL_TextOut( "Global Default Setup... Done.\n" );\r
-}\r
-\r
-hotmenu Reset()\r
-{\r
-       GEL_Reset();\r
-}\r
-\r
-hotmenu InitXMC()\r
-{\r
-       xmc_setup();\r
-}\r
-\r
-hotmenu CORE_PLL_INIT_100MHZ_to_614_28MHz()\r
-{\r
-       Set_Pll1(1); // call Set_Pll1 with index = 1 -> 100 MHz to 614.28 MHz operation \r
-}\r
-\r
-hotmenu CORE_PLL_INIT_100MHZ_to_737_5MHz()\r
-{\r
-       Set_Pll1(2); // call Set_Pll1 with index = 2 -> 100 MHz to 737.5 MHz operation \r
-}\r
-\r
-hotmenu CORE_PLL_INIT_100MHZ_to_1GHz()\r
-{\r
-       Set_Pll1(3); // call Set_Pll1 with index = 3 -> 100 MHz to 1 GHz operation \r
-}\r
-\r
-hotmenu CORE_PLL_INIT_100MHZ_to_1_2GHz()\r
-{\r
-       Set_Pll1(4); // call Set_Pll1 with index = 4 -> 100 MHz  to 1.2 GHz operation \r
-}\r
-\r
-\r
-hotmenu CORE_PLL_INIT_100MHZ_to_1_35Gz()\r
-{\r
-       Set_Pll1(5); // call Set_Pll1 with index = 5 -> 100 MHz  to 1.35 GHz operation \r
-}\r
-\r
-hotmenu TETRIS_POWERUP_AND_PLL_INIT_100MHZ_to_1000MHz()\r
-{\r
-       Set_Tetris_Pll(1); // 100 MHz to 1.0 GHz operation \r
-}\r
-\r
-hotmenu TETRIS_POWERUP_AND_PLL_INIT_100MHZ_to_1400MHz()\r
-{\r
-       Set_Tetris_Pll(2); // 100 MHz to 1.4 GHz operation \r
-}\r
-\r
-hotmenu TETRIS_POWERUP_AND_PLL_INIT_175MHZ_to_1400MHz()\r
-{\r
-       Set_Tetris_Pll(3); // 175 MHz to 1.4 GHz operation \r
-}\r
-\r
-\r
-hotmenu PA_PLL_COnfig()\r
-{\r
-       PaPllConfig();\r
-}\r
-\r
-hotmenu InitDDR3A_32bit_DDR800()\r
-{\r
-       ddr3A_32bit_DDR800_setup();\r
-}   \r
-\r
-hotmenu InitDDR3A_32bit_DDR1066()\r
-{\r
-       ddr3A_32bit_DDR1066_setup();\r
-} \r
-hotmenu InitDDR3A_32bit_DDR1333()\r
-{\r
-       ddr3A_32bit_DDR1333_setup();\r
-}   \r
-\r
-hotmenu InitDDR3A_32bit_DDR1600()\r
-{\r
-       ddr3A_32bit_DDR1600_setup();\r
-} \r
-hotmenu InitDDR3A_64bit_DDR1600()\r
-{\r
-       ddr3A_64bit_DDR1600_setup();\r
-} \r
-///* Function to enable CORE PLL observation clock for PLL output *///\r
-hotmenu ENABLE_CORE_PLL_OBSCLK()\r
-{\r
-       /* Unlock Chip Level Registers */\r
-       KICK0 = KICK0_UNLOCK;\r
-       KICK1 = KICK1_UNLOCK;\r
-\r
-       /* set bit 1 to enable power to the CORE PLL observation clock, clear bit 0 to view the CORE PLL observation (output) clock */\r
-       OBSCLKCTL |= (1 << 1);  /* set bit 1 to enable power to the observation clock */\r
-       OBSCLKCTL &= ~(1 << 0); /* clear bit 0 to view the CORE PLL clock */ \r
-\r
-       /* Lock Chip Level Registers */\r
-       KICK0 = 0x00000000;\r
-       KICK1 = 0x00000000;\r
-\r
-       GEL_TextOut("CORE PLL observation clock enabled and configured to show CORE PLL output\n");\r
-}\r
-\r
-/* Function to enable DDR PLL observation clock for PLL output */\r
-hotmenu ENABLE_DDR_PLL_OBSCLK ()\r
-{\r
-       /* Unlock Chip Level Registers */\r
-       KICK0 = KICK0_UNLOCK;\r
-       KICK1 = KICK1_UNLOCK;\r
-\r
-       /* set bit 1 to enable power to the CORE PLL observation clock, clear bit 0 to view the CORE PLL observation (output) clock */\r
-       OBSCLKCTL |= (1 << 3);  /* set bit 3 to enable power to the observation clock */\r
-       OBSCLKCTL |= (1 << 2);  /* set bit 2 to view the DDR PLL clock */ \r
-\r
-       /* Lock Chip Level Registers */\r
-       //KICK0 = 0x00000000;\r
-       // KICK1 = 0x00000000;\r
-\r
-       GEL_TextOut("DDR PLL observation clock enabled and configured to show DDR PLL output\n");\r
-}\r
-\r
-hotmenu ENABLE_ARM_PLL_OBSCLK ()\r
-{\r
-       /* Unlock Chip Level Registers */\r
-       KICK0 = KICK0_UNLOCK;\r
-       KICK1 = KICK1_UNLOCK;\r
-\r
-       /* set bit 1 to enable power to the CORE PLL observation clock, clear bit 0 to view the CORE PLL observation (output) clock */\r
-       //OBSCLKCTL |= (1 << 3);  /* set bit 3 to enable power to the observation clock */\r
-       OBSCLKCTL |= (1 << 6);  /* set bit 2 to view the DDR PLL clock */ \r
-\r
-       /* Lock Chip Level Registers */\r
-       KICK0 = 0x00000000;\r
-       KICK1 = 0x00000000;\r
-\r
-       GEL_TextOut("DDR PLL observation clock enabled and configured to show DDR PLL output\n");\r
-}\r
-\r
-hotmenu ENABLE_PA_PLL_OBSCLK ()\r
-{\r
-       /* Unlock Chip Level Registers */\r
-       KICK0 = KICK0_UNLOCK;\r
-       KICK1 = KICK1_UNLOCK;\r
-\r
-       /* set bit 1 to enable power to the CORE PLL observation clock, clear bit 0 to view the CORE PLL observation (output) clock */\r
-       OBSCLKCTL |= (1 << 4);  /* set bit 3 to enable power to the observation clock */\r
-       OBSCLKCTL |= (1 << 5);  /* set bit 2 to view the DDR PLL clock */ \r
-\r
-       /* Lock Chip Level Registers */\r
-       KICK0 = 0x00000000;\r
-       KICK1 = 0x00000000;\r
-\r
-       GEL_TextOut("DDR PLL observation clock enabled and configured to show DDR PLL output\n");\r
-}\r
-\r
-hotmenu ddr3A_write_read_test()\r
-{\r
-       //int data_set[4];\r
-       //= {0xAAAAAAAA, 0x55555555, 0xFFFFFFFF, 0x00000000};\r
-       unsigned int write_data = 0xAAAAAAAA;\r
-       unsigned int read_data = 0x0;\r
-       unsigned int errors = 0;\r
-       int dw;\r
-       unsigned int i, mem_start, mem_size, mem_location;\r
-       mem_start = DDR3A_BASE_ADDRESS + (DNUM * 0x01000000);\r
-       mem_size = 0x100;\r
-       for(dw=0;dw<4;dw++)\r
-       {\r
-               if (dw == 0) write_data = 0xAAAAAAAA;\r
-               if (dw == 1) write_data = 0x55555555;\r
-               if (dw == 2) write_data = 0xFFFFFFFF;\r
-               if (dw == 3) write_data = 0x00000000;\r
-               mem_location = mem_start;\r
-               GEL_TextOut( "Memory Test Write Core: %d, Mem Start: 0x%x, Mem Size: 0x%x, value: 0x%x ...\n",,2,,,DNUM,mem_start,mem_size,write_data);\r
-               for(i=0;i<mem_size;i++)\r
-               {\r
-                       *( unsigned int* )(mem_location) = write_data;\r
-                       mem_location += 4;\r
-               }\r
-               mem_location = mem_start;\r
-               GEL_TextOut( "Memory Test Read Core: %d, Mem Start: 0x%x, Mem Size: 0x%x ...\n",,2,,,DNUM,mem_start,mem_size);\r
-               for (i=0;i<mem_size;i++)\r
-               {\r
-                       read_data = *( unsigned int* )(mem_location);\r
-                       if (read_data != write_data)\r
-                       {\r
-                               GEL_TextOut("DDR3 Data Error: DSP Core: %d, Mem Addr: 0x%x, read: 0x%x, expected: 0x%x \n",,2,,,DNUM,(DDR3_BASE_ADDRESS + (i * 4)),read_data,write_data);\r
-                               errors++;\r
-                       }\r
-                       mem_location += 4;\r
-               }\r
-               if (errors == 0)\r
-               {\r
-                       GEL_TextOut( "Memory Test Done, no errors found.\n" );\r
-               }\r
-               else\r
-               {\r
-                       GEL_TextOut("Memory Test Done, %d errors were encounterd. \n",,2,,,errors);\r
-               }\r
-       }\r
-       GEL_TextOut( "All Memory Test Completed on core: %d with %d errors.\n",,2,,,DNUM,errors);\r
-\r
-}\r
-\r
-menuitem "DSP CLOCK Estimation";\r
-\r
-#define TIMER_TSC             (1)    // The timer used for polling TSCH/TSCL  \r
-#define TIMER_TSC_POLL_PERIOD (10)   // Every 10 seconds\r
-unsigned int gPollPeriod = TIMER_TISC_POLL_PERIOD;\r
-unsigned int gTSCL = 0;\r
-unsigned int gTSCH = 0;              // Global var for holding previous read of TSCL/H\r
-unsigned int gNumberPoll=0;          // Number of pulling */\r
-unsigned int gLoopCount=0;\r
-\r
-\r
-\r
-hotmenu dspEnableTsc()\r
-{\r
-       //GEL_TextOut( "dspEnableTsc - write a value to TSCL to enable it\n" );\r
-       if( GEL_IsHalted() ) {\r
-               TSCL = 0;  // A write to TSCL will enable TSC (timestamp counter)\r
-               GEL_Run();\r
-       } else {\r
-               GEL_Halt();\r
-               TSCL = 0;\r
-               GEL_Run();\r
-       }\r
-}\r
-\r
-\r
-hotmenu dspDumpTsc()\r
-{\r
-       unsigned int tscl, tsch;\r
-       tscl = TSCL;  /* note: need to read TSCL first */\r
-       tsch = TSCH;\r
-       GEL_TextOut( "dspEnableTsc - TSCH=%x, TSCL=%x\n",,,,, tscl, tsch );\r
-}\r
-\r
-\r
-dspPollTsc()\r
-{\r
-       unsigned int tscl, tsch;\r
-       unsigned long long tsc1, tsc2;\r
-\r
-       if( gLoopCount <= gNumberPoll) { \r
-               //GEL_EnableRealtime();\r
-               GEL_Halt();\r
-               tscl = TSCL;            /* The read time can be considered as variations */\r
-               tsch = TSCH;            /* The read won't cause variation */\r
-               //GEL_DisableRealtime();\r
-               GEL_Run();\r
-               tsc2  = (((unsigned long long) tsch)<<32) +  tscl;\r
-               tsc1  = (((unsigned long long)gTSCH)<<32) + gTSCL;\r
-               gTSCL = tscl;\r
-               gTSCH = tsch;\r
-\r
-               //tsc1 = (tsc2-tsc1)/TIMER_TSC_POLL_PERIOD;\r
-               tsc1 = (tsc2-tsc1)/gPollPeriod;\r
-\r
-               GEL_TextOut( "dspPollTsc - [TSCH,TSCL] = [%x, %x], freq=%dhz, i=%d\n",,,,,\r
-                               gTSCH, gTSCL, (tsc1), gLoopCount);\r
-       }\r
-\r
-       if( gLoopCount>=gNumberPoll ) {\r
-               dspCancelTscTimer();\r
-       } else {  \r
-               gLoopCount++;\r
-       }\r
-}\r
-\r
-\r
-//\r
-// To cancel the Timer - TIMER_TSC, after using it. Otherwise, it will continue running.\r
-//\r
-hotmenu dspCancelTscTimer()\r
-{\r
-       GEL_TextOut( "dspCancelTscTimer\n");\r
-       GEL_CancelTimer( TIMER_TSC );\r
-}\r
-\r
-\r
-//\r
-// To poll the DSP clock.\r
-//\r
-dialog dspPollDSPClockFreq(\r
-               pollPeriod   "Polling period (sec) - the longer, the more accurate!",\r
-               numberOfPoll "Number of Polls" )\r
-{\r
-       gPollPeriod = pollPeriod;\r
-\r
-       GEL_TextOut( "dspPollDSPClockFreq with - pollPeriod=%dsec, numberOfPoll=%d\n"\r
-                       ,,,,, gPollPeriod, numberOfPoll);\r
-\r
-       gNumberPoll = numberOfPoll-1;\r
-       gLoopCount  = 0;\r
-       dspEnableTsc();\r
-\r
-       // Get the initial value of TSC\r
-       //GEL_EnableRealtime();\r
-       GEL_Halt();\r
-       gTSCL = TSCL;            /* The read time can be considered as variations */\r
-       gTSCH = TSCH;            /* The read won't cause variation */\r
-       //GEL_DisableRealtime();\r
-       GEL_Run();\r
-\r
-       GEL_SetTimer( gPollPeriod*1000, TIMER_TSC, "dspPollTsc()");\r
-\r
-}\r
-\r
-\r
-\r
-#define MDIO_VERSION_REG            (*(unsigned int *) (0x24200F00 + 0x00))\r
-/* mdio_user_access_reg */\r
-#define MDIO_USER_ACCESS_REG            (*(unsigned int *) (0x24200F00 + 0x80))\r
-#define MDIO_USER_CONTROL_REG            (*(unsigned int *) (0x24200F00 + 0x04))\r
-#define MDIO_USER_INT_MASK_REG            (*(unsigned int *) (0x24200F00 + 0x28))\r
-\r
-/* shift and mask for MDIO_USER_ACCESS_REG */\r
-#define CSL_MDIO_USER_ACCESS_REG_DATA_MASK (0x0000FFFFu)\r
-#define CSL_MDIO_USER_ACCESS_REG_DATA_SHIFT (0x00000000u)\r
-#define CSL_MDIO_USER_ACCESS_REG_DATA_RESETVAL (0x00000000u)\r
-\r
-#define CSL_MDIO_USER_ACCESS_REG_PHYADR_MASK (0x001F0000u)\r
-#define CSL_MDIO_USER_ACCESS_REG_PHYADR_SHIFT (0x00000010u)\r
-#define CSL_MDIO_USER_ACCESS_REG_PHYADR_RESETVAL (0x00000000u)\r
-\r
-#define CSL_MDIO_USER_ACCESS_REG_REGADR_MASK (0x03E00000u)\r
-#define CSL_MDIO_USER_ACCESS_REG_REGADR_SHIFT (0x00000015u)\r
-#define CSL_MDIO_USER_ACCESS_REG_REGADR_RESETVAL (0x00000000u)\r
-\r
-#define CSL_MDIO_USER_ACCESS_REG_ACK_MASK (0x20000000u)\r
-#define CSL_MDIO_USER_ACCESS_REG_ACK_SHIFT (0x0000001Du)\r
-#define CSL_MDIO_USER_ACCESS_REG_ACK_RESETVAL (0x00000000u)\r
-\r
-#define CSL_MDIO_USER_ACCESS_REG_WRITE_MASK (0x40000000u)\r
-#define CSL_MDIO_USER_ACCESS_REG_WRITE_SHIFT (0x0000001Eu)\r
-#define CSL_MDIO_USER_ACCESS_REG_WRITE_RESETVAL (0x00000000u)\r
-\r
-#define CSL_MDIO_USER_ACCESS_REG_GO_MASK (0x80000000u)\r
-#define CSL_MDIO_USER_ACCESS_REG_GO_SHIFT (0x0000001Fu)\r
-#define CSL_MDIO_USER_ACCESS_REG_GO_RESETVAL (0x00000000u)\r
-\r
-/*\r
-#define CSL_FMK(PER_REG_FIELD, val)                                         \\r
-    (((val) << CSL_##PER_REG_FIELD##_SHIFT) & CSL_##PER_REG_FIELD##_MASK)\r
-\r
-#define CSL_FEXT(reg, PER_REG_FIELD)                                        \\r
-    (((reg) & CSL_##PER_REG_FIELD##_MASK) >> CSL_##PER_REG_FIELD##_SHIFT)\r
-#endif\r
- */\r
-\r
-/* the Field MaKe macro */\r
-#define CSL_FMK(SHIFT, MASK, val)              (((val) << SHIFT) & MASK)\r
-\r
-/* the Field EXTract macro */\r
-#define CSL_FEXT(reg, SHIFT, MASK)             (((reg) & MASK) >> SHIFT)\r
-\r
-\r
-#define PHY_REG_PAGE_ADDR 22\r
-\r
-phy_hwwrite(unsigned short phy_addr, unsigned short addr, unsigned short val)\r
-{\r
-       unsigned int retVal=1;\r
-       unsigned int i, delay=2000;\r
-       \r
-       MDIO_USER_ACCESS_REG   =  CSL_FMK (CSL_MDIO_USER_ACCESS_REG_GO_SHIFT, CSL_MDIO_USER_ACCESS_REG_GO_MASK, 1u) |\r
-                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_WRITE_SHIFT, CSL_MDIO_USER_ACCESS_REG_WRITE_MASK, 1) |\r
-                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_REGADR_SHIFT, CSL_MDIO_USER_ACCESS_REG_REGADR_MASK, addr) |\r
-                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_PHYADR_SHIFT, CSL_MDIO_USER_ACCESS_REG_PHYADR_MASK, phy_addr) |\r
-                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_DATA_SHIFT, CSL_MDIO_USER_ACCESS_REG_DATA_MASK, val);\r
-\r
-       \r
-       while(1)\r
-       {\r
-               retVal=CSL_FEXT(MDIO_USER_ACCESS_REG, CSL_MDIO_USER_ACCESS_REG_GO_SHIFT, CSL_MDIO_USER_ACCESS_REG_GO_MASK);\r
-               if(retVal == 0)\r
-                       break;\r
-\r
-               for(i = 0; i < delay; i++); // this delay is much more than required   \r
-\r
-       }\r
-}\r
-\r
-phy_hwread(unsigned short phy_addr, unsigned short addr, unsigned short *val)\r
-{\r
-\r
-       MDIO_USER_ACCESS_REG =  CSL_FMK (CSL_MDIO_USER_ACCESS_REG_GO_SHIFT, CSL_MDIO_USER_ACCESS_REG_GO_MASK, 1u) |\r
-                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_REGADR_SHIFT, CSL_MDIO_USER_ACCESS_REG_REGADR_MASK, addr) |\r
-                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_PHYADR_SHIFT, CSL_MDIO_USER_ACCESS_REG_PHYADR_MASK, phy_addr);\r
-\r
-       PHYREG0_waitResultsAck(*val, ack);\r
-\r
-       if(!ack)\r
-               GEL_TextOut("Reg read error for PHY: %d\n",,,,, phy_addr);\r
-}\r
-\r
-#define PHYREG0_waitResultsAck( results, ack ) {                                        \\r
-               results = CSL_FEXT( MDIO_USER_ACCESS_REG, CSL_MDIO_USER_ACCESS_REG_DATA_SHIFT, CSL_MDIO_USER_ACCESS_REG_DATA_MASK);        \\r
-               ack = CSL_FEXT( MDIO_USER_ACCESS_REG, CSL_MDIO_USER_ACCESS_REG_ACK_SHIFT, CSL_MDIO_USER_ACCESS_REG_ACK_MASK); }\r
-\r
-phy_miiread (unsigned short phyaddr, unsigned short page, unsigned int addr, unsigned short *val)\r
-{\r
-       phy_hwwrite(phyaddr, PHY_REG_PAGE_ADDR, page);\r
-       phy_hwread(phyaddr, addr, val);\r
-}\r
-\r
-phy_miiwrite(unsigned short phyaddr, unsigned short page, unsigned short addr, unsigned short val)\r
-{\r
-       phy_hwwrite(phyaddr, PHY_REG_PAGE_ADDR, page);\r
-       phy_hwwrite(phyaddr, addr, val);\r
-}\r
-\r
-_setupPhy(unsigned short phyaddr)\r
-{\r
-       unsigned short val;\r
-\r
-       GEL_TextOut("Staring Setup for PHY: %d\n",,,,, phyaddr);\r
-\r
-       /* Register settings as per RN section 3.1 */\r
-       phy_hwwrite(phyaddr, 22, 0x00ff);\r
-       phy_hwwrite(phyaddr, 17, 0x214B);\r
-       phy_hwwrite(phyaddr, 16, 0x2144);\r
-       phy_hwwrite(phyaddr, 17, 0x0C28);\r
-       phy_hwwrite(phyaddr, 16, 0x2146);\r
-       phy_hwwrite(phyaddr, 17, 0xB233);\r
-       phy_hwwrite(phyaddr, 16, 0x214D);\r
-       phy_hwwrite(phyaddr, 17, 0xCC0C);\r
-       phy_hwwrite(phyaddr, 16, 0x2159);\r
-       phy_hwwrite(phyaddr, 22, 0x0000);\r
-       phy_hwwrite(phyaddr, 9, 0x1800); //Set master\r
-       GEL_TextOut("Misc register done for PHY: %d\n",,,,, phyaddr);\r
-\r
-       /* Set SGMII to Copper mode Page 18, Reg 20.2:0 = 1  */\r
-       phy_hwwrite(phyaddr, 22, 18);\r
-       phy_hwwrite(phyaddr, 20, 0x1);\r
-       /* PHY Reset Page 18, Reg 20.15 = 1  */\r
-       phy_hwwrite(phyaddr, 20, 0x8201);\r
-       phy_hwwrite(phyaddr, 22, 00);\r
-\r
-       GEL_TextOut("Waiting for copper link up for PHY: %d\n",,,,, phyaddr);\r
-\r
-}\r
-\r
-hotmenu setupPhy()\r
-{\r
-       GEL_TextOut("Reading MDIO_VERSION_REG.\n");\r
-       GEL_TextOut("MDIO_VERSION_REG: %x\n",,,,, MDIO_VERSION_REG);\r
-       MDIO_USER_CONTROL_REG = (1 << 30) | 0xFA;\r
-       MDIO_USER_INT_MASK_REG = 0x00;\r
-       _setupPhy(0);\r
-       //_setupPhy(1);\r
-}\r
-\r
+/******************************************************************************
+ * Copyright (c) 2012 Texas Instruments Incorporated - http://www.ti.com
+ * 
+ *  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 Texas Instruments Incorporated 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.
+ * 
+ *****************************************************************************
+ *
+ *  Filename:          evmtci6638k2k.gel
+ *  Description:       Utility GEL for use with the TCI6638K2K EVM. This GEL has 
+ *                                             functions that initialize the chip PLL's and the DDR3A  interfaces. 
+ *                                             
+ *                                             It also includes general utilities that are useful for EVM development
+ *                       
+ *                     More functions will be added as needed. 
+ *       
+ *     Author: Randy Rosales                 
+ *     Revision History: 
+ *
+ *     Revision 0.1
+ *     -       Initial revision based on the Kepler VDB GEL 32bit_DDR-800_Kepler_PLL_and_DDR3_Init_Silicon_Rev15.gel put together for Kepler bringup by Pragna Paranji
+ *  -  Added in GEL system clock frequency estimation functions written by WenZhong Liu to help debug core PLL instability
+ *             +       dspPollDSPClockFreq will estimate the clock based on a comparison with windows system clock time
+ *   Revision 0.2 - pparanji
+ *       - Added DDR3A  memory test capabilities.
+ *     Revision 0.3 - pparanji
+ *      - Added the following configurations
+ *          DDR3A 32bit - DDR800, DDR1066, DDR1333
+ *              
+ *              DSP core PLL @ 122.88 MHz to 614.4 MHz operation 
+ *                                             122.88 MHz to 737.28 MHz operation 
+ *                                             122.88 MHz to 983.04 MHz operation 
+ *                                             122.88 MHz  to 1.2 GHz operation 
+ *                                             122.88 MHz  to 1.2 GHz operation 
+ *                                             
+ *              ARM PLL @              100 MHz to 1.0 GHz operation 
+ *                                             100 MHz to 1.4 GHz operation 
+ *                                             175 MHz to 1.4 GHz operation 
+ *       Rev 1.2 -  - pparanji
+ *       ------ Updates  DDR3A  to single rank configurations
+ *       Rev 1.3 - pparanji
+ *       ------  Updated timing on DDR3A-1066 and DDR3A-1333
+ *     Rev 1.4 - csmith
+ *     ------  Updated PA PLL config and Tetris PLL config
+ *
+ ---------------------------------------------------------------------------*/
+
+#define GEL_VERSION         1.0
+
+// Timeout definitions
+int _GEL_Global_Timeout1 = 0;
+
+#define TIMEOUT_ID 10
+// Global timeout value
+#define GTIMEOUT 2000
+//*****************************************************
+// Power definitions
+#define PSC_BASE            0x02350000
+#define PSC_PTCMD           *( unsigned int* )( PSC_BASE+0x120 )
+#define PSC_PTSTAT          *( unsigned int* )( PSC_BASE+0x128 )
+#define PSC_PDCTL_BASE      ( PSC_BASE+0x300 )
+#define PSC_MDSTAT_BASE     ( PSC_BASE+0x800 )
+#define PSC_MDCTL_BASE      ( PSC_BASE+0xA00 )
+
+// Modules on power domain 0
+// Always on
+// Modules on power domain 0
+#define LPSC_TSIP      (4)     
+// Modules on power domain 1
+#define LPSC_DEBUG     (5)
+#define LPSC_TETB      (6)     
+
+// Modules on power domain 2
+#define LPSC_PA        (7)
+#define LPSC_SGMII     (8)
+#define LPSC_SA        (9)
+
+// Modules on power domain 3
+#define LPSC_PCIE      (10)
+
+
+// Modules on power domain 5
+#define LPSC_HYPERLINK     (12)
+
+// Modules on power domain 6
+#define LPSC_SR     (13)
+
+// Modules on power domain 7
+#define LPSC_MSMCRAM   (14)
+
+// Modules on power domain 8
+#define LPSC_C66X_COREPAC_0   (15)
+
+// Modules on power domain 16
+#define LPSC_DDR3_0      (23)
+
+// Modules on power domain 18
+#define LPSC_PCIE_1      (27)
+
+// Modules on power domain 29
+#define LPSC_XGE     (50)              
+
+// Modules on power domain 31
+#define LPSC_ARM    (52)
+
+
+// Power domains definitions
+#define PD0         (0)     // Power Domain-0
+#define PD1         (1)     // Power Domain-1
+#define PD2         (2)     // Power Domain-2
+#define PD3         (3)     // Power Domain-3
+#define PD5         (5)     // Power Domain-5
+#define PD6         (6)     // Power Domain-6
+#define PD7         (7)     // Power Domain-7
+#define PD8         (8)     // Power Domain-8
+#define PD16        (16)    // Power Domain-16
+#define PD18        (18)    // Power Domain-18
+#define PD29        (29)    // Power Domain-29
+#define PD31        (31)    // Power Domain-31
+
+#define PSC_SYNCRESET (0x1)
+#define PSC_DISABLE   (0x2)
+#define PSC_ENABLE    (0x3)
+
+#define CHIP_LEVEL_REG              0x02620000
+
+/******************* PLL registers **********************************/
+/*Boot cfg registers*/
+#define KICK0                       *(unsigned int*)(CHIP_LEVEL_REG + 0x0038)
+#define KICK1                       *(unsigned int*)(CHIP_LEVEL_REG + 0x003C)
+#define KICK0_UNLOCK                (0x83E70B13)
+#define KICK1_UNLOCK                (0x95A4F1E0)
+#define KICK_LOCK                   0
+#define TINPSEL                     *(unsigned int*)(CHIP_LEVEL_REG + 0x0300)
+#define TOUTPSEL                    *(unsigned int*)(CHIP_LEVEL_REG + 0x0304)
+#define MAINPLLCTL0                 *(unsigned int*)(CHIP_LEVEL_REG + 0x0350) 
+#define MAINPLLCTL1                 *(unsigned int*)(CHIP_LEVEL_REG + 0x0354) 
+#define MAIN_PLLD_OFFSET            0
+#define MAIN_PLLD_MASK              0xFFFFFFC0
+#define MAIN_PLLM_OFFSET            12
+#define MAIN_PLLM_MASK              0xFFF80FFF
+#define MAIN_BWADJ0_OFFSET          24
+#define MAIN_BWADJ0_MASK            0x00FFFFFF
+#define MAIN_ENSAT_OFFSET           6
+#define MAIN_ENSAT_MASK             0xFFFFFFBF
+#define MAIN_BWADJ1_OFFSET          0
+#define MAIN_BWADJ1_MASK            0xFFFFFFF0
+
+#define OBSCLKCTL                   *(unsigned int*)(CHIP_LEVEL_REG + 0x0C80)  //TODO: Reserved in K2H datashet
+
+/* PA PLL Registers */
+#define BYPASS_BIT_SHIFT 23
+#define CLKF_BIT_SHIFT   6
+#define CLKD_BIT_SHIFT   0
+#define DEVSTAT    (*((unsigned int *) 0x02620020))
+#define PAPLLCTL0                 *(unsigned int*)(CHIP_LEVEL_REG + 0x0358) 
+#define PAPLLCTL1                 *(unsigned int*)(CHIP_LEVEL_REG + 0x035C) 
+#define PASSCLKSEL_MASK    (1 << 17)    /* Tells the configuration of the PASSCLKSEL pin */
+#define PA_PLL_BYPASS_MASK (1 << BYPASS_BIT_SHIFT)    /* Tells whether the PA PLL is in BYPASS mode or not */
+#define PA_PLL_CLKOD_MASK  (0x00780000) /* Tells the output divider value for the PA PLL */
+#define PA_PLL_CLKF_MASK   (0x0007FFC0) /* Tells the multiplier value for the PA PLL */
+#define PA_PLL_CLKR_MASK   (0x0000003F) /* Tells the divider value for the PA PLL */
+#define PA_PLL_RESET_MASK  (0x00004000)
+
+
+#define CHIP_MISC1                  *(unsigned int*)(CHIP_LEVEL_REG + 0x0C7C)
+#define ARMPLL_ENABLE_OFFSET        13
+
+
+#define DDR3APLLCTL0                   *(unsigned int*)(CHIP_LEVEL_REG + 0x0360)
+#define DDR3APLLCTL1                   *(unsigned int*)(CHIP_LEVEL_REG + 0x0364)
+
+//******************************************************
+// PLL 1 definitions (DSP and ARM clock and subsystems)
+#define PLL1_BASE                   0x02310000
+#define PLL1_PLLCTL                 (*(unsigned int*)(PLL1_BASE + 0x100))   // PLL1 Control
+#define PLL1_SECCTL                 (*(unsigned int*)(PLL1_BASE + 0x108))   // PLL1 Secondary Control
+#define PLL1_PLLM                   (*(unsigned int*)(PLL1_BASE + 0x110))   // PLL1 Multiplier
+#define PLL1_DIV1                   (*(unsigned int*)(PLL1_BASE + 0x118))   // DIV1 divider
+#define PLL1_DIV2                   (*(unsigned int*)(PLL1_BASE + 0x11C))   // DIV2 divider
+#define PLL1_DIV3                   (*(unsigned int*)(PLL1_BASE + 0x120))   // DIV3 divider
+#define PLL1_CMD                    (*(unsigned int*)(PLL1_BASE + 0x138))   // CMD control
+#define PLL1_STAT                   (*(unsigned int*)(PLL1_BASE + 0x13C))   // STAT control
+#define PLL1_ALNCTL                 (*(unsigned int*)(PLL1_BASE + 0x140))   // ALNCTL control
+#define PLL1_DCHANGE                (*(unsigned int*)(PLL1_BASE + 0x144))   // DCHANGE status
+#define PLL1_CKEN                   (*(unsigned int*)(PLL1_BASE + 0x148))   // CKEN control
+#define PLL1_CKSTAT                 (*(unsigned int*)(PLL1_BASE + 0x14C))   // CKSTAT status
+#define PLL1_SYSTAT                 (*(unsigned int*)(PLL1_BASE + 0x150))   // SYSTAT status
+#define PLL1_DIV4                   (*(unsigned int*)(PLL1_BASE + 0x160))   // DIV4 divider
+#define PLL1_DIV5                   (*(unsigned int*)(PLL1_BASE + 0x164))   // DIV5 divider
+#define PLL1_DIV6                   (*(unsigned int*)(PLL1_BASE + 0x168))   // DIV6 divider
+#define PLL1_DIV7                   (*(unsigned int*)(PLL1_BASE + 0x16C))   // DIV7 divider
+#define PLL1_DIV8                   (*(unsigned int*)(PLL1_BASE + 0x170))   // DIV8 divider
+#define PLL1_DIV9                   (*(unsigned int*)(PLL1_BASE + 0x174))   // DIV9 divider
+#define PLL1_DIV10                  (*(unsigned int*)(PLL1_BASE + 0x178))   // DIV10 divider
+#define PLL1_DIV11                  (*(unsigned int*)(PLL1_BASE + 0x17C))   // DIV11 divider
+#define PLL1_DIV12                  (*(unsigned int*)(PLL1_BASE + 0x180))   // DIV12 divider
+#define PLL1_DIV13                  (*(unsigned int*)(PLL1_BASE + 0x184))   // DIV13 divider
+#define PLL1_DIV14                  (*(unsigned int*)(PLL1_BASE + 0x188))   // DIV14 divider
+#define PLL1_DIV15                  (*(unsigned int*)(PLL1_BASE + 0x18C))   // DIV15 divider
+#define PLL1_DIV16                  (*(unsigned int*)(PLL1_BASE + 0x190))   // DIV16 divider
+#define PLLPWRDN_OFFSET             1
+#define PLLPWRDN_MASK               0xFFFFFFFD
+#define PLLRST_OFFSET               3
+#define PLLRST_MASK                 0xFFFFFFF7
+#define PLLENSRC_OFFSET             5
+#define PLLENSRC_MASK               0xFFFFFFDF
+#define PLLEN_OFFSET                0
+#define PLLEN_MASK                  0xFFFFFFFE
+#define OUTPUT_DIVIDE_OFFSET        19
+#define OUTPUT_DIVIDE_MASK          0xFF87FFFF    
+#define BYPASS_OFFSET               23
+#define BYPASS_MASK                 0xFF7FFFFF
+#define PLLM_OFFSET                 0
+#define PLLM_MASK                   0xFFFFFFC0
+#define GOSET_OFFSET                0
+#define GOSET_MASK                  0xFFFFFFFE
+#define GOSTAT_OFFSET               0
+#define GOSTAT_MASK                 0xFFFFFFFE
+
+#define OUTPUT_DIVIDE_OFFSET        19
+#define OUTPUT_DIVIDE_MASK          0xFF87FFFF   
+
+// ARMPLL definitions
+#define SEC_PLLCTL0_PLLM_OFFSET     6
+#define SEC_PLLCTL0_PLLM_MASK       0xFFFF003F
+#define SEC_PLLCTL0_BWADJ_OFFSET    24
+#define SEC_PLLCTL0_BWADJ_MASK      0x00FFFFFF
+#define SEC_PLLCTL0_OD_OFFSET       19
+#define SEC_PLLCTL0_OD_MASK         0xFF87FFFF
+#define SEC_PLLCTL0_BYPASS_OFFSET   23
+#define SEC_PLLCTL0_BYPASS_MASK     0xFF7FFFFF
+#define SEC_PLLCTL1_RESET_OFFSET    14
+#define SEC_PLLCTL1_RESET_MASK      0xFFFFBFFF
+#define SEC_PLLCTL1_PWRDWN_OFFSET   15
+#define SEC_PLLCTL1_PWRDWN_MASK     0xFFFF7FFF
+#define SEC_PLLCTL1_ENSTAT_OFFSET   6
+#define SEC_PLLCTL1_ENSTAT_MASK     0xFFFFFFBF
+
+/*----------------DDR3A Register definition---------------------*/
+
+#define DDR3A_BASE_ADDR (0x21010000)
+#define DDR3A_STATUS   (*(int*)(DDR3A_BASE_ADDR + 0x00000004))
+#define DDR3A_SDCFG    (*(int*)(DDR3A_BASE_ADDR + 0x00000008))
+#define DDR3A_SDRFC    (*(int*)(DDR3A_BASE_ADDR + 0x00000010))
+#define DDR3A_SDTIM1   (*(int*)(DDR3A_BASE_ADDR + 0x00000018))
+#define DDR3A_SDTIM2   (*(int*)(DDR3A_BASE_ADDR + 0x0000001C))
+#define DDR3A_SDTIM3   (*(int*)(DDR3A_BASE_ADDR + 0x00000020))
+#define DDR3A_SDTIM4   (*(int*)(DDR3A_BASE_ADDR + 0x00000028))
+#define DDR3A_ZQCFG    (*(int*)(DDR3A_BASE_ADDR + 0x000000C8))
+#define DDR3A_TMPALRT  (*(int*)(DDR3A_BASE_ADDR + 0x000000CC))
+#define DDR3A_DDRPHYC  (*(int*)(DDR3A_BASE_ADDR + 0x000000E4))
+
+#define DDR3A_PHY_CFG_BASE (0x02329000)
+#define DDR3A_PIR    (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000004))
+#define DDR3A_PGCR0  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000008))
+#define DDR3A_PGCR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000000C))
+#define DDR3A_PGCR2  (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000008C))
+#define DDR3A_PGSR0  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000010))
+#define DDR3A_PGSR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000014))
+#define DDR3A_PLLCR  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000018))
+#define DDR3A_PTR0   (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000001C))
+#define DDR3A_PTR1   (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000020))
+#define DDR3A_PTR2   (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000024))
+#define DDR3A_PTR3   (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000028))
+#define DDR3A_PTR4   (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000002C))
+#define DDR3A_DSGCR  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000040))
+#define DDR3A_DCR    (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000044))
+#define DDR3A_MR0    (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000054))
+#define DDR3A_MR1    (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000058))
+#define DDR3A_MR2    (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000005C))
+#define DDR3A_DTCR   (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000068))
+#define DDR3A_DTPR0  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000048))
+#define DDR3A_DTPR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x0000004C))
+#define DDR3A_DTPR2  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000050))
+
+#define DDR3A_ZQ0CR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000184))
+#define DDR3A_ZQ1CR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000194))
+#define DDR3A_ZQ2CR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x000001A4))
+#define DDR3A_ZQ3CR1  (*(int*)(DDR3A_PHY_CFG_BASE + 0x000001B4))
+
+#define DDR3A_DATX8_8 (*(int*)(DDR3A_PHY_CFG_BASE + 0x000003C0))
+
+
+#define DDR3_TEST_START_ADDRESS (*(int*)(0x80000000))
+
+#define IODDRM_MASK            0x00000180  
+#define ZCKSEL_MASK            0x01800000
+#define CL_MASK                                   0x00000072
+#define WR_MASK                                   0x00000E00
+#define BL_MASK                                   0x00000003
+#define RRMODE_MASK            0x00040000
+#define UDIMM_MASK             0x20000000
+#define BYTEMASK_MASK          0x0000FC00
+#define MPRDQ_MASK             0x00000080
+#define PDQ_MASK               0x00000070
+#define NOSRA_MASK             0x08000000
+#define ECC_MASK               0x00000001
+#define RRMODE_MASK            0x00040000
+
+#define DDR3A_DX0GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x000001C4)) //0x71
+#define DDR3A_DX1GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000204)) //0x81
+#define DDR3A_DX2GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000244)) //0x91
+#define DDR3A_DX3GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000284)) //0xA1
+#define DDR3A_DX4GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x000002C4)) //0xB1
+#define DDR3A_DX5GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000304)) //0xC1
+#define DDR3A_DX6GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000344)) //0xD1
+#define DDR3A_DX7GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x00000384)) //0xE1
+#define DDR3A_DX8GSR0 (*(int*)(DDR3A_PHY_CFG_BASE + 0x000003C4)) //0xF1
+
+#define DDR3A_TEST_START_ADDRESS (0x80000000)
+
+#define DDR3A_TEST_END_ADDRESS   (DDR3A_TEST_START_ADDRESS + (4 * 100))
+#define DDR3A_BASE_ADDRESS        0x80000000
+
+
+
+#define TETRIS_BASE                 0x01E80000
+
+#define TETRIS_CPU0_PTCMD           *(unsigned int*)(TETRIS_BASE + 0x0400)
+#define TETRIS_CPU0_PDSTAT          *(unsigned int*)(TETRIS_BASE + 0x0404)
+#define TETRIS_CPU0_PDCTL           *(unsigned int*)(TETRIS_BASE + 0x0408)
+
+#define TETRIS_CPU1_PTCMD           *(unsigned int*)(TETRIS_BASE + 0x040C)
+#define TETRIS_CPU1_PDSTAT          *(unsigned int*)(TETRIS_BASE + 0x0410)
+#define TETRIS_CPU1_PDCTL           *(unsigned int*)(TETRIS_BASE + 0x0414)
+
+#define TETRIS_CPU2_PTCMD           *(unsigned int*)(TETRIS_BASE + 0x0418)
+#define TETRIS_CPU2_PDSTAT          *(unsigned int*)(TETRIS_BASE + 0x041C)
+#define TETRIS_CPU2_PDCTL           *(unsigned int*)(TETRIS_BASE + 0x0420)
+
+#define TETRIS_CPU3_PTCMD           *(unsigned int*)(TETRIS_BASE + 0x0424)
+#define TETRIS_CPU3_PDSTAT          *(unsigned int*)(TETRIS_BASE + 0x0428)
+#define TETRIS_CPU3_PDCTL           *(unsigned int*)(TETRIS_BASE + 0x042C)
+
+#define SECPLLCTL0                  *(unsigned int*)(CHIP_LEVEL_REG + 0x0370)
+#define SECPLLCTL1                  *(unsigned int*)(CHIP_LEVEL_REG + 0x0374)
+unsigned int read_val;
+
+/****************************************************************************
+ *
+ * NAME
+ *      OnTargetConnect
+ *
+ * PURPOSE:
+ *      Setup almost everything ready for a new debug session:
+ *      DSP modules and EVM board modules, at target connection.
+ *      Do nothing if target is in realtime mode.
+ *      This routine is called when you connect to the target board.
+ *
+ *      IMPORTANT: this routine won't attempt to connect to the target
+ *      if the target is not in real-time mode and that the dsp boot
+ *      mode switches are not set in emulation boot mode.
+ *
+ * USAGE
+ *      This routine is a callback routine and called by CCS only.
+ *
+ * RETURN VALUE
+ *      NONE
+ *
+ * REFERENCE
+ *
+ ****************************************************************************/
+OnTargetConnect()
+{
+       /*------------------------------------------------------*/
+       /* GEL_Reset() is used to deal with the worst case      */
+       /* senario of unknown target state.  If for some reason */
+       /* a reset is not desired upon target connection,       */
+       /* GEL_Reset() may be removed and replaced with         */
+       /* something "less brutal" like a cache initialization  */
+       /* function.                                            */
+       /*------------------------------------------------------*/
+       //GEL_Reset();
+       //xmc_setup();
+       //ddr3_setup();
+
+       GEL_TextOut("\nConnecting Target...\n");
+
+       // Check if target is not in real-time mode. If it is in stop mode,
+       // initialize everything. In real-time mode, do nothing to connect
+       // unobtrusively...
+       if (!GEL_IsInRealtimeMode())
+       {
+               // Validates if emulation boot mode
+               if (DEVSTAT & 0x0000000E)
+               {
+                       GEL_TextOut("No initialization performed since bootmode = %x \n",,,,,(DEVSTAT >> 1 ) & 0xF);
+                       GEL_TextOut("You can manually initialize with GlobalDefaultSetup\n");
+               }
+               else
+               {
+                       // Comment the following line at production application test
+                       // when the application need to initialize everything, but not the
+                       // GEL file.
+                       Global_Default_Setup_Silent();
+               }
+       } else {
+               GEL_TextOut("No initialization performed in real time mode\n");
+       }
+}
+
+/*--------------------------------------------------------------*/
+/* OnReset()                                                    */
+/* This function is called by CCS when you do Debug->Resest.    */
+/* The goal is to put the C6x into a known good state with      */
+/* respect to cache, edma and interrupts.                       */
+/*--------------------------------------------------------------*/
+OnReset( int nErrorCode )
+{
+}
+
+/*--------------------------------------------------------------*/
+/* xmc_setup()                                                  */
+/* XMC MPAX register setting to access DDR3 config space        */
+/*--------------------------------------------------------------*/
+
+#define XMC_BASE_ADDR (0x08000000)
+#define XMPAX2_L     (*(int*)(XMC_BASE_ADDR + 0x00000010))
+#define XMPAX2_H     (*(int*)(XMC_BASE_ADDR + 0x00000014))
+
+xmc_setup()
+{
+       /* mapping for ddr emif registers XMPAX*2 */
+
+       XMPAX2_L =  0x121010FF;  /* replacement addr + perm */
+       XMPAX2_H =  0x2101000B;    /* base addr + seg size (64KB)*/     //"1B"-->"B" by xj
+       GEL_TextOut("XMC setup complete.\n");
+}
+
+/****************************************************************************
+ *
+ * NAME
+ *      Global_Default_Setup_Silent
+ *
+ * PURPOSE:
+ *      Setup almost everything ready for a new debug session:
+ *      DSP modules and EVM board modules.
+ *
+ * USAGE
+ *      This routine can be called as:
+ *
+ *      Global_Default_Setup_Silent()
+ *
+ * RETURN VALUE
+ *      NONE
+ *
+ * REFERENCE
+ *
+ ****************************************************************************/
+Global_Default_Setup_Silent()
+{
+       float gel_ver = GEL_VERSION;
+
+       // Set DSP cache to pre defined values...
+       GEL_TextOut( "TCI6636K2E GEL file Ver is %f \n",,,,, (float) (gel_ver/1.0));
+
+       //Set_DSP_Cache();
+
+       // Only core 0 can set these
+       if (DNUM == 0)
+       {
+               // Setup main PLL DSP @ 1 GHz
+               Set_Pll1(3); // call Set_Pll1 with index = 3 -> 100 MHz to 1 GHz operation
+
+               // Setup all Power Domains on
+               Set_Psc_All_On();
+
+               // Setup PA PLL
+               PaPllConfig();
+
+               GEL_TextOut("DDR begin\n");
+               xmc_setup();
+               ddr3A_64bit_DDR1600_setup();
+               GEL_TextOut("DDR done\n");
+       }
+}
+
+/****************************************************************************
+ *
+ * NAME
+ *      Set_PSC_State
+ *
+ * PURPOSE:
+ *      Set a new power state for the specified domain id in a power controler
+ *      domain. Wait for the power transition to complete.
+ *
+ * USAGE
+ *      This routine can be called as:
+ *
+ *      Set_PSC_State(unsigned int pd,unsigned int id,unsigned int state)
+ *
+ *      pd    - (i) power domain.
+ *
+ *      id    - (i) module id to use for module in the specified power domain
+ *
+ *      state - (i) new state value to set
+ *                  0 = RESET
+ *                  1 = SYNC RESET
+ *                  2 = DISABLE
+ *                  3 = ENABLE
+ *
+ * RETURN VALUE
+ *      0 if ok, !=0 for error
+ *
+ * REFERENCE
+ *
+ ****************************************************************************/
+Set_PSC_State(unsigned int pd,unsigned int id,unsigned int state)
+{
+       unsigned int* mdctl;
+       unsigned int* mdstat;
+       unsigned int* pdctl;
+       int ret=0;
+
+       // Only core0 can set PSC
+       if (DNUM == 0)
+       {
+               mdctl = ( unsigned int* )(PSC_MDCTL_BASE + ( 4 * id ));
+               mdstat = ( unsigned int* )( PSC_MDSTAT_BASE + ( 4 * id ));
+               pdctl = ( unsigned int* )(PSC_PDCTL_BASE + ( 4 * pd ));
+
+               // If state is already set, do nothing
+               if ( ( *mdstat & 0x1f ) == state )
+               {
+                       return(0);
+               }
+
+               // Wait for GOSTAT to clear
+               Set_Timeout(GTIMEOUT);
+               while( Get_Timeout() && (PSC_PTSTAT & (0x1 << pd)) != 0 );
+
+               // Check if we got timeout error while waiting
+               if (!Get_Timeout())
+               {
+                       GEL_TextOut( "Set_PSC_State... Timeout Error #01 pd=%d, md=%d!\n",,2,,,pd,id);
+                       ret=1;
+               }
+               else
+               {
+                       // Set power domain control
+                       *pdctl = (*pdctl) | 0x00000001;
+
+                       // Set MDCTL NEXT to new state
+                       *mdctl = ((*mdctl) & ~(0x1f)) | state;
+
+                       // Start power transition by setting PTCMD GO to 1
+                       PSC_PTCMD = (PSC_PTCMD) | (0x1<<pd);
+
+                       // Wait for PTSTAT GOSTAT to clear
+                       Set_Timeout(GTIMEOUT);
+                       while( Get_Timeout() && (PSC_PTSTAT & (0x1 << pd)) != 0 );
+
+                       // Check if we got timeout error while waiting
+                       if (!Get_Timeout())
+                       {
+                               GEL_TextOut( "Set_PSC_State... Timeout Error #02 pd=%d, md=%d!\n",,2,,,pd,id);
+                               ret=2;
+                       }
+                       else
+                       {
+                               // Verify state changed
+                               Set_Timeout(GTIMEOUT);
+                               while(Get_Timeout() && ( *mdstat & 0x1f ) != state );
+
+                               // Check if we got timeout error while waiting
+                               if (!Get_Timeout())
+                               {
+                                       GEL_TextOut( "Set_PSC_State... Timeout Error #03 pd=%d, md=%d!\n",,2,,,pd,id);
+                                       ret=3;
+                               }
+                       }
+               }
+
+               // Kill the currently running timeout
+               Kill_Timeout();
+       }
+       else
+       {
+               GEL_TextOut("DSP core #%d cannot set PSC.\n",,2,,,DNUM);
+       }
+
+       return(ret);
+}
+
+/****************************************************************************
+ *
+ * NAME
+ *      Set_Timeout
+ *
+ * PURPOSE:
+ *      Starts a timeout period of msec. The running timeout period can be
+ *      query with Get_Timeout. To kill a running timeout before the end,
+ *      call Kill_Timeout. Only one timeout period can be used at any time.
+ *      A timeout period can be used to measure a period of time while doing
+ *      anything else. Not accurate, sets timer at least as big as desired.
+ *
+ * USAGE
+ *      This routine can be called as:
+ *
+ *      Set_Timeout(msec)
+ *
+ *      msec - (i) timeout period in msec (not very precise < sec range)
+ *
+ * RETURN VALUE
+ *      NONE
+ *
+ * REFERENCE
+ *
+ ****************************************************************************/
+Set_Timeout(msec)
+{
+       // Cancel the current timer if not already expired
+       GEL_CancelTimer(TIMEOUT_ID);
+
+       // Starts the timeout period
+       _GEL_Global_Timeout1=1;
+
+       // Setup a callback routine with specified timeout
+       GEL_SetTimer(msec, TIMEOUT_ID, "_Timeout_Callback()");
+}
+
+/****************************************************************************
+ *
+ * NAME
+ *      Get_Timeout
+ *
+ * PURPOSE:
+ *      Query the running state of a timeout period started by Set_Timeout.
+ *      (see Set_Timeout for more info).
+ *
+ * USAGE
+ *      This routine can be called as:
+ *
+ *      Get_Timeout()
+ *
+ * RETURN VALUE
+ *      0:expired, 1:running
+ *
+ * REFERENCE
+ *
+ ****************************************************************************/
+Get_Timeout()
+{
+       if (!_GEL_Global_Timeout1)
+       {
+               // Cancel the current timer
+               GEL_CancelTimer(TIMEOUT_ID);
+       }
+
+       // Return the global timeout status 1=running, 0=expired
+       return _GEL_Global_Timeout1;
+}
+
+/****************************************************************************
+ *
+ * NAME
+ *      Kill_Timeout
+ *
+ * PURPOSE:
+ *      Cancel a running timeout period before it expires
+ *      (see Set_Timeout for more info).
+ *
+ * USAGE
+ *      This routine can be called as:
+ *
+ *      Kill_Timeout()
+ *
+ * RETURN VALUE
+ *      NONE
+ *
+ * REFERENCE
+ *
+ ****************************************************************************/
+Kill_Timeout()
+{
+       // Cancel the current timer
+       GEL_CancelTimer(TIMEOUT_ID);
+
+       // The timeout period is expired
+       _GEL_Global_Timeout1=0;
+}
+
+/****************************************************************************
+ *
+ * NAME
+ *      _Timeout_Callback
+ *
+ * PURPOSE:
+ *      Internal Callback function used by Set_timeout
+ *      (see Set_Timeout for more info).
+ *
+ * USAGE
+ *      This routine must not be called by itself.
+ *
+ * RETURN VALUE
+ *      NONE
+ *
+ * REFERENCE
+ *
+ ****************************************************************************/
+_Timeout_Callback()
+{
+       // The timeout period is expired
+       _GEL_Global_Timeout1=0;
+}
+
+
+/****************************************************************************
+ *
+ * NAME
+ *      Set_Psc_All_On
+ *
+ * PURPOSE:
+ *      Enable all PSC modules and DSP power domains on ALWAYSON, and wait
+ *      for these power transitions to complete.
+ *
+ * USAGE
+ *      This routine can be called as:
+ *
+ *      Set_Psc_All_On()
+ *
+ * RETURN VALUE
+ *      NONE
+ *
+ * REFERENCE
+ *
+ ****************************************************************************/
+hotmenu Set_Psc_All_On( )
+{
+       unsigned int i=0;
+
+       // Only core0 can set PSC
+       if (DNUM == 0)
+       {
+               GEL_TextOut( "Power on all PSC modules and DSP domains... \n");
+
+               Set_PSC_State(PD0, LPSC_TSIP, PSC_ENABLE);
+               Set_PSC_State(PD1, LPSC_DEBUG, PSC_ENABLE);
+               Set_PSC_State(PD1, LPSC_TETB, PSC_ENABLE);
+               Set_PSC_State(PD2, LPSC_PA, PSC_ENABLE);
+               Set_PSC_State(PD2, LPSC_SGMII, PSC_ENABLE);
+//             Set_PSC_State(PD2, LPSC_SA, PSC_ENABLE);
+               Set_PSC_State(PD3, LPSC_PCIE, PSC_ENABLE);
+               Set_PSC_State(PD5, LPSC_HYPERLINK, PSC_ENABLE);
+               Set_PSC_State(PD6, LPSC_SR, PSC_ENABLE);
+               Set_PSC_State(PD7, LPSC_MSMCRAM, PSC_ENABLE);
+               Set_PSC_State(PD8, LPSC_C66X_COREPAC_0, PSC_ENABLE);
+               Set_PSC_State(PD16, LPSC_DDR3_0, PSC_ENABLE);
+               Set_PSC_State(PD18, LPSC_PCIE_1, PSC_ENABLE);
+               Set_PSC_State(PD29, LPSC_XGE, PSC_ENABLE);
+               Set_PSC_State(PD31, LPSC_ARM, PSC_ENABLE);
+
+               GEL_TextOut( "Power on all PSC modules and DSP domains... Done.\n" );
+       }
+       else
+       {
+               GEL_TextOut("DSP core #%d cannot set PSC.\n",,2,,,DNUM);
+       }
+}
+
+
+//********************************************************************************************************************************
+//********************************************************************************************************************************
+/*
+   Set_Pll1() - This function executes the main PLL initialization 
+   sequence needed to get the main PLL up after coming out of an initial power up 
+   before it is locked or after it is already locked.
+
+   Index value determines multiplier, divier used and clock reference assumed for 
+   output display. 
+ */
+Set_Pll1(int index)
+{
+       int i, TEMP;
+       unsigned int BYPASS_val;     
+       unsigned int BWADJ_val;     
+       unsigned int OD_val;            
+
+       float CLKIN_val;
+       unsigned int PLLM_val;
+       unsigned int PLLD_val;
+       unsigned int PLLDIV3_val; //example value for SYSCLK2 (from 6614 spec) Default /2 - Fast Peripherals, (L2, MSMC, DDR3 EMIF, EDMA0...)
+       unsigned int PLLDIV4_val; //example value for SYSCLK3 (from 6614 spec) Default /3 - Switch Fabric
+       unsigned int PLLDIV7_val; //example value for SYSCLK6 (from 6614 spec) Defualt /6 - Slow Peripherals (UART, SPI, I2C, GPIO...)
+
+       unsigned int debug_info_on;
+       unsigned int delay;
+
+       if(index == 1){                  // 100 MHz -> 614.28 MHz
+               CLKIN_val   = 100;       // setup CLKIN to 614.28 MHz
+               PLLM_val    = 43;        // setup PLLM (PLL multiplier) to x43
+               PLLD_val    = 1;         // setup PLLD (reference divider) to /1
+               OD_val      = 7;         // setup OD to /7
+       }
+       else if(index == 2){             // 100MHz -> 737.5 MHz
+               CLKIN_val   = 100;       // setup CLKIN to 100 MHz
+               PLLM_val    = 59;        // setup PLLM (PLL multiplier) to x59
+               PLLD_val    = 1;         // setup PLLD (reference divider) to /1
+               OD_val      = 8;         // setup OD to  /8
+       }
+
+       else if(index == 3){             // 100MHz -> 1 GHz
+               CLKIN_val   = 100;       // setup CLKIN to 100 MHz
+               PLLM_val    = 20;        // setup PLLM (PLL multiplier) to x20
+               PLLD_val    = 1;         // setup PLLD (reference divider) to /1
+               OD_val      = 2;         // setup OD to  /2
+       }
+
+       else if(index == 4){             // 100 MHz -> 1.2 GHz
+               CLKIN_val   = 100;       // setup CLKIN to 100 MHz
+               PLLM_val    = 24;        // setup PLLM (PLL multiplier) to x24
+               PLLD_val    = 1;         // setup PLLD (reference divider) to /1
+               OD_val      = 2;         // setup OD to  /2
+       }
+       else if(index == 5){             // 100 MHz -> 1.35 GHz
+               CLKIN_val   = 100;       // setup CLKIN to 100 MHz
+               PLLM_val    = 27;        // setup PLLM (PLL multiplier) to x27
+               PLLD_val    = 1;         // setup PLLD (reference divider) to /1
+               OD_val      = 2;            // setup OD to /2
+       }
+
+
+
+
+       PLLDIV3_val = 3;            // setup PLL output divider 3 to /3
+       PLLDIV4_val = 5;            // setup PLL output divider 4 to /3
+       PLLDIV7_val = 6;            // setup PLL output divider 7 to /6
+
+       BYPASS_val      = PLL1_SECCTL & ~BYPASS_MASK;   // get value of the BYPASS field
+       BWADJ_val       = (PLLM_val) >> 1;              // setup BWADJ to be 1/2 the value of PLLM
+       //OD_val          = 2;                            // setup OD to a fixed /2
+
+       debug_info_on   = 1;
+       delay           = 1000; // fix this!
+
+       /* Step 1: Unlock Boot Config Registers */
+       KICK0 = KICK0_UNLOCK;
+       KICK1 = KICK1_UNLOCK;
+
+       /* Step 2: Check if SECCTL bypass is low or high indicating what state the Main PLL is currently in. if 
+       the Main PLL is in bypass still (not yet setup) execute the following steps.  */
+
+       if(BYPASS_val != 0x00000000){ // PLL bypass enabled - Execute PLL setup for PLL fresh out of power on reset
+               if(debug_info_on){
+                       GEL_TextOut("Detected PLL bypass enabled: SECCTL[BYPASS] = %x\n",,,,, BYPASS_val);
+               }
+               /* Step 2a: Set MAINPLLCTL1[ENSAT] = 1 - This enables proper biasing of PLL analog circuitry */            
+               MAINPLLCTL1 |= (1 << MAIN_ENSAT_OFFSET); 
+               if(debug_info_on){
+                       GEL_TextOut("(2a) MAINPLLCTL1 = %x\n",,,,, MAINPLLCTL1);
+               }        
+
+               /* Step 2b: Set PLLCTL[PLLEN] = 0 This enables bypass in PLL controller MUX */        
+               PLL1_PLLCTL &= ~(1 << PLLEN_OFFSET);        
+               if(debug_info_on){    
+                       GEL_TextOut("(2b) PLLCTL = %x\n",,,,, PLL1_PLLCTL);
+               }    
+
+               /* Step 2c: Set PLLCTL[PLLENSRC] = 0 - This enables PLLEN to control PLL controller MUX */    
+               PLL1_PLLCTL &= ~(1 << PLLENSRC_OFFSET);
+               if(debug_info_on){    
+                       GEL_TextOut("(2c) PLLCTL = %x\n",,,,, PLL1_PLLCTL);
+               }    
+
+               /* Step 2d: Wait 4 reference clock cycles (slowest of ALTCORE or SYSCLK) to make sure 
+           that the PLL controller MUX switches properly to bypass. */
+               if(debug_info_on){    
+                       GEL_TextOut("(2d) Delay...\n",,,,,);
+               }        
+               for(i = 0; i < delay; i++); // this delay is much more than required         
+
+               /* Step 2e: Set SECCTL[BYPASS] = 1 - enables bypass in PLL MUX */    
+               PLL1_SECCTL |= (1 << BYPASS_OFFSET);        
+               if(debug_info_on){    
+                       GEL_TextOut("(2e) SECCTL = %x\n",,,,, PLL1_SECCTL);
+               }    
+
+               /* Step 2f: Set PLLCTL[PLLPWRDN] = 1 - power down the PLL */        
+               PLL1_PLLCTL |= (1 << PLLPWRDN_OFFSET);
+               if(debug_info_on){    
+                       GEL_TextOut("(2f) PLLCTL = %x\n",,,,, PLL1_PLLCTL);
+               }    
+
+               /* Step 2g: Wait for at least 5us for the PLL to power down */
+               if(debug_info_on){    
+                       GEL_TextOut("(2g) Delay...\n",,,,,);
+               }    
+               for(i = 0; i < delay; i++); // this delay is much more than required 
+
+               /* Step 2h: Set PLLCTL[PLLPWRDN] = 0 - Power the PLL back up */    
+               PLL1_PLLCTL &= ~(1 << PLLPWRDN_OFFSET);
+               if(debug_info_on){    
+                       GEL_TextOut("(2h) PLLCTL = %x\n",,,,, PLL1_PLLCTL);
+               }            
+
+       }
+       else{ // PLL bypass disabled - Execute PLL setup for PLL that has previously been locked (skip to Step 3)
+               if(debug_info_on){    
+                       GEL_TextOut("Detected PLL bypass disabled: SECCTL[BYPASS] = %x\n",,,,, BYPASS_val);
+               }
+
+               /* Step 3a: Set PLLCTL[PLLEN] = 0 This enables bypass in PLL controller MUX */        
+               PLL1_PLLCTL &= ~(1 << PLLEN_OFFSET);        
+               if(debug_info_on){    
+                       GEL_TextOut("(3a) PLLCTL = %x\n",,,,, PLL1_PLLCTL);
+               }    
+
+               /* Step 3b: Set PLLCTL[PLLENSRC] = 0 - This enables PLLEN to control PLL controller MUX */    
+               PLL1_PLLCTL &= ~(1 << PLLENSRC_OFFSET);
+               if(debug_info_on){    
+                       GEL_TextOut("(3b) PLLCTL = %x\n",,,,, PLL1_PLLCTL);
+               }
+
+               /* Step 3c: Wait 4 reference clock cycles (slowest of ALTCORE or SYSCLK) to make sure 
+           that the PLL controller MUX switches properly to bypass. */
+               if(debug_info_on){    
+                       GEL_TextOut("(3c) Delay...\n",,,,,);
+               }        
+               for(i = 0; i < delay; i++); // this delay is much more than required       
+
+       }
+
+
+       /* Step 4: Programming PLLM[5:0] in the PLLM register of the PLL controller and
+       programming PLLM[12:6] in the MAINPLLCTL0 register */        
+       PLL1_PLLM &= PLLM_MASK;             // clear the PLLM[5:0] bit field
+       PLL1_PLLM |= ~PLLM_MASK & (PLLM_val - 1);   // set the PLLM[5:0] bit field to the 6 LSB of PLLM_val
+
+       if(debug_info_on){
+               GEL_TextOut("(4)PLLM[PLLM] = %x\n",,,,, PLL1_PLLM);
+       }    
+
+       MAINPLLCTL0 &= MAIN_PLLM_MASK;      // clear the PLLM[12:6] bit field
+       MAINPLLCTL0 |= ~MAIN_PLLM_MASK & (( (PLLM_val - 1) >> 6) << MAIN_PLLM_OFFSET);  // set the PLLM[12:6] bit field to the 7 MSB of PLL_val
+
+       if(debug_info_on){
+               GEL_TextOut("MAINPLLCTL0 = %x\n",,,,, MAINPLLCTL0);
+       }
+
+       /* Step 5: Programming BWADJ[7:0] in the MAINPLLCTL0 register and BWADJ[11:8] in MAINPLLCTL1 register */            
+       MAINPLLCTL0 &= MAIN_BWADJ0_MASK;    // clear the MAIN_BWADJ0 bit field
+       MAINPLLCTL0 |= ~MAIN_BWADJ0_MASK & ((BWADJ_val - 1) << MAIN_BWADJ0_OFFSET); // set the MAIN_BWADJ[7:0] bit field to the 8 LSB of BWADJ_val
+
+       if(debug_info_on){
+               GEL_TextOut("(5) MAINPLLCTL0 = %x\n",,,,, MAINPLLCTL0);
+       }
+
+       MAINPLLCTL1 &= MAIN_BWADJ1_MASK;    // clear the MAIN_BWADJ1 bit field
+       MAINPLLCTL1 |= ~MAIN_BWADJ1_MASK & (( (BWADJ_val - 1) >> 8) << MAIN_BWADJ1_OFFSET); // set the MAIN_BWADJ[11:8] bit field to the 4 MSB of BWADJ_val
+
+       if(debug_info_on){
+               GEL_TextOut("(5) MAINPLLCTL1 = %x\n",,,,, MAINPLLCTL1);
+       }
+
+       /* Step 6: Programming PLLD[5:0] in the MAINPLLCTL0 register */            
+       MAINPLLCTL0 &= MAIN_PLLD_MASK;      // clear the PLLD bit field
+       MAINPLLCTL0 |= ~MAIN_PLLD_MASK & (PLLD_val - 1);    // set the PLLD[5:0] bit field of PLLD to PLLD_val
+
+       if(debug_info_on){
+               GEL_TextOut("(6) MAINPLLCTL0 = %x\n",,,,, MAINPLLCTL0);
+       }
+
+       /* Step 7: Programming OD[3:0] in the SECCTL register */            
+       PLL1_SECCTL &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field
+       PLL1_SECCTL |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    
+
+       if(debug_info_on){
+               GEL_TextOut("(7) SECCTL = %x\n",,,,, PLL1_SECCTL);
+       }
+
+       /* Step 8: Following steps are needed to change the default output dividers */            
+
+       /* Step 8a: Check that the GOSTAT bit in PLLSTAT is cleared to show that no GO
+       operation is currently in progress*/
+       if(debug_info_on){    
+               GEL_TextOut("(8a) Delay...\n",,,,,);
+       }    
+       while((PLL1_STAT) & 0x00000001);
+
+       /* Step 8b: Program the RATIO field in PLLDIVn to the desired new divide-down rate.
+       If RATIO field is changed, the PLL controller will flag the change in the
+       corresponding bit of DCHANGE*/
+       PLL1_DIV3 = (PLLDIV3_val-1) | 0x8000;  //Set PLLDIV3
+       PLL1_DIV4 = (PLLDIV4_val-1) | 0x8000;  //Set PLLDIV4
+       PLL1_DIV7 = (PLLDIV7_val-1) | 0x8000;  //Set PLLDIV7
+
+       if(debug_info_on){
+               GEL_TextOut("PLL1_DIV3 = %x\n",,,,, PLL1_DIV3);
+               GEL_TextOut("PLL1_DIV4 = %x\n",,,,, PLL1_DIV4);
+               GEL_TextOut("PLL1_DIV7 = %x\n",,,,, PLL1_DIV7);
+       }
+
+       /* Step 8c: Set GOSET bit in PLLCMD to initiate the GO operation to change the divide
+       values and align the SYSCLKs as programmed */
+       PLL1_CMD |= 0x00000001;
+
+       /*Step 8d/e: Read the GOSTAT bit in PLLSTAT to make sure the bit returns to 0 to
+      indicate that the GO operation has completed */
+       if(debug_info_on){    
+               GEL_TextOut("(8d/e) Delay...\n",,,,,);
+       }    
+       while((PLL1_STAT) & 0x00000001);
+
+       /* Step 9: Set PLLCTL[PLLRST] = 1 - Assert PLL reset (Previously Step 3)*/        
+       PLL1_PLLCTL |= (1 << PLLRST_OFFSET);
+
+       /* Step 10: Wait for the at least 7us for the PLL reset properly (128 CLKIN1 cycles) */        
+       if(debug_info_on){    
+               GEL_TextOut("(10) Delay...\n",,,,,);
+       }    
+       for(i=0;i<delay;i++);
+
+       /* Step 11: Set PLLCTL[PLLRST] = 0 - De-Assert PLL reset */        
+       PLL1_PLLCTL &= ~(1 << PLLRST_OFFSET);
+
+       /* Step 12: Wait for PLL to lock (2000 CLKIN1 cycles) */
+       if(debug_info_on){    
+               GEL_TextOut("(12) Delay...\n",,,,,);
+       }    
+       for(i=0;i<delay;i++);
+
+       /* Step 13: In SECCTL, write BYPASS = 0 (enable PLL mux to switch to PLL mode) */
+       PLL1_SECCTL &= ~(1 << BYPASS_OFFSET);        
+       if(debug_info_on){    
+               GEL_TextOut("(13) SECCTL = %x\n",,,,, PLL1_SECCTL);
+       }    
+       if(debug_info_on){    
+               GEL_TextOut("(Delay...\n",,,,,);
+       }    
+       for(i=0;i<delay;i++);
+       if(debug_info_on){    
+               GEL_TextOut("(Delay...\n",,,,,);
+       }    
+       for(i=0;i<delay;i++);
+
+       /* Step 14: In PLLCTL, write PLLEN = 1 to enable PLL mode */
+       PLL1_PLLCTL |= (1 << PLLEN_OFFSET);        
+       if(debug_info_on){    
+               GEL_TextOut("(14) PLLCTL = %x\n",,,,, PLL1_PLLCTL);
+       }    
+
+       /* Step 15: Lock Boot Config Registers */
+       KICK0 = 0x00000000;
+       KICK1 = 0x00000000;
+
+       GEL_TextOut("PLL has been configured (CLKIN * PLLM / PLLD / PLLOD = PLLOUT):\n",,,,,);
+       GEL_TextOut("PLL has been configured (%f MHz * %d / %d / %d = %f MHz)\n",,,,, CLKIN_val, PLLM_val, PLLD_val,OD_val,(CLKIN_val * PLLM_val / PLLD_val / OD_val) );
+
+}
+
+
+//TODO: May need to change, as currently information is not available
+Set_Tetris_Pll(int index)
+{
+
+       unsigned int BWADJ_val;     
+       unsigned int OD_val;            
+       unsigned int PLLM_val;
+       float CLKIN_val;
+       int i;
+
+       GEL_TextOut("Switching on ARM Core 0\n",,,,,);
+       TETRIS_CPU0_PDCTL   = 0x00000000;
+       TETRIS_CPU0_PTCMD   = 0x00000001;    
+
+       GEL_TextOut("Switching on ARM Core 1\n",,,,,);
+       TETRIS_CPU1_PDCTL   = 0x00000000;
+       TETRIS_CPU1_PTCMD   = 0x00000001;    
+
+       GEL_TextOut("Switching on ARM Core 2\n",,,,,);
+       TETRIS_CPU2_PDCTL   = 0x00000000;
+       TETRIS_CPU2_PTCMD   = 0x00000001;    
+
+       GEL_TextOut("Switching on ARM Core 3\n",,,,,);
+       TETRIS_CPU3_PDCTL   = 0x00000000;
+       TETRIS_CPU3_PTCMD   = 0x00000001;
+
+       if(index == 1){              // 100 MHz -> 1.0 GHz
+               CLKIN_val   = 125;          // setup CLKIN to 125 MHz
+               PLLM_val    = 16;           // setup PLLM (PLL multiplier) to x20
+               OD_val      = 2;            // setup OD to a fixed /2
+       }
+       else if(index == 2){            // 100 MHz -> 1.4 GHz
+               CLKIN_val   = 125;          // setup CLKIN to 125 MHz
+               PLLM_val    = 22;           // setup PLLM (PLL multiplier) to x28
+               OD_val      = 2;            // setup OD to a fixed /2
+       }
+       else if(index == 3){            // 174.825MHz -> 1.4 GHz                //TODO: From where this freq will be available? Not shown in schematic.
+
+               CLKIN_val   = 174.825;      // setup CLKIN to 174.825 MHz
+               PLLM_val    = 16;           // setup PLLM (PLL multiplier) to x16
+               OD_val      = 2;            // setup OD to a fixed /2
+       }
+
+       BWADJ_val       = (PLLM_val-1) >> 1;            // setup BWADJ to be 1/2 the value of PLLM
+       OD_val          = 2;                            // setup OD to a fixed /2
+
+       /* Step 1: Unlock Boot Config Registers */
+       KICK0 = KICK0_UNLOCK;
+       KICK1 = KICK1_UNLOCK;
+
+       //Step 1 : Assert SEC PLL Reset
+       SECPLLCTL1 = ((1 << SEC_PLLCTL1_RESET_OFFSET) | (1 << SEC_PLLCTL1_ENSTAT_OFFSET));
+
+       //Step 2 : Change CLKF/OD/BWADJ etc. for SEC PLL
+       SECPLLCTL0 = ((BWADJ_val << SEC_PLLCTL0_BWADJ_OFFSET) |
+                       ((OD_val-1) << SEC_PLLCTL0_OD_OFFSET)|
+                       ((PLLM_val-1) << SEC_PLLCTL0_PLLM_OFFSET));
+
+       //Step 3 : Make sure the resets are held for 5us
+       for(i = 0; i < 200000; i++);
+
+       //Step 4 : Remove SEC PLL reset
+       SECPLLCTL1 = (1 << SEC_PLLCTL1_ENSTAT_OFFSET);
+
+       //Step 5 : Wait for PLL to lock (4000 CLKIN1 cycles)
+       for(i = 0; i < 4000; i++);
+
+       //Step 6 : Get the PLL out of Bypass
+       //SECPLLCTL0 &= ~(1 << SEC_PLLCTL0_BYPASS_OFFSET);
+       CHIP_MISC1 |= (1 << ARMPLL_ENABLE_OFFSET); 
+
+
+       //Step 6 : Lock Boot Config Registers
+       KICK0 = 0x00000000;
+       KICK1 = 0x00000000;
+
+       GEL_TextOut("ARM PLL has been configured (%f MHz * %d / %d = %f MHz)\n",,,,, CLKIN_val, PLLM_val, OD_val, (CLKIN_val * PLLM_val)/OD_val);
+
+}
+
+
+/* Set the desired PA PLL configuration */
+PaPllConfig()
+{
+       unsigned int passclksel = (DEVSTAT & PASSCLKSEL_MASK);
+       unsigned int papllctl0val_orig = PAPLLCTL0;
+       unsigned int papllctl1val_orig = PAPLLCTL1;
+       unsigned int papllctl0val_final;
+       unsigned int papllctl1val_final;
+       unsigned int papllclkf = 19; //204; // 204; 20 (if PASSREFCLK == 100mhz) Multiply by clkf + 1
+       unsigned int papllclkd = 0;  //11;  // 11;   1 (if PASSREFCLK == 100mhz) Divide by clkd + 1
+       unsigned int i = 0;
+
+       if (passclksel != PASSCLKSEL_MASK) GEL_TextOut("WARNING: SYSCLK is the input to the PA PLL.\n");
+
+       /* Unlock Chip Level Registers */
+       KICK0 = KICK0_UNLOCK;
+       KICK1 = KICK1_UNLOCK;
+
+       // PAPLLCTL1 = PAPLLCTL1 | 0x00000040; //Set ENSAT = 1; Set PLL Select to 0 (for SYCLK0 as input of PASS)
+       PAPLLCTL1 = PAPLLCTL1 | 0x00002040; //Set ENSAT = 1; Set PLL Select to 1 (for PA PLL as input of PASS)  
+
+       /*in PAPLLCTL0, clear bypass bit to set the PA PLL in Bypass Mode*/
+       //PAPLLCTL0 &= ~(1<<BYPASS_BIT_SHIFT); // Not setting Bypass bit
+       PAPLLCTL0 |=  (1<<BYPASS_BIT_SHIFT); // Actually setting bypass bit
+
+       /*Wait 4 cycles for the slowest of PLLOUT or reference clock source (CLKIN)*/
+       for(i=0;i<100;i++);
+
+       /*In PAPLLCTL1, write PLL reset bit to put the PLL in reset*/
+       PAPLLCTL1 |= PA_PLL_RESET_MASK;
+
+       /* Program the multiplier value */
+       PAPLLCTL0 &= (~PA_PLL_CLKF_MASK);          //clear multiplier value
+       PAPLLCTL0 &= (~PA_PLL_CLKR_MASK);          //clear divider value
+       PAPLLCTL0 |= (papllclkf<<CLKF_BIT_SHIFT);  // set PLLM
+       PAPLLCTL0 |= (papllclkd<<CLKD_BIT_SHIFT);  // set PLLD
+
+
+       PAPLLCTL0 &= 0x00FFFFFF;
+       PAPLLCTL0 |= ((((papllclkf + 1)>>1)-1)<<24);
+
+       //PAPLLCTL1 = PAPLLCTL1 | 0x00002000;
+
+       /*Wait for PLL to properly reset (128 CLKIN1 cycles) */
+       for(i=0;i<1000;i++);
+
+       /* take the PA PLL out of reset */
+       PAPLLCTL1 &= (~PA_PLL_RESET_MASK);
+
+       /*Wait for PLL to lock (2000 CLKIN1 cycles) */
+       for(i=0;i<5000;i++);
+
+       /* enable PLL mode */
+       PAPLLCTL0 &= ~(1<<BYPASS_BIT_SHIFT); // actually setting PLL MODE
+
+       for(i=0;i<4000;i++);
+
+       /* Lock Chip Level Registers */
+       KICK0 = KICK_LOCK;
+       KICK1 = KICK_LOCK;
+
+       papllctl0val_final = PAPLLCTL0;
+       papllctl1val_final = PAPLLCTL1;
+
+       GEL_TextOut("Completed PA PLL Setup\n");
+       GEL_TextOut("PAPLLCTL0 - before: 0x%x\t after: 0x%x\n",,,,, papllctl0val_orig, papllctl0val_final);
+       GEL_TextOut("PAPLLCTL1 - before: 0x%x\t after: 0x%x\n",,,,, papllctl1val_orig, papllctl1val_final);
+
+       if ((papllctl0val_final != 0x09080500) || (papllctl1val_final != 0x00002040))
+       {
+               return 1;
+       }
+
+       return 0;
+
+}
+
+//*************************************************************************************************
+//*************************************************************************************************
+//*************************************************************************************************
+//*************************************************************************************************
+//*************************************************************************************************
+//*************************************************************************************************
+
+//--------DDR3A Memory test----------------------
+
+ddr3A_memory_test ()
+{
+       unsigned int index, value;
+
+       GEL_TextOut( "DDR3A memory test... Started\n" );
+
+       /* Write a pattern */
+       for (index = DDR3A_TEST_START_ADDRESS; index < DDR3A_TEST_END_ADDRESS; index += 4) {
+               *index = index;
+       }
+
+       /* Read and check the pattern */
+       for (index = DDR3A_TEST_START_ADDRESS; index < DDR3A_TEST_END_ADDRESS; index += 4) {
+
+               value = *index;
+
+               if (value  != index) {
+                       GEL_TextOut( "DDR3A memory test... Failed\n" );
+                       return -1;
+               }
+       }
+
+       /* Write a pattern for complementary values */
+       for (index = DDR3A_TEST_START_ADDRESS; index < DDR3A_TEST_END_ADDRESS; index += 4) {
+               *index = ~index;
+       }
+
+       /* Read and check the pattern */
+       for (index = DDR3A_TEST_START_ADDRESS; index < DDR3A_TEST_END_ADDRESS; index += 4) {
+
+               value = *index;
+
+               if (value  != ~index) {
+                       GEL_TextOut( "DDR3A memory test... Failed\n" );
+                       return -1;
+               }
+       }
+
+       GEL_TextOut( "DDR3A memory test... Passed\n" );
+       return 0;
+
+}
+
+
+
+/****************************************************************************
+ *
+ * NAME
+ *      Setup_Memory_Map
+ *
+ * PURPOSE:
+ *      Setup the Memory Map for EVMC6678L.
+ *      Defined memory location avoid debugger access outside these locations.
+ *
+ * USAGE
+ *      This routine can be called as:
+ *
+ *      Setup_Memory_Map()
+ *
+ * RETURN VALUE
+ *      NONE
+ *
+ * REFERENCE
+ *      Based on TMS320C6678 datasheet.
+ *
+ ****************************************************************************/
+hotmenu Setup_Memory_Map( )
+{
+       GEL_TextOut("Setup_Memory_Map...\n",,);
+
+       GEL_MapOn( );
+       GEL_MapReset( );
+
+       GEL_MapAddStr( 0x00000000, 0, 0x21400000, "R|W|AS4", 0 );   // 
+       GEL_MapAddStr( 0x21400000,0, 0x00000080, "R|W|AS4", 0 );   // Hyperlink Config (remote) 
+       //GEL_MapAddStr( 0x21400080,0, 0x00000080, "R|W|AS4", 0 );   // Hyperlink Config (remote)
+       GEL_MapAddStr( 0x21400200, 0, 0xdebffe00, "R|W|AS4", 0 );   // 
+       GEL_TextOut( "Setup_Memory_Map... Done.\n" );
+}
+
+/*----------------------------------------------------- DDR3A : DDR800, 32bit--------------------------------------------------------------------------*/
+ddr3A_32bit_DDR800_setup()
+{
+       unsigned int multiplier = 3;
+       unsigned int divider = 0;
+       int temp;
+       unsigned int OD_val = 2;
+       KICK0 = 0x83E70B13;
+       KICK1 = 0x95A4F1E0;
+
+
+       //1.    Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do { 
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+       //4.    Clocks are enabled and frequency is stable---------------------------------------
+       //DDR3A PLL setup       
+       GEL_TextOut ( "DDR3 PLL (PLL2) Setup ... \n");
+       //DDR3APLLCTL0 = DDR3APLLCTL0 & 0xFF7FFFFF;
+       //      Set ENSAT = 1
+       DDR3APLLCTL1 |= 0x00000040;
+       // Put the PLL in PLL Mode  
+       DDR3APLLCTL0 |= 0x00800000;
+       // In PLL Controller, reset the PLL (bit 13 in DDR3APLLCTL1 register) 
+       DDR3APLLCTL1 |= 0x00002000;
+       // Program the necessary multipliers/dividers and BW adjustments            
+       // Set the divider values 
+       DDR3APLLCTL0 &= ~(0x0000003F);
+       DDR3APLLCTL0 |= (divider & 0x0000003F);
+       /* Step 7: Programming OD[3:0] in the SECCTL register */            
+       DDR3APLLCTL0 &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field
+       DDR3APLLCTL0 |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    
+
+       /* Set the Multipler values */
+       DDR3APLLCTL0 &= ~(0x0007FFC0);
+       DDR3APLLCTL0 |= ((multiplier << 6) & 0x0007FFC0 );
+       temp = ((multiplier + 1) >> 1) - 1;
+       DDR3APLLCTL0 &= ~(0xFF000000); 
+       DDR3APLLCTL0 |= ((temp << 24) & 0xFF000000);
+       DDR3APLLCTL1 &= ~(0x0000000F);
+       DDR3APLLCTL1 |= ((temp >> 8) & 0x0000000F);
+       //In DDR3PLLCTL1, write PLLRST = 0 to bring PLL out of reset 
+       DDR3APLLCTL1 &= ~(0x00002000);
+       // Put the PLL in PLL Mode  
+       DDR3APLLCTL0 &= ~(0x00800000); // ReSet the Bit 23
+       GEL_TextOut( "DDR3 PLL Setup complete, DDR3A clock now running at 400MHz.\n" );
+       //DDR3A PLL setup complete ---------------------------------------
+
+       /*------------------------- Start PHY Configuration -------------------------------*/
+
+       //DDR3A_PGCR1 = 0x0280C487;
+
+       //5.a   Program FRQSEL in the PLL Control Register (address offset 0x018).
+       DDR3A_PLLCR = 0xDC000; //Set FRQSEL=11, for ctl_clk between 166-275MHz
+
+       //5.b.  Program WLSTEP=1, IODDRM=1, and ZCKSEL in the PHY General Configuration Register 1 (address offset 0x00C). 
+       DDR3A_PGCR1 |= (1 << 2); //WLSTEP = 1
+
+       DDR3A_PGCR1 &= ~(IODDRM_MASK);
+       DDR3A_PGCR1 |= (( 1 << 7) & IODDRM_MASK);
+
+
+       DDR3A_PGCR1 &= ~(ZCKSEL_MASK);
+       DDR3A_PGCR1 |= (( 1 << 23) & ZCKSEL_MASK);
+
+
+       //5.c.  Program PHY Timing Parameters Register 0-4 (address offset 0x01C - 0x02C).
+
+       DDR3A_PTR0 = 0x42C21590;
+
+       DDR3A_PTR1 = 0xCFC712B3;
+
+       // Maintaining default values of Phy Timing Parameters Register 2 in PUB
+
+       DDR3A_PTR3 = 0x04430D40;//0x18061A80; 
+
+       DDR3A_PTR4 = 0x06413880;//0x0AAE7100;
+
+       //5.d.  Program PDQ, MPRDQ, and BYTEMASK in the DRAM Configuration Register (address offset 0x044). 
+       //              All other fields must be left at their default values.
+
+       DDR3A_DCR &= ~(PDQ_MASK); //PDQ = 0
+       DDR3A_DCR &= ~(MPRDQ_MASK); //MPRDQ = 0
+
+       DDR3A_DCR &= ~(BYTEMASK_MASK);
+       DDR3A_DCR |= (( 1 << 10) & BYTEMASK_MASK);
+
+
+       DDR3A_DCR &= ~(NOSRA_MASK);
+       DDR3A_DCR |= (( 1 << 27) & NOSRA_MASK);
+
+
+       DDR3A_DCR &= ~(UDIMM_MASK);
+       DDR3A_DCR |= (( 1 << 29) & UDIMM_MASK);
+
+
+       //5.e.  Program DRAM Timing Parameters Register 0-2 (address offset 0x048 - 0x050). 
+
+       DDR3A_DTPR0 = 0x008F6633; //0x50CE6644;
+       DDR3A_DTPR1 = 0x12820180;
+       DDR3A_DTPR2 = 0x50022A00;
+
+       //5.f.  Program BL=0, CL, WR, and PD=1 in the Mode Register 0 (address offset 0x054). 
+       //All other fields must be left at their default values.
+
+       DDR3A_MR0 = 0x00001620;
+
+
+       //5.g.  Program DIC, RTT, and TDQS in the Mode Register 1 (address offset 0x058). 
+       //All other fields must be left at their default values.
+
+       DDR3A_MR1 = 0x00000006;
+
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+       //5.h.  Program Mode Register 2 (address offset 0x05C).
+       // Maintaining default values of Program Mode Register 2
+       DDR3A_MR2 = 0x00000040;
+
+       //5.i.  Program DTMPR=1, DTEXD, DTEXG, RANKEN=1 or 3, and RFSHDT=7 in the Data Training Configuration Register (address offset 0x068). 
+       //All other fields must be left at their default values.
+       DDR3A_DTCR = 0x710035C7; //0x710035C7;
+
+       //5.j.  Program tREFPRD=(5*tREFI/ddr_clk_period) in the PHY General Configuration Register 2 (address offset 0x08C). 
+       //All other fields must be left at their default values.
+
+       DDR3A_PGCR2 = 0x00F03D09; //NOBUB = 0, FXDLAT = 0       
+       //DDR3A_PGCR2 = 0x00F83D09; //NOBUB = 0, FXDLAT = 1 
+
+       //Set Impedence Register        
+       DDR3A_ZQ0CR1 = 0x0000007B; 
+       DDR3A_ZQ1CR1 = 0x0000007B;
+       DDR3A_ZQ2CR1 = 0x0000007B;
+
+
+       //6.    Re-trigger PHY initialization in DDR PHY through the VBUSP interface.
+       //6.a.  Program 0x00000033 to the PHY Initialization Register (address offset 0x004) to re-trigger PLL, ZCAL, and DCAL initialization.
+
+       DDR3A_PIR = 0x00000033;
+
+       //6.b.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do { 
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+
+
+       // 7.   Trigger DDR3 initialization and leveling/training in DDR PHY through the VBUSP interface.
+       // a.   If using a 16-bit wide DDR interface, program DXEN=0 in the DATX8 2-7 General Configuration Registers (address offsets 0x240, 0x280, 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.
+       // b.   If using a 32-bit wide DDR interface, program DXEN=0 in the DATX8 4-7 General Configuration Registers (address offsets 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.
+       // c.   If ECC is not required, program DXEN=0 in the DATX8 8 General Configuration Register (address offset 0x3C0) to disable the leveling/training for the ECC byte lane.
+       // NOTE: Setup supports 64-bit by default,  ECC enable by default.
+
+       //7.d.  Program 0x0000XF81 to the PHY Initialization Register (address offset 0x004) to trigger DDR3 initialization and leveling/training sequences 
+
+       DDR3A_PIR = 0x0000FF81; //WLADJ - ON
+       //DDR3A_PIR = 0x00000781;  //WLADJ - OFF
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+       //7.e.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do {              
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+
+       /* End PHY Configuration */             
+       //---------------------------------------------------------------------------------------------------------                                     
+       /* START EMIF INITIALIZATION
+  ++++++++++++++++++SDCFG Register Calculation+++++++++++++++++++
+  | 31 - 29  | 28 |27 - 25 | 24   | 23 - 22| 21 - 17 |
+  |SDRAM_TYPE|Rsvd|DDR_TERM| DDQS | DYN_ODT|  Rsvd   |
+  |  0x011   |  0 | 0x011  | 0x1  |   0x00 |   0x0   |
+
+  | 16-14 |13 - 12 |  11 - 8 |  7   |6 - 5 |  4  |  3  |  2  |  1 - 0  |
+  |   CWL | NM     |   CL    | Rsvd |IBANK | Rsvd|EBANK| Rsvd|PAGE_SIZE|
+  |  0x11 | 0x00   |  0x1110 |  0x0 | 0x11 | 0x0 |  0  |  0  |   0x10  |
+  SDCFG = 0x0110 0011 0010 0010 0011 0011 1011 0010
+  SDCFG = 0x6700486A;//0x63223332
+
+  SDRAM_TYPE = 3
+  DDR_TERM = 3 (RZQ/4 = 1; RZQ/6=3)
+  DDQS = 1 
+  DYN_ODT = 0 
+
+  CWL = 3 (CWL5=0; CWL6=1; CWL7=2; CWL8=3)
+  NM = 0 (64-bit=0, 32-bit=1, 16-bit=2)
+  CL = 14 (CL5=2; CL6=4; CL7=6; CL8=8; CL9=10; CL10=12; CL11=14)
+  IBANK = 3 (8bank)
+  EBANK = 0 (0 - pad_cs_o_n[0] , 1 - pad_cs_o_n[1:0])
+  PAGE_SIZE = 2 (1024page-size=2; 2048page-size=3)
+        */
+       /* Start DDR3A EMIF Configuration */
+       //8.    Configure the EMIF through the VBUSM interface.
+       //8.a.  Program all EMIF MMR\92s.
+       DDR3A_SDCFG    = 0x62001462     ; //0x6200046A
+
+       DDR3A_SDTIM1   = 0x0A385022;
+       DDR3A_SDTIM2   = 0x00001CA5;
+       DDR3A_SDTIM3   = 0x210DFF22;
+       DDR3A_SDTIM4   = 0x533F03FF;
+
+       DDR3A_ZQCFG    = 0x70073200;    
+       //8.b.  Program reg_initref_dis=0 in the SDRAM Refresh Control Register (address offset 0x10).
+       DDR3A_SDRFC = 0x00000C34;
+
+       GEL_TextOut("DDR3A initialization complete \n");
+       /* End  DDR3A EMIF Configuration */
+
+}      
+
+
+/*----------------------------------------------------- DDR3A : DDR1066, 32bit--------------------------------------------------------------------------*/
+ddr3A_32bit_DDR1066_setup()
+{
+
+       unsigned int multiplier = 15;
+       unsigned int divider = 0;
+       int temp;
+       unsigned int OD_val = 6;
+       KICK0 = 0x83E70B13;
+       KICK1 = 0x95A4F1E0;
+
+
+       //1.    Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do { 
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+       //4.    Clocks are enabled and frequency is stable---------------------------------------
+       //DDR3A PLL setup       
+       GEL_TextOut ( "DDR3 PLL (PLL2) Setup ... \n");
+       //DDR3APLLCTL0 = DDR3APLLCTL0 & 0xFF7FFFFF;
+       //      Set ENSAT = 1
+       DDR3APLLCTL1 |= 0x00000040;
+       // Put the PLL in PLL Mode  
+       DDR3APLLCTL0 |= 0x00800000;
+       // In PLL Controller, reset the PLL (bit 13 in DDR3APLLCTL1 register) 
+       DDR3APLLCTL1 |= 0x00002000;
+       // Program the necessary multipliers/dividers and BW adjustments            
+       // Set the divider values 
+       DDR3APLLCTL0 &= ~(0x0000003F);
+       DDR3APLLCTL0 |= (divider & 0x0000003F);
+       /* Step 7: Programming OD[3:0] in the SECCTL register */            
+       DDR3APLLCTL0 &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field
+       DDR3APLLCTL0 |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    
+
+       /* Set the Multipler values */
+       DDR3APLLCTL0 &= ~(0x0007FFC0);
+       DDR3APLLCTL0 |= ((multiplier << 6) & 0x0007FFC0 );
+       temp = ((multiplier + 1) >> 1) - 1;
+       DDR3APLLCTL0 &= ~(0xFF000000); 
+       DDR3APLLCTL0 |= ((temp << 24) & 0xFF000000);
+       DDR3APLLCTL1 &= ~(0x0000000F);
+       DDR3APLLCTL1 |= ((temp >> 8) & 0x0000000F);
+       //In DDR3PLLCTL1, write PLLRST = 0 to bring PLL out of reset 
+       DDR3APLLCTL1 &= ~(0x00002000);
+       // Put the PLL in PLL Mode  
+       DDR3APLLCTL0 &= ~(0x00800000); // ReSet the Bit 23
+       GEL_TextOut( "DDR3 PLL Setup complete, DDR3A clock now running at 533MHz.\n" );
+       //DDR3A PLL setup complete ---------------------------------------
+
+       /*------------------------- Start PHY Configuration -------------------------------*/
+
+       //DDR3A_PGCR1 = 0x0280C487;
+
+       //5.a   Program FRQSEL in the PLL Control Register (address offset 0x018).
+       DDR3A_PLLCR = 0xDC000; //Set FRQSEL=11, for ctl_clk between 166-275MHz
+
+       //5.b.  Program WLSTEP=1, IODDRM=1, and ZCKSEL in the PHY General Configuration Register 1 (address offset 0x00C). 
+       DDR3A_PGCR1 |= (1 << 2); //WLSTEP = 1
+
+       DDR3A_PGCR1 &= ~(IODDRM_MASK);
+       DDR3A_PGCR1 |= (( 1 << 7) & IODDRM_MASK);
+
+
+       DDR3A_PGCR1 &= ~(ZCKSEL_MASK);
+       DDR3A_PGCR1 |= (( 1 << 23) & ZCKSEL_MASK);
+
+
+       //5.c.  Program PHY Timing Parameters Register 0-4 (address offset 0x01C - 0x02C).
+
+       DDR3A_PTR0 = 0x426213CF;
+
+       DDR3A_PTR1 = 0xCFC712B3;        
+
+       // Maintaining default values of Phy Timing Parameters Register 2 in PUB
+
+       DDR3A_PTR3 = 0x05B411AA;//0x09041104;//0x18061A80; 
+
+       DDR3A_PTR4 = 0x0855A0AA;//0x0AAE7100;
+
+       //5.d.  Program PDQ, MPRDQ, and BYTEMASK in the DRAM Configuration Register (address offset 0x044). 
+       //              All other fields must be left at their default values.
+
+       DDR3A_DCR &= ~(PDQ_MASK); //PDQ = 0
+
+       DDR3A_DCR &= ~(MPRDQ_MASK); //MPRDQ = 0
+
+       DDR3A_DCR &= ~(BYTEMASK_MASK);
+       DDR3A_DCR |= (( 1 << 10) & BYTEMASK_MASK);
+
+
+       DDR3A_DCR &= ~(NOSRA_MASK);
+       DDR3A_DCR |= (( 1 << 27) & NOSRA_MASK);
+
+       //DDR3A_DCR &= ~(UDIMM_MASK);
+       //DDR3A_DCR |= (( 1 << 29) & UDIMM_MASK);
+
+       //RRMODE
+       //DDR3A_DSGCR &= ~(RRMODE_MASK); //RR_MODE = 0
+
+       //DDR3A_DSGCR &= ~(RRMODE_MASK); //RR_MODE = 1
+       //DDR3A_DSGCR |= (( 1 << 18) & RRMODE_MASK);
+
+
+       //5.e.  Program DRAM Timing Parameters Register 0-2 (address offset 0x048 - 0x050). 
+
+       DDR3A_DTPR0 = 0x54D47744;//0x6D148844;     //0x6D148844; 0x69137764 ---changed in rev 1.3
+
+       DDR3A_DTPR1 = 0x1282AA00;//0x12845A00;
+       DDR3A_DTPR2 = 0x50023200;
+
+       //5.f.  Program BL=0, CL, WR, and PD=1 in the Mode Register 0 (address offset 0x054). 
+       //All other fields must be left at their default values.
+
+       DDR3A_MR0 = 0x00001830;    //0x00001870; 
+
+
+       //5.g.  Program DIC, RTT, and TDQS in the Mode Register 1 (address offset 0x058). 
+       //All other fields must be left at their default values.
+
+       DDR3A_MR1 =  0x00000006; //0x00000044;  ---changed in rev 1.3
+
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+       //5.h.  Program Mode Register 2 (address offset 0x05C).
+       // Maintaining default values of Program Mode Register 2
+       DDR3A_MR2 = 0x00000048;  //18   ---changed in rev 1.3
+
+
+       //5.i.  Program DTMPR=1, DTEXD, DTEXG, RANKEN=1 or 3, and RFSHDT=7 in the Data Training Configuration Register (address offset 0x068). 
+       //All other fields must be left at their default values.
+       DDR3A_DTCR = 0x710035C7; //0x730035C7;
+
+       //5.j.  Program tREFPRD=(5*tREFI/ddr_clk_period) in the PHY General Configuration Register 2 (address offset 0x08C). 
+       //All other fields must be left at their default values.
+
+       DDR3A_PGCR2 = 0x00F05161; //NOBUB = 0, FXDLAT = 0       
+       //DDR3A_PGCR2 = 0x00F83D09; //NOBUB = 0, FXDLAT = 1 
+
+
+       //Set Impedence Register        
+       DDR3A_ZQ0CR1 = 0x0000007B; 
+       DDR3A_ZQ1CR1 = 0x0000007B;
+       DDR3A_ZQ2CR1 = 0x0000007B;
+
+
+
+       //6.    Re-trigger PHY initialization in DDR PHY through the VBUSP interface.
+       //6.a.  Program 0x00000033 to the PHY Initialization Register (address offset 0x004) to re-trigger PLL, ZCAL, and DCAL initialization.
+
+       DDR3A_PIR = 0x00000033;
+
+       //6.b.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do { 
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+
+
+       // 7.   Trigger DDR3 initialization and leveling/training in DDR PHY through the VBUSP interface.
+       // a.   If using a 16-bit wide DDR interface, program DXEN=0 in the DATX8 2-7 General Configuration Registers (address offsets 0x240, 0x280, 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.
+       // b.   If using a 32-bit wide DDR interface, program DXEN=0 in the DATX8 4-7 General Configuration Registers (address offsets 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.
+       // c.   If ECC is not required, program DXEN=0 in the DATX8 8 General Configuration Register (address offset 0x3C0) to disable the leveling/training for the ECC byte lane.
+       // NOTE: Setup supports 64-bit by default,  ECC enable by default.
+
+       //7.d.  Program 0x0000XF81 to the PHY Initialization Register (address offset 0x004) to trigger DDR3 initialization and leveling/training sequences 
+
+       DDR3A_PIR = 0x0000FF81; //WLADJ - ON
+       //DDR3A_PIR = 0x00000781;  //WLADJ - OFF
+
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+       //7.e.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do {              
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+
+       /* End PHY Configuration */             
+       //---------------------------------------------------------------------------------------------------------                                     
+       /* START EMIF INITIALIZATION
+  ++++++++++++++++++SDCFG Register Calculation+++++++++++++++++++
+  | 31 - 29  | 28 |27 - 25 | 24   | 23 - 22| 21 - 17 |
+  |SDRAM_TYPE|Rsvd|DDR_TERM| DDQS | DYN_ODT|  Rsvd   |
+  |  0x011   |  0 | 0x011  | 0x1  |   0x00 |   0x0   |
+
+  | 16-14 |13 - 12 |  11 - 8 |  7   |6 - 5 |  4  |  3  |  2  |  1 - 0  |
+  |   CWL | NM     |   CL    | Rsvd |IBANK | Rsvd|EBANK| Rsvd|PAGE_SIZE|
+  |  0x11 | 0x00   |  0x1110 |  0x0 | 0x11 | 0x0 |  0  |  0  |   0x10  |
+  SDCFG = 0x0110 0011 0010 0010 0011 0011 1011 0010
+  SDCFG = 0x6700486A;//0x63223332
+
+  SDRAM_TYPE = 3
+  DDR_TERM = 3 (RZQ/4 = 1; RZQ/6=3)
+  DDQS = 1 
+  DYN_ODT = 0 
+
+  CWL = 3 (CWL5=0; CWL6=1; CWL7=2; CWL8=3)
+  NM = 0 (64-bit=0, 32-bit=1, 16-bit=2)
+  CL = 14 (CL5=2; CL6=4; CL7=6; CL8=8; CL9=10; CL10=12; CL11=14)
+  IBANK = 3 (8bank)
+  EBANK = 0 (0 - pad_cs_o_n[0] , 1 - pad_cs_o_n[1:0])
+  PAGE_SIZE = 2 (1024page-size=2; 2048page-size=3)
+        */
+       /* Start DDR3A EMIF Configuration */
+       //8.    Configure the EMIF through the VBUSM interface.
+       //8.a.  Program all EMIF MMR\92s.
+       DDR3A_SDCFG    = 0x62005662; //0x62005662;
+       DDR3A_SDTIM1   = 0x0E4C6833; //0x0E4C6833;//0x0E4C6833;
+       DDR3A_SDTIM2   = 0x00001CC6;  //0x00001CE7;
+       DDR3A_SDTIM3   = 0x3169FF32; //0x323DFF32;
+       DDR3A_SDTIM4   = 0x533F054F; //0x533F08AF;
+
+       DDR3A_ZQCFG    = 0x70073200;//0xF0073200;       
+       //8.b.  Program reg_initref_dis=0 in the SDRAM Refresh Control Register (address offset 0x10).
+       DDR3A_SDRFC = 0x00001045;
+
+       GEL_TextOut("DDR3A initialization complete \n");
+       /* End  DDR3A EMIF Configuration */
+
+}
+
+/*--------------------------------------------------
+                       DDR3A : DDR1333,32bit  
+---------------------------------------------------*/
+
+ddr3A_32bit_DDR1333_setup()    
+{
+       unsigned int multiplier = 19;
+       unsigned int divider = 0;
+       int temp;
+       unsigned int OD_val = 6;
+       KICK0 = 0x83E70B13;
+       KICK1 = 0x95A4F1E0;
+
+
+       //1.    Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do { 
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+       //4.    Clocks are enabled and frequency is stable---------------------------------------
+       //DDR3A PLL setup       
+       GEL_TextOut ( "DDR3 PLL (PLL2) Setup ... \n");
+       //DDR3APLLCTL0 = DDR3APLLCTL0 & 0xFF7FFFFF;
+       //      Set ENSAT = 1
+       DDR3APLLCTL1 |= 0x00000040;
+       // Put the PLL in PLL Mode  
+       DDR3APLLCTL0 |= 0x00800000;
+       // In PLL Controller, reset the PLL (bit 13 in DDR3APLLCTL1 register) 
+       DDR3APLLCTL1 |= 0x00002000;
+       // Program the necessary multipliers/dividers and BW adjustments            
+       // Set the divider values 
+       DDR3APLLCTL0 &= ~(0x0000003F);
+       DDR3APLLCTL0 |= (divider & 0x0000003F);
+       /* Step 7: Programming OD[3:0] in the SECCTL register */            
+       DDR3APLLCTL0 &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field
+       DDR3APLLCTL0 |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    
+
+       /* Set the Multipler values */
+       DDR3APLLCTL0 &= ~(0x0007FFC0);
+       DDR3APLLCTL0 |= ((multiplier << 6) & 0x0007FFC0 );
+       temp = ((multiplier + 1) >> 1) - 1;
+       DDR3APLLCTL0 &= ~(0xFF000000); 
+       DDR3APLLCTL0 |= ((temp << 24) & 0xFF000000);
+       DDR3APLLCTL1 &= ~(0x0000000F);
+       DDR3APLLCTL1 |= ((temp >> 8) & 0x0000000F);
+       //In DDR3PLLCTL1, write PLLRST = 0 to bring PLL out of reset 
+       DDR3APLLCTL1 &= ~(0x00002000);
+       // Put the PLL in PLL Mode  
+       DDR3APLLCTL0 &= ~(0x00800000); // ReSet the Bit 23
+       GEL_TextOut( "DDR3 PLL Setup complete, DDR3A clock now running at 666 MHz.\n" );
+       //DDR3A PLL setup complete ---------------------------------------
+
+       /*------------------------- Start PHY Configuration -------------------------------*/
+
+       //DDR3A_PGCR1 = 0x0280C487;
+
+       //5.a   Program FRQSEL in the PLL Control Register (address offset 0x018).
+       DDR3A_PLLCR = 0x0005C000; //Set FRQSEL=01, for ctl_clk between 225-385MHz
+
+       //5.b.  Program WLSTEP=1, IODDRM=1, and ZCKSEL in the PHY General Configuration Register 1 (address offset 0x00C). 
+       DDR3A_PGCR1 |= (1 << 2); //WLSTEP = 1
+
+       DDR3A_PGCR1 &= ~(IODDRM_MASK);
+       DDR3A_PGCR1 |= (( 1 << 7) & IODDRM_MASK);
+
+
+       DDR3A_PGCR1 &= ~(ZCKSEL_MASK);
+       DDR3A_PGCR1 |= (( 1 << 23) & ZCKSEL_MASK);
+
+
+       //5.c.  Program PHY Timing Parameters Register 0-4 (address offset 0x01C - 0x02C).
+
+       DDR3A_PTR0 = 0x426213CF;
+
+       DDR3A_PTR1 = 0xCFC712B3;
+
+       // Maintaining default values of Phy Timing Parameters Register 2 in PUB
+
+       DDR3A_PTR3 = 0x07151615;//0x072515C2; //0x0B4515C2;//0x18061A80; 
+
+       DDR3A_PTR4 = 0x0A6A08D5;//0x0AAE7100;
+
+       //5.d.  Program PDQ, MPRDQ, and BYTEMASK in the DRAM Configuration Register (address offset 0x044). 
+       //              All other fields must be left at their default values.
+
+       DDR3A_DCR &= ~(PDQ_MASK); //PDQ = 0
+
+       DDR3A_DCR &= ~(MPRDQ_MASK); //MPRDQ = 0
+
+       DDR3A_DCR &= ~(BYTEMASK_MASK);
+       DDR3A_DCR |= (( 1 << 10) & BYTEMASK_MASK);
+
+
+       DDR3A_DCR &= ~(NOSRA_MASK);
+       DDR3A_DCR |= (( 1 << 27) & NOSRA_MASK);
+
+
+       //DDR3A_DCR &= ~(UDIMM_MASK);
+       //DDR3A_DCR |= (( 1 << 29) & UDIMM_MASK);
+
+
+       //5.e.  Program DRAM Timing Parameters Register 0-2 (address offset 0x048 - 0x050). 
+
+       DDR3A_DTPR0 = 0xAD189955;//0x85589975;//0x8558AA55;
+       DDR3A_DTPR1 = 0x12835A80;//0x12835A80;//0x12857280;
+       DDR3A_DTPR2 = 0x5002C200;
+
+       //5.f.  Program BL=0, CL, WR, and PD=1 in the Mode Register 0 (address offset 0x054). 
+       //All other fields must be left at their default values.
+
+       DDR3A_MR0 = 0x00001A60; //50
+
+
+       //5.g.  Program DIC, RTT, and TDQS in the Mode Register 1 (address offset 0x058). 
+       //All other fields must be left at their default values.
+
+       DDR3A_MR1 = 0x00000006;
+
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+       //5.h.  Program Mode Register 2 (address offset 0x05C).
+       // Maintaining default values of Program Mode Register 2
+       DDR3A_MR2 = 0x00000050;
+
+       //5.i.  Program DTMPR=1, DTEXD, DTEXG, RANKEN=1 or 3, and RFSHDT=7 in the Data Training Configuration Register (address offset 0x068). 
+       //All other fields must be left at their default values.
+       DDR3A_DTCR = 0x710035C7; //0x730035C7;
+
+       //5.j.  Program tREFPRD=(5*tREFI/ddr_clk_period) in the PHY General Configuration Register 2 (address offset 0x08C). 
+       //All other fields must be left at their default values.
+
+       DDR3A_PGCR2 = 0x00F065B9; //NOBUB = 0, FXDLAT = 0       
+       //DDR3A_PGCR2 = 0x00F83D09; //NOBUB = 0, FXDLAT = 1 
+
+       //Set Impedence Register        
+       DDR3A_ZQ0CR1 = 0x0000007B; 
+       DDR3A_ZQ1CR1 = 0x0000007B;
+       DDR3A_ZQ2CR1 = 0x0000007B;
+       //DDR3A_ZQ3CR1 = 0x0000005D;
+
+       //6.    Re-trigger PHY initialization in DDR PHY through the VBUSP interface.
+       //6.a.  Program 0x00000033 to the PHY Initialization Register (address offset 0x004) to re-trigger PLL, ZCAL, and DCAL initialization.
+
+       DDR3A_PIR = 0x00000033;
+
+       //6.b.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do { 
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+
+
+       // 7.   Trigger DDR3 initialization and leveling/training in DDR PHY through the VBUSP interface.
+       // a.   If using a 16-bit wide DDR interface, program DXEN=0 in the DATX8 2-7 General Configuration Registers (address offsets 0x240, 0x280, 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.
+       // b.   If using a 32-bit wide DDR interface, program DXEN=0 in the DATX8 4-7 General Configuration Registers (address offsets 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.
+       // c.   If ECC is not required, program DXEN=0 in the DATX8 8 General Configuration Register (address offset 0x3C0) to disable the leveling/training for the ECC byte lane.
+       // NOTE: Setup supports 64-bit by default,  ECC enable by default.
+
+       //7.d.  Program 0x0000XF81 to the PHY Initialization Register (address offset 0x004) to trigger DDR3 initialization and leveling/training sequences 
+
+       DDR3A_PIR = 0x0000FF81; //WLADJ - ON
+       //DDR3A_PIR = 0x00000781;  //WLADJ - OFF
+
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+       //7.e.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do {              
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+
+       /* End PHY Configuration */             
+       //---------------------------------------------------------------------------------------------------------                                     
+       /* START EMIF INITIALIZATION
+  ++++++++++++++++++SDCFG Register Calculation+++++++++++++++++++
+  | 31 - 29  | 28 |27 - 25 | 24   | 23 - 22| 21 - 17 |
+  |SDRAM_TYPE|Rsvd|DDR_TERM| DDQS | DYN_ODT|  Rsvd   |
+  |  0x011   |  0 | 0x011  | 0x1  |   0x00 |   0x0   |
+
+  | 16-14 |13 - 12 |  11 - 8 |  7   |6 - 5 |  4  |  3  |  2  |  1 - 0  |
+  |   CWL | NM     |   CL    | Rsvd |IBANK | Rsvd|EBANK| Rsvd|PAGE_SIZE|
+  |  0x11 | 0x00   |  0x1110 |  0x0 | 0x11 | 0x0 |  0  |  0  |   0x10  |
+  SDCFG = 0x0110 0011 0010 0010 0011 0011 1011 0010
+  SDCFG = 0x6700486A;//0x63223332
+
+  SDRAM_TYPE = 3
+  DDR_TERM = 3 (RZQ/4 = 1; RZQ/6=3)
+  DDQS = 1 
+  DYN_ODT = 0 
+
+  CWL = 3 (CWL5=0; CWL6=1; CWL7=2; CWL8=3)
+  NM = 0 (64-bit=0, 32-bit=1, 16-bit=2)
+  CL = 14 (CL5=2; CL6=4; CL7=6; CL8=8; CL9=10; CL10=12; CL11=14)
+  IBANK = 3 (8bank)
+  EBANK = 0 (0 - pad_cs_o_n[0] , 1 - pad_cs_o_n[1:0])
+  PAGE_SIZE = 2 (1024page-size=2; 2048page-size=3)
+        */
+       /* Start DDR3A EMIF Configuration */
+       //8.    Configure the EMIF through the VBUSM interface.
+       //8.a.  Program all EMIF MMR\92s.
+       DDR3A_SDCFG    = 0x62009C62; // 9A62//0x62008C62        ;//0x6600CE62=single rank,0x6600CE6A=dual rank
+
+       DDR3A_SDTIM1   = 0x125C7C44;
+       DDR3A_SDTIM2   = 0x00001D08;
+       DDR3A_SDTIM3   = 0x31C1FF43;
+       DDR3A_SDTIM4   = 0x543F06AF;
+
+       DDR3A_ZQCFG    = 0x70073200;    
+       //8.b.  Program reg_initref_dis=0 in the SDRAM Refresh Control Register (address offset 0x10).
+       DDR3A_SDRFC = 0x00001457;
+
+       GEL_TextOut("DDR3A initialization complete \n");
+       /* End  DDR3A EMIF Configuration */
+}
+
+
+/*--------------------------------------------------
+                       DDR3A : DDR1600,64bit  
+---------------------------------------------------*/
+
+ddr3A_64bit_DDR1600_setup()    
+{
+       unsigned int multiplier = 7;
+       unsigned int divider = 0;
+       int temp;
+       unsigned int OD_val = 2;
+       KICK0 = 0x83E70B13;
+       KICK1 = 0x95A4F1E0;
+
+
+       //1.    Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do { 
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+       //4.    Clocks are enabled and frequency is stable---------------------------------------
+       //DDR3A PLL setup       
+       GEL_TextOut ( "DDR3 PLL (PLL2) Setup ... \n");
+       //DDR3APLLCTL0 = DDR3APLLCTL0 & 0xFF7FFFFF;
+       //      Set ENSAT = 1
+       DDR3APLLCTL1 |= 0x00000040;
+       // Put the PLL in PLL Mode  
+       DDR3APLLCTL0 |= 0x00800000;
+       // In PLL Controller, reset the PLL (bit 13 in DDR3APLLCTL1 register) 
+       DDR3APLLCTL1 |= 0x00002000;
+       // Program the necessary multipliers/dividers and BW adjustments            
+       // Set the divider values 
+       DDR3APLLCTL0 &= ~(0x0000003F);
+       DDR3APLLCTL0 |= (divider & 0x0000003F);
+       /* Step 7: Programming OD[3:0] in the SECCTL register */            
+       DDR3APLLCTL0 &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field
+       DDR3APLLCTL0 |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    
+
+       /* Set the Multipler values */
+       DDR3APLLCTL0 &= ~(0x0007FFC0);
+       DDR3APLLCTL0 |= ((multiplier << 6) & 0x0007FFC0 );
+       temp = ((multiplier + 1) >> 1) - 1;
+       DDR3APLLCTL0 &= ~(0xFF000000); 
+       DDR3APLLCTL0 |= ((temp << 24) & 0xFF000000);
+       DDR3APLLCTL1 &= ~(0x0000000F);
+       DDR3APLLCTL1 |= ((temp >> 8) & 0x0000000F);
+       //In DDR3PLLCTL1, write PLLRST = 0 to bring PLL out of reset 
+       DDR3APLLCTL1 &= ~(0x00002000);
+       // Put the PLL in PLL Mode  
+       DDR3APLLCTL0 &= ~(0x00800000); // ReSet the Bit 23
+       GEL_TextOut( "DDR3 PLL Setup complete, DDR3A clock now running at 666 MHz.\n" );
+       //DDR3A PLL setup complete ---------------------------------------
+
+       /*------------------------- Start PHY Configuration -------------------------------*/
+
+       //DDR3A_PGCR1 = 0x0280C487;
+
+       //5.a   Program FRQSEL in the PLL Control Register (address offset 0x018).
+       DDR3A_PLLCR = 0x1C000; //Set FRQSEL=00, for ctl_clk between 335-533MHz
+
+       //5.b.  Program WLSTEP=1, IODDRM=1, and ZCKSEL in the PHY General Configuration Register 1 (address offset 0x00C). 
+       DDR3A_PGCR1 |= (1 << 2); //WLSTEP = 1
+
+       DDR3A_PGCR1 &= ~(IODDRM_MASK);
+       DDR3A_PGCR1 |= (( 1 << 7) & IODDRM_MASK);
+
+
+       DDR3A_PGCR1 &= ~(ZCKSEL_MASK);
+       DDR3A_PGCR1 |= (( 1 << 23) & ZCKSEL_MASK);
+
+
+       //5.c.  Program PHY Timing Parameters Register 0-4 (address offset 0x01C - 0x02C).
+
+       DDR3A_PTR0 = 0x426213CF;
+
+       DDR3A_PTR1 = 0xCFC712B3;
+
+       // Maintaining default values of Phy Timing Parameters Register 2 in PUB
+
+       DDR3A_PTR3 = 0x08861A80;//0x072515C2; //0x0B4515C2;//0x18061A80; 
+
+       DDR3A_PTR4 = 0x0C827100;//0x0AAE7100;
+
+       //5.d.  Program PDQ, MPRDQ, and BYTEMASK in the DRAM Configuration Register (address offset 0x044). 
+       //              All other fields must be left at their default values.
+
+       DDR3A_DCR &= ~(PDQ_MASK); //PDQ = 0
+
+       DDR3A_DCR &= ~(MPRDQ_MASK); //MPRDQ = 0
+
+       DDR3A_DCR &= ~(BYTEMASK_MASK);
+       DDR3A_DCR |= (( 1 << 10) & BYTEMASK_MASK);
+
+
+       DDR3A_DCR &= ~(NOSRA_MASK);
+       DDR3A_DCR |= (( 1 << 27) & NOSRA_MASK);
+
+
+       //DDR3A_DCR &= ~(UDIMM_MASK);
+       //DDR3A_DCR |= (( 1 << 29) & UDIMM_MASK);
+
+
+       //5.e.  Program DRAM Timing Parameters Register 0-2 (address offset 0x048 - 0x050). 
+
+       DDR3A_DTPR0 = 0x011CBB66;//0x85589975;//0x8558AA55;
+       DDR3A_DTPR1 = 0x12840300;//0x12835A80;//0x12857280;
+       DDR3A_DTPR2 = 0x5002CE00;
+
+       //5.f.  Program BL=0, CL, WR, and PD=1 in the Mode Register 0 (address offset 0x054). 
+       //All other fields must be left at their default values.
+
+       DDR3A_MR0 = 0x00001C70; //50
+
+
+       //5.g.  Program DIC, RTT, and TDQS in the Mode Register 1 (address offset 0x058). 
+       //All other fields must be left at their default values.
+
+       DDR3A_MR1 = 0x00000006;
+
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+       //5.h.  Program Mode Register 2 (address offset 0x05C).
+       // Maintaining default values of Program Mode Register 2
+       DDR3A_MR2 = 0x00000058;
+
+       //5.i.  Program DTMPR=1, DTEXD, DTEXG, RANKEN=1 or 3, and RFSHDT=7 in the Data Training Configuration Register (address offset 0x068). 
+       //All other fields must be left at their default values.
+       DDR3A_DTCR = 0x710035C7; //0x730035C7;
+
+       //5.j.  Program tREFPRD=(5*tREFI/ddr_clk_period) in the PHY General Configuration Register 2 (address offset 0x08C). 
+       //All other fields must be left at their default values.
+
+       DDR3A_PGCR2 = 0x00F07A12; //NOBUB = 0, FXDLAT = 0       
+       //DDR3A_PGCR2 = 0x00F83D09; //NOBUB = 0, FXDLAT = 1 
+
+       //Set Impedence Register        
+       DDR3A_ZQ0CR1 = 0x0000007B; 
+       DDR3A_ZQ1CR1 = 0x0000007B;
+       DDR3A_ZQ2CR1 = 0x0000007B;
+       //DDR3A_ZQ3CR1 = 0x0000005D;
+
+       //6.    Re-trigger PHY initialization in DDR PHY through the VBUSP interface.
+       //6.a.  Program 0x00000033 to the PHY Initialization Register (address offset 0x004) to re-trigger PLL, ZCAL, and DCAL initialization.
+
+       DDR3A_PIR = 0x00000033;
+
+       //6.b.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do { 
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+
+
+       // 7.   Trigger DDR3 initialization and leveling/training in DDR PHY through the VBUSP interface.
+       // a.   If using a 16-bit wide DDR interface, program DXEN=0 in the DATX8 2-7 General Configuration Registers (address offsets 0x240, 0x280, 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.
+       // b.   If using a 32-bit wide DDR interface, program DXEN=0 in the DATX8 4-7 General Configuration Registers (address offsets 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.
+       // c.   If ECC is not required, program DXEN=0 in the DATX8 8 General Configuration Register (address offset 0x3C0) to disable the leveling/training for the ECC byte lane.
+       // NOTE: Setup supports 64-bit by default,  ECC enable by default.
+
+       //7.d.  Program 0x0000XF81 to the PHY Initialization Register (address offset 0x004) to trigger DDR3 initialization and leveling/training sequences 
+
+       DDR3A_PIR = 0x0000FF81; //WLADJ - ON
+       //DDR3A_PIR = 0x00000781;  //WLADJ - OFF
+
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+       //7.e.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do {              
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+
+       /* End PHY Configuration */             
+       //---------------------------------------------------------------------------------------------------------                                     
+       /* START EMIF INITIALIZATION
+  ++++++++++++++++++SDCFG Register Calculation+++++++++++++++++++
+  | 31 - 29  | 28 |27 - 25 | 24   | 23 - 22| 21 - 17 |
+  |SDRAM_TYPE|Rsvd|DDR_TERM| DDQS | DYN_ODT|  Rsvd   |
+  |  0x011   |  0 | 0x011  | 0x1  |   0x00 |   0x0   |
+
+  | 16-14 |13 - 12 |  11 - 8 |  7   |6 - 5 |  4  |  3  |  2  |  1 - 0  |
+  |   CWL | NM     |   CL    | Rsvd |IBANK | Rsvd|EBANK| Rsvd|PAGE_SIZE|
+  |  0x11 | 0x00   |  0x1110 |  0x0 | 0x11 | 0x0 |  0  |  0  |   0x10  |
+  SDCFG = 0x0110 0011 0010 0010 0011 0011 1011 0010
+  SDCFG = 0x6700486A;//0x63223332
+
+  SDRAM_TYPE = 3
+  DDR_TERM = 3 (RZQ/4 = 1; RZQ/6=3)
+  DDQS = 1 
+  DYN_ODT = 0 
+
+  CWL = 3 (CWL5=0; CWL6=1; CWL7=2; CWL8=3)
+  NM = 0 (64-bit=0, 32-bit=1, 16-bit=2)
+  CL = 14 (CL5=2; CL6=4; CL7=6; CL8=8; CL9=10; CL10=12; CL11=14)
+  IBANK = 3 (8bank)
+  EBANK = 0 (0 - pad_cs_o_n[0] , 1 - pad_cs_o_n[1:0])
+  PAGE_SIZE = 2 (1024page-size=2; 2048page-size=3)
+        */
+       /* Start DDR3A EMIF Configuration */
+       //8.    Configure the EMIF through the VBUSM interface.
+       //8.a.  Program all EMIF MMR\92s.
+       DDR3A_SDCFG    = 0x6200CE62; // 9A62//0x62008C62        ;//0x6600CE62=single rank,0x6600CE6A=dual rank
+
+       DDR3A_SDTIM1   = 0x166C9455;
+       DDR3A_SDTIM2   = 0x00001D4A;
+       DDR3A_SDTIM3   = 0x321DFF53;
+       DDR3A_SDTIM4   = 0x543F07FF;
+
+       DDR3A_ZQCFG    = 0x042D3B70;//0x70073200;       
+       //8.b.  Program reg_initref_dis=0 in the SDRAM Refresh Control Register (address offset 0x10).
+       DDR3A_SDRFC = 0x00001869;
+
+       GEL_TextOut("DDR3A initialization complete \n");
+       /* End  DDR3A EMIF Configuration */
+}
+
+
+/*--------------------------------------------------
+                       DDR3A : DDR1600,32bit  
+---------------------------------------------------*/
+
+ddr3A_32bit_DDR1600_setup()    
+{
+       unsigned int multiplier = 7;
+       unsigned int divider = 0;
+       int temp;
+       unsigned int OD_val = 2;
+       KICK0 = 0x83E70B13;
+       KICK1 = 0x95A4F1E0;
+
+
+       //1.    Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do { 
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+       //4.    Clocks are enabled and frequency is stable---------------------------------------
+       //DDR3A PLL setup       
+       GEL_TextOut ( "DDR3 PLL (PLL2) Setup ... \n");
+       //DDR3APLLCTL0 = DDR3APLLCTL0 & 0xFF7FFFFF;
+       //      Set ENSAT = 1
+       DDR3APLLCTL1 |= 0x00000040;
+       // Put the PLL in PLL Mode  
+       DDR3APLLCTL0 |= 0x00800000;
+       // In PLL Controller, reset the PLL (bit 13 in DDR3APLLCTL1 register) 
+       DDR3APLLCTL1 |= 0x00002000;
+       // Program the necessary multipliers/dividers and BW adjustments            
+       // Set the divider values 
+       DDR3APLLCTL0 &= ~(0x0000003F);
+       DDR3APLLCTL0 |= (divider & 0x0000003F);
+       /* Step 7: Programming OD[3:0] in the SECCTL register */            
+       DDR3APLLCTL0 &= OUTPUT_DIVIDE_MASK;  // clear the OD bit field
+       DDR3APLLCTL0 |= ~OUTPUT_DIVIDE_MASK & (OD_val - 1) << OUTPUT_DIVIDE_OFFSET;  // set the OD[3:0] bit field of PLLD to OD_val    
+
+       /* Set the Multipler values */
+       DDR3APLLCTL0 &= ~(0x0007FFC0);
+       DDR3APLLCTL0 |= ((multiplier << 6) & 0x0007FFC0 );
+       temp = ((multiplier + 1) >> 1) - 1;
+       DDR3APLLCTL0 &= ~(0xFF000000); 
+       DDR3APLLCTL0 |= ((temp << 24) & 0xFF000000);
+       DDR3APLLCTL1 &= ~(0x0000000F);
+       DDR3APLLCTL1 |= ((temp >> 8) & 0x0000000F);
+       //In DDR3PLLCTL1, write PLLRST = 0 to bring PLL out of reset 
+       DDR3APLLCTL1 &= ~(0x00002000);
+       // Put the PLL in PLL Mode  
+       DDR3APLLCTL0 &= ~(0x00800000); // ReSet the Bit 23
+       GEL_TextOut( "DDR3 PLL Setup complete, DDR3A clock now running at 666 MHz.\n" );
+       //DDR3A PLL setup complete ---------------------------------------
+
+       /*------------------------- Start PHY Configuration -------------------------------*/
+
+       //DDR3A_PGCR1 = 0x0280C487;
+
+       //5.a   Program FRQSEL in the PLL Control Register (address offset 0x018).
+       DDR3A_PLLCR = 0x1C000; //Set FRQSEL=00, for ctl_clk between 335-533MHz
+
+       //5.b.  Program WLSTEP=1, IODDRM=1, and ZCKSEL in the PHY General Configuration Register 1 (address offset 0x00C). 
+       DDR3A_PGCR1 |= (1 << 2); //WLSTEP = 1
+
+       DDR3A_PGCR1 &= ~(IODDRM_MASK);
+       DDR3A_PGCR1 |= (( 1 << 7) & IODDRM_MASK);
+
+
+       DDR3A_PGCR1 &= ~(ZCKSEL_MASK);
+       DDR3A_PGCR1 |= (( 1 << 23) & ZCKSEL_MASK);
+
+
+       //5.c.  Program PHY Timing Parameters Register 0-4 (address offset 0x01C - 0x02C).
+
+       DDR3A_PTR0 = 0x426213CF;
+
+       DDR3A_PTR1 = 0xCFC712B3;
+
+       // Maintaining default values of Phy Timing Parameters Register 2 in PUB
+
+       DDR3A_PTR3 = 0x08861A80;//0x072515C2; //0x0B4515C2;//0x18061A80; 
+
+       DDR3A_PTR4 = 0x0C827100;//0x0AAE7100;
+
+       //5.d.  Program PDQ, MPRDQ, and BYTEMASK in the DRAM Configuration Register (address offset 0x044). 
+       //              All other fields must be left at their default values.
+
+       DDR3A_DCR &= ~(PDQ_MASK); //PDQ = 0
+
+       DDR3A_DCR &= ~(MPRDQ_MASK); //MPRDQ = 0
+
+       DDR3A_DCR &= ~(BYTEMASK_MASK);
+       DDR3A_DCR |= (( 1 << 10) & BYTEMASK_MASK);
+
+
+       DDR3A_DCR &= ~(NOSRA_MASK);
+       DDR3A_DCR |= (( 1 << 27) & NOSRA_MASK);
+
+
+       //DDR3A_DCR &= ~(UDIMM_MASK);
+       //DDR3A_DCR |= (( 1 << 29) & UDIMM_MASK);
+
+
+       //5.e.  Program DRAM Timing Parameters Register 0-2 (address offset 0x048 - 0x050). 
+
+       DDR3A_DTPR0 = 0x011CBB66;//0x85589975;//0x8558AA55;
+       DDR3A_DTPR1 = 0x12840300;//0x12835A80;//0x12857280;
+       DDR3A_DTPR2 = 0x5002CE00;
+
+       //5.f.  Program BL=0, CL, WR, and PD=1 in the Mode Register 0 (address offset 0x054). 
+       //All other fields must be left at their default values.
+
+       DDR3A_MR0 = 0x00001C70; //50
+
+
+       //5.g.  Program DIC, RTT, and TDQS in the Mode Register 1 (address offset 0x058). 
+       //All other fields must be left at their default values.
+
+       DDR3A_MR1 = 0x00000006;
+
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+       //5.h.  Program Mode Register 2 (address offset 0x05C).
+       // Maintaining default values of Program Mode Register 2
+       DDR3A_MR2 = 0x00000058;
+
+       //5.i.  Program DTMPR=1, DTEXD, DTEXG, RANKEN=1 or 3, and RFSHDT=7 in the Data Training Configuration Register (address offset 0x068). 
+       //All other fields must be left at their default values.
+       DDR3A_DTCR = 0x710035C7; //0x730035C7;
+
+       //5.j.  Program tREFPRD=(5*tREFI/ddr_clk_period) in the PHY General Configuration Register 2 (address offset 0x08C). 
+       //All other fields must be left at their default values.
+
+       DDR3A_PGCR2 = 0x00F07A12; //NOBUB = 0, FXDLAT = 0       
+       //DDR3A_PGCR2 = 0x00F83D09; //NOBUB = 0, FXDLAT = 1 
+
+       //Set Impedence Register        
+       DDR3A_ZQ0CR1 = 0x0000007B; 
+       DDR3A_ZQ1CR1 = 0x0000007B;
+       DDR3A_ZQ2CR1 = 0x0000007B;
+       //DDR3A_ZQ3CR1 = 0x0000005D;
+
+       //6.    Re-trigger PHY initialization in DDR PHY through the VBUSP interface.
+       //6.a.  Program 0x00000033 to the PHY Initialization Register (address offset 0x004) to re-trigger PLL, ZCAL, and DCAL initialization.
+
+       DDR3A_PIR = 0x00000033;
+
+       //6.b.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do { 
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+
+
+       // 7.   Trigger DDR3 initialization and leveling/training in DDR PHY through the VBUSP interface.
+       // a.   If using a 16-bit wide DDR interface, program DXEN=0 in the DATX8 2-7 General Configuration Registers (address offsets 0x240, 0x280, 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.
+       // b.   If using a 32-bit wide DDR interface, program DXEN=0 in the DATX8 4-7 General Configuration Registers (address offsets 0x2C0, 0x300, 0x340, and 0x380) to disable the leveling/training for the upper byte lanes.
+       // c.   If ECC is not required, program DXEN=0 in the DATX8 8 General Configuration Register (address offset 0x3C0) to disable the leveling/training for the ECC byte lane.
+       // NOTE: Setup supports 64-bit by default,  ECC enable by default.
+
+       //7.d.  Program 0x0000XF81 to the PHY Initialization Register (address offset 0x004) to trigger DDR3 initialization and leveling/training sequences 
+
+       DDR3A_PIR = 0x0000FF81; //WLADJ - ON
+       //DDR3A_PIR = 0x00000781;  //WLADJ - OFF
+
+
+       //---------------------------------------------------------------------------------------------------------                                     
+
+       //7.e.  Poll for IDONE=1 in the PHY General Status Register 0 (address offset 0x010).
+       do {              
+               read_val = DDR3A_PGSR0;
+       } while ((read_val&0x00000001) != 0x00000001);
+
+
+       /* End PHY Configuration */             
+       //---------------------------------------------------------------------------------------------------------                                     
+       /* START EMIF INITIALIZATION
+  ++++++++++++++++++SDCFG Register Calculation+++++++++++++++++++
+  | 31 - 29  | 28 |27 - 25 | 24   | 23 - 22| 21 - 17 |
+  |SDRAM_TYPE|Rsvd|DDR_TERM| DDQS | DYN_ODT|  Rsvd   |
+  |  0x011   |  0 | 0x011  | 0x1  |   0x00 |   0x0   |
+
+  | 16-14 |13 - 12 |  11 - 8 |  7   |6 - 5 |  4  |  3  |  2  |  1 - 0  |
+  |   CWL | NM     |   CL    | Rsvd |IBANK | Rsvd|EBANK| Rsvd|PAGE_SIZE|
+  |  0x11 | 0x00   |  0x1110 |  0x0 | 0x11 | 0x0 |  0  |  0  |   0x10  |
+  SDCFG = 0x0110 0011 0010 0010 0011 0011 1011 0010
+  SDCFG = 0x6700486A;//0x63223332
+
+  SDRAM_TYPE = 3
+  DDR_TERM = 3 (RZQ/4 = 1; RZQ/6=3)
+  DDQS = 1 
+  DYN_ODT = 0 
+
+  CWL = 3 (CWL5=0; CWL6=1; CWL7=2; CWL8=3)
+  NM = 0 (64-bit=0, 32-bit=1, 16-bit=2)
+  CL = 14 (CL5=2; CL6=4; CL7=6; CL8=8; CL9=10; CL10=12; CL11=14)
+  IBANK = 3 (8bank)
+  EBANK = 0 (0 - pad_cs_o_n[0] , 1 - pad_cs_o_n[1:0])
+  PAGE_SIZE = 2 (1024page-size=2; 2048page-size=3)
+        */
+       /* Start DDR3A EMIF Configuration */
+       //8.    Configure the EMIF through the VBUSM interface.
+       //8.a.  Program all EMIF MMR\92s.
+       DDR3A_SDCFG    = 0x6200DE62; // 9A62//0x62008C62        ;//0x6600CE62=single rank,0x6600CE6A=dual rank
+
+       DDR3A_SDTIM1   = 0x166C9455;
+       DDR3A_SDTIM2   = 0x00001D4A;
+       DDR3A_SDTIM3   = 0x321DFF53;
+       DDR3A_SDTIM4   = 0x543F07FF;
+
+       DDR3A_ZQCFG    = 0x70073200;    
+       //8.b.  Program reg_initref_dis=0 in the SDRAM Refresh Control Register (address offset 0x10).
+       DDR3A_SDRFC = 0x00001869;
+
+       GEL_TextOut("DDR3A initialization complete \n");
+       /* End  DDR3A EMIF Configuration */
+}
+
+/*--------------------------------------------------------------*/
+/* TCI66x MENU                                              */
+/*--------------------------------------------------------------*/
+
+menuitem "TCI66x Functions";
+
+/****************************************************************************
+ *
+ * NAME
+ *      Global_Default_Setup
+ *
+ * PURPOSE:
+ *      Setup almost everything ready for a new debug session:
+ *      DSP modules and EVM board modules.
+ *
+ * USAGE
+ *      This routine can be called as:
+ *
+ *      Global_Default_Setup()
+ *
+ * RETURN VALUE
+ *      NONE
+ *
+ * REFERENCE
+ *
+ ****************************************************************************/
+hotmenu Global_Default_Setup()
+{
+       GEL_TextOut( "Global Default Setup...\n" );
+       Global_Default_Setup_Silent();
+       GEL_TextOut( "Global Default Setup... Done.\n" );
+}
+
+hotmenu Reset()
+{
+       GEL_Reset();
+}
+
+hotmenu InitXMC()
+{
+       xmc_setup();
+}
+
+hotmenu CORE_PLL_INIT_100MHZ_to_614_28MHz()
+{
+       Set_Pll1(1); // call Set_Pll1 with index = 1 -> 100 MHz to 614.28 MHz operation 
+}
+
+hotmenu CORE_PLL_INIT_100MHZ_to_737_5MHz()
+{
+       Set_Pll1(2); // call Set_Pll1 with index = 2 -> 100 MHz to 737.5 MHz operation 
+}
+
+hotmenu CORE_PLL_INIT_100MHZ_to_1GHz()
+{
+       Set_Pll1(3); // call Set_Pll1 with index = 3 -> 100 MHz to 1 GHz operation 
+}
+
+hotmenu CORE_PLL_INIT_100MHZ_to_1_2GHz()
+{
+       Set_Pll1(4); // call Set_Pll1 with index = 4 -> 100 MHz  to 1.2 GHz operation 
+}
+
+
+hotmenu CORE_PLL_INIT_100MHZ_to_1_35Gz()
+{
+       Set_Pll1(5); // call Set_Pll1 with index = 5 -> 100 MHz  to 1.35 GHz operation 
+}
+
+hotmenu TETRIS_POWERUP_AND_PLL_INIT_100MHZ_to_1000MHz()
+{
+       Set_Tetris_Pll(1); // 100 MHz to 1.0 GHz operation 
+}
+
+hotmenu TETRIS_POWERUP_AND_PLL_INIT_100MHZ_to_1400MHz()
+{
+       Set_Tetris_Pll(2); // 100 MHz to 1.4 GHz operation 
+}
+
+hotmenu TETRIS_POWERUP_AND_PLL_INIT_175MHZ_to_1400MHz()
+{
+       Set_Tetris_Pll(3); // 175 MHz to 1.4 GHz operation 
+}
+
+
+hotmenu PA_PLL_COnfig()
+{
+       PaPllConfig();
+}
+
+hotmenu InitDDR3A_32bit_DDR800()
+{
+       ddr3A_32bit_DDR800_setup();
+}   
+
+hotmenu InitDDR3A_32bit_DDR1066()
+{
+       ddr3A_32bit_DDR1066_setup();
+} 
+hotmenu InitDDR3A_32bit_DDR1333()
+{
+       ddr3A_32bit_DDR1333_setup();
+}   
+
+hotmenu InitDDR3A_32bit_DDR1600()
+{
+       ddr3A_32bit_DDR1600_setup();
+} 
+hotmenu InitDDR3A_64bit_DDR1600()
+{
+       ddr3A_64bit_DDR1600_setup();
+} 
+///* Function to enable CORE PLL observation clock for PLL output *///
+hotmenu ENABLE_CORE_PLL_OBSCLK()
+{
+       /* Unlock Chip Level Registers */
+       KICK0 = KICK0_UNLOCK;
+       KICK1 = KICK1_UNLOCK;
+
+       /* set bit 1 to enable power to the CORE PLL observation clock, clear bit 0 to view the CORE PLL observation (output) clock */
+       OBSCLKCTL |= (1 << 1);  /* set bit 1 to enable power to the observation clock */
+       OBSCLKCTL &= ~(1 << 0); /* clear bit 0 to view the CORE PLL clock */ 
+
+       /* Lock Chip Level Registers */
+       KICK0 = 0x00000000;
+       KICK1 = 0x00000000;
+
+       GEL_TextOut("CORE PLL observation clock enabled and configured to show CORE PLL output\n");
+}
+
+/* Function to enable DDR PLL observation clock for PLL output */
+hotmenu ENABLE_DDR_PLL_OBSCLK ()
+{
+       /* Unlock Chip Level Registers */
+       KICK0 = KICK0_UNLOCK;
+       KICK1 = KICK1_UNLOCK;
+
+       /* set bit 1 to enable power to the CORE PLL observation clock, clear bit 0 to view the CORE PLL observation (output) clock */
+       OBSCLKCTL |= (1 << 3);  /* set bit 3 to enable power to the observation clock */
+       OBSCLKCTL |= (1 << 2);  /* set bit 2 to view the DDR PLL clock */ 
+
+       /* Lock Chip Level Registers */
+       //KICK0 = 0x00000000;
+       // KICK1 = 0x00000000;
+
+       GEL_TextOut("DDR PLL observation clock enabled and configured to show DDR PLL output\n");
+}
+
+hotmenu ENABLE_ARM_PLL_OBSCLK ()
+{
+       /* Unlock Chip Level Registers */
+       KICK0 = KICK0_UNLOCK;
+       KICK1 = KICK1_UNLOCK;
+
+       /* set bit 1 to enable power to the CORE PLL observation clock, clear bit 0 to view the CORE PLL observation (output) clock */
+       //OBSCLKCTL |= (1 << 3);  /* set bit 3 to enable power to the observation clock */
+       OBSCLKCTL |= (1 << 6);  /* set bit 2 to view the DDR PLL clock */ 
+
+       /* Lock Chip Level Registers */
+       KICK0 = 0x00000000;
+       KICK1 = 0x00000000;
+
+       GEL_TextOut("DDR PLL observation clock enabled and configured to show DDR PLL output\n");
+}
+
+hotmenu ENABLE_PA_PLL_OBSCLK ()
+{
+       /* Unlock Chip Level Registers */
+       KICK0 = KICK0_UNLOCK;
+       KICK1 = KICK1_UNLOCK;
+
+       /* set bit 1 to enable power to the CORE PLL observation clock, clear bit 0 to view the CORE PLL observation (output) clock */
+       OBSCLKCTL |= (1 << 4);  /* set bit 3 to enable power to the observation clock */
+       OBSCLKCTL |= (1 << 5);  /* set bit 2 to view the DDR PLL clock */ 
+
+       /* Lock Chip Level Registers */
+       KICK0 = 0x00000000;
+       KICK1 = 0x00000000;
+
+       GEL_TextOut("DDR PLL observation clock enabled and configured to show DDR PLL output\n");
+}
+
+hotmenu ddr3A_write_read_test()
+{
+       //int data_set[4];
+       //= {0xAAAAAAAA, 0x55555555, 0xFFFFFFFF, 0x00000000};
+       unsigned int write_data = 0xAAAAAAAA;
+       unsigned int read_data = 0x0;
+       unsigned int errors = 0;
+       int dw;
+       unsigned int i, mem_start, mem_size, mem_location;
+       mem_start = DDR3A_BASE_ADDRESS + (DNUM * 0x01000000);
+       mem_size = 0x100;
+       for(dw=0;dw<4;dw++)
+       {
+               if (dw == 0) write_data = 0xAAAAAAAA;
+               if (dw == 1) write_data = 0x55555555;
+               if (dw == 2) write_data = 0xFFFFFFFF;
+               if (dw == 3) write_data = 0x00000000;
+               mem_location = mem_start;
+               GEL_TextOut( "Memory Test Write Core: %d, Mem Start: 0x%x, Mem Size: 0x%x, value: 0x%x ...\n",,2,,,DNUM,mem_start,mem_size,write_data);
+               for(i=0;i<mem_size;i++)
+               {
+                       *( unsigned int* )(mem_location) = write_data;
+                       mem_location += 4;
+               }
+               mem_location = mem_start;
+               GEL_TextOut( "Memory Test Read Core: %d, Mem Start: 0x%x, Mem Size: 0x%x ...\n",,2,,,DNUM,mem_start,mem_size);
+               for (i=0;i<mem_size;i++)
+               {
+                       read_data = *( unsigned int* )(mem_location);
+                       if (read_data != write_data)
+                       {
+                               GEL_TextOut("DDR3 Data Error: DSP Core: %d, Mem Addr: 0x%x, read: 0x%x, expected: 0x%x \n",,2,,,DNUM,(DDR3_BASE_ADDRESS + (i * 4)),read_data,write_data);
+                               errors++;
+                       }
+                       mem_location += 4;
+               }
+               if (errors == 0)
+               {
+                       GEL_TextOut( "Memory Test Done, no errors found.\n" );
+               }
+               else
+               {
+                       GEL_TextOut("Memory Test Done, %d errors were encounterd. \n",,2,,,errors);
+               }
+       }
+       GEL_TextOut( "All Memory Test Completed on core: %d with %d errors.\n",,2,,,DNUM,errors);
+
+}
+
+menuitem "DSP CLOCK Estimation";
+
+#define TIMER_TSC             (1)    // The timer used for polling TSCH/TSCL  
+#define TIMER_TSC_POLL_PERIOD (10)   // Every 10 seconds
+unsigned int gPollPeriod = TIMER_TISC_POLL_PERIOD;
+unsigned int gTSCL = 0;
+unsigned int gTSCH = 0;              // Global var for holding previous read of TSCL/H
+unsigned int gNumberPoll=0;          // Number of pulling */
+unsigned int gLoopCount=0;
+
+
+
+hotmenu dspEnableTsc()
+{
+       //GEL_TextOut( "dspEnableTsc - write a value to TSCL to enable it\n" );
+       if( GEL_IsHalted() ) {
+               TSCL = 0;  // A write to TSCL will enable TSC (timestamp counter)
+               GEL_Run();
+       } else {
+               GEL_Halt();
+               TSCL = 0;
+               GEL_Run();
+       }
+}
+
+
+hotmenu dspDumpTsc()
+{
+       unsigned int tscl, tsch;
+       tscl = TSCL;  /* note: need to read TSCL first */
+       tsch = TSCH;
+       GEL_TextOut( "dspEnableTsc - TSCH=%x, TSCL=%x\n",,,,, tscl, tsch );
+}
+
+
+dspPollTsc()
+{
+       unsigned int tscl, tsch;
+       unsigned long long tsc1, tsc2;
+
+       if( gLoopCount <= gNumberPoll) { 
+               //GEL_EnableRealtime();
+               GEL_Halt();
+               tscl = TSCL;            /* The read time can be considered as variations */
+               tsch = TSCH;            /* The read won't cause variation */
+               //GEL_DisableRealtime();
+               GEL_Run();
+               tsc2  = (((unsigned long long) tsch)<<32) +  tscl;
+               tsc1  = (((unsigned long long)gTSCH)<<32) + gTSCL;
+               gTSCL = tscl;
+               gTSCH = tsch;
+
+               //tsc1 = (tsc2-tsc1)/TIMER_TSC_POLL_PERIOD;
+               tsc1 = (tsc2-tsc1)/gPollPeriod;
+
+               GEL_TextOut( "dspPollTsc - [TSCH,TSCL] = [%x, %x], freq=%dhz, i=%d\n",,,,,
+                               gTSCH, gTSCL, (tsc1), gLoopCount);
+       }
+
+       if( gLoopCount>=gNumberPoll ) {
+               dspCancelTscTimer();
+       } else {  
+               gLoopCount++;
+       }
+}
+
+
+//
+// To cancel the Timer - TIMER_TSC, after using it. Otherwise, it will continue running.
+//
+hotmenu dspCancelTscTimer()
+{
+       GEL_TextOut( "dspCancelTscTimer\n");
+       GEL_CancelTimer( TIMER_TSC );
+}
+
+
+//
+// To poll the DSP clock.
+//
+dialog dspPollDSPClockFreq(
+               pollPeriod   "Polling period (sec) - the longer, the more accurate!",
+               numberOfPoll "Number of Polls" )
+{
+       gPollPeriod = pollPeriod;
+
+       GEL_TextOut( "dspPollDSPClockFreq with - pollPeriod=%dsec, numberOfPoll=%d\n"
+                       ,,,,, gPollPeriod, numberOfPoll);
+
+       gNumberPoll = numberOfPoll-1;
+       gLoopCount  = 0;
+       dspEnableTsc();
+
+       // Get the initial value of TSC
+       //GEL_EnableRealtime();
+       GEL_Halt();
+       gTSCL = TSCL;            /* The read time can be considered as variations */
+       gTSCH = TSCH;            /* The read won't cause variation */
+       //GEL_DisableRealtime();
+       GEL_Run();
+
+       GEL_SetTimer( gPollPeriod*1000, TIMER_TSC, "dspPollTsc()");
+
+}
+
+
+
+#define MDIO_VERSION_REG            (*(unsigned int *) (0x24200F00 + 0x00))
+/* mdio_user_access_reg */
+#define MDIO_USER_ACCESS_REG            (*(unsigned int *) (0x24200F00 + 0x80))
+#define MDIO_USER_CONTROL_REG            (*(unsigned int *) (0x24200F00 + 0x04))
+#define MDIO_USER_INT_MASK_REG            (*(unsigned int *) (0x24200F00 + 0x28))
+
+/* shift and mask for MDIO_USER_ACCESS_REG */
+#define CSL_MDIO_USER_ACCESS_REG_DATA_MASK (0x0000FFFFu)
+#define CSL_MDIO_USER_ACCESS_REG_DATA_SHIFT (0x00000000u)
+#define CSL_MDIO_USER_ACCESS_REG_DATA_RESETVAL (0x00000000u)
+
+#define CSL_MDIO_USER_ACCESS_REG_PHYADR_MASK (0x001F0000u)
+#define CSL_MDIO_USER_ACCESS_REG_PHYADR_SHIFT (0x00000010u)
+#define CSL_MDIO_USER_ACCESS_REG_PHYADR_RESETVAL (0x00000000u)
+
+#define CSL_MDIO_USER_ACCESS_REG_REGADR_MASK (0x03E00000u)
+#define CSL_MDIO_USER_ACCESS_REG_REGADR_SHIFT (0x00000015u)
+#define CSL_MDIO_USER_ACCESS_REG_REGADR_RESETVAL (0x00000000u)
+
+#define CSL_MDIO_USER_ACCESS_REG_ACK_MASK (0x20000000u)
+#define CSL_MDIO_USER_ACCESS_REG_ACK_SHIFT (0x0000001Du)
+#define CSL_MDIO_USER_ACCESS_REG_ACK_RESETVAL (0x00000000u)
+
+#define CSL_MDIO_USER_ACCESS_REG_WRITE_MASK (0x40000000u)
+#define CSL_MDIO_USER_ACCESS_REG_WRITE_SHIFT (0x0000001Eu)
+#define CSL_MDIO_USER_ACCESS_REG_WRITE_RESETVAL (0x00000000u)
+
+#define CSL_MDIO_USER_ACCESS_REG_GO_MASK (0x80000000u)
+#define CSL_MDIO_USER_ACCESS_REG_GO_SHIFT (0x0000001Fu)
+#define CSL_MDIO_USER_ACCESS_REG_GO_RESETVAL (0x00000000u)
+
+/*
+#define CSL_FMK(PER_REG_FIELD, val)                                         \
+    (((val) << CSL_##PER_REG_FIELD##_SHIFT) & CSL_##PER_REG_FIELD##_MASK)
+
+#define CSL_FEXT(reg, PER_REG_FIELD)                                        \
+    (((reg) & CSL_##PER_REG_FIELD##_MASK) >> CSL_##PER_REG_FIELD##_SHIFT)
+#endif
+ */
+
+/* the Field MaKe macro */
+#define CSL_FMK(SHIFT, MASK, val)              (((val) << SHIFT) & MASK)
+
+/* the Field EXTract macro */
+#define CSL_FEXT(reg, SHIFT, MASK)             (((reg) & MASK) >> SHIFT)
+
+
+#define PHY_REG_PAGE_ADDR 22
+
+phy_hwwrite(unsigned short phy_addr, unsigned short addr, unsigned short val)
+{
+       unsigned int retVal=1;
+       unsigned int i, delay=2000;
+       
+       MDIO_USER_ACCESS_REG   =  CSL_FMK (CSL_MDIO_USER_ACCESS_REG_GO_SHIFT, CSL_MDIO_USER_ACCESS_REG_GO_MASK, 1u) |
+                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_WRITE_SHIFT, CSL_MDIO_USER_ACCESS_REG_WRITE_MASK, 1) |
+                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_REGADR_SHIFT, CSL_MDIO_USER_ACCESS_REG_REGADR_MASK, addr) |
+                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_PHYADR_SHIFT, CSL_MDIO_USER_ACCESS_REG_PHYADR_MASK, phy_addr) |
+                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_DATA_SHIFT, CSL_MDIO_USER_ACCESS_REG_DATA_MASK, val);
+
+       
+       while(1)
+       {
+               retVal=CSL_FEXT(MDIO_USER_ACCESS_REG, CSL_MDIO_USER_ACCESS_REG_GO_SHIFT, CSL_MDIO_USER_ACCESS_REG_GO_MASK);
+               if(retVal == 0)
+                       break;
+
+               for(i = 0; i < delay; i++); // this delay is much more than required   
+
+       }
+}
+
+phy_hwread(unsigned short phy_addr, unsigned short addr, unsigned short *val)
+{
+
+       MDIO_USER_ACCESS_REG =  CSL_FMK (CSL_MDIO_USER_ACCESS_REG_GO_SHIFT, CSL_MDIO_USER_ACCESS_REG_GO_MASK, 1u) |
+                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_REGADR_SHIFT, CSL_MDIO_USER_ACCESS_REG_REGADR_MASK, addr) |
+                       CSL_FMK (CSL_MDIO_USER_ACCESS_REG_PHYADR_SHIFT, CSL_MDIO_USER_ACCESS_REG_PHYADR_MASK, phy_addr);
+
+       PHYREG0_waitResultsAck(*val, ack);
+
+       if(!ack)
+               GEL_TextOut("Reg read error for PHY: %d\n",,,,, phy_addr);
+}
+
+#define PHYREG0_waitResultsAck( results, ack ) {                                        \
+               results = CSL_FEXT( MDIO_USER_ACCESS_REG, CSL_MDIO_USER_ACCESS_REG_DATA_SHIFT, CSL_MDIO_USER_ACCESS_REG_DATA_MASK);        \
+               ack = CSL_FEXT( MDIO_USER_ACCESS_REG, CSL_MDIO_USER_ACCESS_REG_ACK_SHIFT, CSL_MDIO_USER_ACCESS_REG_ACK_MASK); }
+
+phy_miiread (unsigned short phyaddr, unsigned short page, unsigned int addr, unsigned short *val)
+{
+       phy_hwwrite(phyaddr, PHY_REG_PAGE_ADDR, page);
+       phy_hwread(phyaddr, addr, val);
+}
+
+phy_miiwrite(unsigned short phyaddr, unsigned short page, unsigned short addr, unsigned short val)
+{
+       phy_hwwrite(phyaddr, PHY_REG_PAGE_ADDR, page);
+       phy_hwwrite(phyaddr, addr, val);
+}
+
+_setupPhy(unsigned short phyaddr)
+{
+       unsigned short val;
+
+       GEL_TextOut("Staring Setup for PHY: %d\n",,,,, phyaddr);
+
+       /* Register settings as per RN section 3.1 */
+       phy_hwwrite(phyaddr, 22, 0x00ff);
+       phy_hwwrite(phyaddr, 17, 0x214B);
+       phy_hwwrite(phyaddr, 16, 0x2144);
+       phy_hwwrite(phyaddr, 17, 0x0C28);
+       phy_hwwrite(phyaddr, 16, 0x2146);
+       phy_hwwrite(phyaddr, 17, 0xB233);
+       phy_hwwrite(phyaddr, 16, 0x214D);
+       phy_hwwrite(phyaddr, 17, 0xCC0C);
+       phy_hwwrite(phyaddr, 16, 0x2159);
+       phy_hwwrite(phyaddr, 22, 0x0000);
+       phy_hwwrite(phyaddr, 9, 0x1800); //Set master
+       GEL_TextOut("Misc register done for PHY: %d\n",,,,, phyaddr);
+
+       /* Set SGMII to Copper mode Page 18, Reg 20.2:0 = 1  */
+       phy_hwwrite(phyaddr, 22, 18);
+       phy_hwwrite(phyaddr, 20, 0x1);
+       /* PHY Reset Page 18, Reg 20.15 = 1  */
+       phy_hwwrite(phyaddr, 20, 0x8201);
+       phy_hwwrite(phyaddr, 22, 00);
+
+       GEL_TextOut("Waiting for copper link up for PHY: %d\n",,,,, phyaddr);
+
+}
+
+hotmenu setupPhy()
+{
+       GEL_TextOut("Reading MDIO_VERSION_REG.\n");
+       GEL_TextOut("MDIO_VERSION_REG: %x\n",,,,, MDIO_VERSION_REG);
+       MDIO_USER_CONTROL_REG = (1 << 30) | 0xFA;
+       MDIO_USER_INT_MASK_REG = 0x00;
+       _setupPhy(0);
+       //_setupPhy(1);
+}
+