// ------------------------------------
// CoreABC MDDR Initialization Sequence
// ------------------------------------

// Assert Soft Reset (DDRC_DYN_SOFT_RESET=0)
APBWRT DAT16 0 0x0000 0x0

// DDRC_RESERVED0
APBWRT DAT16 0 0x0004 0x0
// DDRC_DYN_REFRESH_1_CR
APBWRT DAT16 0 0x0008 0x2788
// DDRC_DYN_REFRESH_2_CR
APBWRT DAT16 0 0x000c 0x308
// DDRC_DYN_POWERDOWN_CR
APBWRT DAT16 0 0x0010 0x2
// DDRC_DYN_DEBUG_CR
APBWRT DAT16 0 0x0014 0x0
// DDRC_MODE_CR
APBWRT DAT16 0 0x0018 0x81
// DDRC_ADDR_MAP_BANK_CR
APBWRT DAT16 0 0x001c 0x99F
// DDRC_ECC_DATA_MASK_CR
APBWRT DAT16 0 0x0020 0x0
// DDRC_ADDR_MAP_COL_1_CR
APBWRT DAT16 0 0x0024 0x3333
// DDRC_ADDR_MAP_COL_2_CR
APBWRT DAT16 0 0x0028 0xFFFF
// DDRC_ADDR_MAP_COL_3_CR
APBWRT DAT16 0 0x0078 0x3300
// DDRC_ADDR_MAP_ROW_1_CR
APBWRT DAT16 0 0x002c 0x7777
// DDRC_ADDR_MAP_ROW_2_CR
APBWRT DAT16 0 0x0030 0x777
// DDRC_INIT_1_CR
APBWRT DAT16 0 0x0034 0x1
// DDRC_CKE_RSTN_CYCLES_1_CR
APBWRT DAT16 0 0x0038 0x4200
// DDRC_CKE_RSTN_CYCLES_2_CR
APBWRT DAT16 0 0x003c 0x8
// DDRC_INIT_MR_CR
APBWRT DAT16 0 0x0040 0x33
// DDRC_INIT_EMR_CR
APBWRT DAT16 0 0x0044 0x0
// DDRC_INIT_EMR2_CR
APBWRT DAT16 0 0x0048 0x0
// DDRC_INIT_EMR3_CR
APBWRT DAT16 0 0x004c 0x0
// DDRC_DRAM_BANK_TIMING_PARAM_CR
APBWRT DAT16 0 0x0050 0x300
// DDRC_DRAM_RD_WR_LATENCY_CR
APBWRT DAT16 0 0x0054 0x23
// DDRC_DRAM_RD_WR_PRE_CR
APBWRT DAT16 0 0x0058 0x235
// DDRC_DRAM_MR_TIMING_PARAM_CR
APBWRT DAT16 0 0x005c 0x4
// DDRC_DRAM_RAS_TIMING_CR
APBWRT DAT16 0 0x0060 0x108
// DDRC_DRAM_RD_WR_TRNARND_TIME_CR
APBWRT DAT16 0 0x0064 0x178
// DDRC_DRAM_T_PD_CR
APBWRT DAT16 0 0x0068 0x33
// DDRC_DRAM_BANK_ACT_TIMING_CR
APBWRT DAT16 0 0x006c 0x1937
// DDRC_ODT_PARAM_1_CR
APBWRT DAT16 0 0x0070 0x014
// DDRC_ODT_PARAM_2_CR
APBWRT DAT16 0 0x0074 0x010
// DDRC_DEBUG_CR
APBWRT DAT16 0 0x0078 0x3300
// DDRC_MODE_REG_RD_WR_CR
APBWRT DAT16 0 0x007c 0x0
// DDRC_MODE_REG_DATA_CR
APBWRT DAT16 0 0x0080 0x0
// DDRC_PWR_SAVE_1_CR
APBWRT DAT16 0 0x0084 0x414
// DDRC_PWR_SAVE_2_CR
APBWRT DAT16 0 0x0088 0x0
// DDRC_ZQ_LONG_TIME_CR
APBWRT DAT16 0 0x008c 0x0
// DDRC_ZQ_SHORT_TIME_CR
APBWRT DAT16 0 0x0090 0x0
// DDRC_ZQ_SHORT_INT_REFRESH_MARGIN_1_CR
APBWRT DAT16 0 0x0094 0x2
// DDRC_ZQ_SHORT_INT_REFRESH_MARGIN_2_CR
APBWRT DAT16 0 0x0098 0x0
// DDRC_PERF_PARAM_1_CR
APBWRT DAT16 0 0x009c 0x4080
// DDRC_HPR_QUEUE_PARAM_1_CR
APBWRT DAT16 0 0x00a0 0x80F8
// DDRC_HPR_QUEUE_PARAM_2_CR
APBWRT DAT16 0 0x00a4 0x7
// DDRC_LPR_QUEUE_PARAM_1_CR
APBWRT DAT16 0 0x00a8 0x80F8
// DDRC_LPR_QUEUE_PARAM_2_CR
APBWRT DAT16 0 0x00ac 0x7
// DDRC_WR_QUEUE_PARAM_CR
APBWRT DAT16 0 0x00b0 0x200
// DDRC_PERF_PARAM_2_CR
APBWRT DAT16 0 0x00b4 0x0
// DDRC_PERF_PARAM_3_CR
APBWRT DAT16 0 0x00b8 0x0
// DDRC_DFI_RDDATA_EN_CR
APBWRT DAT16 0 0x00bc 0x3
// DDRC_DFI_MIN_CTRLUPD_TIMING_CR
APBWRT DAT16 0 0x00c0 0x3
// DDRC_DFI_MAX_CTRLUPD_TIMING_CR
APBWRT DAT16 0 0x00c4 0x40
// DDRC_DFI_WR_LVL_CONTROL_1_CR
APBWRT DAT16 0 0x00c8 0x0
// DDRC_DFI_WR_LVL_CONTROL_2_CR
APBWRT DAT16 0 0x00cc 0x0
// DDRC_DFI_RD_LVL_CONTROL_1_CR
APBWRT DAT16 0 0x00d0 0x0
// DDRC_DFI_RD_LVL_CONTROL_2_CR
APBWRT DAT16 0 0x00d4 0x0
// DDRC_DFI_CTRLUPD_TIME_INTERVAL_CR
APBWRT DAT16 0 0x00d8 0x309
// DDRC_AXI_FABRIC_PRI_ID_CR
APBWRT DAT16 0 0x00e0 0x0
// DDRC_SR
APBWRT DAT16 0 0x00e4 0x0
// DDRC_SINGLE_ERR_CNT_SR
APBWRT DAT16 0 0x00e8 0x0
// DDRC_DOUBLE_ERR_CNT_SR
APBWRT DAT16 0 0x00ec 0x0
// DDRC_LUE_SYNDROME_1_SR
APBWRT DAT16 0 0x00f0 0x0
// DDRC_LUE_SYNDROME_2_SR
APBWRT DAT16 0 0x00f4 0x0
// DDRC_LUE_SYNDROME_3_SR
APBWRT DAT16 0 0x00f8 0x0
// DDRC_LUE_SYNDROME_4_SR
APBWRT DAT16 0 0x00fc 0x0
// DDRC_LUE_SYNDROME_5_SR
APBWRT DAT16 0 0x0100 0x0
// DDRC_LUE_ADDRESS_1_SR
APBWRT DAT16 0 0x0104 0x0
// DDRC_LUE_ADDRESS_2_SR
APBWRT DAT16 0 0x0108 0x0
// DDRC_LCE_SYNDROME_1_SR
APBWRT DAT16 0 0x010c 0x0
// DDRC_LCE_SYNDROME_2_SR
APBWRT DAT16 0 0x0110 0x0
// DDRC_LCE_SYNDROME_3_SR
APBWRT DAT16 0 0x0114 0x0
// DDRC_LCE_SYNDROME_4_SR
APBWRT DAT16 0 0x0118 0x0
// DDRC_LCE_SYNDROME_5_SR
APBWRT DAT16 0 0x011c 0x0
// DDRC_LCE_ADDRESS_1_SR
APBWRT DAT16 0 0x0120 0x0
// DDRC_LCE_ADDRESS_2_SR
APBWRT DAT16 0 0x0124 0x0
// DDRC_LCB_NUMBER_SR
APBWRT DAT16 0 0x0128 0x0
// DDRC_LCB_MASK_1_SR
APBWRT DAT16 0 0x012c 0x0
// DDRC_LCB_MASK_2_SR
APBWRT DAT16 0 0x0130 0x0
// DDRC_LCB_MASK_3_SR
APBWRT DAT16 0 0x0134 0x0
// DDRC_LCB_MASK_4_SR
APBWRT DAT16 0 0x0138 0x0
// DDRC_ECC_INT_SR
APBWRT DAT16 0 0x013c 0x0
// DDRC_ECC_INT_CLR_REG
APBWRT DAT16 0 0x0140 0x0
// DDRC_ECC_OUTPUT_DATA_SR
APBWRT DAT16 0 0x0144 0x0
// PHY_DYN_BIST_TEST_CR
APBWRT DAT16 0 0x0200 0x0
// PHY_DYN_BIST_TEST_ERRCLR_1_CR
APBWRT DAT16 0 0x0204 0x0
// PHY_DYN_BIST_TEST_ERRCLR_2_CR
APBWRT DAT16 0 0x0208 0x0
// PHY_DYN_BIST_TEST_ERRCLR_3_CR
APBWRT DAT16 0 0x020c 0x0
// PHY_BIST_TEST_SHIFT_PATTERN_1_CR
APBWRT DAT16 0 0x0210 0x0
// PHY_BIST_TEST_SHIFT_PATTERN_2_CR
APBWRT DAT16 0 0x0214 0x0
// PHY_BIST_TEST_SHIFT_PATTERN_3_CR
APBWRT DAT16 0 0x0218 0x0
// PHY_LOOPBACK_TEST_CR
APBWRT DAT16 0 0x021c 0x0
// PHY_BOARD_LOOPBACK_CR
APBWRT DAT16 0 0x0220 0x0
// PHY_CTRL_SLAVE_RATIO_CR
APBWRT DAT16 0 0x0224 0x80
// PHY_CTRL_SLAVE_FORCE_CR
APBWRT DAT16 0 0x0228 0x0
// PHY_CTRL_SLAVE_DELAY_CR
APBWRT DAT16 0 0x022c 0x0
// PHY_DATA_SLICE_IN_USE_CR
APBWRT DAT16 0 0x0230 0x3
// PHY_LVL_NUM_OF_DQ0_CR
APBWRT DAT16 0 0x0234 0x0
// PHY_DQ_OFFSET_1_CR
APBWRT DAT16 0 0x0238 0x0
// PHY_DQ_OFFSET_2_CR
APBWRT DAT16 0 0x023c 0x0
// PHY_DQ_OFFSET_3_CR
APBWRT DAT16 0 0x0240 0x0
// PHY_DIS_CALIB_RST_CR
APBWRT DAT16 0 0x0244 0x0
// PHY_DLL_LOCK_DIFF_CR
APBWRT DAT16 0 0x0248 0xB
// PHY_FIFO_WE_IN_DELAY_1_CR
APBWRT DAT16 0 0x024c 0x0
// PHY_FIFO_WE_IN_DELAY_2_CR
APBWRT DAT16 0 0x0250 0x0
// PHY_FIFO_WE_IN_DELAY_3_CR
APBWRT DAT16 0 0x0254 0x0
// PHY_FIFO_WE_IN_FORCE_CR
APBWRT DAT16 0 0x0258 0x0
// PHY_FIFO_WE_SLAVE_RATIO_1_CR
APBWRT DAT16 0 0x025c 0x40
// PHY_FIFO_WE_SLAVE_RATIO_2_CR
APBWRT DAT16 0 0x0260 0x401
// PHY_FIFO_WE_SLAVE_RATIO_3_CR
APBWRT DAT16 0 0x0264 0x4010
// PHY_FIFO_WE_SLAVE_RATIO_4_CR
APBWRT DAT16 0 0x0268 0x0
// PHY_GATELVL_INIT_MODE_CR
APBWRT DAT16 0 0x026c 0x0
// PHY_GATELVL_INIT_RATIO_1_CR
APBWRT DAT16 0 0x0270 0x0
// PHY_GATELVL_INIT_RATIO_2_CR
APBWRT DAT16 0 0x0274 0x0
// PHY_GATELVL_INIT_RATIO_3_CR
APBWRT DAT16 0 0x0278 0x0
// PHY_GATELVL_INIT_RATIO_4_CR
APBWRT DAT16 0 0x027c 0x0
// PHY_LOCAL_ODT_CR
APBWRT DAT16 0 0x0280 0x0
// PHY_INVERT_CLKOUT_CR
APBWRT DAT16 0 0x0284 0x0
// PHY_RD_DQS_SLAVE_DELAY_1_CR
APBWRT DAT16 0 0x0288 0x0
// PHY_RD_DQS_SLAVE_DELAY_2_CR
APBWRT DAT16 0 0x028c 0x0
// PHY_RD_DQS_SLAVE_DELAY_3_CR
APBWRT DAT16 0 0x0290 0x0
// PHY_RD_DQS_SLAVE_FORCE_CR
APBWRT DAT16 0 0x0294 0x0
// PHY_RD_DQS_SLAVE_RATIO_1_CR
APBWRT DAT16 0 0x0298 0x40
// PHY_RD_DQS_SLAVE_RATIO_2_CR
APBWRT DAT16 0 0x029c 0x401
// PHY_RD_DQS_SLAVE_RATIO_3_CR
APBWRT DAT16 0 0x02a0 0x4010
// PHY_RD_DQS_SLAVE_RATIO_4_CR
APBWRT DAT16 0 0x02a4 0x0
// PHY_WR_DQS_SLAVE_DELAY_1_CR
APBWRT DAT16 0 0x02a8 0x0
// PHY_WR_DQS_SLAVE_DELAY_2_CR
APBWRT DAT16 0 0x02ac 0x0
// PHY_WR_DQS_SLAVE_DELAY_3_CR
APBWRT DAT16 0 0x02b0 0x0
// PHY_WR_DQS_SLAVE_FORCE_CR
APBWRT DAT16 0 0x02b4 0x0
// PHY_WR_DQS_SLAVE_RATIO_1_CR
APBWRT DAT16 0 0x02b8 0x0
// PHY_WR_DQS_SLAVE_RATIO_2_CR
APBWRT DAT16 0 0x02bc 0x0
// PHY_WR_DQS_SLAVE_RATIO_3_CR
APBWRT DAT16 0 0x02c0 0x0
// PHY_WR_DQS_SLAVE_RATIO_4_CR
APBWRT DAT16 0 0x02c4 0x0
// PHY_WR_DATA_SLAVE_DELAY_1_CR
APBWRT DAT16 0 0x02c8 0x0
// PHY_WR_DATA_SLAVE_DELAY_2_CR
APBWRT DAT16 0 0x02cc 0x0
// PHY_WR_DATA_SLAVE_DELAY_3_CR
APBWRT DAT16 0 0x02d0 0x0
// PHY_WR_DATA_SLAVE_FORCE_CR
APBWRT DAT16 0 0x02d4 0x0
// PHY_WR_DATA_SLAVE_RATIO_1_CR
APBWRT DAT16 0 0x02d8 0x40
// PHY_WR_DATA_SLAVE_RATIO_2_CR
APBWRT DAT16 0 0x02dc 0x401
// PHY_WR_DATA_SLAVE_RATIO_3_CR
APBWRT DAT16 0 0x02e0 0x4010
// PHY_WR_DATA_SLAVE_RATIO_4_CR
APBWRT DAT16 0 0x02e4 0x0
// PHY_WRLVL_INIT_MODE_CR
APBWRT DAT16 0 0x02e8 0x0
// PHY_WRLVL_INIT_RATIO_1_CR
APBWRT DAT16 0 0x02ec 0x0
// PHY_WRLVL_INIT_RATIO_2_CR
APBWRT DAT16 0 0x02f0 0x0
// PHY_WRLVL_INIT_RATIO_3_CR
APBWRT DAT16 0 0x02f4 0x0
// PHY_WRLVL_INIT_RATIO_4_CR
APBWRT DAT16 0 0x02f8 0x0
// PHY_WR_RD_RL_CR
APBWRT DAT16 0 0x02fc 0x21
// PHY_RDC_FIFO_RST_ERR_CNT_CLR_CR
APBWRT DAT16 0 0x0300 0x0
// PHY_RDC_WE_TO_RE_DELAY_CR
APBWRT DAT16 0 0x0304 0x3
// PHY_USE_FIXED_RE_CR
APBWRT DAT16 0 0x0308 0x1
// PHY_USE_RANK0_DELAYS_CR
APBWRT DAT16 0 0x030c 0x1
// PHY_USE_LVL_TRNG_LEVEL_CR
APBWRT DAT16 0 0x0310 0x0
// PHY_DYN_CONFIG_CR
APBWRT DAT16 0 0x0314 0x9
// PHY_RD_WR_GATE_LVL_CR
APBWRT DAT16 0 0x0318 0x0
// PHY_DYN_RESET_CR
APBWRT DAT16 0 0x031c 0x1
// PHY_LEVELLING_FAILURE_SR
APBWRT DAT16 0 0x0320 0x0
// PHY_BIST_ERROR_1_SR
APBWRT DAT16 0 0x0324 0x0
// PHY_BIST_ERROR_2_SR
APBWRT DAT16 0 0x0328 0x0
// PHY_BIST_ERROR_3_SR
APBWRT DAT16 0 0x032c 0x0
// PHY_WRLVL_DQS_RATIO_1_SR
APBWRT DAT16 0 0x0330 0x0
// PHY_WRLVL_DQS_RATIO_2_SR
APBWRT DAT16 0 0x0334 0x0
// PHY_WRLVL_DQS_RATIO_3_SR
APBWRT DAT16 0 0x0338 0x0
// PHY_WRLVL_DQS_RATIO_4_SR
APBWRT DAT16 0 0x033c 0x0
// PHY_WRLVL_DQ_RATIO_1_SR
APBWRT DAT16 0 0x0340 0x0
// PHY_WRLVL_DQ_RATIO_2_SR
APBWRT DAT16 0 0x0344 0x0
// PHY_WRLVL_DQ_RATIO_3_SR
APBWRT DAT16 0 0x0348 0x0
// PHY_WRLVL_DQ_RATIO_4_SR
APBWRT DAT16 0 0x034c 0x0
// PHY_RDLVL_DQS_RATIO_1_SR
APBWRT DAT16 0 0x0350 0x0
// PHY_RDLVL_DQS_RATIO_2_SR
APBWRT DAT16 0 0x0354 0x0
// PHY_RDLVL_DQS_RATIO_3_SR
APBWRT DAT16 0 0x0358 0x0
// PHY_RDLVL_DQS_RATIO_4_SR
APBWRT DAT16 0 0x035c 0x0
// PHY_FIFO_1_SR
APBWRT DAT16 0 0x0360 0x0
// PHY_FIFO_2_SR
APBWRT DAT16 0 0x0364 0x0
// PHY_FIFO_3_SR
APBWRT DAT16 0 0x0368 0x0
// PHY_FIFO_4_SR
APBWRT DAT16 0 0x036c 0x0
// PHY_MASTER_DLL_SR
APBWRT DAT16 0 0x0370 0x0
// PHY_DLL_SLAVE_VALUE_1_SR
APBWRT DAT16 0 0x0374 0x0
// PHY_DLL_SLAVE_VALUE_2_SR
APBWRT DAT16 0 0x0378 0x0
// PHY_STATUS_OF_IN_DELAY_VAL_1_SR
APBWRT DAT16 0 0x037c 0x0
// PHY_STATUS_OF_IN_DELAY_VAL_2_SR
APBWRT DAT16 0 0x0380 0x0
// PHY_STATUS_OF_OUT_DELAY_VAL_1_SR
APBWRT DAT16 0 0x0384 0x0
// PHY_STATUS_OF_OUT_DELAY_VAL_2_SR
APBWRT DAT16 0 0x0388 0x0
// PHY_DLL_LOCK_AND_SLAVE_VAL_SR
APBWRT DAT16 0 0x038c 0x0
// PHY_CTRL_OUTPUT_FILTER_SR
APBWRT DAT16 0 0x0390 0x0
// PHY_CTRL_OF_OUTPUT_DELAY_SR
APBWRT DAT16 0 0x0394 0x0
// PHY_RD_DQS_SLAVE_DLL_VAL_1_SR
APBWRT DAT16 0 0x0398 0x0
// PHY_RD_DQS_SLAVE_DLL_VAL_2_SR
APBWRT DAT16 0 0x039c 0x0
// PHY_RD_DQS_SLAVE_DLL_VAL_3_SR
APBWRT DAT16 0 0x03a0 0x0
// PHY_WR_DATA_SLAVE_DLL_VAL_1_SR
APBWRT DAT16 0 0x03a4 0x0
// PHY_WR_DATA_SLAVE_DLL_VAL_2_SR
APBWRT DAT16 0 0x03a8 0x0
// PHY_WR_DATA_SLAVE_DLL_VAL_3_SR
APBWRT DAT16 0 0x03ac 0x0
// PHY_FIFO_WE_SLAVE_DLL_VAL_1_SR
APBWRT DAT16 0 0x03b0 0x0
// PHY_FIFO_WE_SLAVE_DLL_VAL_2_SR
APBWRT DAT16 0 0x03b4 0x0
// PHY_FIFO_WE_SLAVE_DLL_VAL_3_SR
APBWRT DAT16 0 0x03b8 0x0
// PHY_WR_DQS_SLAVE_DLL_VAL_1_SR
APBWRT DAT16 0 0x03bc 0x0
// PHY_WR_DQS_SLAVE_DLL_VAL_2_SR
APBWRT DAT16 0 0x03c0 0x0
// PHY_WR_DQS_SLAVE_DLL_VAL_3_SR
APBWRT DAT16 0 0x03c4 0x0
// PHY_CTRL_SLAVE_DLL_VAL_SR
APBWRT DAT16 0 0x03c8 0x0
// DDR_FIC_NB_ADDR_CR
APBWRT DAT16 0 0x0400 0x0
// DDR_FIC_NBRWB_SIZE_CR
APBWRT DAT16 0 0x0404 0x0
// DDR_FIC_WB_TIMEOUT_CR
APBWRT DAT16 0 0x0408 0x0
// DDR_FIC_HPD_SW_RW_EN_CR
APBWRT DAT16 0 0x040c 0x0
// DDR_FIC_HPD_SW_RW_INVAL_CR
APBWRT DAT16 0 0x0410 0x0
// DDR_FIC_SW_WR_ERCLR_CR
APBWRT DAT16 0 0x0414 0x0
// DDR_FIC_ERR_INT_ENABLE_CR
APBWRT DAT16 0 0x0418 0x0
// DDR_FIC_NUM_AHB_MASTERS_CR
APBWRT DAT16 0 0x041c 0x0
// DDR_FIC_HPB_ERR_ADDR_1_SR
APBWRT DAT16 0 0x0420 0x0
// DDR_FIC_HPB_ERR_ADDR_2_SR
APBWRT DAT16 0 0x0424 0x0
// DDR_FIC_SW_ERR_ADDR_1_SR
APBWRT DAT16 0 0x0428 0x0
// DDR_FIC_SW_ERR_ADDR_2_SR
APBWRT DAT16 0 0x042c 0x0
// DDR_FIC_HPD_SW_WRB_EMPTY_SR
APBWRT DAT16 0 0x0430 0x0
// DDR_FIC_SW_HPB_LOCKOUT_SR
APBWRT DAT16 0 0x0434 0x0
// DDR_FIC_SW_HPD_WERR_SR
APBWRT DAT16 0 0x0438 0x0
// DDR_FIC_LOCK_TIMEOUTVAL_1_CR
APBWRT DAT16 0 0x0440 0x0
// DDR_FIC_LOCK_TIMEOUTVAL_2_CR
APBWRT DAT16 0 0x0444 0x0
// DDR_FIC_LOCK_TIMEOUT_EN_CR
APBWRT DAT16 0 0x0448 0x0
// DDR_FIC_RDWR_ERR_SR
APBWRT DAT16 0 0x044c 0x0

// De-assert Soft Reset (DDRC_DYN_SOFT_RESET=1)
APBWRT DAT16 0 0x0000 0x1

// Wait until controller is ready
$WaitReady
APBREAD 0 0x00E4
AND 0x8
JUMP IF ZERO $WaitReady

// Set CONFIG1_DONE and CONFIG2_DONE to '1'
APBWRT DAT16 0 0x2000  0x1
APBWRT DAT16 0 0x2000  0x3

HALT
