1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) Marvell International Ltd. and its affiliates
9 #include <asm/arch/cpu.h>
10 #include <asm/arch/soc.h>
12 #include "ddr3_init.h"
14 #define WL_ITERATION_NUM 10
15 #define ONE_CLOCK_ERROR_SHIFT 2
16 #define ALIGN_ERROR_SHIFT -2
18 static u32 pup_mask_table
[] = {
25 static struct write_supp_result wr_supp_res
[MAX_INTERFACE_NUM
][MAX_BUS_NUM
];
27 static int ddr3_tip_dynamic_write_leveling_seq(u32 dev_num
);
28 static int ddr3_tip_dynamic_read_leveling_seq(u32 dev_num
);
29 static int ddr3_tip_dynamic_per_bit_read_leveling_seq(u32 dev_num
);
30 static int ddr3_tip_wl_supp_align_err_shift(u32 dev_num
, u32 if_id
, u32 bus_id
,
32 static int ddr3_tip_wl_supp_align_phase_shift(u32 dev_num
, u32 if_id
,
33 u32 bus_id
, u32 offset
,
35 static int ddr3_tip_xsb_compare_test(u32 dev_num
, u32 if_id
, u32 bus_id
,
36 u32 edge_offset
, u32 bus_id_delta
);
37 static int ddr3_tip_wl_supp_one_clk_err_shift(u32 dev_num
, u32 if_id
,
38 u32 bus_id
, u32 bus_id_delta
);
40 u32
hws_ddr3_tip_max_cs_get(void)
44 struct hws_topology_map
*tm
= ddr3_get_topology_map();
47 for (c_cs
= 0; c_cs
< NUM_OF_CS
; c_cs
++) {
49 interface_params
[0].as_bus_params
[0].
58 /*****************************************************************************
60 ******************************************************************************/
61 int ddr3_tip_dynamic_read_leveling(u32 dev_num
, u32 freq
)
64 u32 max_cs
= hws_ddr3_tip_max_cs_get();
65 u32 bus_num
, if_id
, cl_val
;
66 enum hws_speed_bin speed_bin_index
;
67 /* save current CS value */
68 u32 cs_enable_reg_val
[MAX_INTERFACE_NUM
] = { 0 };
69 int is_any_pup_fail
= 0;
70 u32 data_read
[MAX_INTERFACE_NUM
+ 1] = { 0 };
71 u8 rl_values
[NUM_OF_CS
][MAX_BUS_NUM
][MAX_INTERFACE_NUM
];
72 struct pattern_info
*pattern_table
= ddr3_tip_get_pattern_table();
73 u16
*mask_results_pup_reg_map
= ddr3_tip_get_mask_results_pup_reg_map();
74 struct hws_topology_map
*tm
= ddr3_get_topology_map();
76 if (rl_version
== 0) {
82 CHECK_STATUS(ddr3_tip_if_write(
83 dev_num
, ACCESS_TYPE_MULTICAST
,
84 PARAM_NOT_CARE
, TRAINING_REG
,
86 CHECK_STATUS(ddr3_tip_if_write(
87 dev_num
, ACCESS_TYPE_MULTICAST
,
89 TRAINING_PATTERN_BASE_ADDRESS_REG
,
91 CHECK_STATUS(ddr3_tip_if_write(
92 dev_num
, ACCESS_TYPE_MULTICAST
,
93 PARAM_NOT_CARE
, TRAINING_REG
,
94 (u32
)(1 << 31), (u32
)(1 << 31)));
96 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
97 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
98 training_result
[training_stage
][if_id
] = TEST_SUCCESS
;
99 if (ddr3_tip_if_polling
100 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
, 0,
101 (u32
)(1 << 31), TRAINING_REG
,
102 MAX_POLLING_ITERATIONS
) != MV_OK
) {
105 ("RL: DDR3 poll failed(1) IF %d\n",
107 training_result
[training_stage
][if_id
] =
115 /* read read-leveling result */
116 CHECK_STATUS(ddr3_tip_if_read
117 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
118 TRAINING_REG
, data_read
, 1 << 30));
119 /* exit read leveling mode */
120 CHECK_STATUS(ddr3_tip_if_write
121 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
122 TRAINING_SW_2_REG
, 0x8, 0x9));
123 CHECK_STATUS(ddr3_tip_if_write
124 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
125 TRAINING_SW_1_REG
, 1 << 16, 1 << 16));
127 /* disable RL machine all Trn_CS[3:0] , [16:0] */
129 CHECK_STATUS(ddr3_tip_if_write
130 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
131 TRAINING_REG
, 0, 0xf1ffff));
133 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
134 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
135 if ((data_read
[if_id
] & (1 << 30)) == 0) {
138 ("\n_read Leveling failed for IF %d\n",
140 training_result
[training_stage
][if_id
] =
150 for (effective_cs
= 0; effective_cs
< NUM_OF_CS
; effective_cs
++)
151 for (bus_num
= 0; bus_num
< MAX_BUS_NUM
; bus_num
++)
152 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++)
153 rl_values
[effective_cs
][bus_num
][if_id
] = 0;
155 for (effective_cs
= 0; effective_cs
< max_cs
; effective_cs
++) {
156 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
157 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
158 training_result
[training_stage
][if_id
] = TEST_SUCCESS
;
160 /* save current cs enable reg val */
161 CHECK_STATUS(ddr3_tip_if_read
162 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
163 CS_ENABLE_REG
, cs_enable_reg_val
,
165 /* enable single cs */
166 CHECK_STATUS(ddr3_tip_if_write
167 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
168 CS_ENABLE_REG
, (1 << 3), (1 << 3)));
171 ddr3_tip_reset_fifo_ptr(dev_num
);
174 * Phase 1: Load pattern (using ODPG)
176 * enter Read Leveling mode
177 * only 27 bits are masked
178 * assuming non multi-CS configuration
179 * write to CS = 0 for the non multi CS configuration, note
180 * that the results shall be read back to the required CS !!!
183 /* BUS count is 0 shifted 26 */
184 CHECK_STATUS(ddr3_tip_if_write
185 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
186 ODPG_DATA_CONTROL_REG
, 0x3, 0x3));
187 CHECK_STATUS(ddr3_tip_configure_odpg
188 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
, 0,
189 pattern_table
[PATTERN_RL
].num_of_phases_tx
, 0,
190 pattern_table
[PATTERN_RL
].num_of_phases_rx
, 0, 0,
191 effective_cs
, STRESS_NONE
, DURATION_SINGLE
));
193 /* load pattern to ODPG */
194 ddr3_tip_load_pattern_to_odpg(dev_num
, ACCESS_TYPE_MULTICAST
,
195 PARAM_NOT_CARE
, PATTERN_RL
,
196 pattern_table
[PATTERN_RL
].
200 * Phase 2: ODPG to Read Leveling mode
203 /* General Training Opcode register */
204 CHECK_STATUS(ddr3_tip_if_write
205 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
206 ODPG_WRITE_READ_MODE_ENABLE_REG
, 0,
209 CHECK_STATUS(ddr3_tip_if_write
210 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
211 ODPG_TRAINING_CONTROL_REG
,
212 (0x301b01 | effective_cs
<< 2), 0x3c3fef));
214 /* Object1 opcode register 0 & 1 */
215 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
216 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
218 tm
->interface_params
[if_id
].speed_bin_index
;
220 cas_latency_table
[speed_bin_index
].cl_val
[freq
];
221 data
= (cl_val
<< 17) | (0x3 << 25);
222 mask
= (0xff << 9) | (0x1f << 17) | (0x3 << 25);
223 CHECK_STATUS(ddr3_tip_if_write
224 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
225 ODPG_OBJ1_OPCODE_REG
, data
, mask
));
228 /* Set iteration count to max value */
229 CHECK_STATUS(ddr3_tip_if_write
230 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
231 TRAINING_OPCODE_1_REG
, 0xd00, 0xd00));
234 * Phase 2: Mask config
237 ddr3_tip_dynamic_read_leveling_seq(dev_num
);
240 * Phase 3: Read Leveling execution
243 /* temporary jira dunit=14751 */
244 CHECK_STATUS(ddr3_tip_if_write
245 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
246 TRAINING_DBG_1_REG
, 0, (u32
)(1 << 31)));
247 /* configure phy reset value */
248 CHECK_STATUS(ddr3_tip_if_write
249 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
250 TRAINING_DBG_3_REG
, (0x7f << 24),
252 /* data pup rd reset enable */
253 CHECK_STATUS(ddr3_tip_if_write
254 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
255 SDRAM_CONFIGURATION_REG
, 0, (1 << 30)));
256 /* data pup rd reset disable */
257 CHECK_STATUS(ddr3_tip_if_write
258 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
259 SDRAM_CONFIGURATION_REG
, (1 << 30), (1 << 30)));
260 /* training SW override & training RL mode */
261 CHECK_STATUS(ddr3_tip_if_write
262 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
263 TRAINING_SW_2_REG
, 0x1, 0x9));
264 /* training enable */
265 CHECK_STATUS(ddr3_tip_if_write
266 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
267 TRAINING_REG
, (1 << 24) | (1 << 20),
268 (1 << 24) | (1 << 20)));
269 CHECK_STATUS(ddr3_tip_if_write
270 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
271 TRAINING_REG
, (u32
)(1 << 31), (u32
)(1 << 31)));
273 /********* trigger training *******************/
274 /* Trigger, poll on status and disable ODPG */
275 CHECK_STATUS(ddr3_tip_if_write
276 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
277 ODPG_TRAINING_TRIGGER_REG
, 0x1, 0x1));
278 CHECK_STATUS(ddr3_tip_if_write
279 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
280 ODPG_TRAINING_STATUS_REG
, 0x1, 0x1));
282 /* check for training done + results pass */
283 if (ddr3_tip_if_polling
284 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
, 0x2, 0x2,
285 ODPG_TRAINING_STATUS_REG
,
286 MAX_POLLING_ITERATIONS
) != MV_OK
) {
287 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
288 ("Training Done Failed\n"));
292 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
293 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
294 CHECK_STATUS(ddr3_tip_if_read
295 (dev_num
, ACCESS_TYPE_UNICAST
,
297 ODPG_TRAINING_TRIGGER_REG
, data_read
,
299 data
= data_read
[if_id
];
301 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
302 ("Training Result Failed\n"));
306 /*disable ODPG - Back to functional mode */
307 CHECK_STATUS(ddr3_tip_if_write
308 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
309 ODPG_ENABLE_REG
, 0x1 << ODPG_DISABLE_OFFS
,
310 (0x1 << ODPG_DISABLE_OFFS
)));
311 if (ddr3_tip_if_polling
312 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
, 0x0, 0x1,
313 ODPG_ENABLE_REG
, MAX_POLLING_ITERATIONS
) != MV_OK
) {
314 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
315 ("ODPG disable failed "));
318 CHECK_STATUS(ddr3_tip_if_write
319 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
320 ODPG_DATA_CONTROL_REG
, 0, MASK_ALL_BITS
));
322 /* double loop on bus, pup */
323 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
324 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
325 /* check training done */
328 bus_num
< tm
->num_of_bus_per_interface
;
330 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_num
);
331 if (ddr3_tip_if_polling
332 (dev_num
, ACCESS_TYPE_UNICAST
,
333 if_id
, (1 << 25), (1 << 25),
334 mask_results_pup_reg_map
[bus_num
],
335 MAX_POLLING_ITERATIONS
) != MV_OK
) {
336 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
337 ("\n_r_l: DDR3 poll failed(2) for bus %d",
341 /* read result per pup */
342 CHECK_STATUS(ddr3_tip_if_read
346 mask_results_pup_reg_map
347 [bus_num
], data_read
,
349 rl_values
[effective_cs
][bus_num
]
350 [if_id
] = (u8
)data_read
[if_id
];
354 if (is_any_pup_fail
== 1) {
355 training_result
[training_stage
][if_id
] =
362 DEBUG_LEVELING(DEBUG_LEVEL_INFO
, ("RL exit read leveling\n"));
365 * Phase 3: Exit Read Leveling
368 CHECK_STATUS(ddr3_tip_if_write
369 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
370 TRAINING_SW_2_REG
, (1 << 3), (1 << 3)));
371 CHECK_STATUS(ddr3_tip_if_write
372 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
373 TRAINING_SW_1_REG
, (1 << 16), (1 << 16)));
374 /* set ODPG to functional */
375 CHECK_STATUS(ddr3_tip_if_write
376 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
377 ODPG_DATA_CONTROL_REG
, 0x0, MASK_ALL_BITS
));
380 * Copy the result from the effective CS search to the
383 /*ddr3_tip_write_cs_result(dev_num, RL_PHY_REG); */
384 CHECK_STATUS(ddr3_tip_if_write
385 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
386 ODPG_DATA_CONTROL_REG
, 0x0, MASK_ALL_BITS
));
389 for (effective_cs
= 0; effective_cs
< max_cs
; effective_cs
++) {
390 /* double loop on bus, pup */
391 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
392 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
394 bus_num
< tm
->num_of_bus_per_interface
;
396 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_num
);
397 /* read result per pup from arry */
398 data
= rl_values
[effective_cs
][bus_num
][if_id
];
399 data
= (data
& 0x1f) |
400 (((data
& 0xe0) >> 5) << 6);
401 ddr3_tip_bus_write(dev_num
,
405 bus_num
, DDR_PHY_DATA
,
408 0) ? 0x0 : 0x4), data
);
412 /* Set to 0 after each loop to avoid illegal value may be used */
415 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
416 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
417 /* restore cs enable value */
418 CHECK_STATUS(ddr3_tip_if_write
419 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
420 CS_ENABLE_REG
, cs_enable_reg_val
[if_id
],
422 if (odt_config
!= 0) {
423 CHECK_STATUS(ddr3_tip_write_additional_odt_setting
428 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
429 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
430 if (training_result
[training_stage
][if_id
] == TEST_FAILED
)
438 * Legacy Dynamic write leveling
440 int ddr3_tip_legacy_dynamic_write_leveling(u32 dev_num
)
442 u32 c_cs
, if_id
, cs_mask
= 0;
443 u32 max_cs
= hws_ddr3_tip_max_cs_get();
444 struct hws_topology_map
*tm
= ddr3_get_topology_map();
447 * In TRAINIUNG reg (0x15b0) write 0x80000008 | cs_mask:
449 * cs_mask = 0x1 <<20 Trn_CS0 - CS0 is included in the DDR3 training
450 * cs_mask = 0x1 <<21 Trn_CS1 - CS1 is included in the DDR3 training
451 * cs_mask = 0x1 <<22 Trn_CS2 - CS2 is included in the DDR3 training
452 * cs_mask = 0x1 <<23 Trn_CS3 - CS3 is included in the DDR3 training
453 * Trn_auto_seq = write leveling
455 for (c_cs
= 0; c_cs
< max_cs
; c_cs
++)
456 cs_mask
= cs_mask
| 1 << (20 + c_cs
);
458 for (if_id
= 0; if_id
< MAX_INTERFACE_NUM
; if_id
++) {
459 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
460 CHECK_STATUS(ddr3_tip_if_write
461 (dev_num
, ACCESS_TYPE_MULTICAST
, 0,
462 TRAINING_REG
, (0x80000008 | cs_mask
),
465 if (ddr3_tip_if_polling
466 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
, 0,
467 (u32
)0x80000000, TRAINING_REG
,
468 MAX_POLLING_ITERATIONS
) != MV_OK
) {
469 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
470 ("polling failed for Old WL result\n"));
479 * Legacy Dynamic read leveling
481 int ddr3_tip_legacy_dynamic_read_leveling(u32 dev_num
)
483 u32 c_cs
, if_id
, cs_mask
= 0;
484 u32 max_cs
= hws_ddr3_tip_max_cs_get();
485 struct hws_topology_map
*tm
= ddr3_get_topology_map();
488 * In TRAINIUNG reg (0x15b0) write 0x80000040 | cs_mask:
490 * cs_mask = 0x1 <<20 Trn_CS0 - CS0 is included in the DDR3 training
491 * cs_mask = 0x1 <<21 Trn_CS1 - CS1 is included in the DDR3 training
492 * cs_mask = 0x1 <<22 Trn_CS2 - CS2 is included in the DDR3 training
493 * cs_mask = 0x1 <<23 Trn_CS3 - CS3 is included in the DDR3 training
494 * Trn_auto_seq = Read Leveling using training pattern
496 for (c_cs
= 0; c_cs
< max_cs
; c_cs
++)
497 cs_mask
= cs_mask
| 1 << (20 + c_cs
);
499 CHECK_STATUS(ddr3_tip_if_write
500 (dev_num
, ACCESS_TYPE_MULTICAST
, 0, TRAINING_REG
,
501 (0x80000040 | cs_mask
), 0xffffffff));
504 for (if_id
= 0; if_id
< MAX_INTERFACE_NUM
; if_id
++) {
505 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
506 if (ddr3_tip_if_polling
507 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
, 0,
508 (u32
)0x80000000, TRAINING_REG
,
509 MAX_POLLING_ITERATIONS
) != MV_OK
) {
510 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
511 ("polling failed for Old RL result\n"));
520 * Dynamic per bit read leveling
522 int ddr3_tip_dynamic_per_bit_read_leveling(u32 dev_num
, u32 freq
)
525 u32 bus_num
, if_id
, cl_val
, bit_num
;
526 u32 curr_numb
, curr_min_delay
;
527 int adll_array
[3] = { 0, -0xa, 0x14 };
528 u32 phyreg3_arr
[MAX_INTERFACE_NUM
][MAX_BUS_NUM
];
529 enum hws_speed_bin speed_bin_index
;
530 int is_any_pup_fail
= 0;
532 u32 cs_enable_reg_val
[MAX_INTERFACE_NUM
]; /* save current CS value */
533 u32 data_read
[MAX_INTERFACE_NUM
];
534 int per_bit_rl_pup_status
[MAX_INTERFACE_NUM
][MAX_BUS_NUM
];
535 u32 data2_write
[MAX_INTERFACE_NUM
][MAX_BUS_NUM
];
536 struct pattern_info
*pattern_table
= ddr3_tip_get_pattern_table();
537 u16
*mask_results_dq_reg_map
= ddr3_tip_get_mask_results_dq_reg();
538 struct hws_topology_map
*tm
= ddr3_get_topology_map();
540 for (if_id
= 0; if_id
< MAX_INTERFACE_NUM
; if_id
++) {
541 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
543 bus_num
<= tm
->num_of_bus_per_interface
; bus_num
++) {
544 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_num
);
545 per_bit_rl_pup_status
[if_id
][bus_num
] = 0;
546 data2_write
[if_id
][bus_num
] = 0;
547 /* read current value of phy register 0x3 */
548 CHECK_STATUS(ddr3_tip_bus_read
549 (dev_num
, if_id
, ACCESS_TYPE_UNICAST
,
550 bus_num
, DDR_PHY_DATA
,
551 READ_CENTRALIZATION_PHY_REG
,
552 &phyreg3_arr
[if_id
][bus_num
]));
557 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
558 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
559 training_result
[training_stage
][if_id
] = TEST_SUCCESS
;
561 /* save current cs enable reg val */
562 CHECK_STATUS(ddr3_tip_if_read
563 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
564 CS_ENABLE_REG
, &cs_enable_reg_val
[if_id
],
566 /* enable single cs */
567 CHECK_STATUS(ddr3_tip_if_write
568 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
569 CS_ENABLE_REG
, (1 << 3), (1 << 3)));
572 ddr3_tip_reset_fifo_ptr(dev_num
);
573 for (curr_numb
= 0; curr_numb
< 3; curr_numb
++) {
575 * Phase 1: Load pattern (using ODPG)
577 * enter Read Leveling mode
578 * only 27 bits are masked
579 * assuming non multi-CS configuration
580 * write to CS = 0 for the non multi CS configuration, note that
581 * the results shall be read back to the required CS !!!
584 /* BUS count is 0 shifted 26 */
585 CHECK_STATUS(ddr3_tip_if_write
586 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
587 ODPG_DATA_CONTROL_REG
, 0x3, 0x3));
588 CHECK_STATUS(ddr3_tip_configure_odpg
589 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
, 0,
590 pattern_table
[PATTERN_TEST
].num_of_phases_tx
, 0,
591 pattern_table
[PATTERN_TEST
].num_of_phases_rx
, 0,
592 0, 0, STRESS_NONE
, DURATION_SINGLE
));
594 /* load pattern to ODPG */
595 ddr3_tip_load_pattern_to_odpg(dev_num
, ACCESS_TYPE_MULTICAST
,
596 PARAM_NOT_CARE
, PATTERN_TEST
,
597 pattern_table
[PATTERN_TEST
].
601 * Phase 2: ODPG to Read Leveling mode
604 /* General Training Opcode register */
605 CHECK_STATUS(ddr3_tip_if_write
606 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
607 ODPG_WRITE_READ_MODE_ENABLE_REG
, 0,
609 CHECK_STATUS(ddr3_tip_if_write
610 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
611 ODPG_TRAINING_CONTROL_REG
, 0x301b01, 0x3c3fef));
613 /* Object1 opcode register 0 & 1 */
614 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
615 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
617 tm
->interface_params
[if_id
].speed_bin_index
;
619 cas_latency_table
[speed_bin_index
].cl_val
[freq
];
620 data
= (cl_val
<< 17) | (0x3 << 25);
621 mask
= (0xff << 9) | (0x1f << 17) | (0x3 << 25);
622 CHECK_STATUS(ddr3_tip_if_write
623 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
624 ODPG_OBJ1_OPCODE_REG
, data
, mask
));
627 /* Set iteration count to max value */
628 CHECK_STATUS(ddr3_tip_if_write
629 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
630 TRAINING_OPCODE_1_REG
, 0xd00, 0xd00));
633 * Phase 2: Mask config
636 ddr3_tip_dynamic_per_bit_read_leveling_seq(dev_num
);
639 * Phase 3: Read Leveling execution
642 /* temporary jira dunit=14751 */
643 CHECK_STATUS(ddr3_tip_if_write
644 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
645 TRAINING_DBG_1_REG
, 0, (u32
)(1 << 31)));
646 /* configure phy reset value */
647 CHECK_STATUS(ddr3_tip_if_write
648 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
649 TRAINING_DBG_3_REG
, (0x7f << 24),
651 /* data pup rd reset enable */
652 CHECK_STATUS(ddr3_tip_if_write
653 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
654 SDRAM_CONFIGURATION_REG
, 0, (1 << 30)));
655 /* data pup rd reset disable */
656 CHECK_STATUS(ddr3_tip_if_write
657 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
658 SDRAM_CONFIGURATION_REG
, (1 << 30), (1 << 30)));
659 /* training SW override & training RL mode */
660 CHECK_STATUS(ddr3_tip_if_write
661 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
662 TRAINING_SW_2_REG
, 0x1, 0x9));
663 /* training enable */
664 CHECK_STATUS(ddr3_tip_if_write
665 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
666 TRAINING_REG
, (1 << 24) | (1 << 20),
667 (1 << 24) | (1 << 20)));
668 CHECK_STATUS(ddr3_tip_if_write
669 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
670 TRAINING_REG
, (u32
)(1 << 31), (u32
)(1 << 31)));
672 /********* trigger training *******************/
673 /* Trigger, poll on status and disable ODPG */
674 CHECK_STATUS(ddr3_tip_if_write
675 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
676 ODPG_TRAINING_TRIGGER_REG
, 0x1, 0x1));
677 CHECK_STATUS(ddr3_tip_if_write
678 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
679 ODPG_TRAINING_STATUS_REG
, 0x1, 0x1));
681 /*check for training done + results pass */
682 if (ddr3_tip_if_polling
683 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
, 0x2, 0x2,
684 ODPG_TRAINING_STATUS_REG
,
685 MAX_POLLING_ITERATIONS
) != MV_OK
) {
686 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
687 ("Training Done Failed\n"));
691 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
692 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
693 CHECK_STATUS(ddr3_tip_if_read
694 (dev_num
, ACCESS_TYPE_UNICAST
,
696 ODPG_TRAINING_TRIGGER_REG
, data_read
,
698 data
= data_read
[if_id
];
700 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
701 ("Training Result Failed\n"));
705 /*disable ODPG - Back to functional mode */
706 CHECK_STATUS(ddr3_tip_if_write
707 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
708 ODPG_ENABLE_REG
, 0x1 << ODPG_DISABLE_OFFS
,
709 (0x1 << ODPG_DISABLE_OFFS
)));
710 if (ddr3_tip_if_polling
711 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
, 0x0, 0x1,
712 ODPG_ENABLE_REG
, MAX_POLLING_ITERATIONS
) != MV_OK
) {
713 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
714 ("ODPG disable failed "));
717 CHECK_STATUS(ddr3_tip_if_write
718 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
719 ODPG_DATA_CONTROL_REG
, 0, MASK_ALL_BITS
));
721 /* double loop on bus, pup */
722 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
723 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
724 /* check training done */
726 bus_num
< tm
->num_of_bus_per_interface
;
728 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_num
);
730 if (per_bit_rl_pup_status
[if_id
][bus_num
]
733 for (bit_num
= 0; bit_num
< 8;
735 if (ddr3_tip_if_polling
740 mask_results_dq_reg_map
741 [bus_num
* 8 + bit_num
],
742 MAX_POLLING_ITERATIONS
) !=
746 ("\n_r_l: DDR3 poll failed(2) for bus %d bit %d\n",
750 /* read result per pup */
756 mask_results_dq_reg_map
768 if (curr_min_delay
== 0)
775 if (data
> data2_write
[if_id
][bus_num
])
783 if (data2_write
[if_id
][bus_num
] <=
785 MAX_DQ_READ_LEVELING_DELAY
)) {
786 per_bit_rl_pup_status
[if_id
]
793 /* check if there is need to search new phyreg3 value */
795 /* if there is DLL that is not checked yet */
796 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1;
798 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
800 bus_num
< tm
->num_of_bus_per_interface
;
802 VALIDATE_ACTIVE(tm
->bus_act_mask
,
804 if (per_bit_rl_pup_status
[if_id
]
806 /* go to next ADLL value */
813 bus_num
, DDR_PHY_DATA
,
814 READ_CENTRALIZATION_PHY_REG
,
817 adll_array
[curr_numb
])));
825 } /* if (curr_numb < 2) */
828 } /* for ( curr_numb = 0; curr_numb <3; curr_numb++) */
830 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
831 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
832 for (bus_num
= 0; bus_num
< tm
->num_of_bus_per_interface
;
834 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_num
);
835 if (per_bit_rl_pup_status
[if_id
][bus_num
] == 1)
836 ddr3_tip_bus_write(dev_num
,
840 bus_num
, DDR_PHY_DATA
,
842 CS_REG_VALUE(effective_cs
),
849 /* TBD flow does not support multi CS */
851 * cs_bitmask = tm->interface_params[if_id].
852 * as_bus_params[bus_num].cs_bitmask;
854 /* divide by 4 is used for retrieving the CS number */
856 * TBD BC2 - what is the PHY address for other
857 * CS ddr3_tip_write_cs_result() ???
860 * find what should be written to PHY
861 * - max delay that is less than threshold
863 if (is_any_pup_fail
== 1) {
864 training_result
[training_stage
][if_id
] = TEST_FAILED
;
869 DEBUG_LEVELING(DEBUG_LEVEL_INFO
, ("RL exit read leveling\n"));
872 * Phase 3: Exit Read Leveling
875 CHECK_STATUS(ddr3_tip_if_write
876 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
877 TRAINING_SW_2_REG
, (1 << 3), (1 << 3)));
878 CHECK_STATUS(ddr3_tip_if_write
879 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
880 TRAINING_SW_1_REG
, (1 << 16), (1 << 16)));
881 /* set ODPG to functional */
882 CHECK_STATUS(ddr3_tip_if_write
883 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
884 ODPG_DATA_CONTROL_REG
, 0x0, MASK_ALL_BITS
));
886 * Copy the result from the effective CS search to the real
889 ddr3_tip_write_cs_result(dev_num
, RL_PHY_REG
);
890 CHECK_STATUS(ddr3_tip_if_write
891 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
892 ODPG_DATA_CONTROL_REG
, 0x0, MASK_ALL_BITS
));
894 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
895 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
896 /* restore cs enable value */
897 CHECK_STATUS(ddr3_tip_if_write
898 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
899 CS_ENABLE_REG
, cs_enable_reg_val
[if_id
],
901 if (odt_config
!= 0) {
902 CHECK_STATUS(ddr3_tip_write_additional_odt_setting
907 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
908 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
909 if (training_result
[training_stage
][if_id
] == TEST_FAILED
)
916 int ddr3_tip_calc_cs_mask(u32 dev_num
, u32 if_id
, u32 effective_cs
,
919 u32 all_bus_cs
= 0, same_bus_cs
;
921 struct hws_topology_map
*tm
= ddr3_get_topology_map();
923 *cs_mask
= same_bus_cs
= CS_BIT_MASK
;
926 * In some of the devices (such as BC2), the CS is per pup and there
927 * for mixed mode is valid on like other devices where CS configuration
929 * In order to know that, we do 'Or' and 'And' operation between all
931 * If they are they are not the same then it's mixed mode so all CS
932 * should be configured (when configuring the MRS)
934 for (bus_cnt
= 0; bus_cnt
< tm
->num_of_bus_per_interface
; bus_cnt
++) {
935 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_cnt
);
937 all_bus_cs
|= tm
->interface_params
[if_id
].
938 as_bus_params
[bus_cnt
].cs_bitmask
;
939 same_bus_cs
&= tm
->interface_params
[if_id
].
940 as_bus_params
[bus_cnt
].cs_bitmask
;
942 /* cs enable is active low */
943 *cs_mask
&= ~tm
->interface_params
[if_id
].
944 as_bus_params
[bus_cnt
].cs_bitmask
;
947 if (all_bus_cs
== same_bus_cs
)
948 *cs_mask
= (*cs_mask
| (~(1 << effective_cs
))) & CS_BIT_MASK
;
954 * Dynamic write leveling
956 int ddr3_tip_dynamic_write_leveling(u32 dev_num
)
958 u32 reg_data
= 0, iter
, if_id
, bus_cnt
;
959 u32 cs_enable_reg_val
[MAX_INTERFACE_NUM
] = { 0 };
960 u32 cs_mask
[MAX_INTERFACE_NUM
];
961 u32 read_data_sample_delay_vals
[MAX_INTERFACE_NUM
] = { 0 };
962 u32 read_data_ready_delay_vals
[MAX_INTERFACE_NUM
] = { 0 };
964 u32 res_values
[MAX_INTERFACE_NUM
* MAX_BUS_NUM
] = { 0 };
965 u32 test_res
= 0; /* 0 - success for all pup */
966 u32 data_read
[MAX_INTERFACE_NUM
];
967 u8 wl_values
[NUM_OF_CS
][MAX_BUS_NUM
][MAX_INTERFACE_NUM
];
968 u16
*mask_results_pup_reg_map
= ddr3_tip_get_mask_results_pup_reg_map();
969 u32 cs_mask0
[MAX_INTERFACE_NUM
] = { 0 };
970 u32 max_cs
= hws_ddr3_tip_max_cs_get();
971 struct hws_topology_map
*tm
= ddr3_get_topology_map();
973 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
974 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
976 training_result
[training_stage
][if_id
] = TEST_SUCCESS
;
978 /* save Read Data Sample Delay */
979 CHECK_STATUS(ddr3_tip_if_read
980 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
981 READ_DATA_SAMPLE_DELAY
,
982 read_data_sample_delay_vals
, MASK_ALL_BITS
));
983 /* save Read Data Ready Delay */
984 CHECK_STATUS(ddr3_tip_if_read
985 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
986 READ_DATA_READY_DELAY
, read_data_ready_delay_vals
,
988 /* save current cs reg val */
989 CHECK_STATUS(ddr3_tip_if_read
990 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
991 CS_ENABLE_REG
, cs_enable_reg_val
, MASK_ALL_BITS
));
995 * Phase 1: DRAM 2 Write Leveling mode
998 /*Assert 10 refresh commands to DRAM to all CS */
999 for (iter
= 0; iter
< WL_ITERATION_NUM
; iter
++) {
1000 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1001 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1002 CHECK_STATUS(ddr3_tip_if_write
1003 (dev_num
, ACCESS_TYPE_UNICAST
,
1004 if_id
, SDRAM_OPERATION_REG
,
1005 (u32
)((~(0xf) << 8) | 0x2), 0xf1f));
1008 /* check controller back to normal */
1009 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1010 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1011 if (ddr3_tip_if_polling
1012 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
, 0, 0x1f,
1013 SDRAM_OPERATION_REG
, MAX_POLLING_ITERATIONS
) != MV_OK
) {
1014 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
1015 ("WL: DDR3 poll failed(3)"));
1019 for (effective_cs
= 0; effective_cs
< max_cs
; effective_cs
++) {
1020 /*enable write leveling to all cs - Q off , WL n */
1021 /* calculate interface cs mask */
1022 CHECK_STATUS(ddr3_tip_write_mrs_cmd(dev_num
, cs_mask0
, MRS1_CMD
,
1025 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1026 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1027 /* cs enable is active low */
1028 ddr3_tip_calc_cs_mask(dev_num
, if_id
, effective_cs
,
1032 /* Enable Output buffer to relevant CS - Q on , WL on */
1033 CHECK_STATUS(ddr3_tip_write_mrs_cmd
1034 (dev_num
, cs_mask
, MRS1_CMD
, 0x80, 0x1080));
1036 /*enable odt for relevant CS */
1037 CHECK_STATUS(ddr3_tip_if_write
1038 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1039 0x1498, (0x3 << (effective_cs
* 2)), 0xf));
1042 * Phase 2: Set training IP to write leveling mode
1045 CHECK_STATUS(ddr3_tip_dynamic_write_leveling_seq(dev_num
));
1048 * Phase 3: Trigger training
1051 CHECK_STATUS(ddr3_tip_if_write
1052 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1053 ODPG_TRAINING_TRIGGER_REG
, 0x1, 0x1));
1055 for (if_id
= 0; if_id
< MAX_INTERFACE_NUM
; if_id
++) {
1056 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1059 if (ddr3_tip_if_polling
1060 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
1061 (1 << 1), (1 << 1), ODPG_TRAINING_STATUS_REG
,
1062 MAX_POLLING_ITERATIONS
) != MV_OK
) {
1065 ("WL: DDR3 poll (4) failed (Data: 0x%x)\n",
1068 #if !defined(CONFIG_ARMADA_38X) /*Disabled. JIRA #1498 */
1070 CHECK_STATUS(ddr3_tip_if_read
1071 (dev_num
, ACCESS_TYPE_UNICAST
,
1073 ODPG_TRAINING_TRIGGER_REG
,
1074 ®_data
, (1 << 2)));
1075 if (reg_data
!= 0) {
1078 ("WL: WL failed IF %d reg_data=0x%x\n",
1085 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1086 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1088 if (ddr3_tip_if_polling
1089 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
1090 (1 << 1), (1 << 1), ODPG_TRAINING_STATUS_REG
,
1091 MAX_POLLING_ITERATIONS
) != MV_OK
) {
1094 ("WL: DDR3 poll (4) failed (Data: 0x%x)\n",
1097 #if !defined(CONFIG_ARMADA_38X) /*Disabled. JIRA #1498 */
1098 CHECK_STATUS(ddr3_tip_if_read
1099 (dev_num
, ACCESS_TYPE_UNICAST
,
1101 ODPG_TRAINING_STATUS_REG
,
1102 data_read
, (1 << 2)));
1103 reg_data
= data_read
[if_id
];
1104 if (reg_data
!= 0) {
1107 ("WL: WL failed IF %d reg_data=0x%x\n",
1112 /* check for training completion per bus */
1114 bus_cnt
< tm
->num_of_bus_per_interface
;
1116 VALIDATE_ACTIVE(tm
->bus_act_mask
,
1118 /* training status */
1119 CHECK_STATUS(ddr3_tip_if_read
1121 ACCESS_TYPE_UNICAST
,
1123 mask_results_pup_reg_map
1124 [bus_cnt
], data_read
,
1126 reg_data
= data_read
[if_id
];
1129 ("WL: IF %d BUS %d reg 0x%x\n",
1130 if_id
, bus_cnt
, reg_data
));
1131 if (reg_data
== 0) {
1134 tm
->num_of_bus_per_interface
)
1137 CHECK_STATUS(ddr3_tip_if_read
1139 ACCESS_TYPE_UNICAST
,
1141 mask_results_pup_reg_map
1142 [bus_cnt
], data_read
,
1145 * Save the read value that should be
1146 * write to PHY register
1148 wl_values
[effective_cs
]
1150 (u8
)data_read
[if_id
];
1156 * Phase 4: Exit write leveling mode
1159 /* disable DQs toggling */
1160 CHECK_STATUS(ddr3_tip_if_write
1161 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1162 WR_LEVELING_DQS_PATTERN_REG
, 0x0, 0x1));
1164 /* Update MRS 1 (WL off) */
1165 CHECK_STATUS(ddr3_tip_write_mrs_cmd(dev_num
, cs_mask0
, MRS1_CMD
,
1168 /* Update MRS 1 (return to functional mode - Q on , WL off) */
1169 CHECK_STATUS(ddr3_tip_write_mrs_cmd
1170 (dev_num
, cs_mask0
, MRS1_CMD
, 0x0, 0x1080));
1172 /* set phy to normal mode */
1173 CHECK_STATUS(ddr3_tip_if_write
1174 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1175 TRAINING_SW_2_REG
, 0x5, 0x7));
1177 /* exit sw override mode */
1178 CHECK_STATUS(ddr3_tip_if_write
1179 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1180 TRAINING_SW_2_REG
, 0x4, 0x7));
1184 * Phase 5: Load WL values to each PHY
1187 for (effective_cs
= 0; effective_cs
< max_cs
; effective_cs
++) {
1188 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1189 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1192 bus_cnt
< tm
->num_of_bus_per_interface
;
1194 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_cnt
);
1195 /* check if result == pass */
1198 tm
->num_of_bus_per_interface
) +
1201 * read result control register
1205 wl_values
[effective_cs
][bus_cnt
]
1208 * Write into write leveling register
1209 * ([4:0] ADLL, [8:6] Phase, [15:10]
1210 * (centralization) ADLL + 0x10)
1214 (((reg_data
& 0xe0) >> 5) << 6) |
1215 (((reg_data
& 0x1f) +
1216 phy_reg1_val
) << 10);
1219 ACCESS_TYPE_UNICAST
,
1221 ACCESS_TYPE_UNICAST
,
1226 CS_REGISTER_ADDR_OFFSET
,
1231 * read result control register
1234 CHECK_STATUS(ddr3_tip_if_read
1236 ACCESS_TYPE_UNICAST
,
1238 mask_results_pup_reg_map
1239 [bus_cnt
], data_read
,
1241 reg_data
= data_read
[if_id
];
1244 ("WL: IF %d BUS %d failed, reg 0x%x\n",
1245 if_id
, bus_cnt
, reg_data
));
1249 if (test_res
!= 0) {
1250 training_result
[training_stage
][if_id
] =
1255 /* Set to 0 after each loop to avoid illegal value may be used */
1259 * Copy the result from the effective CS search to the real
1262 /* ddr3_tip_write_cs_result(dev_num, WL_PHY_REG); */
1263 /* restore saved values */
1264 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1265 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1266 /* restore Read Data Sample Delay */
1267 CHECK_STATUS(ddr3_tip_if_write
1268 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
1269 READ_DATA_SAMPLE_DELAY
,
1270 read_data_sample_delay_vals
[if_id
],
1273 /* restore Read Data Ready Delay */
1274 CHECK_STATUS(ddr3_tip_if_write
1275 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
1276 READ_DATA_READY_DELAY
,
1277 read_data_ready_delay_vals
[if_id
],
1280 /* enable multi cs */
1281 CHECK_STATUS(ddr3_tip_if_write
1282 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
1283 CS_ENABLE_REG
, cs_enable_reg_val
[if_id
],
1287 /* Disable modt0 for CS0 training - need to adjust for multy CS */
1288 CHECK_STATUS(ddr3_tip_if_write
1289 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
, 0x1498,
1292 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1293 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1294 if (training_result
[training_stage
][if_id
] == TEST_FAILED
)
1302 * Dynamic write leveling supplementary
1304 int ddr3_tip_dynamic_write_leveling_supp(u32 dev_num
)
1307 u32 if_id
, bus_id
, data
, data_tmp
;
1309 struct hws_topology_map
*tm
= ddr3_get_topology_map();
1311 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1312 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1315 for (bus_id
= 0; bus_id
< GET_TOPOLOGY_NUM_OF_BUSES();
1317 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_id
);
1318 wr_supp_res
[if_id
][bus_id
].is_pup_fail
= 1;
1319 CHECK_STATUS(ddr3_tip_bus_read
1320 (dev_num
, if_id
, ACCESS_TYPE_UNICAST
,
1321 bus_id
, DDR_PHY_DATA
,
1322 WRITE_CENTRALIZATION_PHY_REG
+
1323 effective_cs
* CS_REGISTER_ADDR_OFFSET
,
1327 ("WL Supp: adll_offset=0 data delay = %d\n",
1329 if (ddr3_tip_wl_supp_align_phase_shift
1330 (dev_num
, if_id
, bus_id
, 0, 0) == MV_OK
) {
1333 ("WL Supp: IF %d bus_id %d adll_offset=0 Success !\n",
1340 CHECK_STATUS(ddr3_tip_bus_write
1341 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
1342 ACCESS_TYPE_UNICAST
, bus_id
, DDR_PHY_DATA
,
1343 WRITE_CENTRALIZATION_PHY_REG
+
1344 effective_cs
* CS_REGISTER_ADDR_OFFSET
,
1345 data
+ adll_offset
));
1346 CHECK_STATUS(ddr3_tip_bus_read
1347 (dev_num
, if_id
, ACCESS_TYPE_UNICAST
,
1348 bus_id
, DDR_PHY_DATA
,
1349 WRITE_CENTRALIZATION_PHY_REG
+
1350 effective_cs
* CS_REGISTER_ADDR_OFFSET
,
1354 ("WL Supp: adll_offset= %d data delay = %d\n",
1355 adll_offset
, data_tmp
));
1357 if (ddr3_tip_wl_supp_align_phase_shift
1358 (dev_num
, if_id
, bus_id
, adll_offset
, 0) == MV_OK
) {
1361 ("WL Supp: IF %d bus_id %d adll_offset= %d Success !\n",
1362 if_id
, bus_id
, adll_offset
));
1368 CHECK_STATUS(ddr3_tip_bus_write
1369 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
1370 ACCESS_TYPE_UNICAST
, bus_id
, DDR_PHY_DATA
,
1371 WRITE_CENTRALIZATION_PHY_REG
+
1372 effective_cs
* CS_REGISTER_ADDR_OFFSET
,
1373 data
+ adll_offset
));
1374 CHECK_STATUS(ddr3_tip_bus_read
1375 (dev_num
, if_id
, ACCESS_TYPE_UNICAST
,
1376 bus_id
, DDR_PHY_DATA
,
1377 WRITE_CENTRALIZATION_PHY_REG
+
1378 effective_cs
* CS_REGISTER_ADDR_OFFSET
,
1382 ("WL Supp: adll_offset= %d data delay = %d\n",
1383 adll_offset
, data_tmp
));
1384 if (ddr3_tip_wl_supp_align_phase_shift
1385 (dev_num
, if_id
, bus_id
, adll_offset
, 0) == MV_OK
) {
1388 ("WL Supp: IF %d bus_id %d adll_offset= %d Success !\n",
1389 if_id
, bus_id
, adll_offset
));
1394 ("WL Supp: IF %d bus_id %d Failed !\n",
1399 DEBUG_LEVELING(DEBUG_LEVEL_TRACE
,
1400 ("WL Supp: IF %d bus_id %d is_pup_fail %d\n",
1401 if_id
, bus_id
, is_if_fail
));
1403 if (is_if_fail
== 1) {
1404 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
1405 ("WL Supp: IF %d failed\n", if_id
));
1406 training_result
[training_stage
][if_id
] = TEST_FAILED
;
1408 training_result
[training_stage
][if_id
] = TEST_SUCCESS
;
1412 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1413 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1414 if (training_result
[training_stage
][if_id
] == TEST_FAILED
)
1424 static int ddr3_tip_wl_supp_align_phase_shift(u32 dev_num
, u32 if_id
,
1425 u32 bus_id
, u32 offset
,
1428 wr_supp_res
[if_id
][bus_id
].stage
= PHASE_SHIFT
;
1429 if (ddr3_tip_xsb_compare_test(dev_num
, if_id
, bus_id
,
1430 0, bus_id_delta
) == MV_OK
) {
1431 wr_supp_res
[if_id
][bus_id
].is_pup_fail
= 0;
1433 } else if (ddr3_tip_xsb_compare_test(dev_num
, if_id
, bus_id
,
1434 ONE_CLOCK_ERROR_SHIFT
,
1435 bus_id_delta
) == MV_OK
) {
1437 wr_supp_res
[if_id
][bus_id
].stage
= CLOCK_SHIFT
;
1438 DEBUG_LEVELING(DEBUG_LEVEL_TRACE
,
1439 ("Supp: 1 error clock for if %d pup %d with ofsset %d success\n",
1440 if_id
, bus_id
, offset
));
1441 ddr3_tip_wl_supp_one_clk_err_shift(dev_num
, if_id
, bus_id
, 0);
1442 wr_supp_res
[if_id
][bus_id
].is_pup_fail
= 0;
1444 } else if (ddr3_tip_xsb_compare_test(dev_num
, if_id
, bus_id
,
1446 bus_id_delta
) == MV_OK
) {
1448 DEBUG_LEVELING(DEBUG_LEVEL_TRACE
,
1449 ("Supp: align error for if %d pup %d with ofsset %d success\n",
1450 if_id
, bus_id
, offset
));
1451 wr_supp_res
[if_id
][bus_id
].stage
= ALIGN_SHIFT
;
1452 ddr3_tip_wl_supp_align_err_shift(dev_num
, if_id
, bus_id
, 0);
1453 wr_supp_res
[if_id
][bus_id
].is_pup_fail
= 0;
1456 wr_supp_res
[if_id
][bus_id
].is_pup_fail
= 1;
1464 static int ddr3_tip_xsb_compare_test(u32 dev_num
, u32 if_id
, u32 bus_id
,
1465 u32 edge_offset
, u32 bus_id_delta
)
1467 u32 num_of_succ_byte_compare
, word_in_pattern
, abs_offset
;
1469 u32 read_pattern
[TEST_PATTERN_LENGTH
* 2];
1470 struct pattern_info
*pattern_table
= ddr3_tip_get_pattern_table();
1471 u32 pattern_test_pattern_table
[8];
1473 for (i
= 0; i
< 8; i
++) {
1474 pattern_test_pattern_table
[i
] =
1475 pattern_table_get_word(dev_num
, PATTERN_TEST
, (u8
)i
);
1478 /* extern write, than read and compare */
1479 CHECK_STATUS(ddr3_tip_ext_write
1481 (pattern_table
[PATTERN_TEST
].start_addr
+
1482 ((SDRAM_CS_SIZE
+ 1) * effective_cs
)), 1,
1483 pattern_test_pattern_table
));
1485 CHECK_STATUS(ddr3_tip_reset_fifo_ptr(dev_num
));
1487 CHECK_STATUS(ddr3_tip_ext_read
1489 (pattern_table
[PATTERN_TEST
].start_addr
+
1490 ((SDRAM_CS_SIZE
+ 1) * effective_cs
)), 1, read_pattern
));
1494 ("XSB-compt: IF %d bus_id %d 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
1495 if_id
, bus_id
, read_pattern
[0], read_pattern
[1],
1496 read_pattern
[2], read_pattern
[3], read_pattern
[4],
1497 read_pattern
[5], read_pattern
[6], read_pattern
[7]));
1499 /* compare byte per pup */
1500 num_of_succ_byte_compare
= 0;
1501 for (word_in_pattern
= start_xsb_offset
;
1502 word_in_pattern
< (TEST_PATTERN_LENGTH
* 2); word_in_pattern
++) {
1503 word_offset
= word_in_pattern
+ edge_offset
;
1504 if ((word_offset
> (TEST_PATTERN_LENGTH
* 2 - 1)) ||
1508 if ((read_pattern
[word_in_pattern
] & pup_mask_table
[bus_id
]) ==
1509 (pattern_test_pattern_table
[word_offset
] &
1510 pup_mask_table
[bus_id
]))
1511 num_of_succ_byte_compare
++;
1514 abs_offset
= (edge_offset
> 0) ? edge_offset
: -edge_offset
;
1515 if (num_of_succ_byte_compare
== ((TEST_PATTERN_LENGTH
* 2) -
1516 abs_offset
- start_xsb_offset
)) {
1519 ("XSB-compt: IF %d bus_id %d num_of_succ_byte_compare %d - Success\n",
1520 if_id
, bus_id
, num_of_succ_byte_compare
));
1525 ("XSB-compt: IF %d bus_id %d num_of_succ_byte_compare %d - Fail !\n",
1526 if_id
, bus_id
, num_of_succ_byte_compare
));
1530 ("XSB-compt: expected 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
1531 pattern_test_pattern_table
[0],
1532 pattern_test_pattern_table
[1],
1533 pattern_test_pattern_table
[2],
1534 pattern_test_pattern_table
[3],
1535 pattern_test_pattern_table
[4],
1536 pattern_test_pattern_table
[5],
1537 pattern_test_pattern_table
[6],
1538 pattern_test_pattern_table
[7]));
1541 ("XSB-compt: recieved 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
1542 read_pattern
[0], read_pattern
[1],
1543 read_pattern
[2], read_pattern
[3],
1544 read_pattern
[4], read_pattern
[5],
1545 read_pattern
[6], read_pattern
[7]));
1549 ("XSB-compt: IF %d bus_id %d num_of_succ_byte_compare %d - Fail !\n",
1550 if_id
, bus_id
, num_of_succ_byte_compare
));
1557 * Clock error shift - function moves the write leveling delay 1cc forward
1559 static int ddr3_tip_wl_supp_one_clk_err_shift(u32 dev_num
, u32 if_id
,
1560 u32 bus_id
, u32 bus_id_delta
)
1564 DEBUG_LEVELING(DEBUG_LEVEL_TRACE
, ("One_clk_err_shift\n"));
1566 CHECK_STATUS(ddr3_tip_bus_read
1567 (dev_num
, if_id
, ACCESS_TYPE_UNICAST
, bus_id
,
1568 DDR_PHY_DATA
, WL_PHY_REG
, &data
));
1569 phase
= ((data
>> 6) & 0x7);
1571 DEBUG_LEVELING(DEBUG_LEVEL_TRACE
,
1572 ("One_clk_err_shift: IF %d bus_id %d phase %d adll %d\n",
1573 if_id
, bus_id
, phase
, adll
));
1575 if ((phase
== 0) || (phase
== 1)) {
1576 CHECK_STATUS(ddr3_tip_bus_read_modify_write
1577 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
, bus_id
,
1578 DDR_PHY_DATA
, 0, (phase
+ 2), 0x1f));
1579 } else if (phase
== 2) {
1581 data
= (3 << 6) + (0x1f);
1582 CHECK_STATUS(ddr3_tip_bus_read_modify_write
1583 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
1584 bus_id
, DDR_PHY_DATA
, 0, data
,
1585 (0x7 << 6 | 0x1f)));
1587 CHECK_STATUS(ddr3_tip_bus_read_modify_write
1588 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
,
1589 bus_id
, DDR_PHY_DATA
, 1, data
, 0x3f));
1602 static int ddr3_tip_wl_supp_align_err_shift(u32 dev_num
, u32 if_id
,
1603 u32 bus_id
, u32 bus_id_delta
)
1608 /* Shift WL result 1 phase back */
1609 CHECK_STATUS(ddr3_tip_bus_read(dev_num
, if_id
, ACCESS_TYPE_UNICAST
,
1610 bus_id
, DDR_PHY_DATA
, WL_PHY_REG
,
1612 phase
= ((data
>> 6) & 0x7);
1616 ("Wl_supp_align_err_shift: IF %d bus_id %d phase %d adll %d\n",
1617 if_id
, bus_id
, phase
, adll
));
1626 CHECK_STATUS(ddr3_tip_bus_read_modify_write
1627 (dev_num
, ACCESS_TYPE_UNICAST
,
1628 if_id
, bus_id
, DDR_PHY_DATA
,
1629 0, data
, (0x7 << 6 | 0x1f)));
1631 CHECK_STATUS(ddr3_tip_bus_read_modify_write
1632 (dev_num
, ACCESS_TYPE_UNICAST
,
1633 if_id
, bus_id
, DDR_PHY_DATA
,
1640 } else if ((phase
== 2) || (phase
== 3)) {
1642 data
= (phase
<< 6) + (adll
& 0x1f);
1643 CHECK_STATUS(ddr3_tip_bus_read_modify_write
1644 (dev_num
, ACCESS_TYPE_UNICAST
, if_id
, bus_id
,
1645 DDR_PHY_DATA
, 0, data
, (0x7 << 6 | 0x1f)));
1648 DEBUG_LEVELING(DEBUG_LEVEL_ERROR
,
1649 ("Wl_supp_align_err_shift: unexpected phase\n"));
1658 * Dynamic write leveling sequence
1660 static int ddr3_tip_dynamic_write_leveling_seq(u32 dev_num
)
1663 u16
*mask_results_pup_reg_map
= ddr3_tip_get_mask_results_pup_reg_map();
1664 u16
*mask_results_dq_reg_map
= ddr3_tip_get_mask_results_dq_reg();
1665 struct hws_topology_map
*tm
= ddr3_get_topology_map();
1667 CHECK_STATUS(ddr3_tip_if_write
1668 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1669 TRAINING_SW_2_REG
, 0x1, 0x5));
1670 CHECK_STATUS(ddr3_tip_if_write
1671 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1672 TRAINING_WRITE_LEVELING_REG
, 0x50, 0xff));
1673 CHECK_STATUS(ddr3_tip_if_write
1674 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1675 TRAINING_WRITE_LEVELING_REG
, 0x5c, 0xff));
1676 CHECK_STATUS(ddr3_tip_if_write
1677 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1678 ODPG_TRAINING_CONTROL_REG
, 0x381b82, 0x3c3faf));
1679 CHECK_STATUS(ddr3_tip_if_write
1680 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1681 ODPG_OBJ1_OPCODE_REG
, (0x3 << 25), (0x3ffff << 9)));
1682 CHECK_STATUS(ddr3_tip_if_write
1683 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1684 ODPG_OBJ1_ITER_CNT_REG
, 0x80, 0xffff));
1685 CHECK_STATUS(ddr3_tip_if_write
1686 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1687 ODPG_WRITE_LEVELING_DONE_CNTR_REG
, 0x14, 0xff));
1688 CHECK_STATUS(ddr3_tip_if_write
1689 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1690 TRAINING_WRITE_LEVELING_REG
, 0xff5c, 0xffff));
1693 for (dq_id
= 0; dq_id
< MAX_DQ_NUM
; dq_id
++) {
1694 CHECK_STATUS(ddr3_tip_if_write
1695 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1696 mask_results_dq_reg_map
[dq_id
], 0x1 << 24,
1700 /* Mask all results */
1701 for (bus_id
= 0; bus_id
< tm
->num_of_bus_per_interface
; bus_id
++) {
1702 CHECK_STATUS(ddr3_tip_if_write
1703 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1704 mask_results_pup_reg_map
[bus_id
], 0x1 << 24,
1708 /* Unmask only wanted */
1709 for (bus_id
= 0; bus_id
< tm
->num_of_bus_per_interface
; bus_id
++) {
1710 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_id
);
1711 CHECK_STATUS(ddr3_tip_if_write
1712 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1713 mask_results_pup_reg_map
[bus_id
], 0, 0x1 << 24));
1716 CHECK_STATUS(ddr3_tip_if_write
1717 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1718 WR_LEVELING_DQS_PATTERN_REG
, 0x1, 0x1));
1724 * Dynamic read leveling sequence
1726 static int ddr3_tip_dynamic_read_leveling_seq(u32 dev_num
)
1729 u16
*mask_results_pup_reg_map
= ddr3_tip_get_mask_results_pup_reg_map();
1730 u16
*mask_results_dq_reg_map
= ddr3_tip_get_mask_results_dq_reg();
1731 struct hws_topology_map
*tm
= ddr3_get_topology_map();
1734 for (dq_id
= 0; dq_id
< MAX_DQ_NUM
; dq_id
++) {
1735 CHECK_STATUS(ddr3_tip_if_write
1736 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1737 mask_results_dq_reg_map
[dq_id
], 0x1 << 24,
1741 /* Mask all results */
1742 for (bus_id
= 0; bus_id
< tm
->num_of_bus_per_interface
; bus_id
++) {
1743 CHECK_STATUS(ddr3_tip_if_write
1744 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1745 mask_results_pup_reg_map
[bus_id
], 0x1 << 24,
1749 /* Unmask only wanted */
1750 for (bus_id
= 0; bus_id
< tm
->num_of_bus_per_interface
; bus_id
++) {
1751 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_id
);
1752 CHECK_STATUS(ddr3_tip_if_write
1753 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1754 mask_results_pup_reg_map
[bus_id
], 0, 0x1 << 24));
1761 * Dynamic read leveling sequence
1763 static int ddr3_tip_dynamic_per_bit_read_leveling_seq(u32 dev_num
)
1766 u16
*mask_results_pup_reg_map
= ddr3_tip_get_mask_results_pup_reg_map();
1767 u16
*mask_results_dq_reg_map
= ddr3_tip_get_mask_results_dq_reg();
1768 struct hws_topology_map
*tm
= ddr3_get_topology_map();
1771 for (dq_id
= 0; dq_id
< MAX_DQ_NUM
; dq_id
++) {
1772 CHECK_STATUS(ddr3_tip_if_write
1773 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1774 mask_results_dq_reg_map
[dq_id
], 0x1 << 24,
1778 /* Mask all results */
1779 for (bus_id
= 0; bus_id
< tm
->num_of_bus_per_interface
; bus_id
++) {
1780 CHECK_STATUS(ddr3_tip_if_write
1781 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1782 mask_results_pup_reg_map
[bus_id
], 0x1 << 24,
1786 /* Unmask only wanted */
1787 for (dq_id
= 0; dq_id
< MAX_DQ_NUM
; dq_id
++) {
1788 VALIDATE_ACTIVE(tm
->bus_act_mask
, dq_id
/ 8);
1789 CHECK_STATUS(ddr3_tip_if_write
1790 (dev_num
, ACCESS_TYPE_MULTICAST
, PARAM_NOT_CARE
,
1791 mask_results_dq_reg_map
[dq_id
], 0x0 << 24,
1799 * Print write leveling supplementary results
1801 int ddr3_tip_print_wl_supp_result(u32 dev_num
)
1803 u32 bus_id
= 0, if_id
= 0;
1804 struct hws_topology_map
*tm
= ddr3_get_topology_map();
1806 DEBUG_LEVELING(DEBUG_LEVEL_INFO
,
1807 ("I/F0 PUP0 Result[0 - success, 1-fail] ...\n"));
1809 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1810 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1811 for (bus_id
= 0; bus_id
< tm
->num_of_bus_per_interface
;
1813 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_id
);
1814 DEBUG_LEVELING(DEBUG_LEVEL_INFO
,
1815 ("%d ,", wr_supp_res
[if_id
]
1816 [bus_id
].is_pup_fail
));
1821 ("I/F0 PUP0 Stage[0-phase_shift, 1-clock_shift, 2-align_shift] ...\n"));
1823 for (if_id
= 0; if_id
<= MAX_INTERFACE_NUM
- 1; if_id
++) {
1824 VALIDATE_ACTIVE(tm
->if_act_mask
, if_id
);
1825 for (bus_id
= 0; bus_id
< tm
->num_of_bus_per_interface
;
1827 VALIDATE_ACTIVE(tm
->bus_act_mask
, bus_id
);
1828 DEBUG_LEVELING(DEBUG_LEVEL_INFO
,
1829 ("%d ,", wr_supp_res
[if_id
]