13da42859SDinh Nguyen /* 23da42859SDinh Nguyen * Copyright Altera Corporation (C) 2012-2015 33da42859SDinh Nguyen * 43da42859SDinh Nguyen * SPDX-License-Identifier: BSD-3-Clause 53da42859SDinh Nguyen */ 63da42859SDinh Nguyen 73da42859SDinh Nguyen #ifndef _SEQUENCER_H_ 83da42859SDinh Nguyen #define _SEQUENCER_H_ 93da42859SDinh Nguyen 10*1fa0c8c4SMarek Vasut #define RW_MGR_NUM_DM_PER_WRITE_GROUP (rwcfg->mem_data_mask_width \ 11*1fa0c8c4SMarek Vasut / rwcfg->mem_if_write_dqs_width) 12*1fa0c8c4SMarek Vasut #define RW_MGR_NUM_TRUE_DM_PER_WRITE_GROUP (rwcfg->true_mem_data_mask_width \ 13*1fa0c8c4SMarek Vasut / rwcfg->mem_if_write_dqs_width) 143da42859SDinh Nguyen 15*1fa0c8c4SMarek Vasut #define RW_MGR_NUM_DQS_PER_WRITE_GROUP (rwcfg->mem_if_read_dqs_width \ 16*1fa0c8c4SMarek Vasut / rwcfg->mem_if_write_dqs_width) 17*1fa0c8c4SMarek Vasut #define NUM_RANKS_PER_SHADOW_REG (rwcfg->mem_number_of_ranks / NUM_SHADOW_REGS) 183da42859SDinh Nguyen 19c4815f76SMarek Vasut #define RW_MGR_RUN_SINGLE_GROUP_OFFSET 0x0 20c4815f76SMarek Vasut #define RW_MGR_RUN_ALL_GROUPS_OFFSET 0x0400 21c4815f76SMarek Vasut #define RW_MGR_RESET_READ_DATAPATH_OFFSET 0x1000 22c4815f76SMarek Vasut #define RW_MGR_SET_CS_AND_ODT_MASK_OFFSET 0x1400 23c4815f76SMarek Vasut #define RW_MGR_INST_ROM_WRITE_OFFSET 0x1800 24c4815f76SMarek Vasut #define RW_MGR_AC_ROM_WRITE_OFFSET 0x1C00 253da42859SDinh Nguyen 263da42859SDinh Nguyen #define NUM_SHADOW_REGS 1 273da42859SDinh Nguyen 283da42859SDinh Nguyen #define RW_MGR_RANK_NONE 0xFF 293da42859SDinh Nguyen #define RW_MGR_RANK_ALL 0x00 303da42859SDinh Nguyen 313da42859SDinh Nguyen #define RW_MGR_ODT_MODE_OFF 0 323da42859SDinh Nguyen #define RW_MGR_ODT_MODE_READ_WRITE 1 333da42859SDinh Nguyen 343da42859SDinh Nguyen #define NUM_CALIB_REPEAT 1 353da42859SDinh Nguyen 363da42859SDinh Nguyen #define NUM_READ_TESTS 7 373da42859SDinh Nguyen #define NUM_READ_PB_TESTS 7 383da42859SDinh Nguyen #define NUM_WRITE_TESTS 15 393da42859SDinh Nguyen #define NUM_WRITE_PB_TESTS 31 403da42859SDinh Nguyen 413da42859SDinh Nguyen #define PASS_ALL_BITS 1 423da42859SDinh Nguyen #define PASS_ONE_BIT 0 433da42859SDinh Nguyen 443da42859SDinh Nguyen /* calibration stages */ 453da42859SDinh Nguyen #define CAL_STAGE_NIL 0 463da42859SDinh Nguyen #define CAL_STAGE_VFIFO 1 473da42859SDinh Nguyen #define CAL_STAGE_WLEVEL 2 483da42859SDinh Nguyen #define CAL_STAGE_LFIFO 3 493da42859SDinh Nguyen #define CAL_STAGE_WRITES 4 503da42859SDinh Nguyen #define CAL_STAGE_FULLTEST 5 513da42859SDinh Nguyen #define CAL_STAGE_REFRESH 6 523da42859SDinh Nguyen #define CAL_STAGE_CAL_SKIPPED 7 533da42859SDinh Nguyen #define CAL_STAGE_CAL_ABORTED 8 543da42859SDinh Nguyen #define CAL_STAGE_VFIFO_AFTER_WRITES 9 553da42859SDinh Nguyen 563da42859SDinh Nguyen /* calibration substages */ 573da42859SDinh Nguyen #define CAL_SUBSTAGE_NIL 0 583da42859SDinh Nguyen #define CAL_SUBSTAGE_GUARANTEED_READ 1 593da42859SDinh Nguyen #define CAL_SUBSTAGE_DQS_EN_PHASE 2 603da42859SDinh Nguyen #define CAL_SUBSTAGE_VFIFO_CENTER 3 613da42859SDinh Nguyen #define CAL_SUBSTAGE_WORKING_DELAY 1 623da42859SDinh Nguyen #define CAL_SUBSTAGE_LAST_WORKING_DELAY 2 633da42859SDinh Nguyen #define CAL_SUBSTAGE_WLEVEL_COPY 3 643da42859SDinh Nguyen #define CAL_SUBSTAGE_WRITES_CENTER 1 653da42859SDinh Nguyen #define CAL_SUBSTAGE_READ_LATENCY 1 663da42859SDinh Nguyen #define CAL_SUBSTAGE_REFRESH 1 673da42859SDinh Nguyen 683da42859SDinh Nguyen /* length of VFIFO, from SW_MACROS */ 693da42859SDinh Nguyen #define VFIFO_SIZE (READ_VALID_FIFO_SIZE) 703da42859SDinh Nguyen 71c4815f76SMarek Vasut #define SCC_MGR_GROUP_COUNTER_OFFSET 0x0000 72c4815f76SMarek Vasut #define SCC_MGR_DQS_IN_DELAY_OFFSET 0x0100 73c4815f76SMarek Vasut #define SCC_MGR_DQS_EN_PHASE_OFFSET 0x0200 74c4815f76SMarek Vasut #define SCC_MGR_DQS_EN_DELAY_OFFSET 0x0300 75c4815f76SMarek Vasut #define SCC_MGR_DQDQS_OUT_PHASE_OFFSET 0x0400 76c4815f76SMarek Vasut #define SCC_MGR_OCT_OUT1_DELAY_OFFSET 0x0500 77c4815f76SMarek Vasut #define SCC_MGR_IO_OUT1_DELAY_OFFSET 0x0700 78c4815f76SMarek Vasut #define SCC_MGR_IO_IN_DELAY_OFFSET 0x0900 793da42859SDinh Nguyen 803da42859SDinh Nguyen /* HHP-HPS-specific versions of some commands */ 81c4815f76SMarek Vasut #define SCC_MGR_DQS_EN_DELAY_GATE_OFFSET 0x0600 82c4815f76SMarek Vasut #define SCC_MGR_IO_OE_DELAY_OFFSET 0x0800 83c4815f76SMarek Vasut #define SCC_MGR_HHP_GLOBALS_OFFSET 0x0A00 84c4815f76SMarek Vasut #define SCC_MGR_HHP_RFILE_OFFSET 0x0B00 85c4815f76SMarek Vasut #define SCC_MGR_AFI_CAL_INIT_OFFSET 0x0D00 863da42859SDinh Nguyen 8717fdc916SMarek Vasut #define SDR_PHYGRP_SCCGRP_ADDRESS (SOCFPGA_SDR_ADDRESS | 0x0) 8817fdc916SMarek Vasut #define SDR_PHYGRP_PHYMGRGRP_ADDRESS (SOCFPGA_SDR_ADDRESS | 0x1000) 8917fdc916SMarek Vasut #define SDR_PHYGRP_RWMGRGRP_ADDRESS (SOCFPGA_SDR_ADDRESS | 0x2000) 9017fdc916SMarek Vasut #define SDR_PHYGRP_DATAMGRGRP_ADDRESS (SOCFPGA_SDR_ADDRESS | 0x4000) 9117fdc916SMarek Vasut #define SDR_PHYGRP_REGFILEGRP_ADDRESS (SOCFPGA_SDR_ADDRESS | 0x4800) 923da42859SDinh Nguyen 933da42859SDinh Nguyen #define PHY_MGR_CAL_RESET (0) 943da42859SDinh Nguyen #define PHY_MGR_CAL_SUCCESS (1) 953da42859SDinh Nguyen #define PHY_MGR_CAL_FAIL (2) 963da42859SDinh Nguyen 973da42859SDinh Nguyen #define CALIB_SKIP_DELAY_LOOPS (1 << 0) 983da42859SDinh Nguyen #define CALIB_SKIP_ALL_BITS_CHK (1 << 1) 993da42859SDinh Nguyen #define CALIB_SKIP_DELAY_SWEEPS (1 << 2) 1003da42859SDinh Nguyen #define CALIB_SKIP_VFIFO (1 << 3) 1013da42859SDinh Nguyen #define CALIB_SKIP_LFIFO (1 << 4) 1023da42859SDinh Nguyen #define CALIB_SKIP_WLEVEL (1 << 5) 1033da42859SDinh Nguyen #define CALIB_SKIP_WRITES (1 << 6) 1043da42859SDinh Nguyen #define CALIB_SKIP_FULL_TEST (1 << 7) 1053da42859SDinh Nguyen #define CALIB_SKIP_ALL (CALIB_SKIP_VFIFO | \ 1063da42859SDinh Nguyen CALIB_SKIP_LFIFO | CALIB_SKIP_WLEVEL | \ 1073da42859SDinh Nguyen CALIB_SKIP_WRITES | CALIB_SKIP_FULL_TEST) 1083da42859SDinh Nguyen #define CALIB_IN_RTL_SIM (1 << 8) 1093da42859SDinh Nguyen 1103da42859SDinh Nguyen /* Scan chain manager command addresses */ 1113da42859SDinh Nguyen #define READ_SCC_OCT_OUT2_DELAY 0 1123da42859SDinh Nguyen #define READ_SCC_DQ_OUT2_DELAY 0 1133da42859SDinh Nguyen #define READ_SCC_DQS_IO_OUT2_DELAY 0 1143da42859SDinh Nguyen #define READ_SCC_DM_IO_OUT2_DELAY 0 1153da42859SDinh Nguyen 1163da42859SDinh Nguyen /* HHP-HPS-specific values */ 1173da42859SDinh Nguyen #define SCC_MGR_HHP_EXTRAS_OFFSET 0 1183da42859SDinh Nguyen #define SCC_MGR_HHP_DQSE_MAP_OFFSET 1 1193da42859SDinh Nguyen 1203da42859SDinh Nguyen /* PHY Debug mode flag constants */ 1213da42859SDinh Nguyen #define PHY_DEBUG_IN_DEBUG_MODE 0x00000001 1223da42859SDinh Nguyen #define PHY_DEBUG_ENABLE_CAL_RPT 0x00000002 1233da42859SDinh Nguyen #define PHY_DEBUG_ENABLE_MARGIN_RPT 0x00000004 1243da42859SDinh Nguyen #define PHY_DEBUG_SWEEP_ALL_GROUPS 0x00000008 1253da42859SDinh Nguyen #define PHY_DEBUG_DISABLE_GUARANTEED_READ 0x00000010 1263da42859SDinh Nguyen #define PHY_DEBUG_ENABLE_NON_DESTRUCTIVE_CALIBRATION 0x00000020 1273da42859SDinh Nguyen 1283da42859SDinh Nguyen /* Init and Reset delay constants - Only use if defined by sequencer_defines.h, 1293da42859SDinh Nguyen * otherwise, revert to defaults 1303da42859SDinh Nguyen * Default for Tinit = (0+1) * ((202+1) * (2 * 131 + 1) + 1) = 53532 = 1313da42859SDinh Nguyen * 200.75us @ 266MHz 1323da42859SDinh Nguyen */ 1333da42859SDinh Nguyen #ifdef TINIT_CNTR0_VAL 1343da42859SDinh Nguyen #define SEQ_TINIT_CNTR0_VAL TINIT_CNTR0_VAL 1353da42859SDinh Nguyen #else 1363da42859SDinh Nguyen #define SEQ_TINIT_CNTR0_VAL 0 1373da42859SDinh Nguyen #endif 1383da42859SDinh Nguyen 1393da42859SDinh Nguyen #ifdef TINIT_CNTR1_VAL 1403da42859SDinh Nguyen #define SEQ_TINIT_CNTR1_VAL TINIT_CNTR1_VAL 1413da42859SDinh Nguyen #else 1423da42859SDinh Nguyen #define SEQ_TINIT_CNTR1_VAL 202 1433da42859SDinh Nguyen #endif 1443da42859SDinh Nguyen 1453da42859SDinh Nguyen #ifdef TINIT_CNTR2_VAL 1463da42859SDinh Nguyen #define SEQ_TINIT_CNTR2_VAL TINIT_CNTR2_VAL 1473da42859SDinh Nguyen #else 1483da42859SDinh Nguyen #define SEQ_TINIT_CNTR2_VAL 131 1493da42859SDinh Nguyen #endif 1503da42859SDinh Nguyen 1513da42859SDinh Nguyen 1523da42859SDinh Nguyen /* Default for Treset = (2+1) * ((252+1) * (2 * 131 + 1) + 1) = 133563 = 1533da42859SDinh Nguyen * 500.86us @ 266MHz 1543da42859SDinh Nguyen */ 1553da42859SDinh Nguyen #ifdef TRESET_CNTR0_VAL 1563da42859SDinh Nguyen #define SEQ_TRESET_CNTR0_VAL TRESET_CNTR0_VAL 1573da42859SDinh Nguyen #else 1583da42859SDinh Nguyen #define SEQ_TRESET_CNTR0_VAL 2 1593da42859SDinh Nguyen #endif 1603da42859SDinh Nguyen 1613da42859SDinh Nguyen #ifdef TRESET_CNTR1_VAL 1623da42859SDinh Nguyen #define SEQ_TRESET_CNTR1_VAL TRESET_CNTR1_VAL 1633da42859SDinh Nguyen #else 1643da42859SDinh Nguyen #define SEQ_TRESET_CNTR1_VAL 252 1653da42859SDinh Nguyen #endif 1663da42859SDinh Nguyen 1673da42859SDinh Nguyen #ifdef TRESET_CNTR2_VAL 1683da42859SDinh Nguyen #define SEQ_TRESET_CNTR2_VAL TRESET_CNTR2_VAL 1693da42859SDinh Nguyen #else 1703da42859SDinh Nguyen #define SEQ_TRESET_CNTR2_VAL 131 1713da42859SDinh Nguyen #endif 1723da42859SDinh Nguyen 1733da42859SDinh Nguyen struct socfpga_sdr_rw_load_manager { 1743da42859SDinh Nguyen u32 load_cntr0; 1753da42859SDinh Nguyen u32 load_cntr1; 1763da42859SDinh Nguyen u32 load_cntr2; 1773da42859SDinh Nguyen u32 load_cntr3; 1783da42859SDinh Nguyen }; 1793da42859SDinh Nguyen 1803da42859SDinh Nguyen struct socfpga_sdr_rw_load_jump_manager { 1813da42859SDinh Nguyen u32 load_jump_add0; 1823da42859SDinh Nguyen u32 load_jump_add1; 1833da42859SDinh Nguyen u32 load_jump_add2; 1843da42859SDinh Nguyen u32 load_jump_add3; 1853da42859SDinh Nguyen }; 1863da42859SDinh Nguyen 1873da42859SDinh Nguyen struct socfpga_sdr_reg_file { 1883da42859SDinh Nguyen u32 signature; 1893da42859SDinh Nguyen u32 debug_data_addr; 1903da42859SDinh Nguyen u32 cur_stage; 1913da42859SDinh Nguyen u32 fom; 1923da42859SDinh Nguyen u32 failing_stage; 1933da42859SDinh Nguyen u32 debug1; 1943da42859SDinh Nguyen u32 debug2; 1953da42859SDinh Nguyen u32 dtaps_per_ptap; 1963da42859SDinh Nguyen u32 trk_sample_count; 1973da42859SDinh Nguyen u32 trk_longidle; 1983da42859SDinh Nguyen u32 delays; 1993da42859SDinh Nguyen u32 trk_rw_mgr_addr; 2003da42859SDinh Nguyen u32 trk_read_dqs_width; 2013da42859SDinh Nguyen u32 trk_rfsh; 2023da42859SDinh Nguyen }; 2033da42859SDinh Nguyen 2043da42859SDinh Nguyen /* parameter variable holder */ 2053da42859SDinh Nguyen struct param_type { 206f085ac3bSMarek Vasut u32 read_correct_mask; 207f085ac3bSMarek Vasut u32 read_correct_mask_vg; 208f085ac3bSMarek Vasut u32 write_correct_mask; 209f085ac3bSMarek Vasut u32 write_correct_mask_vg; 2103da42859SDinh Nguyen }; 2113da42859SDinh Nguyen 2123da42859SDinh Nguyen 2133da42859SDinh Nguyen /* global variable holder */ 2143da42859SDinh Nguyen struct gbl_type { 2153da42859SDinh Nguyen uint32_t phy_debug_mode_flags; 2163da42859SDinh Nguyen 2173da42859SDinh Nguyen /* current read latency */ 2183da42859SDinh Nguyen 2193da42859SDinh Nguyen uint32_t curr_read_lat; 2203da42859SDinh Nguyen 2213da42859SDinh Nguyen /* error code */ 2223da42859SDinh Nguyen 2233da42859SDinh Nguyen uint32_t error_substage; 2243da42859SDinh Nguyen uint32_t error_stage; 2253da42859SDinh Nguyen uint32_t error_group; 2263da42859SDinh Nguyen 2273da42859SDinh Nguyen /* figure-of-merit in, figure-of-merit out */ 2283da42859SDinh Nguyen 2293da42859SDinh Nguyen uint32_t fom_in; 2303da42859SDinh Nguyen uint32_t fom_out; 2313da42859SDinh Nguyen 2323da42859SDinh Nguyen /*USER Number of RW Mgr NOP cycles between 2333da42859SDinh Nguyen write command and write data */ 2343da42859SDinh Nguyen uint32_t rw_wl_nop_cycles; 2353da42859SDinh Nguyen }; 2363da42859SDinh Nguyen 2373da42859SDinh Nguyen struct socfpga_sdr_scc_mgr { 2383da42859SDinh Nguyen u32 dqs_ena; 2393da42859SDinh Nguyen u32 dqs_io_ena; 2403da42859SDinh Nguyen u32 dq_ena; 2413da42859SDinh Nguyen u32 dm_ena; 2423da42859SDinh Nguyen u32 __padding1[4]; 2433da42859SDinh Nguyen u32 update; 2443da42859SDinh Nguyen u32 __padding2[7]; 2453da42859SDinh Nguyen u32 active_rank; 2463da42859SDinh Nguyen }; 2473da42859SDinh Nguyen 2483da42859SDinh Nguyen /* PHY manager configuration registers. */ 2493da42859SDinh Nguyen struct socfpga_phy_mgr_cfg { 2503da42859SDinh Nguyen u32 phy_rlat; 2513da42859SDinh Nguyen u32 reset_mem_stbl; 2523da42859SDinh Nguyen u32 mux_sel; 2533da42859SDinh Nguyen u32 cal_status; 2543da42859SDinh Nguyen u32 cal_debug_info; 2553da42859SDinh Nguyen u32 vfifo_rd_en_ovrd; 2563da42859SDinh Nguyen u32 afi_wlat; 2573da42859SDinh Nguyen u32 afi_rlat; 2583da42859SDinh Nguyen }; 2593da42859SDinh Nguyen 2603da42859SDinh Nguyen /* PHY manager command addresses. */ 2613da42859SDinh Nguyen struct socfpga_phy_mgr_cmd { 2623da42859SDinh Nguyen u32 inc_vfifo_fr; 2633da42859SDinh Nguyen u32 inc_vfifo_hard_phy; 2643da42859SDinh Nguyen u32 fifo_reset; 2653da42859SDinh Nguyen u32 inc_vfifo_fr_hr; 2663da42859SDinh Nguyen u32 inc_vfifo_qr; 2673da42859SDinh Nguyen }; 2683da42859SDinh Nguyen 2693da42859SDinh Nguyen struct socfpga_data_mgr { 2703da42859SDinh Nguyen u32 __padding1; 2713da42859SDinh Nguyen u32 t_wl_add; 2723da42859SDinh Nguyen u32 mem_t_add; 2733da42859SDinh Nguyen u32 t_rl_add; 2743da42859SDinh Nguyen }; 2753da42859SDinh Nguyen #endif /* _SEQUENCER_H_ */ 276