/*******************************************************************************
 * (c) Copyright 2012 Microsemi SoC Products Group.  All rights reserved.
 *
 *  Smartfusion2 system configuration. This file is automatically generated
 *  by the Libero tools. It contains the Smartfusion2 system configuration that
 *  was selected during the hardware configuration flow. 
 *
 */

#include "../../CMSIS/m2sxxx.h"
#include "../../CMSIS/sys_init_cfg_types.h"
#include "sys_config.h"

/*==============================================================================
 *                             !!! WARNING !!!
 *==============================================================================
 * The project including this file must be linked so that the content of this
 * file is located in internal eNVM at run time. The content of this file is
 * used to configure the system prior to RAM content initialization. This means
 * that the content of the data structures below will be used before the copy
 * from LMA to VMA takes place. The LMA and VMA locations of the content of this
 * file must be identical for the system to be seamlessly configured as part of
 * the CMSIS boot process.
 */
 
/*==============================================================================
 * Clock configuration
 */
/* No configuration data structure required. */

/*==============================================================================
 * Memory remapping configuration
 */
/* TBD. */

/*==============================================================================
 * MDDR configuration
 */
#if MSS_SYS_MDDR_CONFIG_BY_CORTEX

#include "sys_config_mddr_define.h"

MDDR_TypeDef * const g_m2s_mddr_addr = (MDDR_TypeDef *)0x40020800;

const ddr_subsys_cfg_t g_m2s_mddr_subsys_config =
{
    /*---------------------------------------------------------------------
     * DDR Controller registers.
     * All registers are 16-bit wide unless mentioned beside the definition.
     */
    {
        MDDR_DDRC_DYN_SOFT_RESET_CR,
        MDDR_DDRC_RESERVED0,
        MDDR_DDRC_DYN_REFRESH_1_CR,
        MDDR_DDRC_DYN_REFRESH_2_CR,
        MDDR_DDRC_DYN_POWERDOWN_CR,
        MDDR_DDRC_DYN_DEBUG_CR,
        MDDR_DDRC_MODE_CR,
        MDDR_DDRC_ADDR_MAP_BANK_CR,
        MDDR_DDRC_ECC_DATA_MASK_CR,
        MDDR_DDRC_ADDR_MAP_COL_1_CR,
        MDDR_DDRC_ADDR_MAP_COL_2_CR,
        MDDR_DDRC_ADDR_MAP_ROW_1_CR,
        MDDR_DDRC_ADDR_MAP_ROW_2_CR,
        MDDR_DDRC_INIT_1_CR,
        MDDR_DDRC_CKE_RSTN_CYCLES_CR1,
        MDDR_DDRC_CKE_RSTN_CYCLES_CR2,
        MDDR_DDRC_INIT_MR_CR,
        MDDR_DDRC_INIT_EMR_CR,
        MDDR_DDRC_INIT_EMR2_CR,
        MDDR_DDRC_INIT_EMR3_CR,
        MDDR_DDRC_DRAM_BANK_TIMING_PARAM_CR,
        MDDR_DDRC_DRAM_RD_WR_LATENCY_CR,
        MDDR_DDRC_DRAM_RD_WR_PRE_CR,
        MDDR_DDRC_DRAM_MR_TIMING_PARAM_CR,
        MDDR_DDRC_DRAM_RAS_TIMING_CR,
        MDDR_DDRC_DRAM_RD_WR_TRNARND_TIME_CR,
        MDDR_DDRC_DRAM_T_PD_CR,
        MDDR_DDRC_DRAM_BANK_ACT_TIMING_CR,
        MDDR_DDRC_ODT_PARAM_1_CR,
        MDDR_DDRC_ODT_PARAM_2_CR,
        MDDR_DDRC_ADDR_MAP_COL_3_CR,
        MDDR_DDRC_MODE_REG_RD_WR_CR,
        MDDR_DDRC_MODE_REG_DATA_CR,
        MDDR_DDRC_PWR_SAVE_1_CR,
        MDDR_DDRC_PWR_SAVE_2_CR,
        MDDR_DDRC_ZQ_LONG_TIME_CR,
        MDDR_DDRC_ZQ_SHORT_TIME_CR,
        MDDR_DDRC_ZQ_SHORT_INT_REFRESH_MARGIN_CR1,
        MDDR_DDRC_ZQ_SHORT_INT_REFRESH_MARGIN_CR2,
        MDDR_DDRC_PERF_PARAM_1_CR,
        MDDR_DDRC_HPR_QUEUE_PARAM_CR1,
        MDDR_DDRC_HPR_QUEUE_PARAM_CR2,
        MDDR_DDRC_LPR_QUEUE_PARAM_CR1,
        MDDR_DDRC_LPR_QUEUE_PARAM_CR2,
        MDDR_DDRC_WR_QUEUE_PARAM_CR,
        MDDR_DDRC_PERF_PARAM_2_CR,
        MDDR_DDRC_PERF_PARAM_3_CR,
        MDDR_DDRC_DFI_RDDATA_EN_CR,
        MDDR_DDRC_DFI_MIN_CTRLUPD_TIMING_CR,
        MDDR_DDRC_DFI_MAX_CTRLUPD_TIMING_CR,
        MDDR_DDRC_DFI_WR_LVL_CONTROL_CR1,
        MDDR_DDRC_DFI_WR_LVL_CONTROL_CR2,
        MDDR_DDRC_DFI_RD_LVL_CONTROL_CR1,
        MDDR_DDRC_DFI_RD_LVL_CONTROL_CR2,
        MDDR_DDRC_DFI_CTRLUPD_TIME_INTERVAL_CR,
        MDDR_DDRC_DYN_SOFT_RESET_ALIAS_CR,
        MDDR_DDRC_AXI_FABRIC_PRI_ID_CR,
    },

    /*---------------------------------------------------------------------
     * DDR PHY configuration registers
     */
    {
        MDDR_PHY_LOOPBACK_TEST_CR,
        MDDR_PHY_BOARD_LOOPBACK_CR,
        MDDR_PHY_CTRL_SLAVE_RATIO_CR,
        MDDR_PHY_CTRL_SLAVE_FORCE_CR,
        MDDR_PHY_CTRL_SLAVE_DELAY_CR,
        MDDR_PHY_DATA_SLICE_IN_USE_CR,
        MDDR_PHY_LVL_NUM_OF_DQ0_CR,
        MDDR_PHY_DQ_OFFSET_CR1,
        MDDR_PHY_DQ_OFFSET_CR2,
        MDDR_PHY_DQ_OFFSET_CR3,
        MDDR_PHY_DIS_CALIB_RST_CR,
        MDDR_PHY_DLL_LOCK_DIFF_CR,
        MDDR_PHY_FIFO_WE_IN_DELAY_CR1,
        MDDR_PHY_FIFO_WE_IN_DELAY_CR2,
        MDDR_PHY_FIFO_WE_IN_DELAY_CR3,
        MDDR_PHY_FIFO_WE_IN_FORCE_CR,
        MDDR_PHY_FIFO_WE_SLAVE_RATIO_CR1,
        MDDR_PHY_FIFO_WE_SLAVE_RATIO_CR2,
        MDDR_PHY_FIFO_WE_SLAVE_RATIO_CR3,
        MDDR_PHY_FIFO_WE_SLAVE_RATIO_CR4,
        MDDR_PHY_GATELVL_INIT_MODE_CR,
        MDDR_PHY_GATELVL_INIT_RATIO_CR1,
        MDDR_PHY_GATELVL_INIT_RATIO_CR2,
        MDDR_PHY_GATELVL_INIT_RATIO_CR3,
        MDDR_PHY_GATELVL_INIT_RATIO_CR4,
        MDDR_PHY_LOCAL_ODT_CR,
        MDDR_PHY_INVERT_CLKOUT_CR,
        MDDR_PHY_RD_DQS_SLAVE_DELAY_CR1,
        MDDR_PHY_RD_DQS_SLAVE_DELAY_CR2,
        MDDR_PHY_RD_DQS_SLAVE_DELAY_CR3,
        MDDR_PHY_RD_DQS_SLAVE_FORCE_CR,
        MDDR_PHY_RD_DQS_SLAVE_RATIO_CR1,
        MDDR_PHY_RD_DQS_SLAVE_RATIO_CR2,
        MDDR_PHY_RD_DQS_SLAVE_RATIO_CR3,
        MDDR_PHY_RD_DQS_SLAVE_RATIO_CR4,
        MDDR_PHY_WR_DQS_SLAVE_DELAY_CR1,
        MDDR_PHY_WR_DQS_SLAVE_DELAY_CR2,
        MDDR_PHY_WR_DQS_SLAVE_DELAY_CR3,
        MDDR_PHY_WR_DQS_SLAVE_FORCE_CR,
        MDDR_PHY_WR_DQS_SLAVE_RATIO_CR1,
        MDDR_PHY_WR_DQS_SLAVE_RATIO_CR2,
        MDDR_PHY_WR_DQS_SLAVE_RATIO_CR3,
        MDDR_PHY_WR_DQS_SLAVE_RATIO_CR4,
        MDDR_PHY_WR_DATA_SLAVE_DELAY_CR1,
        MDDR_PHY_WR_DATA_SLAVE_DELAY_CR2,
        MDDR_PHY_WR_DATA_SLAVE_DELAY_CR3,
        MDDR_PHY_WR_DATA_SLAVE_FORCE_CR,
        MDDR_PHY_WR_DATA_SLAVE_RATIO_CR1,
        MDDR_PHY_WR_DATA_SLAVE_RATIO_CR2,
        MDDR_PHY_WR_DATA_SLAVE_RATIO_CR3,
        MDDR_PHY_WR_DATA_SLAVE_RATIO_CR4,
        MDDR_PHY_WRLVL_INIT_MODE_CR,
        MDDR_PHY_WRLVL_INIT_RATIO_CR1,
        MDDR_PHY_WRLVL_INIT_RATIO_CR2,
        MDDR_PHY_WRLVL_INIT_RATIO_CR3,
        MDDR_PHY_WRLVL_INIT_RATIO_CR4,
        MDDR_PHY_WR_RD_RL_CR,
        MDDR_PHY_RDC_FIFO_RST_ERR_CNT_CLR_CR,
        MDDR_PHY_RDC_WE_TO_RE_DELAY_CR,
        MDDR_PHY_USE_FIXED_RE_CR,
        MDDR_PHY_USE_RANK0_DELAYS_CR,
        MDDR_PHY_USE_LVL_TRNG_LEVEL_CR,
        MDDR_PHY_DYN_CONFIG_CR,
        MDDR_PHY_RD_WR_GATE_LVL_CR,
        MDDR_PHY_DYN_RESET_CR
    },
    
    /*---------------------------------------------------------------------
     * FIC-64 registers
     * These registers are 16-bit wide and 32-bit aligned.
     */
    {
        MDDR_DDR_FIC_NB_ADDR_CR,
        MDDR_DDR_FIC_NBRWB_SIZE_CR,
        MDDR_DDR_FIC_WB_TIMEOUT_CR,
        MDDR_DDR_FIC_HPD_SW_RW_EN_CR,
        MDDR_DDR_FIC_HPD_SW_RW_INVAL_CR,
        MDDR_DDR_FIC_SW_WR_ERCLR_CR,
        MDDR_DDR_FIC_ERR_INT_ENABLE_CR,
        MDDR_DDR_FIC_NUM_AHB_MASTERS_CR,
        MDDR_DDR_FIC_LOCK_TIMEOUTVAL_CR1,
        MDDR_DDR_FIC_LOCK_TIMEOUTVAL_CR2,
        MDDR_DDR_FIC_LOCK_TIMEOUT_EN_CR
    }
};

#endif

/*==============================================================================
 * FDDR configuration
 */
#if MSS_SYS_FDDR_CONFIG_BY_CORTEX

#include "sys_config_fddr_define.h"

FDDR_TypeDef * const g_m2s_fddr_addr = (FDDR_TypeDef *)0x40021000;

const fddr_sysreg_t g_m2s_fddr_sysreg_subsys_config =
{
    0x0001u,    /* PLL_CONFIG_LOW_1 */
    0x0002u,    /* PLL_CONFIG_LOW_2 */
    0x0003u,    /* PLL_CONFIG_HIGH */
    0x0004u,    /* FACC_CLK_EN */
    0x0005u,    /* FACC_MUX_CONFIG */
    0x0006u,    /* FACC_DIVISOR_RATIO */
    0x0007u,    /* PLL_DELAY_LINE_SEL */
    0x0008u,    /* SOFT_RESET */
    0x0009u,    /* IO_CALIB */
    0x000Au,    /* INTERRUPT_ENABLE */
    0x000Bu,    /* AXI_AHB_MODE_SEL */
    0x000Cu     /* PHY_SELF_REF_EN */
};

const ddr_subsys_cfg_t g_m2s_fddr_subsys_config = 
{
    /*---------------------------------------------------------------------
     * DDR Controller registers.
     * All registers are 16-bit wide unless mentioned beside the definition.
     */
    {
        FDDR_DDRC_DYN_SOFT_RESET_CR,
        FDDR_DDRC_RESERVED0,
        FDDR_DDRC_DYN_REFRESH_1_CR,
        FDDR_DDRC_DYN_REFRESH_2_CR,
        FDDR_DDRC_DYN_POWERDOWN_CR,
        FDDR_DDRC_DYN_DEBUG_CR,
        FDDR_DDRC_MODE_CR,
        FDDR_DDRC_ADDR_MAP_BANK_CR,
        FDDR_DDRC_ECC_DATA_MASK_CR,
        FDDR_DDRC_ADDR_MAP_COL_1_CR,
        FDDR_DDRC_ADDR_MAP_COL_2_CR,
        FDDR_DDRC_ADDR_MAP_ROW_1_CR,
        FDDR_DDRC_ADDR_MAP_ROW_2_CR,
        FDDR_DDRC_INIT_1_CR,
        FDDR_DDRC_CKE_RSTN_CYCLES_CR1,
        FDDR_DDRC_CKE_RSTN_CYCLES_CR2,
        FDDR_DDRC_INIT_MR_CR,
        FDDR_DDRC_INIT_EMR_CR,
        FDDR_DDRC_INIT_EMR2_CR,
        FDDR_DDRC_INIT_EMR3_CR,
        FDDR_DDRC_DRAM_BANK_TIMING_PARAM_CR,
        FDDR_DDRC_DRAM_RD_WR_LATENCY_CR,
        FDDR_DDRC_DRAM_RD_WR_PRE_CR,
        FDDR_DDRC_DRAM_MR_TIMING_PARAM_CR,
        FDDR_DDRC_DRAM_RAS_TIMING_CR,
        FDDR_DDRC_DRAM_RD_WR_TRNARND_TIME_CR,
        FDDR_DDRC_DRAM_T_PD_CR,
        FDDR_DDRC_DRAM_BANK_ACT_TIMING_CR,
        FDDR_DDRC_ODT_PARAM_1_CR,
        FDDR_DDRC_ODT_PARAM_2_CR,
        FDDR_DDRC_ADDR_MAP_COL_3_CR,
        FDDR_DDRC_MODE_REG_RD_WR_CR,
        FDDR_DDRC_MODE_REG_DATA_CR,
        FDDR_DDRC_PWR_SAVE_1_CR,
        FDDR_DDRC_PWR_SAVE_2_CR,
        FDDR_DDRC_ZQ_LONG_TIME_CR,
        FDDR_DDRC_ZQ_SHORT_TIME_CR,
        FDDR_DDRC_ZQ_SHORT_INT_REFRESH_MARGIN_CR1,
        FDDR_DDRC_ZQ_SHORT_INT_REFRESH_MARGIN_CR2,
        FDDR_DDRC_PERF_PARAM_1_CR,
        FDDR_DDRC_HPR_QUEUE_PARAM_CR1,
        FDDR_DDRC_HPR_QUEUE_PARAM_CR2,
        FDDR_DDRC_LPR_QUEUE_PARAM_CR1,
        FDDR_DDRC_LPR_QUEUE_PARAM_CR2,
        FDDR_DDRC_WR_QUEUE_PARAM_CR,
        FDDR_DDRC_PERF_PARAM_2_CR,
        FDDR_DDRC_PERF_PARAM_3_CR,
        FDDR_DDRC_DFI_RDDATA_EN_CR,
        FDDR_DDRC_DFI_MIN_CTRLUPD_TIMING_CR,
        FDDR_DDRC_DFI_MAX_CTRLUPD_TIMING_CR,
        FDDR_DDRC_DFI_WR_LVL_CONTROL_CR1,
        FDDR_DDRC_DFI_WR_LVL_CONTROL_CR2,
        FDDR_DDRC_DFI_RD_LVL_CONTROL_CR1,
        FDDR_DDRC_DFI_RD_LVL_CONTROL_CR2,
        FDDR_DDRC_DFI_CTRLUPD_TIME_INTERVAL_CR,
        FDDR_DDRC_DYN_SOFT_RESET_ALIAS_CR,
        FDDR_DDRC_AXI_FABRIC_PRI_ID_CR
    },

    /*---------------------------------------------------------------------
     * DDR PHY configuration registers
     */
    {
        FDDR_PHY_LOOPBACK_TEST_CR,
        FDDR_PHY_BOARD_LOOPBACK_CR,
        FDDR_PHY_CTRL_SLAVE_RATIO_CR,
        FDDR_PHY_CTRL_SLAVE_FORCE_CR,
        FDDR_PHY_CTRL_SLAVE_DELAY_CR,
        FDDR_PHY_DATA_SLICE_IN_USE_CR,
        FDDR_PHY_LVL_NUM_OF_DQ0_CR,
        FDDR_PHY_DQ_OFFSET_CR1,
        FDDR_PHY_DQ_OFFSET_CR2,
        FDDR_PHY_DQ_OFFSET_CR3,
        FDDR_PHY_DIS_CALIB_RST_CR,
        FDDR_PHY_DLL_LOCK_DIFF_CR,
        FDDR_PHY_FIFO_WE_IN_DELAY_CR1,
        FDDR_PHY_FIFO_WE_IN_DELAY_CR2,
        FDDR_PHY_FIFO_WE_IN_DELAY_CR3,
        FDDR_PHY_FIFO_WE_IN_FORCE_CR,
        FDDR_PHY_FIFO_WE_SLAVE_RATIO_CR1,
        FDDR_PHY_FIFO_WE_SLAVE_RATIO_CR2,
        FDDR_PHY_FIFO_WE_SLAVE_RATIO_CR3,
        FDDR_PHY_FIFO_WE_SLAVE_RATIO_CR4,
        FDDR_PHY_GATELVL_INIT_MODE_CR,
        FDDR_PHY_GATELVL_INIT_RATIO_CR1,
        FDDR_PHY_GATELVL_INIT_RATIO_CR2,
        FDDR_PHY_GATELVL_INIT_RATIO_CR3,
        FDDR_PHY_GATELVL_INIT_RATIO_CR4,
        FDDR_PHY_LOCAL_ODT_CR,
        FDDR_PHY_INVERT_CLKOUT_CR,
        FDDR_PHY_RD_DQS_SLAVE_DELAY_CR1,
        FDDR_PHY_RD_DQS_SLAVE_DELAY_CR2,
        FDDR_PHY_RD_DQS_SLAVE_DELAY_CR3,
        FDDR_PHY_RD_DQS_SLAVE_FORCE_CR,
        FDDR_PHY_RD_DQS_SLAVE_RATIO_CR1,
        FDDR_PHY_RD_DQS_SLAVE_RATIO_CR2,
        FDDR_PHY_RD_DQS_SLAVE_RATIO_CR3,
        FDDR_PHY_RD_DQS_SLAVE_RATIO_CR4,
        FDDR_PHY_WR_DQS_SLAVE_DELAY_CR1,
        FDDR_PHY_WR_DQS_SLAVE_DELAY_CR2,
        FDDR_PHY_WR_DQS_SLAVE_DELAY_CR3,
        FDDR_PHY_WR_DQS_SLAVE_FORCE_CR,
        FDDR_PHY_WR_DQS_SLAVE_RATIO_CR1,
        FDDR_PHY_WR_DQS_SLAVE_RATIO_CR2,
        FDDR_PHY_WR_DQS_SLAVE_RATIO_CR3,
        FDDR_PHY_WR_DQS_SLAVE_RATIO_CR4,
        FDDR_PHY_WR_DATA_SLAVE_DELAY_CR1,
        FDDR_PHY_WR_DATA_SLAVE_DELAY_CR2,
        FDDR_PHY_WR_DATA_SLAVE_DELAY_CR3,
        FDDR_PHY_WR_DATA_SLAVE_FORCE_CR,
        FDDR_PHY_WR_DATA_SLAVE_RATIO_CR1,
        FDDR_PHY_WR_DATA_SLAVE_RATIO_CR2,
        FDDR_PHY_WR_DATA_SLAVE_RATIO_CR3,
        FDDR_PHY_WR_DATA_SLAVE_RATIO_CR4,
        FDDR_PHY_WRLVL_INIT_MODE_CR,
        FDDR_PHY_WRLVL_INIT_RATIO_CR1,
        FDDR_PHY_WRLVL_INIT_RATIO_CR2,
        FDDR_PHY_WRLVL_INIT_RATIO_CR3,
        FDDR_PHY_WRLVL_INIT_RATIO_CR4,
        FDDR_PHY_WR_RD_RL_CR,
        FDDR_PHY_RDC_FIFO_RST_ERR_CNT_CLR_CR,
        FDDR_PHY_RDC_WE_TO_RE_DELAY_CR,
        FDDR_PHY_USE_FIXED_RE_CR,
        FDDR_PHY_USE_RANK0_DELAYS_CR,
        FDDR_PHY_USE_LVL_TRNG_LEVEL_CR,
        FDDR_PHY_DYN_CONFIG_CR,
        FDDR_PHY_RD_WR_GATE_LVL_CR,
        FDDR_PHY_DYN_RESET_CR,
    },
    
    /*---------------------------------------------------------------------
     * FIC-64 registers
     * These registers are 16-bit wide and 32-bit aligned.
     */
    {
        FDDR_DDR_FIC_NB_ADDR_CR,
        FDDR_DDR_FIC_NBRWB_SIZE_CR,
        FDDR_DDR_FIC_WB_TIMEOUT_CR,
        FDDR_DDR_FIC_HPD_SW_RW_EN_CR,
        FDDR_DDR_FIC_HPD_SW_RW_INVAL_CR,
        FDDR_DDR_FIC_SW_WR_ERCLR_CR,
        FDDR_DDR_FIC_ERR_INT_ENABLE_CR,
        FDDR_DDR_FIC_NUM_AHB_MASTERS_CR,
        FDDR_DDR_FIC_LOCK_TIMEOUTVAL_CR1,
        FDDR_DDR_FIC_LOCK_TIMEOUTVAL_CR2,
        FDDR_DDR_FIC_LOCK_TIMEOUT_EN_CR
    }
};

#endif

/*==============================================================================
 * SERDES Interface configuration
 */
#if MSS_SYS_SERDES_0_CONFIG_BY_CORTEX
#include "sys_config_serdes_0_define.h"
#endif

#if MSS_SYS_SERDES_1_CONFIG_BY_CORTEX
#include "sys_config_serdes_1_define.h"
#endif

#if MSS_SYS_SERDES_2_CONFIG_BY_CORTEX
#include "sys_config_serdes_2_define.h"
#endif

#if MSS_SYS_SERDES_3_CONFIG_BY_CORTEX
#include "sys_config_serdes_3_define.h"
#endif

/*==============================================================================
 * Cache configuration
 */
/* TBD. */


