xref: /rk3399_rockchip-uboot/drivers/ddr/marvell/a38x/ddr3_training_ip_flow.h (revision 3c9cc70d7153da442575112d9a2643eecd17d534)
1*f1df9364SStefan Roese /*
2*f1df9364SStefan Roese  * Copyright (C) Marvell International Ltd. and its affiliates
3*f1df9364SStefan Roese  *
4*f1df9364SStefan Roese  * SPDX-License-Identifier:	GPL-2.0
5*f1df9364SStefan Roese  */
6*f1df9364SStefan Roese 
7*f1df9364SStefan Roese #ifndef _DDR3_TRAINING_IP_FLOW_H_
8*f1df9364SStefan Roese #define _DDR3_TRAINING_IP_FLOW_H_
9*f1df9364SStefan Roese 
10*f1df9364SStefan Roese #include "ddr3_training_ip.h"
11*f1df9364SStefan Roese #include "ddr3_training_ip_pbs.h"
12*f1df9364SStefan Roese 
13*f1df9364SStefan Roese #define MRS0_CMD			0x3
14*f1df9364SStefan Roese #define MRS1_CMD			0x4
15*f1df9364SStefan Roese #define MRS2_CMD			0x8
16*f1df9364SStefan Roese #define MRS3_CMD			0x9
17*f1df9364SStefan Roese 
18*f1df9364SStefan Roese /*
19*f1df9364SStefan Roese  * Definitions of INTERFACE registers
20*f1df9364SStefan Roese  */
21*f1df9364SStefan Roese 
22*f1df9364SStefan Roese #define READ_BUFFER_SELECT		0x14a4
23*f1df9364SStefan Roese 
24*f1df9364SStefan Roese /*
25*f1df9364SStefan Roese  * Definitions of PHY registers
26*f1df9364SStefan Roese  */
27*f1df9364SStefan Roese 
28*f1df9364SStefan Roese #define KILLER_PATTERN_LENGTH		32
29*f1df9364SStefan Roese #define EXT_ACCESS_BURST_LENGTH		8
30*f1df9364SStefan Roese 
31*f1df9364SStefan Roese #define IS_ACTIVE(if_mask , if_id) \
32*f1df9364SStefan Roese 	((if_mask) & (1 << (if_id)))
33*f1df9364SStefan Roese #define VALIDATE_ACTIVE(mask, id)		\
34*f1df9364SStefan Roese 	{					\
35*f1df9364SStefan Roese 	if (IS_ACTIVE(mask, id) == 0)		\
36*f1df9364SStefan Roese 		continue;			\
37*f1df9364SStefan Roese 	}
38*f1df9364SStefan Roese 
39*f1df9364SStefan Roese #define GET_TOPOLOGY_NUM_OF_BUSES() \
40*f1df9364SStefan Roese 	(ddr3_get_topology_map()->num_of_bus_per_interface)
41*f1df9364SStefan Roese 
42*f1df9364SStefan Roese #define DDR3_IS_ECC_PUP3_MODE(if_mask) \
43*f1df9364SStefan Roese 	(((if_mask) == 0xb) ? 1 : 0)
44*f1df9364SStefan Roese #define DDR3_IS_ECC_PUP4_MODE(if_mask) \
45*f1df9364SStefan Roese 	(((((if_mask) & 0x10) == 0)) ? 0 : 1)
46*f1df9364SStefan Roese #define DDR3_IS_16BIT_DRAM_MODE(mask) \
47*f1df9364SStefan Roese 	(((((mask) & 0x4) == 0)) ? 1 : 0)
48*f1df9364SStefan Roese 
49*f1df9364SStefan Roese #define MEGA				1000000
50*f1df9364SStefan Roese #define BUS_WIDTH_IN_BITS		8
51*f1df9364SStefan Roese 
52*f1df9364SStefan Roese /*
53*f1df9364SStefan Roese  * DFX address Space
54*f1df9364SStefan Roese  * Table 2: DFX address space
55*f1df9364SStefan Roese  * Address Bits   Value   Description
56*f1df9364SStefan Roese  * [31 : 20]   0x? DFX base address bases PCIe mapping
57*f1df9364SStefan Roese  * [19 : 15]   0...Number_of_client-1   Client Index inside pipe.
58*f1df9364SStefan Roese  *             See also Table 1 Multi_cast = 29 Broadcast = 28
59*f1df9364SStefan Roese  * [14 : 13]   2'b01   Access to Client Internal Register
60*f1df9364SStefan Roese  * [12 : 0]   Client Internal Register offset   See related Client Registers
61*f1df9364SStefan Roese  * [14 : 13]   2'b00   Access to Ram Wrappers Internal Register
62*f1df9364SStefan Roese  * [12 : 6]   0 Number_of_rams-1   Ram Index inside Client
63*f1df9364SStefan Roese  * [5 : 0]   Ram Wrapper Internal Register offset   See related Ram Wrappers
64*f1df9364SStefan Roese  * Registers
65*f1df9364SStefan Roese  */
66*f1df9364SStefan Roese 
67*f1df9364SStefan Roese /* nsec */
68*f1df9364SStefan Roese #define  TREFI_LOW				7800
69*f1df9364SStefan Roese #define  TREFI_HIGH				3900
70*f1df9364SStefan Roese 
71*f1df9364SStefan Roese #define  TR2R_VALUE_REG				0x180
72*f1df9364SStefan Roese #define  TR2R_MASK_REG				0x180
73*f1df9364SStefan Roese #define  TRFC_MASK_REG				0x7f
74*f1df9364SStefan Roese #define  TR2W_MASK_REG				0x600
75*f1df9364SStefan Roese #define  TW2W_HIGH_VALUE_REG			0x1800
76*f1df9364SStefan Roese #define  TW2W_HIGH_MASK_REG			0xf800
77*f1df9364SStefan Roese #define  TRFC_HIGH_VALUE_REG			0x20000
78*f1df9364SStefan Roese #define  TRFC_HIGH_MASK_REG			0x70000
79*f1df9364SStefan Roese #define  TR2R_HIGH_VALUE_REG			0x0
80*f1df9364SStefan Roese #define  TR2R_HIGH_MASK_REG			0x380000
81*f1df9364SStefan Roese #define  TMOD_VALUE_REG				0x16000000
82*f1df9364SStefan Roese #define  TMOD_MASK_REG				0x1e000000
83*f1df9364SStefan Roese #define  T_VALUE_REG				0x40000000
84*f1df9364SStefan Roese #define  T_MASK_REG				0xc0000000
85*f1df9364SStefan Roese #define  AUTO_ZQC_TIMING			15384
86*f1df9364SStefan Roese #define  WRITE_XBAR_PORT1			0xc03f8077
87*f1df9364SStefan Roese #define  READ_XBAR_PORT1			0xc03f8073
88*f1df9364SStefan Roese #define  DISABLE_DDR_TUNING_DATA		0x02294285
89*f1df9364SStefan Roese #define  ENABLE_DDR_TUNING_DATA			0x12294285
90*f1df9364SStefan Roese 
91*f1df9364SStefan Roese #define ODPG_TRAINING_STATUS_REG		0x18488
92*f1df9364SStefan Roese #define ODPG_TRAINING_TRIGGER_REG		0x1030
93*f1df9364SStefan Roese #define ODPG_STATUS_DONE_REG			0x16fc
94*f1df9364SStefan Roese #define ODPG_ENABLE_REG				0x186d4
95*f1df9364SStefan Roese #define ODPG_ENABLE_OFFS			0
96*f1df9364SStefan Roese #define ODPG_DISABLE_OFFS			8
97*f1df9364SStefan Roese 
98*f1df9364SStefan Roese #define ODPG_TRAINING_CONTROL_REG		0x1034
99*f1df9364SStefan Roese #define ODPG_OBJ1_OPCODE_REG			0x103c
100*f1df9364SStefan Roese #define ODPG_OBJ1_ITER_CNT_REG			0x10b4
101*f1df9364SStefan Roese #define CALIB_OBJ_PRFA_REG			0x10c4
102*f1df9364SStefan Roese #define ODPG_WRITE_LEVELING_DONE_CNTR_REG	0x10f8
103*f1df9364SStefan Roese #define ODPG_WRITE_READ_MODE_ENABLE_REG		0x10fc
104*f1df9364SStefan Roese #define TRAINING_OPCODE_1_REG			0x10b4
105*f1df9364SStefan Roese #define SDRAM_CONFIGURATION_REG			0x1400
106*f1df9364SStefan Roese #define DDR_CONTROL_LOW_REG			0x1404
107*f1df9364SStefan Roese #define SDRAM_TIMING_LOW_REG			0x1408
108*f1df9364SStefan Roese #define SDRAM_TIMING_HIGH_REG			0x140c
109*f1df9364SStefan Roese #define SDRAM_ACCESS_CONTROL_REG		0x1410
110*f1df9364SStefan Roese #define SDRAM_OPEN_PAGE_CONTROL_REG		0x1414
111*f1df9364SStefan Roese #define SDRAM_OPERATION_REG			0x1418
112*f1df9364SStefan Roese #define DUNIT_CONTROL_HIGH_REG			0x1424
113*f1df9364SStefan Roese #define ODT_TIMING_LOW				0x1428
114*f1df9364SStefan Roese #define DDR_TIMING_REG				0x142c
115*f1df9364SStefan Roese #define ODT_TIMING_HI_REG			0x147c
116*f1df9364SStefan Roese #define SDRAM_INIT_CONTROL_REG			0x1480
117*f1df9364SStefan Roese #define SDRAM_ODT_CONTROL_HIGH_REG		0x1498
118*f1df9364SStefan Roese #define DUNIT_ODT_CONTROL_REG			0x149c
119*f1df9364SStefan Roese #define READ_BUFFER_SELECT_REG			0x14a4
120*f1df9364SStefan Roese #define DUNIT_MMASK_REG				0x14b0
121*f1df9364SStefan Roese #define CALIB_MACHINE_CTRL_REG			0x14cc
122*f1df9364SStefan Roese #define DRAM_DLL_TIMING_REG			0x14e0
123*f1df9364SStefan Roese #define DRAM_ZQ_INIT_TIMIMG_REG			0x14e4
124*f1df9364SStefan Roese #define DRAM_ZQ_TIMING_REG			0x14e8
125*f1df9364SStefan Roese #define DFS_REG					0x1528
126*f1df9364SStefan Roese #define READ_DATA_SAMPLE_DELAY			0x1538
127*f1df9364SStefan Roese #define READ_DATA_READY_DELAY			0x153c
128*f1df9364SStefan Roese #define TRAINING_REG				0x15b0
129*f1df9364SStefan Roese #define TRAINING_SW_1_REG			0x15b4
130*f1df9364SStefan Roese #define TRAINING_SW_2_REG			0x15b8
131*f1df9364SStefan Roese #define TRAINING_PATTERN_BASE_ADDRESS_REG	0x15bc
132*f1df9364SStefan Roese #define TRAINING_DBG_1_REG			0x15c0
133*f1df9364SStefan Roese #define TRAINING_DBG_2_REG			0x15c4
134*f1df9364SStefan Roese #define TRAINING_DBG_3_REG			0x15c8
135*f1df9364SStefan Roese #define RANK_CTRL_REG				0x15e0
136*f1df9364SStefan Roese #define TIMING_REG				0x15e4
137*f1df9364SStefan Roese #define DRAM_PHY_CONFIGURATION			0x15ec
138*f1df9364SStefan Roese #define MR0_REG					0x15d0
139*f1df9364SStefan Roese #define MR1_REG					0x15d4
140*f1df9364SStefan Roese #define MR2_REG					0x15d8
141*f1df9364SStefan Roese #define MR3_REG					0x15dc
142*f1df9364SStefan Roese #define TIMING_REG				0x15e4
143*f1df9364SStefan Roese #define ODPG_CTRL_CONTROL_REG			0x1600
144*f1df9364SStefan Roese #define ODPG_DATA_CONTROL_REG			0x1630
145*f1df9364SStefan Roese #define ODPG_PATTERN_ADDR_OFFSET_REG		0x1638
146*f1df9364SStefan Roese #define ODPG_DATA_BUF_SIZE_REG			0x163c
147*f1df9364SStefan Roese #define PHY_LOCK_STATUS_REG			0x1674
148*f1df9364SStefan Roese #define PHY_REG_FILE_ACCESS			0x16a0
149*f1df9364SStefan Roese #define TRAINING_WRITE_LEVELING_REG		0x16ac
150*f1df9364SStefan Roese #define ODPG_PATTERN_ADDR_REG			0x16b0
151*f1df9364SStefan Roese #define ODPG_PATTERN_DATA_HI_REG		0x16b4
152*f1df9364SStefan Roese #define ODPG_PATTERN_DATA_LOW_REG		0x16b8
153*f1df9364SStefan Roese #define ODPG_BIST_LAST_FAIL_ADDR_REG		0x16bc
154*f1df9364SStefan Roese #define ODPG_BIST_DATA_ERROR_COUNTER_REG	0x16c0
155*f1df9364SStefan Roese #define ODPG_BIST_FAILED_DATA_HI_REG		0x16c4
156*f1df9364SStefan Roese #define ODPG_BIST_FAILED_DATA_LOW_REG		0x16c8
157*f1df9364SStefan Roese #define ODPG_WRITE_DATA_ERROR_REG		0x16cc
158*f1df9364SStefan Roese #define CS_ENABLE_REG				0x16d8
159*f1df9364SStefan Roese #define WR_LEVELING_DQS_PATTERN_REG		0x16dc
160*f1df9364SStefan Roese 
161*f1df9364SStefan Roese #define ODPG_BIST_DONE				0x186d4
162*f1df9364SStefan Roese #define ODPG_BIST_DONE_BIT_OFFS			0
163*f1df9364SStefan Roese #define ODPG_BIST_DONE_BIT_VALUE		0
164*f1df9364SStefan Roese 
165*f1df9364SStefan Roese #define RESULT_CONTROL_BYTE_PUP_0_REG		0x1830
166*f1df9364SStefan Roese #define RESULT_CONTROL_BYTE_PUP_1_REG		0x1834
167*f1df9364SStefan Roese #define RESULT_CONTROL_BYTE_PUP_2_REG		0x1838
168*f1df9364SStefan Roese #define RESULT_CONTROL_BYTE_PUP_3_REG		0x183c
169*f1df9364SStefan Roese #define RESULT_CONTROL_BYTE_PUP_4_REG		0x18b0
170*f1df9364SStefan Roese 
171*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_0_BIT_0_REG		0x18b4
172*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_0_BIT_1_REG		0x18b8
173*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_0_BIT_2_REG		0x18bc
174*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_0_BIT_3_REG		0x18c0
175*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_0_BIT_4_REG		0x18c4
176*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_0_BIT_5_REG		0x18c8
177*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_0_BIT_6_REG		0x18cc
178*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_0_BIT_7_REG		0x18f0
179*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_1_BIT_0_REG		0x18f4
180*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_1_BIT_1_REG		0x18f8
181*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_1_BIT_2_REG		0x18fc
182*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_1_BIT_3_REG		0x1930
183*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_1_BIT_4_REG		0x1934
184*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_1_BIT_5_REG		0x1938
185*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_1_BIT_6_REG		0x193c
186*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_1_BIT_7_REG		0x19b0
187*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_2_BIT_0_REG		0x19b4
188*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_2_BIT_1_REG		0x19b8
189*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_2_BIT_2_REG		0x19bc
190*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_2_BIT_3_REG		0x19c0
191*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_2_BIT_4_REG		0x19c4
192*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_2_BIT_5_REG		0x19c8
193*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_2_BIT_6_REG		0x19cc
194*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_2_BIT_7_REG		0x19f0
195*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_3_BIT_0_REG		0x19f4
196*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_3_BIT_1_REG		0x19f8
197*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_3_BIT_2_REG		0x19fc
198*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_3_BIT_3_REG		0x1a30
199*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_3_BIT_4_REG		0x1a34
200*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_3_BIT_5_REG		0x1a38
201*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_3_BIT_6_REG		0x1a3c
202*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_3_BIT_7_REG		0x1ab0
203*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_4_BIT_0_REG		0x1ab4
204*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_4_BIT_1_REG		0x1ab8
205*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_4_BIT_2_REG		0x1abc
206*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_4_BIT_3_REG		0x1ac0
207*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_4_BIT_4_REG		0x1ac4
208*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_4_BIT_5_REG		0x1ac8
209*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_4_BIT_6_REG		0x1acc
210*f1df9364SStefan Roese #define RESULT_CONTROL_PUP_4_BIT_7_REG		0x1af0
211*f1df9364SStefan Roese 
212*f1df9364SStefan Roese #define WL_PHY_REG				0x0
213*f1df9364SStefan Roese #define WRITE_CENTRALIZATION_PHY_REG		0x1
214*f1df9364SStefan Roese #define RL_PHY_REG				0x2
215*f1df9364SStefan Roese #define READ_CENTRALIZATION_PHY_REG		0x3
216*f1df9364SStefan Roese #define PBS_RX_PHY_REG				0x50
217*f1df9364SStefan Roese #define PBS_TX_PHY_REG				0x10
218*f1df9364SStefan Roese #define PHY_CONTROL_PHY_REG			0x90
219*f1df9364SStefan Roese #define BW_PHY_REG				0x92
220*f1df9364SStefan Roese #define RATE_PHY_REG				0x94
221*f1df9364SStefan Roese #define CMOS_CONFIG_PHY_REG			0xa2
222*f1df9364SStefan Roese #define PAD_ZRI_CALIB_PHY_REG			0xa4
223*f1df9364SStefan Roese #define PAD_ODT_CALIB_PHY_REG			0xa6
224*f1df9364SStefan Roese #define PAD_CONFIG_PHY_REG			0xa8
225*f1df9364SStefan Roese #define PAD_PRE_DISABLE_PHY_REG			0xa9
226*f1df9364SStefan Roese #define TEST_ADLL_REG				0xbf
227*f1df9364SStefan Roese #define CSN_IOB_VREF_REG(cs)			(0xdb + (cs * 12))
228*f1df9364SStefan Roese #define CSN_IO_BASE_VREF_REG(cs)		(0xd0 + (cs * 12))
229*f1df9364SStefan Roese 
230*f1df9364SStefan Roese #define RESULT_DB_PHY_REG_ADDR			0xc0
231*f1df9364SStefan Roese #define RESULT_DB_PHY_REG_RX_OFFSET		5
232*f1df9364SStefan Roese #define RESULT_DB_PHY_REG_TX_OFFSET		0
233*f1df9364SStefan Roese 
234*f1df9364SStefan Roese /* TBD - for NP5 use only CS 0 */
235*f1df9364SStefan Roese #define PHY_WRITE_DELAY(cs)			WL_PHY_REG
236*f1df9364SStefan Roese /*( ( _cs_ == 0 ) ? 0x0 : 0x4 )*/
237*f1df9364SStefan Roese /* TBD - for NP5 use only CS 0 */
238*f1df9364SStefan Roese #define PHY_READ_DELAY(cs)			RL_PHY_REG
239*f1df9364SStefan Roese 
240*f1df9364SStefan Roese #define DDR0_ADDR_1				0xf8258
241*f1df9364SStefan Roese #define DDR0_ADDR_2				0xf8254
242*f1df9364SStefan Roese #define DDR1_ADDR_1				0xf8270
243*f1df9364SStefan Roese #define DDR1_ADDR_2				0xf8270
244*f1df9364SStefan Roese #define DDR2_ADDR_1				0xf825c
245*f1df9364SStefan Roese #define DDR2_ADDR_2				0xf825c
246*f1df9364SStefan Roese #define DDR3_ADDR_1				0xf8264
247*f1df9364SStefan Roese #define DDR3_ADDR_2				0xf8260
248*f1df9364SStefan Roese #define DDR4_ADDR_1				0xf8274
249*f1df9364SStefan Roese #define DDR4_ADDR_2				0xf8274
250*f1df9364SStefan Roese 
251*f1df9364SStefan Roese #define GENERAL_PURPOSE_RESERVED0_REG		0x182e0
252*f1df9364SStefan Roese 
253*f1df9364SStefan Roese #define GET_BLOCK_ID_MAX_FREQ(dev_num, block_id)	800000
254*f1df9364SStefan Roese #define CS0_RD_LVL_REF_DLY_OFFS			0
255*f1df9364SStefan Roese #define CS0_RD_LVL_REF_DLY_LEN			0
256*f1df9364SStefan Roese #define CS0_RD_LVL_PH_SEL_OFFS			0
257*f1df9364SStefan Roese #define CS0_RD_LVL_PH_SEL_LEN			0
258*f1df9364SStefan Roese 
259*f1df9364SStefan Roese #define CS_REGISTER_ADDR_OFFSET			4
260*f1df9364SStefan Roese #define CALIBRATED_OBJECTS_REG_ADDR_OFFSET	0x10
261*f1df9364SStefan Roese 
262*f1df9364SStefan Roese #define MAX_POLLING_ITERATIONS			100000
263*f1df9364SStefan Roese 
264*f1df9364SStefan Roese #define PHASE_REG_OFFSET			32
265*f1df9364SStefan Roese #define NUM_BYTES_IN_BURST			31
266*f1df9364SStefan Roese #define NUM_OF_CS				4
267*f1df9364SStefan Roese #define CS_REG_VALUE(cs_num)			(cs_mask_reg[cs_num])
268*f1df9364SStefan Roese #define ADLL_LENGTH				32
269*f1df9364SStefan Roese 
270*f1df9364SStefan Roese struct write_supp_result {
271*f1df9364SStefan Roese 	enum hws_wl_supp stage;
272*f1df9364SStefan Roese 	int is_pup_fail;
273*f1df9364SStefan Roese };
274*f1df9364SStefan Roese 
275*f1df9364SStefan Roese struct page_element {
276*f1df9364SStefan Roese 	enum hws_page_size page_size_8bit;
277*f1df9364SStefan Roese 	/* page size in 8 bits bus width */
278*f1df9364SStefan Roese 	enum hws_page_size page_size_16bit;
279*f1df9364SStefan Roese 	/* page size in 16 bits bus width */
280*f1df9364SStefan Roese 	u32 ui_page_mask;
281*f1df9364SStefan Roese 	/* Mask used in register */
282*f1df9364SStefan Roese };
283*f1df9364SStefan Roese 
284*f1df9364SStefan Roese int ddr3_tip_write_leveling_static_config(u32 dev_num, u32 if_id,
285*f1df9364SStefan Roese 					  enum hws_ddr_freq frequency,
286*f1df9364SStefan Roese 					  u32 *round_trip_delay_arr);
287*f1df9364SStefan Roese int ddr3_tip_read_leveling_static_config(u32 dev_num, u32 if_id,
288*f1df9364SStefan Roese 					 enum hws_ddr_freq frequency,
289*f1df9364SStefan Roese 					 u32 *total_round_trip_delay_arr);
290*f1df9364SStefan Roese int ddr3_tip_if_write(u32 dev_num, enum hws_access_type interface_access,
291*f1df9364SStefan Roese 		      u32 if_id, u32 reg_addr, u32 data_value, u32 mask);
292*f1df9364SStefan Roese int ddr3_tip_if_polling(u32 dev_num, enum hws_access_type access_type,
293*f1df9364SStefan Roese 			u32 if_id, u32 exp_value, u32 mask, u32 offset,
294*f1df9364SStefan Roese 			u32 poll_tries);
295*f1df9364SStefan Roese int ddr3_tip_if_read(u32 dev_num, enum hws_access_type interface_access,
296*f1df9364SStefan Roese 		     u32 if_id, u32 reg_addr, u32 *data, u32 mask);
297*f1df9364SStefan Roese int ddr3_tip_bus_read_modify_write(u32 dev_num,
298*f1df9364SStefan Roese 				   enum hws_access_type access_type,
299*f1df9364SStefan Roese 				   u32 if_id, u32 phy_id,
300*f1df9364SStefan Roese 				   enum hws_ddr_phy phy_type,
301*f1df9364SStefan Roese 				   u32 reg_addr, u32 data_value, u32 reg_mask);
302*f1df9364SStefan Roese int ddr3_tip_bus_read(u32 dev_num, u32 if_id, enum hws_access_type phy_access,
303*f1df9364SStefan Roese 		      u32 phy_id, enum hws_ddr_phy phy_type, u32 reg_addr,
304*f1df9364SStefan Roese 		      u32 *data);
305*f1df9364SStefan Roese int ddr3_tip_bus_write(u32 dev_num, enum hws_access_type e_interface_access,
306*f1df9364SStefan Roese 		       u32 if_id, enum hws_access_type e_phy_access, u32 phy_id,
307*f1df9364SStefan Roese 		       enum hws_ddr_phy e_phy_type, u32 reg_addr,
308*f1df9364SStefan Roese 		       u32 data_value);
309*f1df9364SStefan Roese int ddr3_tip_freq_set(u32 dev_num, enum hws_access_type e_access, u32 if_id,
310*f1df9364SStefan Roese 		      enum hws_ddr_freq memory_freq);
311*f1df9364SStefan Roese int ddr3_tip_adjust_dqs(u32 dev_num);
312*f1df9364SStefan Roese int ddr3_tip_init_controller(u32 dev_num);
313*f1df9364SStefan Roese int ddr3_tip_ext_read(u32 dev_num, u32 if_id, u32 reg_addr,
314*f1df9364SStefan Roese 		      u32 num_of_bursts, u32 *addr);
315*f1df9364SStefan Roese int ddr3_tip_ext_write(u32 dev_num, u32 if_id, u32 reg_addr,
316*f1df9364SStefan Roese 		       u32 num_of_bursts, u32 *addr);
317*f1df9364SStefan Roese int ddr3_tip_dynamic_read_leveling(u32 dev_num, u32 ui_freq);
318*f1df9364SStefan Roese int ddr3_tip_legacy_dynamic_read_leveling(u32 dev_num);
319*f1df9364SStefan Roese int ddr3_tip_dynamic_per_bit_read_leveling(u32 dev_num, u32 ui_freq);
320*f1df9364SStefan Roese int ddr3_tip_legacy_dynamic_write_leveling(u32 dev_num);
321*f1df9364SStefan Roese int ddr3_tip_dynamic_write_leveling(u32 dev_num);
322*f1df9364SStefan Roese int ddr3_tip_dynamic_write_leveling_supp(u32 dev_num);
323*f1df9364SStefan Roese int ddr3_tip_static_init_controller(u32 dev_num);
324*f1df9364SStefan Roese int ddr3_tip_configure_phy(u32 dev_num);
325*f1df9364SStefan Roese int ddr3_tip_load_pattern_to_odpg(u32 dev_num, enum hws_access_type access_type,
326*f1df9364SStefan Roese 				  u32 if_id, enum hws_pattern pattern,
327*f1df9364SStefan Roese 				  u32 load_addr);
328*f1df9364SStefan Roese int ddr3_tip_load_pattern_to_mem(u32 dev_num, enum hws_pattern e_pattern);
329*f1df9364SStefan Roese int ddr3_tip_configure_odpg(u32 dev_num, enum hws_access_type access_type,
330*f1df9364SStefan Roese 			    u32 if_id, enum hws_dir direction, u32 tx_phases,
331*f1df9364SStefan Roese 			    u32 tx_burst_size, u32 rx_phases,
332*f1df9364SStefan Roese 			    u32 delay_between_burst, u32 rd_mode, u32 cs_num,
333*f1df9364SStefan Roese 			    u32 addr_stress_jump, u32 single_pattern);
334*f1df9364SStefan Roese int ddr3_tip_set_atr(u32 dev_num, u32 flag_id, u32 value);
335*f1df9364SStefan Roese int ddr3_tip_write_mrs_cmd(u32 dev_num, u32 *cs_mask_arr, u32 cmd, u32 data,
336*f1df9364SStefan Roese 			   u32 mask);
337*f1df9364SStefan Roese int ddr3_tip_write_cs_result(u32 dev_num, u32 offset);
338*f1df9364SStefan Roese int ddr3_tip_get_first_active_if(u8 dev_num, u32 interface_mask, u32 *if_id);
339*f1df9364SStefan Roese int ddr3_tip_reset_fifo_ptr(u32 dev_num);
340*f1df9364SStefan Roese int read_pup_value(int pup_values[MAX_INTERFACE_NUM * MAX_BUS_NUM],
341*f1df9364SStefan Roese 		   int reg_addr, u32 mask);
342*f1df9364SStefan Roese int read_adll_value(u32 pup_values[MAX_INTERFACE_NUM * MAX_BUS_NUM],
343*f1df9364SStefan Roese 		    int reg_addr, u32 mask);
344*f1df9364SStefan Roese int write_adll_value(u32 pup_values[MAX_INTERFACE_NUM * MAX_BUS_NUM],
345*f1df9364SStefan Roese 		     int reg_addr);
346*f1df9364SStefan Roese int ddr3_tip_tune_training_params(u32 dev_num,
347*f1df9364SStefan Roese 				  struct tune_train_params *params);
348*f1df9364SStefan Roese 
349*f1df9364SStefan Roese #endif /* _DDR3_TRAINING_IP_FLOW_H_ */
350