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 103da42859SDinh Nguyen #define RW_MGR_NUM_DM_PER_WRITE_GROUP (RW_MGR_MEM_DATA_MASK_WIDTH \ 113da42859SDinh Nguyen / RW_MGR_MEM_IF_WRITE_DQS_WIDTH) 123da42859SDinh Nguyen #define RW_MGR_NUM_TRUE_DM_PER_WRITE_GROUP (RW_MGR_TRUE_MEM_DATA_MASK_WIDTH \ 133da42859SDinh Nguyen / RW_MGR_MEM_IF_WRITE_DQS_WIDTH) 143da42859SDinh Nguyen 153da42859SDinh Nguyen #define RW_MGR_NUM_DQS_PER_WRITE_GROUP (RW_MGR_MEM_IF_READ_DQS_WIDTH \ 163da42859SDinh Nguyen / RW_MGR_MEM_IF_WRITE_DQS_WIDTH) 173da42859SDinh Nguyen #define NUM_RANKS_PER_SHADOW_REG (RW_MGR_MEM_NUMBER_OF_RANKS / NUM_SHADOW_REGS) 183da42859SDinh Nguyen 19*c4815f76SMarek Vasut #define RW_MGR_RUN_SINGLE_GROUP_OFFSET 0x0 20*c4815f76SMarek Vasut #define RW_MGR_RUN_ALL_GROUPS_OFFSET 0x0400 21*c4815f76SMarek Vasut #define RW_MGR_RESET_READ_DATAPATH_OFFSET 0x1000 22*c4815f76SMarek Vasut #define RW_MGR_SET_CS_AND_ODT_MASK_OFFSET 0x1400 23*c4815f76SMarek Vasut #define RW_MGR_INST_ROM_WRITE_OFFSET 0x1800 24*c4815f76SMarek Vasut #define RW_MGR_AC_ROM_WRITE_OFFSET 0x1C00 253da42859SDinh Nguyen 263da42859SDinh Nguyen #define RW_MGR_MEM_NUMBER_OF_RANKS 1 273da42859SDinh Nguyen #define NUM_SHADOW_REGS 1 283da42859SDinh Nguyen 293da42859SDinh Nguyen #define RW_MGR_RANK_NONE 0xFF 303da42859SDinh Nguyen #define RW_MGR_RANK_ALL 0x00 313da42859SDinh Nguyen 323da42859SDinh Nguyen #define RW_MGR_ODT_MODE_OFF 0 333da42859SDinh Nguyen #define RW_MGR_ODT_MODE_READ_WRITE 1 343da42859SDinh Nguyen 353da42859SDinh Nguyen #define NUM_CALIB_REPEAT 1 363da42859SDinh Nguyen 373da42859SDinh Nguyen #define NUM_READ_TESTS 7 383da42859SDinh Nguyen #define NUM_READ_PB_TESTS 7 393da42859SDinh Nguyen #define NUM_WRITE_TESTS 15 403da42859SDinh Nguyen #define NUM_WRITE_PB_TESTS 31 413da42859SDinh Nguyen 423da42859SDinh Nguyen #define PASS_ALL_BITS 1 433da42859SDinh Nguyen #define PASS_ONE_BIT 0 443da42859SDinh Nguyen 453da42859SDinh Nguyen /* calibration stages */ 463da42859SDinh Nguyen #define CAL_STAGE_NIL 0 473da42859SDinh Nguyen #define CAL_STAGE_VFIFO 1 483da42859SDinh Nguyen #define CAL_STAGE_WLEVEL 2 493da42859SDinh Nguyen #define CAL_STAGE_LFIFO 3 503da42859SDinh Nguyen #define CAL_STAGE_WRITES 4 513da42859SDinh Nguyen #define CAL_STAGE_FULLTEST 5 523da42859SDinh Nguyen #define CAL_STAGE_REFRESH 6 533da42859SDinh Nguyen #define CAL_STAGE_CAL_SKIPPED 7 543da42859SDinh Nguyen #define CAL_STAGE_CAL_ABORTED 8 553da42859SDinh Nguyen #define CAL_STAGE_VFIFO_AFTER_WRITES 9 563da42859SDinh Nguyen 573da42859SDinh Nguyen /* calibration substages */ 583da42859SDinh Nguyen #define CAL_SUBSTAGE_NIL 0 593da42859SDinh Nguyen #define CAL_SUBSTAGE_GUARANTEED_READ 1 603da42859SDinh Nguyen #define CAL_SUBSTAGE_DQS_EN_PHASE 2 613da42859SDinh Nguyen #define CAL_SUBSTAGE_VFIFO_CENTER 3 623da42859SDinh Nguyen #define CAL_SUBSTAGE_WORKING_DELAY 1 633da42859SDinh Nguyen #define CAL_SUBSTAGE_LAST_WORKING_DELAY 2 643da42859SDinh Nguyen #define CAL_SUBSTAGE_WLEVEL_COPY 3 653da42859SDinh Nguyen #define CAL_SUBSTAGE_WRITES_CENTER 1 663da42859SDinh Nguyen #define CAL_SUBSTAGE_READ_LATENCY 1 673da42859SDinh Nguyen #define CAL_SUBSTAGE_REFRESH 1 683da42859SDinh Nguyen 693da42859SDinh Nguyen #define MAX_RANKS (RW_MGR_MEM_NUMBER_OF_RANKS) 703da42859SDinh Nguyen #define MAX_DQS (RW_MGR_MEM_IF_WRITE_DQS_WIDTH > \ 713da42859SDinh Nguyen RW_MGR_MEM_IF_READ_DQS_WIDTH ? \ 723da42859SDinh Nguyen RW_MGR_MEM_IF_WRITE_DQS_WIDTH : \ 733da42859SDinh Nguyen RW_MGR_MEM_IF_READ_DQS_WIDTH) 743da42859SDinh Nguyen #define MAX_DQ (RW_MGR_MEM_DATA_WIDTH) 753da42859SDinh Nguyen #define MAX_DM (RW_MGR_MEM_DATA_MASK_WIDTH) 763da42859SDinh Nguyen 773da42859SDinh Nguyen /* length of VFIFO, from SW_MACROS */ 783da42859SDinh Nguyen #define VFIFO_SIZE (READ_VALID_FIFO_SIZE) 793da42859SDinh Nguyen 80*c4815f76SMarek Vasut #define SCC_MGR_GROUP_COUNTER_OFFSET 0x0000 81*c4815f76SMarek Vasut #define SCC_MGR_DQS_IN_DELAY_OFFSET 0x0100 82*c4815f76SMarek Vasut #define SCC_MGR_DQS_EN_PHASE_OFFSET 0x0200 83*c4815f76SMarek Vasut #define SCC_MGR_DQS_EN_DELAY_OFFSET 0x0300 84*c4815f76SMarek Vasut #define SCC_MGR_DQDQS_OUT_PHASE_OFFSET 0x0400 85*c4815f76SMarek Vasut #define SCC_MGR_OCT_OUT1_DELAY_OFFSET 0x0500 86*c4815f76SMarek Vasut #define SCC_MGR_IO_OUT1_DELAY_OFFSET 0x0700 87*c4815f76SMarek Vasut #define SCC_MGR_IO_IN_DELAY_OFFSET 0x0900 883da42859SDinh Nguyen 893da42859SDinh Nguyen /* HHP-HPS-specific versions of some commands */ 90*c4815f76SMarek Vasut #define SCC_MGR_DQS_EN_DELAY_GATE_OFFSET 0x0600 91*c4815f76SMarek Vasut #define SCC_MGR_IO_OE_DELAY_OFFSET 0x0800 92*c4815f76SMarek Vasut #define SCC_MGR_HHP_GLOBALS_OFFSET 0x0A00 93*c4815f76SMarek Vasut #define SCC_MGR_HHP_RFILE_OFFSET 0x0B00 94*c4815f76SMarek Vasut #define SCC_MGR_AFI_CAL_INIT_OFFSET 0x0D00 953da42859SDinh Nguyen 963da42859SDinh Nguyen #define SDR_PHYGRP_SCCGRP_ADDRESS 0x0 973da42859SDinh Nguyen #define SDR_PHYGRP_PHYMGRGRP_ADDRESS 0x1000 983da42859SDinh Nguyen #define SDR_PHYGRP_RWMGRGRP_ADDRESS 0x2000 993da42859SDinh Nguyen #define SDR_PHYGRP_DATAMGRGRP_ADDRESS 0x4000 1003da42859SDinh Nguyen #define SDR_PHYGRP_REGFILEGRP_ADDRESS 0x4800 1013da42859SDinh Nguyen 1023da42859SDinh Nguyen #define SDR_CTRLGRP_PHYCTRL_PHYCTRL_0_OFFSET 0x150 1033da42859SDinh Nguyen #define SDR_CTRLGRP_PHYCTRL_PHYCTRL_1_OFFSET 0x154 1043da42859SDinh Nguyen #define SDR_CTRLGRP_PHYCTRL_PHYCTRL_2_OFFSET 0x158 1053da42859SDinh Nguyen 1063da42859SDinh Nguyen #define PHY_MGR_CAL_RESET (0) 1073da42859SDinh Nguyen #define PHY_MGR_CAL_SUCCESS (1) 1083da42859SDinh Nguyen #define PHY_MGR_CAL_FAIL (2) 1093da42859SDinh Nguyen 1103da42859SDinh Nguyen #define CALIB_SKIP_DELAY_LOOPS (1 << 0) 1113da42859SDinh Nguyen #define CALIB_SKIP_ALL_BITS_CHK (1 << 1) 1123da42859SDinh Nguyen #define CALIB_SKIP_DELAY_SWEEPS (1 << 2) 1133da42859SDinh Nguyen #define CALIB_SKIP_VFIFO (1 << 3) 1143da42859SDinh Nguyen #define CALIB_SKIP_LFIFO (1 << 4) 1153da42859SDinh Nguyen #define CALIB_SKIP_WLEVEL (1 << 5) 1163da42859SDinh Nguyen #define CALIB_SKIP_WRITES (1 << 6) 1173da42859SDinh Nguyen #define CALIB_SKIP_FULL_TEST (1 << 7) 1183da42859SDinh Nguyen #define CALIB_SKIP_ALL (CALIB_SKIP_VFIFO | \ 1193da42859SDinh Nguyen CALIB_SKIP_LFIFO | CALIB_SKIP_WLEVEL | \ 1203da42859SDinh Nguyen CALIB_SKIP_WRITES | CALIB_SKIP_FULL_TEST) 1213da42859SDinh Nguyen #define CALIB_IN_RTL_SIM (1 << 8) 1223da42859SDinh Nguyen 1233da42859SDinh Nguyen /* Scan chain manager command addresses */ 1243da42859SDinh Nguyen #define READ_SCC_OCT_OUT2_DELAY 0 1253da42859SDinh Nguyen #define READ_SCC_DQ_OUT2_DELAY 0 1263da42859SDinh Nguyen #define READ_SCC_DQS_IO_OUT2_DELAY 0 1273da42859SDinh Nguyen #define READ_SCC_DM_IO_OUT2_DELAY 0 1283da42859SDinh Nguyen 1293da42859SDinh Nguyen /* HHP-HPS-specific values */ 1303da42859SDinh Nguyen #define SCC_MGR_HHP_EXTRAS_OFFSET 0 1313da42859SDinh Nguyen #define SCC_MGR_HHP_DQSE_MAP_OFFSET 1 1323da42859SDinh Nguyen 1333da42859SDinh Nguyen /* PHY Debug mode flag constants */ 1343da42859SDinh Nguyen #define PHY_DEBUG_IN_DEBUG_MODE 0x00000001 1353da42859SDinh Nguyen #define PHY_DEBUG_ENABLE_CAL_RPT 0x00000002 1363da42859SDinh Nguyen #define PHY_DEBUG_ENABLE_MARGIN_RPT 0x00000004 1373da42859SDinh Nguyen #define PHY_DEBUG_SWEEP_ALL_GROUPS 0x00000008 1383da42859SDinh Nguyen #define PHY_DEBUG_DISABLE_GUARANTEED_READ 0x00000010 1393da42859SDinh Nguyen #define PHY_DEBUG_ENABLE_NON_DESTRUCTIVE_CALIBRATION 0x00000020 1403da42859SDinh Nguyen 1413da42859SDinh Nguyen /* Init and Reset delay constants - Only use if defined by sequencer_defines.h, 1423da42859SDinh Nguyen * otherwise, revert to defaults 1433da42859SDinh Nguyen * Default for Tinit = (0+1) * ((202+1) * (2 * 131 + 1) + 1) = 53532 = 1443da42859SDinh Nguyen * 200.75us @ 266MHz 1453da42859SDinh Nguyen */ 1463da42859SDinh Nguyen #ifdef TINIT_CNTR0_VAL 1473da42859SDinh Nguyen #define SEQ_TINIT_CNTR0_VAL TINIT_CNTR0_VAL 1483da42859SDinh Nguyen #else 1493da42859SDinh Nguyen #define SEQ_TINIT_CNTR0_VAL 0 1503da42859SDinh Nguyen #endif 1513da42859SDinh Nguyen 1523da42859SDinh Nguyen #ifdef TINIT_CNTR1_VAL 1533da42859SDinh Nguyen #define SEQ_TINIT_CNTR1_VAL TINIT_CNTR1_VAL 1543da42859SDinh Nguyen #else 1553da42859SDinh Nguyen #define SEQ_TINIT_CNTR1_VAL 202 1563da42859SDinh Nguyen #endif 1573da42859SDinh Nguyen 1583da42859SDinh Nguyen #ifdef TINIT_CNTR2_VAL 1593da42859SDinh Nguyen #define SEQ_TINIT_CNTR2_VAL TINIT_CNTR2_VAL 1603da42859SDinh Nguyen #else 1613da42859SDinh Nguyen #define SEQ_TINIT_CNTR2_VAL 131 1623da42859SDinh Nguyen #endif 1633da42859SDinh Nguyen 1643da42859SDinh Nguyen 1653da42859SDinh Nguyen /* Default for Treset = (2+1) * ((252+1) * (2 * 131 + 1) + 1) = 133563 = 1663da42859SDinh Nguyen * 500.86us @ 266MHz 1673da42859SDinh Nguyen */ 1683da42859SDinh Nguyen #ifdef TRESET_CNTR0_VAL 1693da42859SDinh Nguyen #define SEQ_TRESET_CNTR0_VAL TRESET_CNTR0_VAL 1703da42859SDinh Nguyen #else 1713da42859SDinh Nguyen #define SEQ_TRESET_CNTR0_VAL 2 1723da42859SDinh Nguyen #endif 1733da42859SDinh Nguyen 1743da42859SDinh Nguyen #ifdef TRESET_CNTR1_VAL 1753da42859SDinh Nguyen #define SEQ_TRESET_CNTR1_VAL TRESET_CNTR1_VAL 1763da42859SDinh Nguyen #else 1773da42859SDinh Nguyen #define SEQ_TRESET_CNTR1_VAL 252 1783da42859SDinh Nguyen #endif 1793da42859SDinh Nguyen 1803da42859SDinh Nguyen #ifdef TRESET_CNTR2_VAL 1813da42859SDinh Nguyen #define SEQ_TRESET_CNTR2_VAL TRESET_CNTR2_VAL 1823da42859SDinh Nguyen #else 1833da42859SDinh Nguyen #define SEQ_TRESET_CNTR2_VAL 131 1843da42859SDinh Nguyen #endif 1853da42859SDinh Nguyen 1863da42859SDinh Nguyen struct socfpga_sdr_rw_load_manager { 1873da42859SDinh Nguyen u32 load_cntr0; 1883da42859SDinh Nguyen u32 load_cntr1; 1893da42859SDinh Nguyen u32 load_cntr2; 1903da42859SDinh Nguyen u32 load_cntr3; 1913da42859SDinh Nguyen }; 1923da42859SDinh Nguyen 1933da42859SDinh Nguyen struct socfpga_sdr_rw_load_jump_manager { 1943da42859SDinh Nguyen u32 load_jump_add0; 1953da42859SDinh Nguyen u32 load_jump_add1; 1963da42859SDinh Nguyen u32 load_jump_add2; 1973da42859SDinh Nguyen u32 load_jump_add3; 1983da42859SDinh Nguyen }; 1993da42859SDinh Nguyen 2003da42859SDinh Nguyen struct socfpga_sdr_reg_file { 2013da42859SDinh Nguyen u32 signature; 2023da42859SDinh Nguyen u32 debug_data_addr; 2033da42859SDinh Nguyen u32 cur_stage; 2043da42859SDinh Nguyen u32 fom; 2053da42859SDinh Nguyen u32 failing_stage; 2063da42859SDinh Nguyen u32 debug1; 2073da42859SDinh Nguyen u32 debug2; 2083da42859SDinh Nguyen u32 dtaps_per_ptap; 2093da42859SDinh Nguyen u32 trk_sample_count; 2103da42859SDinh Nguyen u32 trk_longidle; 2113da42859SDinh Nguyen u32 delays; 2123da42859SDinh Nguyen u32 trk_rw_mgr_addr; 2133da42859SDinh Nguyen u32 trk_read_dqs_width; 2143da42859SDinh Nguyen u32 trk_rfsh; 2153da42859SDinh Nguyen }; 2163da42859SDinh Nguyen 2173da42859SDinh Nguyen /* parameter variable holder */ 2183da42859SDinh Nguyen struct param_type { 2193da42859SDinh Nguyen uint32_t dm_correct_mask; 2203da42859SDinh Nguyen uint32_t read_correct_mask; 2213da42859SDinh Nguyen uint32_t read_correct_mask_vg; 2223da42859SDinh Nguyen uint32_t write_correct_mask; 2233da42859SDinh Nguyen uint32_t write_correct_mask_vg; 2243da42859SDinh Nguyen 2253da42859SDinh Nguyen /* set a particular entry to 1 if we need to skip a particular rank */ 2263da42859SDinh Nguyen 2273da42859SDinh Nguyen uint32_t skip_ranks[MAX_RANKS]; 2283da42859SDinh Nguyen 2293da42859SDinh Nguyen /* set a particular entry to 1 if we need to skip a particular group */ 2303da42859SDinh Nguyen 2313da42859SDinh Nguyen uint32_t skip_groups; 2323da42859SDinh Nguyen 2333da42859SDinh Nguyen /* set a particular entry to 1 if the shadow register 2343da42859SDinh Nguyen (which represents a set of ranks) needs to be skipped */ 2353da42859SDinh Nguyen 2363da42859SDinh Nguyen uint32_t skip_shadow_regs[NUM_SHADOW_REGS]; 2373da42859SDinh Nguyen 2383da42859SDinh Nguyen }; 2393da42859SDinh Nguyen 2403da42859SDinh Nguyen 2413da42859SDinh Nguyen /* global variable holder */ 2423da42859SDinh Nguyen struct gbl_type { 2433da42859SDinh Nguyen uint32_t phy_debug_mode_flags; 2443da42859SDinh Nguyen 2453da42859SDinh Nguyen /* current read latency */ 2463da42859SDinh Nguyen 2473da42859SDinh Nguyen uint32_t curr_read_lat; 2483da42859SDinh Nguyen 2493da42859SDinh Nguyen /* current write latency */ 2503da42859SDinh Nguyen 2513da42859SDinh Nguyen uint32_t curr_write_lat; 2523da42859SDinh Nguyen 2533da42859SDinh Nguyen /* error code */ 2543da42859SDinh Nguyen 2553da42859SDinh Nguyen uint32_t error_substage; 2563da42859SDinh Nguyen uint32_t error_stage; 2573da42859SDinh Nguyen uint32_t error_group; 2583da42859SDinh Nguyen 2593da42859SDinh Nguyen /* figure-of-merit in, figure-of-merit out */ 2603da42859SDinh Nguyen 2613da42859SDinh Nguyen uint32_t fom_in; 2623da42859SDinh Nguyen uint32_t fom_out; 2633da42859SDinh Nguyen 2643da42859SDinh Nguyen /*USER Number of RW Mgr NOP cycles between 2653da42859SDinh Nguyen write command and write data */ 2663da42859SDinh Nguyen uint32_t rw_wl_nop_cycles; 2673da42859SDinh Nguyen }; 2683da42859SDinh Nguyen 2693da42859SDinh Nguyen struct socfpga_sdr_scc_mgr { 2703da42859SDinh Nguyen u32 dqs_ena; 2713da42859SDinh Nguyen u32 dqs_io_ena; 2723da42859SDinh Nguyen u32 dq_ena; 2733da42859SDinh Nguyen u32 dm_ena; 2743da42859SDinh Nguyen u32 __padding1[4]; 2753da42859SDinh Nguyen u32 update; 2763da42859SDinh Nguyen u32 __padding2[7]; 2773da42859SDinh Nguyen u32 active_rank; 2783da42859SDinh Nguyen }; 2793da42859SDinh Nguyen 2803da42859SDinh Nguyen /* PHY manager configuration registers. */ 2813da42859SDinh Nguyen struct socfpga_phy_mgr_cfg { 2823da42859SDinh Nguyen u32 phy_rlat; 2833da42859SDinh Nguyen u32 reset_mem_stbl; 2843da42859SDinh Nguyen u32 mux_sel; 2853da42859SDinh Nguyen u32 cal_status; 2863da42859SDinh Nguyen u32 cal_debug_info; 2873da42859SDinh Nguyen u32 vfifo_rd_en_ovrd; 2883da42859SDinh Nguyen u32 afi_wlat; 2893da42859SDinh Nguyen u32 afi_rlat; 2903da42859SDinh Nguyen }; 2913da42859SDinh Nguyen 2923da42859SDinh Nguyen /* PHY manager command addresses. */ 2933da42859SDinh Nguyen struct socfpga_phy_mgr_cmd { 2943da42859SDinh Nguyen u32 inc_vfifo_fr; 2953da42859SDinh Nguyen u32 inc_vfifo_hard_phy; 2963da42859SDinh Nguyen u32 fifo_reset; 2973da42859SDinh Nguyen u32 inc_vfifo_fr_hr; 2983da42859SDinh Nguyen u32 inc_vfifo_qr; 2993da42859SDinh Nguyen }; 3003da42859SDinh Nguyen 3013da42859SDinh Nguyen struct socfpga_data_mgr { 3023da42859SDinh Nguyen u32 __padding1; 3033da42859SDinh Nguyen u32 t_wl_add; 3043da42859SDinh Nguyen u32 mem_t_add; 3053da42859SDinh Nguyen u32 t_rl_add; 3063da42859SDinh Nguyen }; 3073da42859SDinh Nguyen #endif /* _SEQUENCER_H_ */ 308