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 68c4815f76SMarek Vasut #define SCC_MGR_GROUP_COUNTER_OFFSET 0x0000 69c4815f76SMarek Vasut #define SCC_MGR_DQS_IN_DELAY_OFFSET 0x0100 70c4815f76SMarek Vasut #define SCC_MGR_DQS_EN_PHASE_OFFSET 0x0200 71c4815f76SMarek Vasut #define SCC_MGR_DQS_EN_DELAY_OFFSET 0x0300 72c4815f76SMarek Vasut #define SCC_MGR_DQDQS_OUT_PHASE_OFFSET 0x0400 73c4815f76SMarek Vasut #define SCC_MGR_OCT_OUT1_DELAY_OFFSET 0x0500 74c4815f76SMarek Vasut #define SCC_MGR_IO_OUT1_DELAY_OFFSET 0x0700 75c4815f76SMarek Vasut #define SCC_MGR_IO_IN_DELAY_OFFSET 0x0900 763da42859SDinh Nguyen 773da42859SDinh Nguyen /* HHP-HPS-specific versions of some commands */ 78c4815f76SMarek Vasut #define SCC_MGR_DQS_EN_DELAY_GATE_OFFSET 0x0600 79c4815f76SMarek Vasut #define SCC_MGR_IO_OE_DELAY_OFFSET 0x0800 80c4815f76SMarek Vasut #define SCC_MGR_HHP_GLOBALS_OFFSET 0x0A00 81c4815f76SMarek Vasut #define SCC_MGR_HHP_RFILE_OFFSET 0x0B00 82c4815f76SMarek Vasut #define SCC_MGR_AFI_CAL_INIT_OFFSET 0x0D00 833da42859SDinh Nguyen 8417fdc916SMarek Vasut #define SDR_PHYGRP_SCCGRP_ADDRESS (SOCFPGA_SDR_ADDRESS | 0x0) 8517fdc916SMarek Vasut #define SDR_PHYGRP_PHYMGRGRP_ADDRESS (SOCFPGA_SDR_ADDRESS | 0x1000) 8617fdc916SMarek Vasut #define SDR_PHYGRP_RWMGRGRP_ADDRESS (SOCFPGA_SDR_ADDRESS | 0x2000) 8717fdc916SMarek Vasut #define SDR_PHYGRP_DATAMGRGRP_ADDRESS (SOCFPGA_SDR_ADDRESS | 0x4000) 8817fdc916SMarek Vasut #define SDR_PHYGRP_REGFILEGRP_ADDRESS (SOCFPGA_SDR_ADDRESS | 0x4800) 893da42859SDinh Nguyen 903da42859SDinh Nguyen #define PHY_MGR_CAL_RESET (0) 913da42859SDinh Nguyen #define PHY_MGR_CAL_SUCCESS (1) 923da42859SDinh Nguyen #define PHY_MGR_CAL_FAIL (2) 933da42859SDinh Nguyen 943da42859SDinh Nguyen #define CALIB_SKIP_DELAY_LOOPS (1 << 0) 953da42859SDinh Nguyen #define CALIB_SKIP_ALL_BITS_CHK (1 << 1) 963da42859SDinh Nguyen #define CALIB_SKIP_DELAY_SWEEPS (1 << 2) 973da42859SDinh Nguyen #define CALIB_SKIP_VFIFO (1 << 3) 983da42859SDinh Nguyen #define CALIB_SKIP_LFIFO (1 << 4) 993da42859SDinh Nguyen #define CALIB_SKIP_WLEVEL (1 << 5) 1003da42859SDinh Nguyen #define CALIB_SKIP_WRITES (1 << 6) 1013da42859SDinh Nguyen #define CALIB_SKIP_FULL_TEST (1 << 7) 1023da42859SDinh Nguyen #define CALIB_SKIP_ALL (CALIB_SKIP_VFIFO | \ 1033da42859SDinh Nguyen CALIB_SKIP_LFIFO | CALIB_SKIP_WLEVEL | \ 1043da42859SDinh Nguyen CALIB_SKIP_WRITES | CALIB_SKIP_FULL_TEST) 1053da42859SDinh Nguyen #define CALIB_IN_RTL_SIM (1 << 8) 1063da42859SDinh Nguyen 1073da42859SDinh Nguyen /* Scan chain manager command addresses */ 1083da42859SDinh Nguyen #define READ_SCC_OCT_OUT2_DELAY 0 1093da42859SDinh Nguyen #define READ_SCC_DQ_OUT2_DELAY 0 1103da42859SDinh Nguyen #define READ_SCC_DQS_IO_OUT2_DELAY 0 1113da42859SDinh Nguyen #define READ_SCC_DM_IO_OUT2_DELAY 0 1123da42859SDinh Nguyen 1133da42859SDinh Nguyen /* HHP-HPS-specific values */ 1143da42859SDinh Nguyen #define SCC_MGR_HHP_EXTRAS_OFFSET 0 1153da42859SDinh Nguyen #define SCC_MGR_HHP_DQSE_MAP_OFFSET 1 1163da42859SDinh Nguyen 1173da42859SDinh Nguyen /* PHY Debug mode flag constants */ 1183da42859SDinh Nguyen #define PHY_DEBUG_IN_DEBUG_MODE 0x00000001 1193da42859SDinh Nguyen #define PHY_DEBUG_ENABLE_CAL_RPT 0x00000002 1203da42859SDinh Nguyen #define PHY_DEBUG_ENABLE_MARGIN_RPT 0x00000004 1213da42859SDinh Nguyen #define PHY_DEBUG_SWEEP_ALL_GROUPS 0x00000008 1223da42859SDinh Nguyen #define PHY_DEBUG_DISABLE_GUARANTEED_READ 0x00000010 1233da42859SDinh Nguyen #define PHY_DEBUG_ENABLE_NON_DESTRUCTIVE_CALIBRATION 0x00000020 1243da42859SDinh Nguyen 1253da42859SDinh Nguyen struct socfpga_sdr_rw_load_manager { 1263da42859SDinh Nguyen u32 load_cntr0; 1273da42859SDinh Nguyen u32 load_cntr1; 1283da42859SDinh Nguyen u32 load_cntr2; 1293da42859SDinh Nguyen u32 load_cntr3; 1303da42859SDinh Nguyen }; 1313da42859SDinh Nguyen 1323da42859SDinh Nguyen struct socfpga_sdr_rw_load_jump_manager { 1333da42859SDinh Nguyen u32 load_jump_add0; 1343da42859SDinh Nguyen u32 load_jump_add1; 1353da42859SDinh Nguyen u32 load_jump_add2; 1363da42859SDinh Nguyen u32 load_jump_add3; 1373da42859SDinh Nguyen }; 1383da42859SDinh Nguyen 1393da42859SDinh Nguyen struct socfpga_sdr_reg_file { 1403da42859SDinh Nguyen u32 signature; 1413da42859SDinh Nguyen u32 debug_data_addr; 1423da42859SDinh Nguyen u32 cur_stage; 1433da42859SDinh Nguyen u32 fom; 1443da42859SDinh Nguyen u32 failing_stage; 1453da42859SDinh Nguyen u32 debug1; 1463da42859SDinh Nguyen u32 debug2; 1473da42859SDinh Nguyen u32 dtaps_per_ptap; 1483da42859SDinh Nguyen u32 trk_sample_count; 1493da42859SDinh Nguyen u32 trk_longidle; 1503da42859SDinh Nguyen u32 delays; 1513da42859SDinh Nguyen u32 trk_rw_mgr_addr; 1523da42859SDinh Nguyen u32 trk_read_dqs_width; 1533da42859SDinh Nguyen u32 trk_rfsh; 1543da42859SDinh Nguyen }; 1553da42859SDinh Nguyen 1563da42859SDinh Nguyen /* parameter variable holder */ 1573da42859SDinh Nguyen struct param_type { 158f085ac3bSMarek Vasut u32 read_correct_mask; 159f085ac3bSMarek Vasut u32 read_correct_mask_vg; 160f085ac3bSMarek Vasut u32 write_correct_mask; 161f085ac3bSMarek Vasut u32 write_correct_mask_vg; 1623da42859SDinh Nguyen }; 1633da42859SDinh Nguyen 1643da42859SDinh Nguyen 1653da42859SDinh Nguyen /* global variable holder */ 1663da42859SDinh Nguyen struct gbl_type { 1673da42859SDinh Nguyen uint32_t phy_debug_mode_flags; 1683da42859SDinh Nguyen 1693da42859SDinh Nguyen /* current read latency */ 1703da42859SDinh Nguyen 1713da42859SDinh Nguyen uint32_t curr_read_lat; 1723da42859SDinh Nguyen 1733da42859SDinh Nguyen /* error code */ 1743da42859SDinh Nguyen 1753da42859SDinh Nguyen uint32_t error_substage; 1763da42859SDinh Nguyen uint32_t error_stage; 1773da42859SDinh Nguyen uint32_t error_group; 1783da42859SDinh Nguyen 1793da42859SDinh Nguyen /* figure-of-merit in, figure-of-merit out */ 1803da42859SDinh Nguyen 1813da42859SDinh Nguyen uint32_t fom_in; 1823da42859SDinh Nguyen uint32_t fom_out; 1833da42859SDinh Nguyen 1843da42859SDinh Nguyen /*USER Number of RW Mgr NOP cycles between 1853da42859SDinh Nguyen write command and write data */ 1863da42859SDinh Nguyen uint32_t rw_wl_nop_cycles; 1873da42859SDinh Nguyen }; 1883da42859SDinh Nguyen 1893da42859SDinh Nguyen struct socfpga_sdr_scc_mgr { 1903da42859SDinh Nguyen u32 dqs_ena; 1913da42859SDinh Nguyen u32 dqs_io_ena; 1923da42859SDinh Nguyen u32 dq_ena; 1933da42859SDinh Nguyen u32 dm_ena; 1943da42859SDinh Nguyen u32 __padding1[4]; 1953da42859SDinh Nguyen u32 update; 1963da42859SDinh Nguyen u32 __padding2[7]; 1973da42859SDinh Nguyen u32 active_rank; 1983da42859SDinh Nguyen }; 1993da42859SDinh Nguyen 2003da42859SDinh Nguyen /* PHY manager configuration registers. */ 2013da42859SDinh Nguyen struct socfpga_phy_mgr_cfg { 2023da42859SDinh Nguyen u32 phy_rlat; 2033da42859SDinh Nguyen u32 reset_mem_stbl; 2043da42859SDinh Nguyen u32 mux_sel; 2053da42859SDinh Nguyen u32 cal_status; 2063da42859SDinh Nguyen u32 cal_debug_info; 2073da42859SDinh Nguyen u32 vfifo_rd_en_ovrd; 2083da42859SDinh Nguyen u32 afi_wlat; 2093da42859SDinh Nguyen u32 afi_rlat; 2103da42859SDinh Nguyen }; 2113da42859SDinh Nguyen 2123da42859SDinh Nguyen /* PHY manager command addresses. */ 2133da42859SDinh Nguyen struct socfpga_phy_mgr_cmd { 2143da42859SDinh Nguyen u32 inc_vfifo_fr; 2153da42859SDinh Nguyen u32 inc_vfifo_hard_phy; 2163da42859SDinh Nguyen u32 fifo_reset; 2173da42859SDinh Nguyen u32 inc_vfifo_fr_hr; 2183da42859SDinh Nguyen u32 inc_vfifo_qr; 2193da42859SDinh Nguyen }; 2203da42859SDinh Nguyen 2213da42859SDinh Nguyen struct socfpga_data_mgr { 2223da42859SDinh Nguyen u32 __padding1; 2233da42859SDinh Nguyen u32 t_wl_add; 2243da42859SDinh Nguyen u32 mem_t_add; 2253da42859SDinh Nguyen u32 t_rl_add; 2263da42859SDinh Nguyen }; 2273da42859SDinh Nguyen #endif /* _SEQUENCER_H_ */ 228