ddr3_k2g.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * K2G: DDR3 initialization
  4. *
  5. * (C) Copyright 2015
  6. * Texas Instruments Incorporated, <www.ti.com>
  7. */
  8. #include <common.h>
  9. #include "ddr3_cfg.h"
  10. #include <asm/arch/ddr3.h>
  11. #include <asm/arch/hardware.h>
  12. #include "board.h"
  13. /* K2G GP EVM DDR3 Configuration */
  14. static struct ddr3_phy_config ddr3phy_800_2g = {
  15. .pllcr = 0x000DC000ul,
  16. .pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
  17. .pgcr1_val = ((1 << 2) | (1 << 7) | (1 << 23)),
  18. .ptr0 = 0x42C21590ul,
  19. .ptr1 = 0xD05612C0ul,
  20. .ptr2 = 0,
  21. .ptr3 = 0x06C30D40ul,
  22. .ptr4 = 0x06413880ul,
  23. .dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK),
  24. .dcr_val = ((1 << 10)),
  25. .dtpr0 = 0x550F6644ul,
  26. .dtpr1 = 0x328341E0ul,
  27. .dtpr2 = 0x50022A00ul,
  28. .mr0 = 0x00001430ul,
  29. .mr1 = 0x00000006ul,
  30. .mr2 = 0x00000000ul,
  31. .dtcr = 0x710035C7ul,
  32. .pgcr2 = 0x00F03D09ul,
  33. .zq0cr1 = 0x0001005Dul,
  34. .zq1cr1 = 0x0001005Bul,
  35. .zq2cr1 = 0x0001005Bul,
  36. .pir_v1 = 0x00000033ul,
  37. .datx8_2_mask = 0,
  38. .datx8_2_val = 0,
  39. .datx8_3_mask = 0,
  40. .datx8_3_val = 0,
  41. .datx8_4_mask = 0,
  42. .datx8_4_val = ((1 << 0)),
  43. .datx8_5_mask = DXEN_MASK,
  44. .datx8_5_val = 0,
  45. .datx8_6_mask = DXEN_MASK,
  46. .datx8_6_val = 0,
  47. .datx8_7_mask = DXEN_MASK,
  48. .datx8_7_val = 0,
  49. .datx8_8_mask = DXEN_MASK,
  50. .datx8_8_val = 0,
  51. .pir_v2 = 0x00000F81ul,
  52. };
  53. static struct ddr3_phy_config ddr3phy_1066_2g = {
  54. .pllcr = 0x000DC000ul,
  55. .pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
  56. .pgcr1_val = ((1 << 2) | (2 << 7) | (1 << 23)),
  57. .ptr0 = 0x42C21590ul,
  58. .ptr1 = 0xD05612C0ul,
  59. .ptr2 = 0,
  60. .ptr3 = 0x0904111Dul,
  61. .ptr4 = 0x0859A072ul,
  62. .dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK),
  63. .dcr_val = ((1 << 10)),
  64. .dtpr0 = 0x6D147744ul,
  65. .dtpr1 = 0x32845A80ul,
  66. .dtpr2 = 0x50023600ul,
  67. .mr0 = 0x00001830ul,
  68. .mr1 = 0x00000006ul,
  69. .mr2 = 0x00000000ul,
  70. .dtcr = 0x710035C7ul,
  71. .pgcr2 = 0x00F05159ul,
  72. .zq0cr1 = 0x0001005Dul,
  73. .zq1cr1 = 0x0001005Bul,
  74. .zq2cr1 = 0x0001005Bul,
  75. .pir_v1 = 0x00000033ul,
  76. .datx8_2_mask = 0,
  77. .datx8_2_val = 0,
  78. .datx8_3_mask = 0,
  79. .datx8_3_val = 0,
  80. .datx8_4_mask = 0,
  81. .datx8_4_val = ((1 << 0)),
  82. .datx8_5_mask = DXEN_MASK,
  83. .datx8_5_val = 0,
  84. .datx8_6_mask = DXEN_MASK,
  85. .datx8_6_val = 0,
  86. .datx8_7_mask = DXEN_MASK,
  87. .datx8_7_val = 0,
  88. .datx8_8_mask = DXEN_MASK,
  89. .datx8_8_val = 0,
  90. .pir_v2 = 0x00000F81ul,
  91. };
  92. static struct ddr3_emif_config ddr3_800_2g = {
  93. .sdcfg = 0x62005662ul,
  94. .sdtim1 = 0x0A385033ul,
  95. .sdtim2 = 0x00001CA5ul,
  96. .sdtim3 = 0x21ADFF32ul,
  97. .sdtim4 = 0x533F067Ful,
  98. .zqcfg = 0x70073200ul,
  99. .sdrfc = 0x00000C34ul,
  100. };
  101. static struct ddr3_emif_config ddr3_1066_2g = {
  102. .sdcfg = 0x62005662ul,
  103. .sdtim1 = 0x0E4C6843ul,
  104. .sdtim2 = 0x00001CC6ul,
  105. .sdtim3 = 0x323DFF32ul,
  106. .sdtim4 = 0x533F08AFul,
  107. .zqcfg = 0x70073200ul,
  108. .sdrfc = 0x00001044ul,
  109. };
  110. /* K2G ICE evm DDR3 Configuration */
  111. static struct ddr3_phy_config ddr3phy_800_512mb = {
  112. .pllcr = 0x000DC000ul,
  113. .pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK),
  114. .pgcr1_val = ((1 << 2) | (2 << 7) | (1 << 23)),
  115. .ptr0 = 0x42C21590ul,
  116. .ptr1 = 0xD05612C0ul,
  117. .ptr2 = 0,
  118. .ptr3 = 0x06C30D40ul,
  119. .ptr4 = 0x06413880ul,
  120. .dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK),
  121. .dcr_val = ((1 << 10)),
  122. .dtpr0 = 0x550E6644ul,
  123. .dtpr1 = 0x32834200ul,
  124. .dtpr2 = 0x50022A00ul,
  125. .mr0 = 0x00001430ul,
  126. .mr1 = 0x00000006ul,
  127. .mr2 = 0x00000008ul,
  128. .dtcr = 0x710035C7ul,
  129. .pgcr2 = 0x00F03D09ul,
  130. .zq0cr1 = 0x0001005Dul,
  131. .zq1cr1 = 0x0001005Bul,
  132. .zq2cr1 = 0x0001005Bul,
  133. .pir_v1 = 0x00000033ul,
  134. .datx8_2_mask = DXEN_MASK,
  135. .datx8_2_val = 0,
  136. .datx8_3_mask = DXEN_MASK,
  137. .datx8_3_val = 0,
  138. .datx8_4_mask = DXEN_MASK,
  139. .datx8_4_val = 0,
  140. .datx8_5_mask = DXEN_MASK,
  141. .datx8_5_val = 0,
  142. .datx8_6_mask = DXEN_MASK,
  143. .datx8_6_val = 0,
  144. .datx8_7_mask = DXEN_MASK,
  145. .datx8_7_val = 0,
  146. .datx8_8_mask = DXEN_MASK,
  147. .datx8_8_val = 0,
  148. .pir_v2 = 0x00000F81ul,
  149. };
  150. static struct ddr3_emif_config ddr3_800_512mb = {
  151. .sdcfg = 0x62006662ul,
  152. .sdtim1 = 0x0A385033ul,
  153. .sdtim2 = 0x00001CA5ul,
  154. .sdtim3 = 0x21ADFF32ul,
  155. .sdtim4 = 0x533F067Ful,
  156. .zqcfg = 0x70073200ul,
  157. .sdrfc = 0x00000C34ul,
  158. };
  159. u32 ddr3_init(void)
  160. {
  161. /* Reset DDR3 PHY after PLL enabled */
  162. ddr3_reset_ddrphy();
  163. if (board_is_k2g_g1()) {
  164. ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_1066_2g);
  165. ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_1066_2g);
  166. } else if (board_is_k2g_gp()) {
  167. ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_800_2g);
  168. ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_800_2g);
  169. } else if (board_is_k2g_ice()) {
  170. ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_800_512mb);
  171. ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_800_512mb);
  172. }
  173. return 0;
  174. }
  175. inline int ddr3_get_size(void)
  176. {
  177. return 2;
  178. }