hw_data.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733
  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_2664mhz[NUM_SYS_CLKS] = {
  210. {111, 0, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  211. {333, 4, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  212. {555, 6, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  213. {555, 7, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  214. {666, 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. {555, 15, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  217. };
  218. static const struct dpll_params ddr_dpll_params_2128mhz[NUM_SYS_CLKS] = {
  219. {266, 2, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  220. {266, 4, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  221. {190, 2, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  222. {665, 11, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  223. {532, 12, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  224. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  225. {665, 23, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  226. };
  227. static const struct dpll_params gmac_dpll_params_2000mhz[NUM_SYS_CLKS] = {
  228. {250, 2, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 12 MHz */
  229. {250, 4, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 20 MHz */
  230. {119, 1, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  231. {625, 11, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  232. {500, 12, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 26 MHz */
  233. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  234. {625, 23, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  235. };
  236. struct dplls omap5_dplls_es1 = {
  237. .mpu = mpu_dpll_params_800mhz,
  238. .core = core_dpll_params_2128mhz_ddr532,
  239. .per = per_dpll_params_768mhz,
  240. .iva = iva_dpll_params_2330mhz,
  241. #ifdef CONFIG_SYS_OMAP_ABE_SYSCK
  242. .abe = abe_dpll_params_sysclk_196608khz,
  243. #else
  244. .abe = &abe_dpll_params_32k_196608khz,
  245. #endif
  246. .usb = usb_dpll_params_1920mhz,
  247. .ddr = NULL
  248. };
  249. struct dplls omap5_dplls_es2 = {
  250. .mpu = mpu_dpll_params_1ghz,
  251. .core = core_dpll_params_2128mhz_ddr532_es2,
  252. .per = per_dpll_params_768mhz_es2,
  253. .iva = iva_dpll_params_2330mhz,
  254. #ifdef CONFIG_SYS_OMAP_ABE_SYSCK
  255. .abe = abe_dpll_params_sysclk_196608khz,
  256. #else
  257. .abe = &abe_dpll_params_32k_196608khz,
  258. #endif
  259. .usb = usb_dpll_params_1920mhz,
  260. .ddr = NULL
  261. };
  262. struct dplls dra7xx_dplls = {
  263. .mpu = mpu_dpll_params_1ghz,
  264. .core = core_dpll_params_2128mhz_dra7xx,
  265. .per = per_dpll_params_768mhz_dra7xx,
  266. .abe = abe_dpll_params_sysclk2_361267khz,
  267. .iva = iva_dpll_params_2330mhz_dra7xx,
  268. .usb = usb_dpll_params_1920mhz,
  269. .ddr = ddr_dpll_params_2128mhz,
  270. .gmac = gmac_dpll_params_2000mhz,
  271. };
  272. struct dplls dra72x_dplls = {
  273. .mpu = mpu_dpll_params_1ghz,
  274. .core = core_dpll_params_2128mhz_dra7xx,
  275. .per = per_dpll_params_768mhz_dra7xx,
  276. .abe = abe_dpll_params_sysclk2_361267khz,
  277. .iva = iva_dpll_params_2330mhz_dra7xx,
  278. .usb = usb_dpll_params_1920mhz,
  279. .ddr = ddr_dpll_params_2664mhz,
  280. .gmac = gmac_dpll_params_2000mhz,
  281. };
  282. struct pmic_data palmas = {
  283. .base_offset = PALMAS_SMPS_BASE_VOLT_UV,
  284. .step = 10000, /* 10 mV represented in uV */
  285. /*
  286. * Offset codes 1-6 all give the base voltage in Palmas
  287. * Offset code 0 switches OFF the SMPS
  288. */
  289. .start_code = 6,
  290. .i2c_slave_addr = SMPS_I2C_SLAVE_ADDR,
  291. .pmic_bus_init = sri2c_init,
  292. .pmic_write = omap_vc_bypass_send_value,
  293. };
  294. /* The TPS659038 and TPS65917 are software-compatible, use common struct */
  295. struct pmic_data tps659038 = {
  296. .base_offset = PALMAS_SMPS_BASE_VOLT_UV,
  297. .step = 10000, /* 10 mV represented in uV */
  298. /*
  299. * Offset codes 1-6 all give the base voltage in Palmas
  300. * Offset code 0 switches OFF the SMPS
  301. */
  302. .start_code = 6,
  303. .i2c_slave_addr = TPS659038_I2C_SLAVE_ADDR,
  304. .pmic_bus_init = gpi2c_init,
  305. .pmic_write = palmas_i2c_write_u8,
  306. };
  307. struct vcores_data omap5430_volts = {
  308. .mpu.value = VDD_MPU,
  309. .mpu.addr = SMPS_REG_ADDR_12_MPU,
  310. .mpu.pmic = &palmas,
  311. .core.value = VDD_CORE,
  312. .core.addr = SMPS_REG_ADDR_8_CORE,
  313. .core.pmic = &palmas,
  314. .mm.value = VDD_MM,
  315. .mm.addr = SMPS_REG_ADDR_45_IVA,
  316. .mm.pmic = &palmas,
  317. };
  318. struct vcores_data omap5430_volts_es2 = {
  319. .mpu.value = VDD_MPU_ES2,
  320. .mpu.addr = SMPS_REG_ADDR_12_MPU,
  321. .mpu.pmic = &palmas,
  322. .core.value = VDD_CORE_ES2,
  323. .core.addr = SMPS_REG_ADDR_8_CORE,
  324. .core.pmic = &palmas,
  325. .mm.value = VDD_MM_ES2,
  326. .mm.addr = SMPS_REG_ADDR_45_IVA,
  327. .mm.pmic = &palmas,
  328. };
  329. struct vcores_data dra752_volts = {
  330. .mpu.value = VDD_MPU_DRA752,
  331. .mpu.efuse.reg = STD_FUSE_OPP_VMIN_MPU_NOM,
  332. .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  333. .mpu.addr = TPS659038_REG_ADDR_SMPS12,
  334. .mpu.pmic = &tps659038,
  335. .eve.value = VDD_EVE_DRA752,
  336. .eve.efuse.reg = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
  337. .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  338. .eve.addr = TPS659038_REG_ADDR_SMPS45,
  339. .eve.pmic = &tps659038,
  340. .gpu.value = VDD_GPU_DRA752,
  341. .gpu.efuse.reg = STD_FUSE_OPP_VMIN_GPU_NOM,
  342. .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  343. .gpu.addr = TPS659038_REG_ADDR_SMPS6,
  344. .gpu.pmic = &tps659038,
  345. .core.value = VDD_CORE_DRA752,
  346. .core.efuse.reg = STD_FUSE_OPP_VMIN_CORE_NOM,
  347. .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  348. .core.addr = TPS659038_REG_ADDR_SMPS7,
  349. .core.pmic = &tps659038,
  350. .iva.value = VDD_IVA_DRA752,
  351. .iva.efuse.reg = STD_FUSE_OPP_VMIN_IVA_NOM,
  352. .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  353. .iva.addr = TPS659038_REG_ADDR_SMPS8,
  354. .iva.pmic = &tps659038,
  355. };
  356. struct vcores_data dra722_volts = {
  357. .mpu.value = VDD_MPU_DRA72x,
  358. .mpu.efuse.reg = STD_FUSE_OPP_VMIN_MPU_NOM,
  359. .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  360. .mpu.addr = TPS65917_REG_ADDR_SMPS1,
  361. .mpu.pmic = &tps659038,
  362. .core.value = VDD_CORE_DRA72x,
  363. .core.efuse.reg = STD_FUSE_OPP_VMIN_CORE_NOM,
  364. .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  365. .core.addr = TPS65917_REG_ADDR_SMPS2,
  366. .core.pmic = &tps659038,
  367. /*
  368. * The DSPEVE, GPU and IVA rails are usually grouped on DRA72x
  369. * designs and powered by TPS65917 SMPS3, as on the J6Eco EVM.
  370. */
  371. .gpu.value = VDD_GPU_DRA72x,
  372. .gpu.efuse.reg = STD_FUSE_OPP_VMIN_GPU_NOM,
  373. .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  374. .gpu.addr = TPS65917_REG_ADDR_SMPS3,
  375. .gpu.pmic = &tps659038,
  376. .eve.value = VDD_EVE_DRA72x,
  377. .eve.efuse.reg = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
  378. .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  379. .eve.addr = TPS65917_REG_ADDR_SMPS3,
  380. .eve.pmic = &tps659038,
  381. .iva.value = VDD_IVA_DRA72x,
  382. .iva.efuse.reg = STD_FUSE_OPP_VMIN_IVA_NOM,
  383. .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  384. .iva.addr = TPS65917_REG_ADDR_SMPS3,
  385. .iva.pmic = &tps659038,
  386. };
  387. /*
  388. * Enable essential clock domains, modules and
  389. * do some additional special settings needed
  390. */
  391. void enable_basic_clocks(void)
  392. {
  393. u32 const clk_domains_essential[] = {
  394. (*prcm)->cm_l4per_clkstctrl,
  395. (*prcm)->cm_l3init_clkstctrl,
  396. (*prcm)->cm_memif_clkstctrl,
  397. (*prcm)->cm_l4cfg_clkstctrl,
  398. #ifdef CONFIG_DRIVER_TI_CPSW
  399. (*prcm)->cm_gmac_clkstctrl,
  400. #endif
  401. 0
  402. };
  403. u32 const clk_modules_hw_auto_essential[] = {
  404. (*prcm)->cm_l3_gpmc_clkctrl,
  405. (*prcm)->cm_memif_emif_1_clkctrl,
  406. (*prcm)->cm_memif_emif_2_clkctrl,
  407. (*prcm)->cm_l4cfg_l4_cfg_clkctrl,
  408. (*prcm)->cm_wkup_gpio1_clkctrl,
  409. (*prcm)->cm_l4per_gpio2_clkctrl,
  410. (*prcm)->cm_l4per_gpio3_clkctrl,
  411. (*prcm)->cm_l4per_gpio4_clkctrl,
  412. (*prcm)->cm_l4per_gpio5_clkctrl,
  413. (*prcm)->cm_l4per_gpio6_clkctrl,
  414. (*prcm)->cm_l4per_gpio7_clkctrl,
  415. (*prcm)->cm_l4per_gpio8_clkctrl,
  416. #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_OMAP)
  417. (*prcm)->cm_l3init_ocp2scp1_clkctrl,
  418. (*prcm)->cm_l3init_usb_otg_ss1_clkctrl,
  419. #endif
  420. 0
  421. };
  422. u32 const clk_modules_explicit_en_essential[] = {
  423. (*prcm)->cm_wkup_gptimer1_clkctrl,
  424. (*prcm)->cm_l3init_hsmmc1_clkctrl,
  425. (*prcm)->cm_l3init_hsmmc2_clkctrl,
  426. (*prcm)->cm_l4per_gptimer2_clkctrl,
  427. (*prcm)->cm_wkup_wdtimer2_clkctrl,
  428. (*prcm)->cm_l4per_uart3_clkctrl,
  429. (*prcm)->cm_l4per_i2c1_clkctrl,
  430. #ifdef CONFIG_DRIVER_TI_CPSW
  431. (*prcm)->cm_gmac_gmac_clkctrl,
  432. #endif
  433. #ifdef CONFIG_TI_QSPI
  434. (*prcm)->cm_l4per_qspi_clkctrl,
  435. #endif
  436. 0
  437. };
  438. /* Enable optional additional functional clock for GPIO4 */
  439. setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl,
  440. GPIO4_CLKCTRL_OPTFCLKEN_MASK);
  441. /* Enable 96 MHz clock for MMC1 & MMC2 */
  442. setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,
  443. HSMMC_CLKCTRL_CLKSEL_MASK);
  444. setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,
  445. HSMMC_CLKCTRL_CLKSEL_MASK);
  446. #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_OMAP)
  447. /* Enable 960 MHz clock for dwc3 */
  448. setbits_le32((*prcm)->cm_l3init_usb_otg_ss1_clkctrl,
  449. OPTFCLKEN_REFCLK960M);
  450. /* Enable 32 KHz clock for dwc3 */
  451. setbits_le32((*prcm)->cm_coreaon_usb_phy1_core_clkctrl,
  452. USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
  453. #endif
  454. /* Set the correct clock dividers for mmc */
  455. setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,
  456. HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
  457. setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,
  458. HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
  459. /* Select 32KHz clock as the source of GPTIMER1 */
  460. setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl,
  461. GPTIMER1_CLKCTRL_CLKSEL_MASK);
  462. do_enable_clocks(clk_domains_essential,
  463. clk_modules_hw_auto_essential,
  464. clk_modules_explicit_en_essential,
  465. 1);
  466. #ifdef CONFIG_TI_QSPI
  467. setbits_le32((*prcm)->cm_l4per_qspi_clkctrl, (1<<24));
  468. #endif
  469. /* Enable SCRM OPT clocks for PER and CORE dpll */
  470. setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
  471. OPTFCLKEN_SCRM_PER_MASK);
  472. setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
  473. OPTFCLKEN_SCRM_CORE_MASK);
  474. }
  475. void enable_basic_uboot_clocks(void)
  476. {
  477. u32 const clk_domains_essential[] = {
  478. #if defined(CONFIG_DRA7XX) || defined(CONFIG_AM57XX)
  479. (*prcm)->cm_ipu_clkstctrl,
  480. #endif
  481. 0
  482. };
  483. u32 const clk_modules_hw_auto_essential[] = {
  484. (*prcm)->cm_l3init_hsusbtll_clkctrl,
  485. 0
  486. };
  487. u32 const clk_modules_explicit_en_essential[] = {
  488. (*prcm)->cm_l4per_mcspi1_clkctrl,
  489. (*prcm)->cm_l4per_i2c2_clkctrl,
  490. (*prcm)->cm_l4per_i2c3_clkctrl,
  491. (*prcm)->cm_l4per_i2c4_clkctrl,
  492. #if defined(CONFIG_DRA7XX) || defined(CONFIG_AM57XX)
  493. (*prcm)->cm_ipu_i2c5_clkctrl,
  494. #else
  495. (*prcm)->cm_l4per_i2c5_clkctrl,
  496. #endif
  497. (*prcm)->cm_l3init_hsusbhost_clkctrl,
  498. (*prcm)->cm_l3init_fsusb_clkctrl,
  499. 0
  500. };
  501. do_enable_clocks(clk_domains_essential,
  502. clk_modules_hw_auto_essential,
  503. clk_modules_explicit_en_essential,
  504. 1);
  505. }
  506. #ifdef CONFIG_TI_EDMA3
  507. void enable_edma3_clocks(void)
  508. {
  509. u32 const clk_domains_edma3[] = {
  510. 0
  511. };
  512. u32 const clk_modules_hw_auto_edma3[] = {
  513. (*prcm)->cm_l3main1_tptc1_clkctrl,
  514. (*prcm)->cm_l3main1_tptc2_clkctrl,
  515. 0
  516. };
  517. u32 const clk_modules_explicit_en_edma3[] = {
  518. 0
  519. };
  520. do_enable_clocks(clk_domains_edma3,
  521. clk_modules_hw_auto_edma3,
  522. clk_modules_explicit_en_edma3,
  523. 1);
  524. }
  525. void disable_edma3_clocks(void)
  526. {
  527. u32 const clk_domains_edma3[] = {
  528. 0
  529. };
  530. u32 const clk_modules_disable_edma3[] = {
  531. (*prcm)->cm_l3main1_tptc1_clkctrl,
  532. (*prcm)->cm_l3main1_tptc2_clkctrl,
  533. 0
  534. };
  535. do_disable_clocks(clk_domains_edma3,
  536. clk_modules_disable_edma3,
  537. 1);
  538. }
  539. #endif
  540. const struct ctrl_ioregs ioregs_omap5430 = {
  541. .ctrl_ddrch = DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN,
  542. .ctrl_lpddr2ch = DDR_IO_I_34OHM_SR_FASTEST_WD_CK_CKE_NCS_CA_PULL_DOWN,
  543. .ctrl_ddrio_0 = DDR_IO_0_DDR2_DQ_INT_EN_ALL_DDR3_CA_DIS_ALL,
  544. .ctrl_ddrio_1 = DDR_IO_1_DQ_OUT_EN_ALL_DQ_INT_EN_ALL,
  545. .ctrl_ddrio_2 = DDR_IO_2_CA_OUT_EN_ALL_CA_INT_EN_ALL,
  546. };
  547. const struct ctrl_ioregs ioregs_omap5432_es1 = {
  548. .ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL,
  549. .ctrl_lpddr2ch = 0x0,
  550. .ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL,
  551. .ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE,
  552. .ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE,
  553. .ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE,
  554. .ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES,
  555. .ctrl_emif_sdram_config_ext_final = SDRAM_CONFIG_EXT_RD_LVL_4_SAMPLES,
  556. };
  557. const struct ctrl_ioregs ioregs_omap5432_es2 = {
  558. .ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2,
  559. .ctrl_lpddr2ch = 0x0,
  560. .ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2,
  561. .ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE_ES2,
  562. .ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE_ES2,
  563. .ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE_ES2,
  564. .ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES,
  565. .ctrl_emif_sdram_config_ext_final = SDRAM_CONFIG_EXT_RD_LVL_4_SAMPLES,
  566. };
  567. const struct ctrl_ioregs ioregs_dra7xx_es1 = {
  568. .ctrl_ddrch = 0x40404040,
  569. .ctrl_lpddr2ch = 0x40404040,
  570. .ctrl_ddr3ch = 0x80808080,
  571. .ctrl_ddrio_0 = 0x00094A40,
  572. .ctrl_ddrio_1 = 0x04A52000,
  573. .ctrl_ddrio_2 = 0x84210000,
  574. .ctrl_emif_sdram_config_ext = 0x0001C1A7,
  575. .ctrl_emif_sdram_config_ext_final = 0x0001C1A7,
  576. .ctrl_ddr_ctrl_ext_0 = 0xA2000000,
  577. };
  578. const struct ctrl_ioregs ioregs_dra72x_es1 = {
  579. .ctrl_ddrch = 0x40404040,
  580. .ctrl_lpddr2ch = 0x40404040,
  581. .ctrl_ddr3ch = 0x60606080,
  582. .ctrl_ddrio_0 = 0x00094A40,
  583. .ctrl_ddrio_1 = 0x04A52000,
  584. .ctrl_ddrio_2 = 0x84210000,
  585. .ctrl_emif_sdram_config_ext = 0x0001C1A7,
  586. .ctrl_emif_sdram_config_ext_final = 0x0001C1A7,
  587. .ctrl_ddr_ctrl_ext_0 = 0xA2000000,
  588. };
  589. void __weak hw_data_init(void)
  590. {
  591. u32 omap_rev = omap_revision();
  592. switch (omap_rev) {
  593. case OMAP5430_ES1_0:
  594. case OMAP5432_ES1_0:
  595. *prcm = &omap5_es1_prcm;
  596. *dplls_data = &omap5_dplls_es1;
  597. *omap_vcores = &omap5430_volts;
  598. *ctrl = &omap5_ctrl;
  599. break;
  600. case OMAP5430_ES2_0:
  601. case OMAP5432_ES2_0:
  602. *prcm = &omap5_es2_prcm;
  603. *dplls_data = &omap5_dplls_es2;
  604. *omap_vcores = &omap5430_volts_es2;
  605. *ctrl = &omap5_ctrl;
  606. break;
  607. case DRA752_ES1_0:
  608. case DRA752_ES1_1:
  609. case DRA752_ES2_0:
  610. *prcm = &dra7xx_prcm;
  611. *dplls_data = &dra7xx_dplls;
  612. *omap_vcores = &dra752_volts;
  613. *ctrl = &dra7xx_ctrl;
  614. break;
  615. case DRA722_ES1_0:
  616. *prcm = &dra7xx_prcm;
  617. *dplls_data = &dra72x_dplls;
  618. *omap_vcores = &dra722_volts;
  619. *ctrl = &dra7xx_ctrl;
  620. break;
  621. default:
  622. printf("\n INVALID OMAP REVISION ");
  623. }
  624. }
  625. void get_ioregs(const struct ctrl_ioregs **regs)
  626. {
  627. u32 omap_rev = omap_revision();
  628. switch (omap_rev) {
  629. case OMAP5430_ES1_0:
  630. case OMAP5430_ES2_0:
  631. *regs = &ioregs_omap5430;
  632. break;
  633. case OMAP5432_ES1_0:
  634. *regs = &ioregs_omap5432_es1;
  635. break;
  636. case OMAP5432_ES2_0:
  637. *regs = &ioregs_omap5432_es2;
  638. break;
  639. case DRA752_ES1_0:
  640. case DRA752_ES1_1:
  641. case DRA752_ES2_0:
  642. *regs = &ioregs_dra7xx_es1;
  643. break;
  644. case DRA722_ES1_0:
  645. *regs = &ioregs_dra72x_es1;
  646. break;
  647. default:
  648. printf("\n INVALID OMAP REVISION ");
  649. }
  650. }