ddr3_axp_vars.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. /*
  2. * Copyright (C) Marvell International Ltd. and its affiliates
  3. *
  4. * SPDX-License-Identifier: GPL-2.0
  5. */
  6. #ifndef __AXP_VARS_H
  7. #define __AXP_VARS_H
  8. #include "ddr3_axp_config.h"
  9. #include "ddr3_axp_mc_static.h"
  10. #include "ddr3_axp_training_static.h"
  11. MV_DRAM_MODES ddr_modes[MV_DDR3_MODES_NUMBER] = {
  12. /* Conf name CPUFreq FabFreq Chip ID Chip/Board MC regs Training Values */
  13. /* db board values: */
  14. {"db_800-400", 0xA, 0x5, 0x0, A0, ddr3_A0_db_400, NULL},
  15. {"db_1200-300", 0x2, 0xC, 0x0, A0, ddr3_A0_db_400, NULL},
  16. {"db_1200-600", 0x2, 0x5, 0x0, A0, NULL, NULL},
  17. {"db_1333-667", 0x3, 0x5, 0x0, A0, ddr3_A0_db_667, ddr3_db_rev2_667},
  18. {"db_1600-800", 0xB, 0x5, 0x0, A0, ddr3_A0_db_667, ddr3_db_rev2_800},
  19. {"amc_1333-667", 0x3, 0x5, 0x0, A0_AMC, ddr3_A0_AMC_667, NULL},
  20. {"db_667-667", 0x9, 0x13, 0x0, Z1, ddr3_Z1_db_600, ddr3_db_667},
  21. {"db_800-400", 0xA, 0x1, 0x0, Z1, ddr3_Z1_db_300, ddr3_db_400},
  22. {"db_1066-533", 0x1, 0x1, 0x0, Z1, ddr3_Z1_db_300, ddr3_db_533},
  23. {"db_1200-300", 0x2, 0xC, 0x0, Z1, ddr3_Z1_db_300, ddr3_db_667},
  24. {"db_1200-600", 0x2, 0x5, 0x0, Z1, ddr3_Z1_db_600, NULL},
  25. {"db_1333-333", 0x3, 0xC, 0x0, Z1, ddr3_Z1_db_300, ddr3_db_400},
  26. {"db_1333-667", 0x3, 0x5, 0x0, Z1, ddr3_Z1_db_600, ddr3_db_667},
  27. /* pcac board values (Z1 device): */
  28. {"pcac_1200-600", 0x2, 0x5, 0x0, Z1_PCAC, ddr3_Z1_db_600,
  29. ddr3_pcac_600},
  30. /* rd board values (Z1 device): */
  31. {"rd_667_0", 0x3, 0x5, 0x0, Z1_RD_SLED, ddr3_Z1_db_600, ddr3_rd_667_0},
  32. {"rd_667_1", 0x3, 0x5, 0x1, Z1_RD_SLED, ddr3_Z1_db_600, ddr3_rd_667_1},
  33. {"rd_667_2", 0x3, 0x5, 0x2, Z1_RD_SLED, ddr3_Z1_db_600, ddr3_rd_667_2},
  34. {"rd_667_3", 0x3, 0x5, 0x3, Z1_RD_SLED, ddr3_Z1_db_600, ddr3_rd_667_3}
  35. };
  36. /* ODT settings - if needed update the following tables: (ODT_OPT - represents the CS configuration bitmap) */
  37. u16 odt_static[ODT_OPT][MAX_CS] = { /* NearEnd/FarEnd */
  38. {0, 0, 0, 0}, /* 0000 0/0 - Not supported */
  39. {ODT40, 0, 0, 0}, /* 0001 0/1 */
  40. {0, 0, 0, 0}, /* 0010 0/0 - Not supported */
  41. {ODT40, ODT40, 0, 0}, /* 0011 0/2 */
  42. {0, 0, ODT40, 0}, /* 0100 1/0 */
  43. {ODT30, 0, ODT30, 0}, /* 0101 1/1 */
  44. {0, 0, 0, 0}, /* 0110 0/0 - Not supported */
  45. {ODT120, ODT20, ODT20, 0}, /* 0111 1/2 */
  46. {0, 0, 0, 0}, /* 1000 0/0 - Not supported */
  47. {0, 0, 0, 0}, /* 1001 0/0 - Not supported */
  48. {0, 0, 0, 0}, /* 1010 0/0 - Not supported */
  49. {0, 0, 0, 0}, /* 1011 0/0 - Not supported */
  50. {0, 0, ODT40, 0}, /* 1100 2/0 */
  51. {ODT20, 0, ODT120, ODT20}, /* 1101 2/1 */
  52. {0, 0, 0, 0}, /* 1110 0/0 - Not supported */
  53. {ODT120, ODT30, ODT120, ODT30} /* 1111 2/2 */
  54. };
  55. u16 odt_dynamic[ODT_OPT][MAX_CS] = { /* NearEnd/FarEnd */
  56. {0, 0, 0, 0}, /* 0000 0/0 */
  57. {0, 0, 0, 0}, /* 0001 0/1 */
  58. {0, 0, 0, 0}, /* 0010 0/0 - Not supported */
  59. {0, 0, 0, 0}, /* 0011 0/2 */
  60. {0, 0, 0, 0}, /* 0100 1/0 */
  61. {ODT120D, 0, ODT120D, 0}, /* 0101 1/1 */
  62. {0, 0, 0, 0}, /* 0110 0/0 - Not supported */
  63. {0, 0, ODT120D, 0}, /* 0111 1/2 */
  64. {0, 0, 0, 0}, /* 1000 0/0 - Not supported */
  65. {0, 0, 0, 0}, /* 1001 0/0 - Not supported */
  66. {0, 0, 0, 0}, /* 1010 0/0 - Not supported */
  67. {0, 0, 0, 0}, /* 1011 0/0 - Not supported */
  68. {0, 0, 0, 0}, /* 1100 2/0 */
  69. {ODT120D, 0, 0, 0}, /* 1101 2/1 */
  70. {0, 0, 0, 0}, /* 1110 0/0 - Not supported */
  71. {0, 0, 0, 0} /* 1111 2/2 */
  72. };
  73. u32 odt_config[ODT_OPT] = {
  74. 0, 0x00010000, 0, 0x00030000, 0x04000000, 0x05050104, 0, 0x07430340, 0,
  75. 0, 0, 0,
  76. 0x30000, 0x1C0D100C, 0, 0x3CC330C0
  77. };
  78. /*
  79. * User can manually set SPD values (in case SPD is not available on
  80. * DIMM/System).
  81. * SPD Values can simplify calculating the DUNIT registers values
  82. */
  83. u8 spd_data[SPD_SIZE] = {
  84. /* AXP DB Board DIMM SPD Values - manually set */
  85. 0x92, 0x10, 0x0B, 0x2, 0x3, 0x19, 0x0, 0x9, 0x09, 0x52, 0x1, 0x8, 0x0C,
  86. 0x0, 0x7E, 0x0, 0x69, 0x78,
  87. 0x69, 0x30, 0x69, 0x11, 0x20, 0x89, 0x0, 0x5, 0x3C, 0x3C, 0x0, 0xF0,
  88. 0x82, 0x5, 0x80, 0x0, 0x0, 0x0,
  89. 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  90. 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  91. 0x0, 0x0, 0x0, 0x0, 0x0F, 0x1, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  92. 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  93. 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  94. 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  95. 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  96. 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  97. 0x0, 0x80, 0x2C, 0x1, 0x10, 0x23, 0x35, 0x28, 0xEB, 0xCA, 0x19, 0x8F
  98. };
  99. /*
  100. * Controller Specific configurations Starts Here - DO NOT MODIFY
  101. */
  102. /* Frequency - values are 1/HCLK in ps */
  103. u32 cpu_fab_clk_to_hclk[FAB_OPT][CLK_CPU] =
  104. /* CPU Frequency:
  105. 1000 1066 1200 1333 1500 1666 1800 2000 600 667 800 1600 Fabric */
  106. {
  107. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  108. {0, 0, 0, 0, 0, 0, 0, 0, 0, 3000, 2500, 0},
  109. {0, 0, 0, 0, 0, 0, 0, 0, 0, 4500, 3750, 0},
  110. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  111. {0, 0, 2500, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  112. {4000, 3750, 3333, 3000, 2666, 2400, 0, 0, 0, 0, 5000, 2500},
  113. {0, 0, 0, 0, 0, 0, 0, 0, 0, 3000, 0, 0},
  114. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  115. {2500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  116. {0, 0, 5000, 0, 4000, 0, 0, 0, 0, 0, 0, 3750},
  117. {5000, 0, 0, 3750, 3333, 0, 0, 0, 0, 0, 0, 3125},
  118. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  119. {0, 0, 3330, 3000, 0, 0, 0, 0, 0, 0, 0, 2500},
  120. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3750},
  121. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  122. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  123. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  124. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  125. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  126. {0, 0, 0, 0, 0, 0, 0, 0, 0, 3000, 2500, 0},
  127. {3000, 0, 2500, 0, 0, 0, 0, 0, 0, 0, 3750, 0}
  128. };
  129. u32 cpu_ddr_ratios[FAB_OPT][CLK_CPU] =
  130. /* CPU Frequency:
  131. 1000 1066 1200 1333 1500 1666 1800 2000 600 667 800 1600 Fabric */
  132. {
  133. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  134. {0, 0, 0, 0, 0, 0, 0, 0, 0, DDR_333, DDR_400, 0},
  135. {0, 0, 0, 0, 0, 0, 0, 0, 0, DDR_444, DDR_533, 0},
  136. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  137. {0, 0, DDR_400, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  138. {DDR_500, DDR_533, DDR_600, DDR_666, DDR_750, DDR_833, 0, 0, 0, 0,
  139. DDR_400, DDR_800},
  140. {0, 0, 0, 0, 0, 0, 0, 0, 0, DDR_333, 0, 0},
  141. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  142. {DDR_400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  143. {0, 0, DDR_400, 0, DDR_500, 0, 0, 0, 0, 0, 0, DDR_533},
  144. {DDR_400, 0, 0, DDR_533, DDR_600, 0, 0, 0, 0, 0, 0, DDR_640},
  145. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  146. {0, 0, DDR_300, DDR_333, 0, 0, 0, 0, 0, 0, 0, DDR_400},
  147. {0, 0, 0, 0, 0, 0, DDR_600, DDR_666, 0, 0, 0, DDR_533},
  148. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  149. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  150. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  151. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  152. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  153. {0, 0, 0, 0, 0, 0, 0, 0, 0, DDR_666, DDR_800, 0},
  154. {DDR_666, 0, DDR_800, 0, 0, 0, 0, 0, 0, 0, DDR_533, 0}
  155. };
  156. u8 div_ratio1to1[CLK_VCO][CLK_DDR] =
  157. /* DDR Frequency:
  158. 100 300 360 400 444 500 533 600 666 750 800 833 */
  159. { {0xA, 3, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1000 */
  160. {0xB, 3, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1066 */
  161. {0xC, 4, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1200 */
  162. {0xD, 4, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0}, /* 1:1 CLK_CPU_1333 */
  163. {0xF, 5, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1500 */
  164. {0x11, 5, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1666 */
  165. {0x12, 6, 5, 4, 0, 0, 0, 3, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1800 */
  166. {0x14, 7, 0, 5, 0, 4, 0, 0, 3, 0, 0, 0}, /* 1:1 CLK_CPU_2000 */
  167. {0x6, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_600 */
  168. {0x6, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_667 */
  169. {0x8, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_800 */
  170. {0x10, 5, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1600 */
  171. {0x14, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1000 VCO_2000 */
  172. {0x15, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1066 VCO_2133 */
  173. {0x18, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1200 VCO_2400 */
  174. {0x1A, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1333 VCO_2666 */
  175. {0x1E, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1500 VCO_3000 */
  176. {0x21, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1666 VCO_3333 */
  177. {0x24, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1800 VCO_3600 */
  178. {0x28, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_2000 VCO_4000 */
  179. {0xC, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_600 VCO_1200 */
  180. {0xD, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_667 VCO_1333 */
  181. {0x10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_800 VCO_1600 */
  182. {0x20, 10, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0} /* 1:1 CLK_CPU_1600 VCO_3200 */
  183. };
  184. u8 div_ratio2to1[CLK_VCO][CLK_DDR] =
  185. /* DDR Frequency:
  186. 100 300 360 400 444 500 533 600 666 750 800 833 */
  187. { {0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0}, /* 2:1 CLK_CPU_1000 */
  188. {0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1066 */
  189. {0, 0, 0, 3, 5, 0, 0, 2, 0, 0, 3, 3}, /* 2:1 CLK_CPU_1200 */
  190. {0, 0, 0, 0, 0, 0, 5, 0, 2, 0, 3, 0}, /* 2:1 CLK_CPU_1333 */
  191. {0, 0, 0, 0, 0, 3, 0, 5, 0, 2, 0, 0}, /* 2:1 CLK_CPU_1500 */
  192. {0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 2}, /* 2:1 CLK_CPU_1666 */
  193. {0, 0, 0, 0, 0, 0, 0, 3, 0, 5, 0, 0}, /* 2:1 CLK_CPU_1800 */
  194. {0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 5}, /* 2:1 CLK_CPU_2000 */
  195. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_600 */
  196. {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, /* 2:1 CLK_CPU_667 */
  197. {0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0}, /* 2:1 CLK_CPU_800 */
  198. {0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0}, /* 2:1 CLK_CPU_1600 */
  199. {0, 0, 0, 5, 0, 0, 0, 0, 3, 0, 0, 0}, /* 2:1 CLK_CPU_1000 VCO_2000 */
  200. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1066 VCO_2133 */
  201. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0}, /* 2:1 CLK_CPU_1200 VCO_2400 */
  202. {0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1333 VCO_2666 */
  203. {0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1500 VCO_3000 */
  204. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1666 VCO_3333 */
  205. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1800 VCO_3600 */
  206. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_2000 VCO_4000 */
  207. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_600 VCO_1200 */
  208. {0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_667 VCO_1333 */
  209. {0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_800 VCO_1600 */
  210. {0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0} /* 2:1 CLK_CPU_1600 VCO_3200 */
  211. };
  212. #endif /* __AXP_VARS_H */