mv_ddr_topology.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) Marvell International Ltd. and its affiliates
  4. */
  5. #ifndef _MV_DDR_TOPOLOGY_H
  6. #define _MV_DDR_TOPOLOGY_H
  7. /* ddr bus masks */
  8. #define BUS_MASK_32BIT 0xf
  9. #define BUS_MASK_32BIT_ECC 0x1f
  10. #define BUS_MASK_16BIT 0x3
  11. #define BUS_MASK_16BIT_ECC 0x13
  12. #define BUS_MASK_16BIT_ECC_PUP3 0xb
  13. #define MV_DDR_64BIT_BUS_MASK 0xff
  14. #define MV_DDR_64BIT_ECC_PUP8_BUS_MASK 0x1ff
  15. #define MV_DDR_32BIT_ECC_PUP8_BUS_MASK 0x10f
  16. /* source of ddr configuration data */
  17. enum mv_ddr_cfg_src {
  18. MV_DDR_CFG_DEFAULT, /* based on data in mv_ddr_topology_map structure */
  19. MV_DDR_CFG_SPD, /* based on data in spd */
  20. MV_DDR_CFG_USER, /* based on data from user */
  21. MV_DDR_CFG_STATIC, /* based on data from user in register-value format */
  22. MV_DDR_CFG_LAST
  23. };
  24. enum mv_ddr_num_of_sub_phys_per_ddr_unit {
  25. SINGLE_SUB_PHY = 1,
  26. TWO_SUB_PHYS = 2
  27. };
  28. enum mv_ddr_temperature {
  29. MV_DDR_TEMP_LOW,
  30. MV_DDR_TEMP_NORMAL,
  31. MV_DDR_TEMP_HIGH
  32. };
  33. enum mv_ddr_timing {
  34. MV_DDR_TIM_DEFAULT,
  35. MV_DDR_TIM_1T,
  36. MV_DDR_TIM_2T
  37. };
  38. enum mv_ddr_timing_data {
  39. MV_DDR_TCK_AVG_MIN, /* sdram min cycle time (t ck avg min) */
  40. MV_DDR_TAA_MIN, /* min cas latency time (t aa min) */
  41. MV_DDR_TRFC1_MIN, /* min refresh recovery delay time (t rfc1 min) */
  42. MV_DDR_TWR_MIN, /* min write recovery time (t wr min) */
  43. MV_DDR_TRCD_MIN, /* min ras to cas delay time (t rcd min) */
  44. MV_DDR_TRP_MIN, /* min row precharge delay time (t rp min) */
  45. MV_DDR_TRC_MIN, /* min active to active/refresh delay time (t rc min) */
  46. MV_DDR_TRAS_MIN, /* min active to precharge delay time (t ras min) */
  47. MV_DDR_TRRD_S_MIN, /* min activate to activate delay time (t rrd_s min), diff bank group */
  48. MV_DDR_TRRD_L_MIN, /* min activate to activate delay time (t rrd_l min), same bank group */
  49. MV_DDR_TFAW_MIN, /* min four activate window delay time (t faw min) */
  50. MV_DDR_TWTR_S_MIN, /* min write to read time (t wtr s min), diff bank group */
  51. MV_DDR_TWTR_L_MIN, /* min write to read time (t wtr l min), same bank group */
  52. MV_DDR_TDATA_LAST
  53. };
  54. enum mv_ddr_dev_width { /* sdram device width */
  55. MV_DDR_DEV_WIDTH_4BIT,
  56. MV_DDR_DEV_WIDTH_8BIT,
  57. MV_DDR_DEV_WIDTH_16BIT,
  58. MV_DDR_DEV_WIDTH_32BIT,
  59. MV_DDR_DEV_WIDTH_LAST
  60. };
  61. enum mv_ddr_die_capacity { /* total sdram capacity per die, megabits */
  62. MV_DDR_DIE_CAP_256MBIT,
  63. MV_DDR_DIE_CAP_512MBIT = 0,
  64. MV_DDR_DIE_CAP_1GBIT,
  65. MV_DDR_DIE_CAP_2GBIT,
  66. MV_DDR_DIE_CAP_4GBIT,
  67. MV_DDR_DIE_CAP_8GBIT,
  68. MV_DDR_DIE_CAP_16GBIT,
  69. MV_DDR_DIE_CAP_32GBIT,
  70. MV_DDR_DIE_CAP_12GBIT,
  71. MV_DDR_DIE_CAP_24GBIT,
  72. MV_DDR_DIE_CAP_LAST
  73. };
  74. enum mv_ddr_pkg_rank { /* number of package ranks per dimm */
  75. MV_DDR_PKG_RANK_1,
  76. MV_DDR_PKG_RANK_2,
  77. MV_DDR_PKG_RANK_3,
  78. MV_DDR_PKG_RANK_4,
  79. MV_DDR_PKG_RANK_5,
  80. MV_DDR_PKG_RANK_6,
  81. MV_DDR_PKG_RANK_7,
  82. MV_DDR_PKG_RANK_8,
  83. MV_DDR_PKG_RANK_LAST
  84. };
  85. enum mv_ddr_pri_bus_width { /* number of primary bus width bits */
  86. MV_DDR_PRI_BUS_WIDTH_8,
  87. MV_DDR_PRI_BUS_WIDTH_16,
  88. MV_DDR_PRI_BUS_WIDTH_32,
  89. MV_DDR_PRI_BUS_WIDTH_64,
  90. MV_DDR_PRI_BUS_WIDTH_LAST
  91. };
  92. enum mv_ddr_bus_width_ext { /* number of extension bus width bits */
  93. MV_DDR_BUS_WIDTH_EXT_0,
  94. MV_DDR_BUS_WIDTH_EXT_8,
  95. MV_DDR_BUS_WIDTH_EXT_LAST
  96. };
  97. enum mv_ddr_die_count {
  98. MV_DDR_DIE_CNT_1,
  99. MV_DDR_DIE_CNT_2,
  100. MV_DDR_DIE_CNT_3,
  101. MV_DDR_DIE_CNT_4,
  102. MV_DDR_DIE_CNT_5,
  103. MV_DDR_DIE_CNT_6,
  104. MV_DDR_DIE_CNT_7,
  105. MV_DDR_DIE_CNT_8,
  106. MV_DDR_DIE_CNT_LAST
  107. };
  108. unsigned int mv_ddr_cl_calc(unsigned int taa_min, unsigned int tclk);
  109. unsigned int mv_ddr_cwl_calc(unsigned int tclk);
  110. struct mv_ddr_topology_map *mv_ddr_topology_map_update(void);
  111. struct dram_config *mv_ddr_dram_config_update(void);
  112. unsigned short mv_ddr_bus_bit_mask_get(void);
  113. unsigned int mv_ddr_if_bus_width_get(void);
  114. #endif /* _MV_DDR_TOPOLOGY_H */