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_ENGINE_H_ 8*f1df9364SStefan Roese #define _DDR3_TRAINING_IP_ENGINE_H_ 9*f1df9364SStefan Roese 10*f1df9364SStefan Roese #include "ddr3_training_ip_def.h" 11*f1df9364SStefan Roese #include "ddr3_training_ip_flow.h" 12*f1df9364SStefan Roese 13*f1df9364SStefan Roese #define EDGE_1 0 14*f1df9364SStefan Roese #define EDGE_2 1 15*f1df9364SStefan Roese #define ALL_PUP_TRAINING 0xe 16*f1df9364SStefan Roese #define PUP_RESULT_EDGE_1_MASK 0xff 17*f1df9364SStefan Roese #define PUP_RESULT_EDGE_2_MASK (0xff << 8) 18*f1df9364SStefan Roese #define PUP_LOCK_RESULT_BIT 25 19*f1df9364SStefan Roese 20*f1df9364SStefan Roese #define GET_TAP_RESULT(reg, edge) \ 21*f1df9364SStefan Roese (((edge) == EDGE_1) ? ((reg) & PUP_RESULT_EDGE_1_MASK) : \ 22*f1df9364SStefan Roese (((reg) & PUP_RESULT_EDGE_2_MASK) >> 8)); 23*f1df9364SStefan Roese #define GET_LOCK_RESULT(reg) \ 24*f1df9364SStefan Roese (((reg) & (1<<PUP_LOCK_RESULT_BIT)) >> PUP_LOCK_RESULT_BIT) 25*f1df9364SStefan Roese 26*f1df9364SStefan Roese #define EDGE_FAILURE 128 27*f1df9364SStefan Roese #define ALL_BITS_PER_PUP 128 28*f1df9364SStefan Roese 29*f1df9364SStefan Roese #define MIN_WINDOW_SIZE 6 30*f1df9364SStefan Roese #define MAX_WINDOW_SIZE_RX 32 31*f1df9364SStefan Roese #define MAX_WINDOW_SIZE_TX 64 32*f1df9364SStefan Roese 33*f1df9364SStefan Roese int ddr3_tip_training_ip_test(u32 dev_num, enum hws_training_result result_type, 34*f1df9364SStefan Roese enum hws_search_dir search_dir, 35*f1df9364SStefan Roese enum hws_dir direction, 36*f1df9364SStefan Roese enum hws_edge_compare edge, 37*f1df9364SStefan Roese u32 init_val1, u32 init_val2, 38*f1df9364SStefan Roese u32 num_of_iterations, u32 start_pattern, 39*f1df9364SStefan Roese u32 end_pattern); 40*f1df9364SStefan Roese int ddr3_tip_load_pattern_to_mem(u32 dev_num, enum hws_pattern pattern); 41*f1df9364SStefan Roese int ddr3_tip_load_pattern_to_mem_by_cpu(u32 dev_num, enum hws_pattern pattern, 42*f1df9364SStefan Roese u32 offset); 43*f1df9364SStefan Roese int ddr3_tip_load_all_pattern_to_mem(u32 dev_num); 44*f1df9364SStefan Roese int ddr3_tip_read_training_result(u32 dev_num, u32 if_id, 45*f1df9364SStefan Roese enum hws_access_type pup_access_type, 46*f1df9364SStefan Roese u32 pup_num, u32 bit_num, 47*f1df9364SStefan Roese enum hws_search_dir search, 48*f1df9364SStefan Roese enum hws_dir direction, 49*f1df9364SStefan Roese enum hws_training_result result_type, 50*f1df9364SStefan Roese enum hws_training_load_op operation, 51*f1df9364SStefan Roese u32 cs_num_type, u32 **load_res, 52*f1df9364SStefan Roese int is_read_from_db, u8 cons_tap, 53*f1df9364SStefan Roese int is_check_result_validity); 54*f1df9364SStefan Roese int ddr3_tip_ip_training(u32 dev_num, enum hws_access_type access_type, 55*f1df9364SStefan Roese u32 interface_num, 56*f1df9364SStefan Roese enum hws_access_type pup_access_type, 57*f1df9364SStefan Roese u32 pup_num, enum hws_training_result result_type, 58*f1df9364SStefan Roese enum hws_control_element control_element, 59*f1df9364SStefan Roese enum hws_search_dir search_dir, enum hws_dir direction, 60*f1df9364SStefan Roese u32 interface_mask, u32 init_value, u32 num_iter, 61*f1df9364SStefan Roese enum hws_pattern pattern, 62*f1df9364SStefan Roese enum hws_edge_compare edge_comp, 63*f1df9364SStefan Roese enum hws_ddr_cs cs_type, u32 cs_num, 64*f1df9364SStefan Roese enum hws_training_ip_stat *train_status); 65*f1df9364SStefan Roese int ddr3_tip_ip_training_wrapper(u32 dev_num, enum hws_access_type access_type, 66*f1df9364SStefan Roese u32 if_id, 67*f1df9364SStefan Roese enum hws_access_type pup_access_type, 68*f1df9364SStefan Roese u32 pup_num, 69*f1df9364SStefan Roese enum hws_training_result result_type, 70*f1df9364SStefan Roese enum hws_control_element control_element, 71*f1df9364SStefan Roese enum hws_search_dir search_dir, 72*f1df9364SStefan Roese enum hws_dir direction, 73*f1df9364SStefan Roese u32 interface_mask, u32 init_value1, 74*f1df9364SStefan Roese u32 init_value2, u32 num_iter, 75*f1df9364SStefan Roese enum hws_pattern pattern, 76*f1df9364SStefan Roese enum hws_edge_compare edge_comp, 77*f1df9364SStefan Roese enum hws_ddr_cs train_cs_type, u32 cs_num, 78*f1df9364SStefan Roese enum hws_training_ip_stat *train_status); 79*f1df9364SStefan Roese int is_odpg_access_done(u32 dev_num, u32 if_id); 80*f1df9364SStefan Roese void ddr3_tip_print_bist_res(void); 81*f1df9364SStefan Roese struct pattern_info *ddr3_tip_get_pattern_table(void); 82*f1df9364SStefan Roese u16 *ddr3_tip_get_mask_results_dq_reg(void); 83*f1df9364SStefan Roese u16 *ddr3_tip_get_mask_results_pup_reg_map(void); 84*f1df9364SStefan Roese 85*f1df9364SStefan Roese #endif /* _DDR3_TRAINING_IP_ENGINE_H_ */ 86