ddr3_training_ip_prv_if.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) Marvell International Ltd. and its affiliates
  4. */
  5. #ifndef _DDR3_TRAINING_IP_PRV_IF_H
  6. #define _DDR3_TRAINING_IP_PRV_IF_H
  7. #include "ddr3_training_ip.h"
  8. #include "ddr3_training_ip_flow.h"
  9. #include "ddr3_training_ip_bist.h"
  10. enum hws_static_config_type {
  11. WRITE_LEVELING_STATIC,
  12. READ_LEVELING_STATIC
  13. };
  14. struct ddr3_device_info {
  15. u32 device_id;
  16. u32 ck_delay;
  17. };
  18. typedef int (*HWS_TIP_DUNIT_MUX_SELECT_FUNC_PTR)(u8 dev_num, int enable);
  19. typedef int (*HWS_TIP_DUNIT_REG_READ_FUNC_PTR)(
  20. u8 dev_num, enum hws_access_type interface_access, u32 if_id,
  21. u32 offset, u32 *data, u32 mask);
  22. typedef int (*HWS_TIP_DUNIT_REG_WRITE_FUNC_PTR)(
  23. u8 dev_num, enum hws_access_type interface_access, u32 if_id,
  24. u32 offset, u32 data, u32 mask);
  25. typedef int (*HWS_TIP_GET_FREQ_CONFIG_INFO)(
  26. u8 dev_num, enum hws_ddr_freq freq,
  27. struct hws_tip_freq_config_info *freq_config_info);
  28. typedef int (*HWS_TIP_GET_DEVICE_INFO)(
  29. u8 dev_num, struct ddr3_device_info *info_ptr);
  30. typedef int (*HWS_GET_CS_CONFIG_FUNC_PTR)(
  31. u8 dev_num, u32 cs_mask, struct hws_cs_config_info *cs_info);
  32. typedef int (*HWS_SET_FREQ_DIVIDER_FUNC_PTR)(
  33. u8 dev_num, u32 if_id, enum hws_ddr_freq freq);
  34. typedef int (*HWS_GET_INIT_FREQ)(u8 dev_num, enum hws_ddr_freq *freq);
  35. typedef int (*HWS_TRAINING_IP_IF_WRITE_FUNC_PTR)(
  36. u32 dev_num, enum hws_access_type access_type, u32 dunit_id,
  37. u32 reg_addr, u32 data, u32 mask);
  38. typedef int (*HWS_TRAINING_IP_IF_READ_FUNC_PTR)(
  39. u32 dev_num, enum hws_access_type access_type, u32 dunit_id,
  40. u32 reg_addr, u32 *data, u32 mask);
  41. typedef int (*HWS_TRAINING_IP_BUS_WRITE_FUNC_PTR)(
  42. u32 dev_num, enum hws_access_type dunit_access_type, u32 if_id,
  43. enum hws_access_type phy_access_type, u32 phy_id,
  44. enum hws_ddr_phy phy_type, u32 reg_addr, u32 data);
  45. typedef int (*HWS_TRAINING_IP_BUS_READ_FUNC_PTR)(
  46. u32 dev_num, u32 if_id, enum hws_access_type phy_access_type,
  47. u32 phy_id, enum hws_ddr_phy phy_type, u32 reg_addr, u32 *data);
  48. typedef int (*HWS_TRAINING_IP_ALGO_RUN_FUNC_PTR)(
  49. u32 dev_num, enum hws_algo_type algo_type);
  50. typedef int (*HWS_TRAINING_IP_SET_FREQ_FUNC_PTR)(
  51. u32 dev_num, enum hws_access_type access_type, u32 if_id,
  52. enum hws_ddr_freq frequency);
  53. typedef int (*HWS_TRAINING_IP_INIT_CONTROLLER_FUNC_PTR)(
  54. u32 dev_num, struct init_cntr_param *init_cntr_prm);
  55. typedef int (*HWS_TRAINING_IP_PBS_RX_FUNC_PTR)(u32 dev_num);
  56. typedef int (*HWS_TRAINING_IP_PBS_TX_FUNC_PTR)(u32 dev_num);
  57. typedef int (*HWS_TRAINING_IP_SELECT_CONTROLLER_FUNC_PTR)(
  58. u32 dev_num, int enable);
  59. typedef int (*HWS_TRAINING_IP_TOPOLOGY_MAP_LOAD_FUNC_PTR)(
  60. u32 dev_num, struct mv_ddr_topology_map *tm);
  61. typedef int (*HWS_TRAINING_IP_STATIC_CONFIG_FUNC_PTR)(
  62. u32 dev_num, enum hws_ddr_freq frequency,
  63. enum hws_static_config_type static_config_type, u32 if_id);
  64. typedef int (*HWS_TRAINING_IP_EXTERNAL_READ_PTR)(
  65. u32 dev_num, u32 if_id, u32 ddr_addr, u32 num_bursts, u32 *data);
  66. typedef int (*HWS_TRAINING_IP_EXTERNAL_WRITE_PTR)(
  67. u32 dev_num, u32 if_id, u32 ddr_addr, u32 num_bursts, u32 *data);
  68. typedef int (*HWS_TRAINING_IP_BIST_ACTIVATE)(
  69. u32 dev_num, enum hws_pattern pattern, enum hws_access_type access_type,
  70. u32 if_num, enum hws_dir direction,
  71. enum hws_stress_jump addr_stress_jump,
  72. enum hws_pattern_duration duration,
  73. enum hws_bist_operation oper_type, u32 offset, u32 cs_num,
  74. u32 pattern_addr_length);
  75. typedef int (*HWS_TRAINING_IP_BIST_READ_RESULT)(
  76. u32 dev_num, u32 if_id, struct bist_result *pst_bist_result);
  77. typedef int (*HWS_TRAINING_IP_LOAD_TOPOLOGY)(u32 dev_num, u32 config_num);
  78. typedef int (*HWS_TRAINING_IP_READ_LEVELING)(u32 dev_num, u32 config_num);
  79. typedef int (*HWS_TRAINING_IP_WRITE_LEVELING)(u32 dev_num, u32 config_num);
  80. typedef u32 (*HWS_TRAINING_IP_GET_TEMP)(u8 dev_num);
  81. typedef u8 (*HWS_TRAINING_IP_GET_RATIO)(u32 freq);
  82. struct hws_tip_config_func_db {
  83. HWS_TIP_DUNIT_MUX_SELECT_FUNC_PTR tip_dunit_mux_select_func;
  84. void (*mv_ddr_dunit_read)(u32 addr, u32 mask, u32 *data);
  85. void (*mv_ddr_dunit_write)(u32 addr, u32 mask, u32 data);
  86. HWS_TIP_GET_FREQ_CONFIG_INFO tip_get_freq_config_info_func;
  87. HWS_TIP_GET_DEVICE_INFO tip_get_device_info_func;
  88. HWS_SET_FREQ_DIVIDER_FUNC_PTR tip_set_freq_divider_func;
  89. HWS_GET_CS_CONFIG_FUNC_PTR tip_get_cs_config_info;
  90. HWS_TRAINING_IP_GET_TEMP tip_get_temperature;
  91. HWS_TRAINING_IP_GET_RATIO tip_get_clock_ratio;
  92. HWS_TRAINING_IP_EXTERNAL_READ_PTR tip_external_read;
  93. HWS_TRAINING_IP_EXTERNAL_WRITE_PTR tip_external_write;
  94. int (*mv_ddr_phy_read)(enum hws_access_type phy_access,
  95. u32 phy, enum hws_ddr_phy phy_type,
  96. u32 reg_addr, u32 *data);
  97. int (*mv_ddr_phy_write)(enum hws_access_type phy_access,
  98. u32 phy, enum hws_ddr_phy phy_type,
  99. u32 reg_addr, u32 data,
  100. enum hws_operation op_type);
  101. };
  102. int ddr3_tip_init_config_func(u32 dev_num,
  103. struct hws_tip_config_func_db *config_func);
  104. int ddr3_tip_register_xsb_info(u32 dev_num,
  105. struct hws_xsb_info *xsb_info_table);
  106. enum hws_result *ddr3_tip_get_result_ptr(u32 stage);
  107. int ddr3_set_freq_config_info(struct hws_tip_freq_config_info *table);
  108. int print_device_info(u8 dev_num);
  109. #endif /* _DDR3_TRAINING_IP_PRV_IF_H */