hw_data.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629
  1. /*
  2. *
  3. * HW data initialization for OMAP5
  4. *
  5. * (C) Copyright 2013
  6. * Texas Instruments, <www.ti.com>
  7. *
  8. * Sricharan R <r.sricharan@ti.com>
  9. *
  10. * SPDX-License-Identifier: GPL-2.0+
  11. */
  12. #include <common.h>
  13. #include <palmas.h>
  14. #include <asm/arch/omap.h>
  15. #include <asm/arch/sys_proto.h>
  16. #include <asm/omap_common.h>
  17. #include <asm/arch/clock.h>
  18. #include <asm/omap_gpio.h>
  19. #include <asm/io.h>
  20. #include <asm/emif.h>
  21. struct prcm_regs const **prcm =
  22. (struct prcm_regs const **) OMAP_SRAM_SCRATCH_PRCM_PTR;
  23. struct dplls const **dplls_data =
  24. (struct dplls const **) OMAP_SRAM_SCRATCH_DPLLS_PTR;
  25. struct vcores_data const **omap_vcores =
  26. (struct vcores_data const **) OMAP_SRAM_SCRATCH_VCORES_PTR;
  27. struct omap_sys_ctrl_regs const **ctrl =
  28. (struct omap_sys_ctrl_regs const **)OMAP_SRAM_SCRATCH_SYS_CTRL;
  29. /* OPP HIGH FREQUENCY for ES2.0 */
  30. static const struct dpll_params mpu_dpll_params_1_5ghz[NUM_SYS_CLKS] = {
  31. {125, 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  32. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  33. {625, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  34. {625, 7, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  35. {750, 12, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  36. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  37. {625, 15, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  38. };
  39. /* OPP NOM FREQUENCY for ES1.0 */
  40. static const struct dpll_params mpu_dpll_params_800mhz[NUM_SYS_CLKS] = {
  41. {200, 2, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  42. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  43. {1000, 20, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  44. {375, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  45. {400, 12, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  46. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  47. {375, 17, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  48. };
  49. /* OPP LOW FREQUENCY for ES1.0 */
  50. static const struct dpll_params mpu_dpll_params_400mhz[NUM_SYS_CLKS] = {
  51. {200, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  52. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  53. {1000, 20, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  54. {375, 8, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  55. {400, 12, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  56. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  57. {375, 17, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  58. };
  59. /* OPP LOW FREQUENCY for ES2.0 */
  60. static const struct dpll_params mpu_dpll_params_499mhz[NUM_SYS_CLKS] = {
  61. {499, 11, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  62. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  63. {297, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  64. {493, 18, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  65. {499, 25, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  66. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  67. {493, 37, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  68. };
  69. /* OPP NOM FREQUENCY for OMAP5 ES2.0, and DRA7 ES1.0 */
  70. static const struct dpll_params mpu_dpll_params_1ghz[NUM_SYS_CLKS] = {
  71. {250, 2, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  72. {500, 9, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  73. {119, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  74. {625, 11, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  75. {500, 12, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  76. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  77. {625, 23, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  78. };
  79. static const struct dpll_params
  80. core_dpll_params_2128mhz_ddr532[NUM_SYS_CLKS] = {
  81. {266, 2, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 12 MHz */
  82. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  83. {443, 6, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 16.8 MHz */
  84. {277, 4, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 19.2 MHz */
  85. {368, 8, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 26 MHz */
  86. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  87. {277, 9, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1} /* 38.4 MHz */
  88. };
  89. static const struct dpll_params
  90. core_dpll_params_2128mhz_ddr532_es2[NUM_SYS_CLKS] = {
  91. {266, 2, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 12 MHz */
  92. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  93. {443, 6, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 16.8 MHz */
  94. {277, 4, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 19.2 MHz */
  95. {368, 8, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 26 MHz */
  96. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  97. {277, 9, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6} /* 38.4 MHz */
  98. };
  99. static const struct dpll_params
  100. core_dpll_params_2128mhz_dra7xx[NUM_SYS_CLKS] = {
  101. {266, 2, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 12 MHz */
  102. {266, 4, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 20 MHz */
  103. {443, 6, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 16.8 MHz */
  104. {277, 4, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 19.2 MHz */
  105. {368, 8, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 26 MHz */
  106. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  107. {277, 9, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 38.4 MHz */
  108. };
  109. static const struct dpll_params
  110. core_dpll_params_2128mhz_ddr266[NUM_SYS_CLKS] = {
  111. {266, 2, 4, 8, 8, 8, 62, 10, -1, 10, 14, -1}, /* 12 MHz */
  112. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  113. {443, 6, 4, 8, 8, 8, 62, 10, -1, 10, 14, -1}, /* 16.8 MHz */
  114. {277, 4, 4, 8, 8, 8, 62, 10, -1, 10, 14, -1}, /* 19.2 MHz */
  115. {368, 8, 4, 8, 8, 8, 62, 10, -1, 10, 14, -1}, /* 26 MHz */
  116. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  117. {277, 9, 4, 8, 8, 8, 62, 10, -1, 10, 14, -1} /* 38.4 MHz */
  118. };
  119. static const struct dpll_params
  120. core_dpll_params_2128mhz_ddr266_es2[NUM_SYS_CLKS] = {
  121. {266, 2, 4, 8, 8, 8, 62, 5, 12, 10, 14, 12}, /* 12 MHz */
  122. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  123. {443, 6, 4, 8, 8, 8, 62, 5, 12, 10, 14, 12}, /* 16.8 MHz */
  124. {277, 4, 4, 8, 8, 8, 62, 5, 12, 10, 14, 12}, /* 19.2 MHz */
  125. {368, 8, 4, 8, 8, 8, 62, 5, 12, 10, 14, 12}, /* 26 MHz */
  126. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  127. {277, 9, 4, 8, 8, 8, 62, 5, 12, 10, 14, 12} /* 38.4 MHz */
  128. };
  129. static const struct dpll_params per_dpll_params_768mhz[NUM_SYS_CLKS] = {
  130. {32, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}, /* 12 MHz */
  131. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  132. {160, 6, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}, /* 16.8 MHz */
  133. {20, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}, /* 19.2 MHz */
  134. {192, 12, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}, /* 26 MHz */
  135. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  136. {10, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1} /* 38.4 MHz */
  137. };
  138. static const struct dpll_params per_dpll_params_768mhz_es2[NUM_SYS_CLKS] = {
  139. {32, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 12 MHz */
  140. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  141. {160, 6, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 16.8 MHz */
  142. {20, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 19.2 MHz */
  143. {192, 12, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 26 MHz */
  144. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  145. {10, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1} /* 38.4 MHz */
  146. };
  147. static const struct dpll_params per_dpll_params_768mhz_dra7xx[NUM_SYS_CLKS] = {
  148. {32, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 12 MHz */
  149. {96, 4, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 20 MHz */
  150. {160, 6, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 16.8 MHz */
  151. {20, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 19.2 MHz */
  152. {192, 12, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 26 MHz */
  153. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  154. {10, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1}, /* 38.4 MHz */
  155. };
  156. static const struct dpll_params iva_dpll_params_2330mhz[NUM_SYS_CLKS] = {
  157. {1165, 11, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  158. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  159. {208, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  160. {182, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  161. {224, 4, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  162. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  163. {91, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  164. };
  165. static const struct dpll_params iva_dpll_params_2330mhz_dra7xx[NUM_SYS_CLKS] = {
  166. {1165, 11, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  167. {233, 3, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  168. {208, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  169. {182, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  170. {224, 4, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  171. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  172. {91, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  173. };
  174. /* ABE M & N values with sys_clk as source */
  175. static const struct dpll_params
  176. abe_dpll_params_sysclk_196608khz[NUM_SYS_CLKS] = {
  177. {49, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  178. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  179. {35, 5, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  180. {46, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  181. {34, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  182. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  183. {64, 24, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  184. };
  185. /* ABE M & N values with 32K clock as source */
  186. static const struct dpll_params abe_dpll_params_32k_196608khz = {
  187. 750, 0, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1
  188. };
  189. /* ABE M & N values with sysclk2(22.5792 MHz) as input */
  190. static const struct dpll_params
  191. abe_dpll_params_sysclk2_361267khz[NUM_SYS_CLKS] = {
  192. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  193. {16, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  194. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  195. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  196. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  197. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  198. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  199. };
  200. static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {
  201. {400, 4, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  202. {480, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  203. {400, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  204. {400, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  205. {480, 12, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  206. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  207. {400, 15, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  208. };
  209. static const struct dpll_params ddr_dpll_params_2128mhz[NUM_SYS_CLKS] = {
  210. {266, 2, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  211. {266, 4, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  212. {190, 2, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  213. {665, 11, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  214. {532, 12, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  215. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  216. {665, 23, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  217. };
  218. static const struct dpll_params gmac_dpll_params_2000mhz[NUM_SYS_CLKS] = {
  219. {250, 2, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 12 MHz */
  220. {250, 4, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 20 MHz */
  221. {119, 1, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  222. {625, 11, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  223. {500, 12, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 26 MHz */
  224. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  225. {625, 23, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  226. };
  227. struct dplls omap5_dplls_es1 = {
  228. .mpu = mpu_dpll_params_800mhz,
  229. .core = core_dpll_params_2128mhz_ddr532,
  230. .per = per_dpll_params_768mhz,
  231. .iva = iva_dpll_params_2330mhz,
  232. #ifdef CONFIG_SYS_OMAP_ABE_SYSCK
  233. .abe = abe_dpll_params_sysclk_196608khz,
  234. #else
  235. .abe = &abe_dpll_params_32k_196608khz,
  236. #endif
  237. .usb = usb_dpll_params_1920mhz,
  238. .ddr = NULL
  239. };
  240. struct dplls omap5_dplls_es2 = {
  241. .mpu = mpu_dpll_params_1ghz,
  242. .core = core_dpll_params_2128mhz_ddr532_es2,
  243. .per = per_dpll_params_768mhz_es2,
  244. .iva = iva_dpll_params_2330mhz,
  245. #ifdef CONFIG_SYS_OMAP_ABE_SYSCK
  246. .abe = abe_dpll_params_sysclk_196608khz,
  247. #else
  248. .abe = &abe_dpll_params_32k_196608khz,
  249. #endif
  250. .usb = usb_dpll_params_1920mhz,
  251. .ddr = NULL
  252. };
  253. struct dplls dra7xx_dplls = {
  254. .mpu = mpu_dpll_params_1ghz,
  255. .core = core_dpll_params_2128mhz_dra7xx,
  256. .per = per_dpll_params_768mhz_dra7xx,
  257. .abe = abe_dpll_params_sysclk2_361267khz,
  258. .iva = iva_dpll_params_2330mhz_dra7xx,
  259. .usb = usb_dpll_params_1920mhz,
  260. .ddr = ddr_dpll_params_2128mhz,
  261. .gmac = gmac_dpll_params_2000mhz,
  262. };
  263. struct pmic_data palmas = {
  264. .base_offset = PALMAS_SMPS_BASE_VOLT_UV,
  265. .step = 10000, /* 10 mV represented in uV */
  266. /*
  267. * Offset codes 1-6 all give the base voltage in Palmas
  268. * Offset code 0 switches OFF the SMPS
  269. */
  270. .start_code = 6,
  271. .i2c_slave_addr = SMPS_I2C_SLAVE_ADDR,
  272. .pmic_bus_init = sri2c_init,
  273. .pmic_write = omap_vc_bypass_send_value,
  274. };
  275. struct pmic_data tps659038 = {
  276. .base_offset = PALMAS_SMPS_BASE_VOLT_UV,
  277. .step = 10000, /* 10 mV represented in uV */
  278. /*
  279. * Offset codes 1-6 all give the base voltage in Palmas
  280. * Offset code 0 switches OFF the SMPS
  281. */
  282. .start_code = 6,
  283. .i2c_slave_addr = TPS659038_I2C_SLAVE_ADDR,
  284. .pmic_bus_init = gpi2c_init,
  285. .pmic_write = palmas_i2c_write_u8,
  286. };
  287. struct vcores_data omap5430_volts = {
  288. .mpu.value = VDD_MPU,
  289. .mpu.addr = SMPS_REG_ADDR_12_MPU,
  290. .mpu.pmic = &palmas,
  291. .core.value = VDD_CORE,
  292. .core.addr = SMPS_REG_ADDR_8_CORE,
  293. .core.pmic = &palmas,
  294. .mm.value = VDD_MM,
  295. .mm.addr = SMPS_REG_ADDR_45_IVA,
  296. .mm.pmic = &palmas,
  297. };
  298. struct vcores_data omap5430_volts_es2 = {
  299. .mpu.value = VDD_MPU_ES2,
  300. .mpu.addr = SMPS_REG_ADDR_12_MPU,
  301. .mpu.pmic = &palmas,
  302. .core.value = VDD_CORE_ES2,
  303. .core.addr = SMPS_REG_ADDR_8_CORE,
  304. .core.pmic = &palmas,
  305. .mm.value = VDD_MM_ES2,
  306. .mm.addr = SMPS_REG_ADDR_45_IVA,
  307. .mm.pmic = &palmas,
  308. };
  309. struct vcores_data dra752_volts = {
  310. .mpu.value = VDD_MPU_DRA752,
  311. .mpu.efuse.reg = STD_FUSE_OPP_VMIN_MPU_NOM,
  312. .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  313. .mpu.addr = TPS659038_REG_ADDR_SMPS12_MPU,
  314. .mpu.pmic = &tps659038,
  315. .eve.value = VDD_EVE_DRA752,
  316. .eve.efuse.reg = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
  317. .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  318. .eve.addr = TPS659038_REG_ADDR_SMPS45_EVE,
  319. .eve.pmic = &tps659038,
  320. .gpu.value = VDD_GPU_DRA752,
  321. .gpu.efuse.reg = STD_FUSE_OPP_VMIN_GPU_NOM,
  322. .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  323. .gpu.addr = TPS659038_REG_ADDR_SMPS6_GPU,
  324. .gpu.pmic = &tps659038,
  325. .core.value = VDD_CORE_DRA752,
  326. .core.efuse.reg = STD_FUSE_OPP_VMIN_CORE_NOM,
  327. .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  328. .core.addr = TPS659038_REG_ADDR_SMPS7_CORE,
  329. .core.pmic = &tps659038,
  330. .iva.value = VDD_IVA_DRA752,
  331. .iva.efuse.reg = STD_FUSE_OPP_VMIN_IVA_NOM,
  332. .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  333. .iva.addr = TPS659038_REG_ADDR_SMPS8_IVA,
  334. .iva.pmic = &tps659038,
  335. };
  336. struct vcores_data dra722_volts = {
  337. .mpu.value = 1000,
  338. .mpu.efuse.reg = STD_FUSE_OPP_VMIN_MPU_NOM,
  339. .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  340. .mpu.addr = 0x23,
  341. .mpu.pmic = &tps659038,
  342. .eve.value = 1000,
  343. .eve.efuse.reg = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
  344. .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  345. .eve.addr = 0x2f,
  346. .eve.pmic = &tps659038,
  347. .gpu.value = 1000,
  348. .gpu.efuse.reg = STD_FUSE_OPP_VMIN_GPU_NOM,
  349. .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  350. .gpu.addr = 0x2f,
  351. .gpu.pmic = &tps659038,
  352. .core.value = 1000,
  353. .core.efuse.reg = STD_FUSE_OPP_VMIN_CORE_NOM,
  354. .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  355. .core.addr = 0x27,
  356. .core.pmic = &tps659038,
  357. .iva.value = 1000,
  358. .iva.efuse.reg = STD_FUSE_OPP_VMIN_IVA_NOM,
  359. .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  360. .iva.addr = 0x2f,
  361. .iva.pmic = &tps659038,
  362. };
  363. /*
  364. * Enable essential clock domains, modules and
  365. * do some additional special settings needed
  366. */
  367. void enable_basic_clocks(void)
  368. {
  369. u32 const clk_domains_essential[] = {
  370. (*prcm)->cm_l4per_clkstctrl,
  371. (*prcm)->cm_l3init_clkstctrl,
  372. (*prcm)->cm_memif_clkstctrl,
  373. (*prcm)->cm_l4cfg_clkstctrl,
  374. #ifdef CONFIG_DRIVER_TI_CPSW
  375. (*prcm)->cm_gmac_clkstctrl,
  376. #endif
  377. 0
  378. };
  379. u32 const clk_modules_hw_auto_essential[] = {
  380. (*prcm)->cm_l3_gpmc_clkctrl,
  381. (*prcm)->cm_memif_emif_1_clkctrl,
  382. (*prcm)->cm_memif_emif_2_clkctrl,
  383. (*prcm)->cm_l4cfg_l4_cfg_clkctrl,
  384. (*prcm)->cm_wkup_gpio1_clkctrl,
  385. (*prcm)->cm_l4per_gpio2_clkctrl,
  386. (*prcm)->cm_l4per_gpio3_clkctrl,
  387. (*prcm)->cm_l4per_gpio4_clkctrl,
  388. (*prcm)->cm_l4per_gpio5_clkctrl,
  389. (*prcm)->cm_l4per_gpio6_clkctrl,
  390. (*prcm)->cm_l4per_gpio7_clkctrl,
  391. (*prcm)->cm_l4per_gpio8_clkctrl,
  392. 0
  393. };
  394. u32 const clk_modules_explicit_en_essential[] = {
  395. (*prcm)->cm_wkup_gptimer1_clkctrl,
  396. (*prcm)->cm_l3init_hsmmc1_clkctrl,
  397. (*prcm)->cm_l3init_hsmmc2_clkctrl,
  398. (*prcm)->cm_l4per_gptimer2_clkctrl,
  399. (*prcm)->cm_wkup_wdtimer2_clkctrl,
  400. (*prcm)->cm_l4per_uart3_clkctrl,
  401. (*prcm)->cm_l4per_i2c1_clkctrl,
  402. #ifdef CONFIG_DRIVER_TI_CPSW
  403. (*prcm)->cm_gmac_gmac_clkctrl,
  404. #endif
  405. #ifdef CONFIG_TI_QSPI
  406. (*prcm)->cm_l4per_qspi_clkctrl,
  407. #endif
  408. 0
  409. };
  410. /* Enable optional additional functional clock for GPIO4 */
  411. setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl,
  412. GPIO4_CLKCTRL_OPTFCLKEN_MASK);
  413. /* Enable 96 MHz clock for MMC1 & MMC2 */
  414. setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,
  415. HSMMC_CLKCTRL_CLKSEL_MASK);
  416. setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,
  417. HSMMC_CLKCTRL_CLKSEL_MASK);
  418. /* Set the correct clock dividers for mmc */
  419. setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,
  420. HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
  421. setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,
  422. HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
  423. /* Select 32KHz clock as the source of GPTIMER1 */
  424. setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl,
  425. GPTIMER1_CLKCTRL_CLKSEL_MASK);
  426. do_enable_clocks(clk_domains_essential,
  427. clk_modules_hw_auto_essential,
  428. clk_modules_explicit_en_essential,
  429. 1);
  430. #ifdef CONFIG_TI_QSPI
  431. setbits_le32((*prcm)->cm_l4per_qspi_clkctrl, (1<<24));
  432. #endif
  433. /* Enable SCRM OPT clocks for PER and CORE dpll */
  434. setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
  435. OPTFCLKEN_SCRM_PER_MASK);
  436. setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
  437. OPTFCLKEN_SCRM_CORE_MASK);
  438. }
  439. void enable_basic_uboot_clocks(void)
  440. {
  441. u32 const clk_domains_essential[] = {
  442. 0
  443. };
  444. u32 const clk_modules_hw_auto_essential[] = {
  445. (*prcm)->cm_l3init_hsusbtll_clkctrl,
  446. 0
  447. };
  448. u32 const clk_modules_explicit_en_essential[] = {
  449. (*prcm)->cm_l4per_mcspi1_clkctrl,
  450. (*prcm)->cm_l4per_i2c2_clkctrl,
  451. (*prcm)->cm_l4per_i2c3_clkctrl,
  452. (*prcm)->cm_l4per_i2c4_clkctrl,
  453. (*prcm)->cm_l4per_i2c5_clkctrl,
  454. (*prcm)->cm_l3init_hsusbhost_clkctrl,
  455. (*prcm)->cm_l3init_fsusb_clkctrl,
  456. 0
  457. };
  458. do_enable_clocks(clk_domains_essential,
  459. clk_modules_hw_auto_essential,
  460. clk_modules_explicit_en_essential,
  461. 1);
  462. }
  463. const struct ctrl_ioregs ioregs_omap5430 = {
  464. .ctrl_ddrch = DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN,
  465. .ctrl_lpddr2ch = DDR_IO_I_34OHM_SR_FASTEST_WD_CK_CKE_NCS_CA_PULL_DOWN,
  466. .ctrl_ddrio_0 = DDR_IO_0_DDR2_DQ_INT_EN_ALL_DDR3_CA_DIS_ALL,
  467. .ctrl_ddrio_1 = DDR_IO_1_DQ_OUT_EN_ALL_DQ_INT_EN_ALL,
  468. .ctrl_ddrio_2 = DDR_IO_2_CA_OUT_EN_ALL_CA_INT_EN_ALL,
  469. };
  470. const struct ctrl_ioregs ioregs_omap5432_es1 = {
  471. .ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL,
  472. .ctrl_lpddr2ch = 0x0,
  473. .ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL,
  474. .ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE,
  475. .ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE,
  476. .ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE,
  477. .ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES,
  478. .ctrl_emif_sdram_config_ext_final = SDRAM_CONFIG_EXT_RD_LVL_4_SAMPLES,
  479. };
  480. const struct ctrl_ioregs ioregs_omap5432_es2 = {
  481. .ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2,
  482. .ctrl_lpddr2ch = 0x0,
  483. .ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2,
  484. .ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE_ES2,
  485. .ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE_ES2,
  486. .ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE_ES2,
  487. .ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES,
  488. .ctrl_emif_sdram_config_ext_final = SDRAM_CONFIG_EXT_RD_LVL_4_SAMPLES,
  489. };
  490. const struct ctrl_ioregs ioregs_dra7xx_es1 = {
  491. .ctrl_ddrch = 0x40404040,
  492. .ctrl_lpddr2ch = 0x40404040,
  493. .ctrl_ddr3ch = 0x80808080,
  494. .ctrl_ddrio_0 = 0xA2084210,
  495. .ctrl_ddrio_1 = 0x84210840,
  496. .ctrl_ddrio_2 = 0x84210000,
  497. .ctrl_emif_sdram_config_ext = 0x0001C1A7,
  498. .ctrl_emif_sdram_config_ext_final = 0x0001C1A7,
  499. .ctrl_ddr_ctrl_ext_0 = 0xA2000000,
  500. };
  501. void hw_data_init(void)
  502. {
  503. u32 omap_rev = omap_revision();
  504. switch (omap_rev) {
  505. case OMAP5430_ES1_0:
  506. case OMAP5432_ES1_0:
  507. *prcm = &omap5_es1_prcm;
  508. *dplls_data = &omap5_dplls_es1;
  509. *omap_vcores = &omap5430_volts;
  510. *ctrl = &omap5_ctrl;
  511. break;
  512. case OMAP5430_ES2_0:
  513. case OMAP5432_ES2_0:
  514. *prcm = &omap5_es2_prcm;
  515. *dplls_data = &omap5_dplls_es2;
  516. *omap_vcores = &omap5430_volts_es2;
  517. *ctrl = &omap5_ctrl;
  518. break;
  519. case DRA752_ES1_0:
  520. case DRA752_ES1_1:
  521. *prcm = &dra7xx_prcm;
  522. *dplls_data = &dra7xx_dplls;
  523. *omap_vcores = &dra752_volts;
  524. *ctrl = &dra7xx_ctrl;
  525. break;
  526. case DRA722_ES1_0:
  527. *prcm = &dra7xx_prcm;
  528. *dplls_data = &dra7xx_dplls;
  529. *omap_vcores = &dra722_volts;
  530. *ctrl = &dra7xx_ctrl;
  531. break;
  532. default:
  533. printf("\n INVALID OMAP REVISION ");
  534. }
  535. }
  536. void get_ioregs(const struct ctrl_ioregs **regs)
  537. {
  538. u32 omap_rev = omap_revision();
  539. switch (omap_rev) {
  540. case OMAP5430_ES1_0:
  541. case OMAP5430_ES2_0:
  542. *regs = &ioregs_omap5430;
  543. break;
  544. case OMAP5432_ES1_0:
  545. *regs = &ioregs_omap5432_es1;
  546. break;
  547. case OMAP5432_ES2_0:
  548. *regs = &ioregs_omap5432_es2;
  549. break;
  550. case DRA752_ES1_0:
  551. case DRA752_ES1_1:
  552. case DRA722_ES1_0:
  553. *regs = &ioregs_dra7xx_es1;
  554. break;
  555. default:
  556. printf("\n INVALID OMAP REVISION ");
  557. }
  558. }