ddr3_training_ip_engine.h 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) Marvell International Ltd. and its affiliates
  4. */
  5. #ifndef _DDR3_TRAINING_IP_ENGINE_H_
  6. #define _DDR3_TRAINING_IP_ENGINE_H_
  7. #include "ddr3_training_ip_def.h"
  8. #include "ddr3_training_ip_flow.h"
  9. #define EDGE_1 0
  10. #define EDGE_2 1
  11. #define ALL_PUP_TRAINING 0xe
  12. #define PUP_RESULT_EDGE_1_MASK 0xff
  13. #define PUP_RESULT_EDGE_2_MASK (0xff << 8)
  14. #define PUP_LOCK_RESULT_BIT 25
  15. #define GET_TAP_RESULT(reg, edge) \
  16. (((edge) == EDGE_1) ? ((reg) & PUP_RESULT_EDGE_1_MASK) : \
  17. (((reg) & PUP_RESULT_EDGE_2_MASK) >> 8));
  18. #define GET_LOCK_RESULT(reg) \
  19. (((reg) & (1<<PUP_LOCK_RESULT_BIT)) >> PUP_LOCK_RESULT_BIT)
  20. #define EDGE_FAILURE 128
  21. #define ALL_BITS_PER_PUP 128
  22. #define MIN_WINDOW_SIZE 6
  23. #define MAX_WINDOW_SIZE_RX 32
  24. #define MAX_WINDOW_SIZE_TX 64
  25. int ddr3_tip_training_ip_test(u32 dev_num, enum hws_training_result result_type,
  26. enum hws_search_dir search_dir,
  27. enum hws_dir direction,
  28. enum hws_edge_compare edge,
  29. u32 init_val1, u32 init_val2,
  30. u32 num_of_iterations, u32 start_pattern,
  31. u32 end_pattern);
  32. int ddr3_tip_load_pattern_to_mem(u32 dev_num, enum hws_pattern pattern);
  33. int ddr3_tip_load_all_pattern_to_mem(u32 dev_num);
  34. int ddr3_tip_read_training_result(u32 dev_num, u32 if_id,
  35. enum hws_access_type pup_access_type,
  36. u32 pup_num, u32 bit_num,
  37. enum hws_search_dir search,
  38. enum hws_dir direction,
  39. enum hws_training_result result_type,
  40. enum hws_training_load_op operation,
  41. u32 cs_num_type, u32 **load_res,
  42. int is_read_from_db, u8 cons_tap,
  43. int is_check_result_validity);
  44. int ddr3_tip_ip_training(u32 dev_num, enum hws_access_type access_type,
  45. u32 interface_num,
  46. enum hws_access_type pup_access_type,
  47. u32 pup_num, enum hws_training_result result_type,
  48. enum hws_control_element control_element,
  49. enum hws_search_dir search_dir, enum hws_dir direction,
  50. u32 interface_mask, u32 init_value, u32 num_iter,
  51. enum hws_pattern pattern,
  52. enum hws_edge_compare edge_comp,
  53. enum hws_ddr_cs cs_type, u32 cs_num,
  54. enum hws_training_ip_stat *train_status);
  55. int ddr3_tip_ip_training_wrapper(u32 dev_num, enum hws_access_type access_type,
  56. u32 if_id,
  57. enum hws_access_type pup_access_type,
  58. u32 pup_num,
  59. enum hws_training_result result_type,
  60. enum hws_control_element control_element,
  61. enum hws_search_dir search_dir,
  62. enum hws_dir direction,
  63. u32 interface_mask, u32 init_value1,
  64. u32 init_value2, u32 num_iter,
  65. enum hws_pattern pattern,
  66. enum hws_edge_compare edge_comp,
  67. enum hws_ddr_cs train_cs_type, u32 cs_num,
  68. enum hws_training_ip_stat *train_status);
  69. u8 mv_ddr_tip_sub_phy_byte_status_get(u32 if_id, u32 subphy_id);
  70. void mv_ddr_tip_sub_phy_byte_status_set(u32 if_id, u32 subphy_id, u8 byte_status_data);
  71. void ddr3_tip_print_bist_res(void);
  72. struct pattern_info *ddr3_tip_get_pattern_table(void);
  73. u16 *ddr3_tip_get_mask_results_dq_reg(void);
  74. u16 *ddr3_tip_get_mask_results_pup_reg_map(void);
  75. int mv_ddr_load_dm_pattern_to_odpg(enum hws_access_type access_type, enum hws_pattern pattern,
  76. enum dm_direction dm_dir);
  77. int mv_ddr_pattern_start_addr_set(struct pattern_info *pattern_tbl, enum hws_pattern pattern, u32 addr);
  78. #endif /* _DDR3_TRAINING_IP_ENGINE_H_ */