hw_data.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674
  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 ES2.0, OPP HIGH for ES1.0 */
  40. static const struct dpll_params mpu_dpll_params_1100mhz[NUM_SYS_CLKS] = {
  41. {275, 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. {1375, 20, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  44. {1375, 23, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  45. {550, 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. {1375, 47, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  48. };
  49. /* OPP NOM FREQUENCY for ES1.0 */
  50. static const struct dpll_params mpu_dpll_params_800mhz[NUM_SYS_CLKS] = {
  51. {200, 2, 1, -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, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  54. {375, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  55. {400, 12, 1, -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, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  58. };
  59. /* OPP LOW FREQUENCY for ES1.0 */
  60. static const struct dpll_params mpu_dpll_params_400mhz[NUM_SYS_CLKS] = {
  61. {200, 2, 2, -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. {1000, 20, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  64. {375, 8, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  65. {400, 12, 2, -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. {375, 17, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  68. };
  69. /* OPP LOW FREQUENCY for ES2.0 */
  70. static const struct dpll_params mpu_dpll_params_499mhz[NUM_SYS_CLKS] = {
  71. {499, 11, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  72. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  73. {297, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  74. {493, 18, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  75. {499, 25, 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. {493, 37, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  78. };
  79. static const struct dpll_params mpu_dpll_params_1ghz[NUM_SYS_CLKS] = {
  80. {250, 2, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  81. {500, 9, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  82. {119, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  83. {625, 11, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  84. {500, 12, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  85. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  86. {625, 23, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  87. };
  88. static const struct dpll_params
  89. core_dpll_params_2128mhz_ddr532[NUM_SYS_CLKS] = {
  90. {266, 2, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 12 MHz */
  91. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  92. {443, 6, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 16.8 MHz */
  93. {277, 4, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 19.2 MHz */
  94. {368, 8, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}, /* 26 MHz */
  95. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  96. {277, 9, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1} /* 38.4 MHz */
  97. };
  98. static const struct dpll_params
  99. core_dpll_params_2128mhz_ddr532_es2[NUM_SYS_CLKS] = {
  100. {266, 2, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 12 MHz */
  101. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  102. {443, 6, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 16.8 MHz */
  103. {277, 4, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 19.2 MHz */
  104. {368, 8, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}, /* 26 MHz */
  105. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  106. {277, 9, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6} /* 38.4 MHz */
  107. };
  108. static const struct dpll_params
  109. core_dpll_params_2128mhz_dra7xx[NUM_SYS_CLKS] = {
  110. {266, 2, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 12 MHz */
  111. {266, 4, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 20 MHz */
  112. {443, 6, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 16.8 MHz */
  113. {277, 4, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 19.2 MHz */
  114. {368, 8, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 26 MHz */
  115. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  116. {277, 9, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6}, /* 38.4 MHz */
  117. };
  118. static const struct dpll_params
  119. core_dpll_params_2128mhz_ddr266[NUM_SYS_CLKS] = {
  120. {266, 2, 4, 8, 8, 8, 62, 10, -1, 10, 14, -1}, /* 12 MHz */
  121. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  122. {443, 6, 4, 8, 8, 8, 62, 10, -1, 10, 14, -1}, /* 16.8 MHz */
  123. {277, 4, 4, 8, 8, 8, 62, 10, -1, 10, 14, -1}, /* 19.2 MHz */
  124. {368, 8, 4, 8, 8, 8, 62, 10, -1, 10, 14, -1}, /* 26 MHz */
  125. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  126. {277, 9, 4, 8, 8, 8, 62, 10, -1, 10, 14, -1} /* 38.4 MHz */
  127. };
  128. static const struct dpll_params
  129. core_dpll_params_2128mhz_ddr266_es2[NUM_SYS_CLKS] = {
  130. {266, 2, 4, 8, 8, 8, 62, 5, 12, 10, 14, 12}, /* 12 MHz */
  131. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  132. {443, 6, 4, 8, 8, 8, 62, 5, 12, 10, 14, 12}, /* 16.8 MHz */
  133. {277, 4, 4, 8, 8, 8, 62, 5, 12, 10, 14, 12}, /* 19.2 MHz */
  134. {368, 8, 4, 8, 8, 8, 62, 5, 12, 10, 14, 12}, /* 26 MHz */
  135. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  136. {277, 9, 4, 8, 8, 8, 62, 5, 12, 10, 14, 12} /* 38.4 MHz */
  137. };
  138. static const struct dpll_params per_dpll_params_768mhz[NUM_SYS_CLKS] = {
  139. {32, 0, 4, 3, 6, 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, 6, 4, -1, 2, -1, -1, -1, -1}, /* 16.8 MHz */
  142. {20, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}, /* 19.2 MHz */
  143. {192, 12, 4, 3, 6, 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, 6, 4, -1, 2, -1, -1, -1, -1} /* 38.4 MHz */
  146. };
  147. static const struct dpll_params per_dpll_params_768mhz_es2[NUM_SYS_CLKS] = {
  148. {32, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 12 MHz */
  149. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  150. {160, 6, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 16.8 MHz */
  151. {20, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}, /* 19.2 MHz */
  152. {192, 12, 4, 3, 3, 4, -1, 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, 3, 3, 4, -1, 2, -1, -1, -1, -1} /* 38.4 MHz */
  155. };
  156. static const struct dpll_params per_dpll_params_768mhz_dra7xx[NUM_SYS_CLKS] = {
  157. {32, 0, 4, 1, 3, 4, 10, 2, -1, -1, -1, -1}, /* 12 MHz */
  158. {96, 4, 4, 1, 3, 4, 10, 2, -1, -1, -1, -1}, /* 20 MHz */
  159. {160, 6, 4, 1, 3, 4, 10, 2, -1, -1, -1, -1}, /* 16.8 MHz */
  160. {20, 0, 4, 1, 3, 4, 10, 2, -1, -1, -1, -1}, /* 19.2 MHz */
  161. {192, 12, 4, 1, 3, 4, 10, 2, -1, -1, -1, -1}, /* 26 MHz */
  162. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  163. {10, 0, 4, 1, 3, 4, 10, 2, -1, -1, -1, -1}, /* 38.4 MHz */
  164. };
  165. static const struct dpll_params iva_dpll_params_2330mhz[NUM_SYS_CLKS] = {
  166. {1165, 11, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  167. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  168. {208, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  169. {182, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  170. {224, 4, -1, -1, 5, 6, -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, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  173. };
  174. static const struct dpll_params iva_dpll_params_2330mhz_dra7xx[NUM_SYS_CLKS] = {
  175. {1165, 11, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  176. {233, 3, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  177. {208, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  178. {182, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  179. {224, 4, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  180. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  181. {91, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  182. };
  183. /* ABE M & N values with sys_clk as source */
  184. static const struct dpll_params
  185. abe_dpll_params_sysclk_196608khz[NUM_SYS_CLKS] = {
  186. {49, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  187. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
  188. {35, 5, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  189. {46, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  190. {34, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
  191. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
  192. {64, 24, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
  193. };
  194. /* ABE M & N values with 32K clock as source */
  195. static const struct dpll_params abe_dpll_params_32k_196608khz = {
  196. 750, 0, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1
  197. };
  198. /* ABE M & N values with sysclk2(22.5792 MHz) as input */
  199. static const struct dpll_params
  200. abe_dpll_params_sysclk2_361267khz[NUM_SYS_CLKS] = {
  201. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  202. {16, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  203. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  204. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  205. {-1, -1, -1, -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. {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 38.4 MHz */
  208. };
  209. static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {
  210. {400, 4, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
  211. {480, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 20 MHz */
  212. {400, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
  213. {400, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
  214. {480, 12, 2, -1, -1, -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. {400, 15, 2, -1, -1, -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_1100mhz,
  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 pmic_data palmas = {
  273. .base_offset = PALMAS_SMPS_BASE_VOLT_UV,
  274. .step = 10000, /* 10 mV represented in uV */
  275. /*
  276. * Offset codes 1-6 all give the base voltage in Palmas
  277. * Offset code 0 switches OFF the SMPS
  278. */
  279. .start_code = 6,
  280. .i2c_slave_addr = SMPS_I2C_SLAVE_ADDR,
  281. .pmic_bus_init = sri2c_init,
  282. .pmic_write = omap_vc_bypass_send_value,
  283. };
  284. struct pmic_data tps659038 = {
  285. .base_offset = PALMAS_SMPS_BASE_VOLT_UV,
  286. .step = 10000, /* 10 mV represented in uV */
  287. /*
  288. * Offset codes 1-6 all give the base voltage in Palmas
  289. * Offset code 0 switches OFF the SMPS
  290. */
  291. .start_code = 6,
  292. .i2c_slave_addr = TPS659038_I2C_SLAVE_ADDR,
  293. .pmic_bus_init = gpi2c_init,
  294. .pmic_write = palmas_i2c_write_u8,
  295. };
  296. struct vcores_data omap5430_volts = {
  297. .mpu.value = VDD_MPU,
  298. .mpu.addr = SMPS_REG_ADDR_12_MPU,
  299. .mpu.pmic = &palmas,
  300. .core.value = VDD_CORE,
  301. .core.addr = SMPS_REG_ADDR_8_CORE,
  302. .core.pmic = &palmas,
  303. .mm.value = VDD_MM,
  304. .mm.addr = SMPS_REG_ADDR_45_IVA,
  305. .mm.pmic = &palmas,
  306. };
  307. struct vcores_data omap5430_volts_es2 = {
  308. .mpu.value = VDD_MPU_ES2,
  309. .mpu.addr = SMPS_REG_ADDR_12_MPU,
  310. .mpu.pmic = &palmas,
  311. .core.value = VDD_CORE_ES2,
  312. .core.addr = SMPS_REG_ADDR_8_CORE,
  313. .core.pmic = &palmas,
  314. .mm.value = VDD_MM_ES2,
  315. .mm.addr = SMPS_REG_ADDR_45_IVA,
  316. .mm.pmic = &palmas,
  317. };
  318. struct vcores_data dra752_volts = {
  319. .mpu.value = VDD_MPU_DRA752,
  320. .mpu.efuse.reg = STD_FUSE_OPP_VMIN_MPU_NOM,
  321. .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  322. .mpu.addr = TPS659038_REG_ADDR_SMPS12_MPU,
  323. .mpu.pmic = &tps659038,
  324. .eve.value = VDD_EVE_DRA752,
  325. .eve.efuse.reg = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
  326. .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  327. .eve.addr = TPS659038_REG_ADDR_SMPS45_EVE,
  328. .eve.pmic = &tps659038,
  329. .gpu.value = VDD_GPU_DRA752,
  330. .gpu.efuse.reg = STD_FUSE_OPP_VMIN_GPU_NOM,
  331. .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  332. .gpu.addr = TPS659038_REG_ADDR_SMPS6_GPU,
  333. .gpu.pmic = &tps659038,
  334. .core.value = VDD_CORE_DRA752,
  335. .core.efuse.reg = STD_FUSE_OPP_VMIN_CORE_NOM,
  336. .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  337. .core.addr = TPS659038_REG_ADDR_SMPS7_CORE,
  338. .core.pmic = &tps659038,
  339. .iva.value = VDD_IVA_DRA752,
  340. .iva.efuse.reg = STD_FUSE_OPP_VMIN_IVA_NOM,
  341. .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
  342. .iva.addr = TPS659038_REG_ADDR_SMPS8_IVA,
  343. .iva.pmic = &tps659038,
  344. };
  345. /*
  346. * Enable essential clock domains, modules and
  347. * do some additional special settings needed
  348. */
  349. void enable_basic_clocks(void)
  350. {
  351. u32 const clk_domains_essential[] = {
  352. (*prcm)->cm_l4per_clkstctrl,
  353. (*prcm)->cm_l3init_clkstctrl,
  354. (*prcm)->cm_memif_clkstctrl,
  355. (*prcm)->cm_l4cfg_clkstctrl,
  356. #ifdef CONFIG_DRIVER_TI_CPSW
  357. (*prcm)->cm_gmac_clkstctrl,
  358. #endif
  359. 0
  360. };
  361. u32 const clk_modules_hw_auto_essential[] = {
  362. (*prcm)->cm_l3_gpmc_clkctrl,
  363. (*prcm)->cm_memif_emif_1_clkctrl,
  364. (*prcm)->cm_memif_emif_2_clkctrl,
  365. (*prcm)->cm_l4cfg_l4_cfg_clkctrl,
  366. (*prcm)->cm_wkup_gpio1_clkctrl,
  367. (*prcm)->cm_l4per_gpio2_clkctrl,
  368. (*prcm)->cm_l4per_gpio3_clkctrl,
  369. (*prcm)->cm_l4per_gpio4_clkctrl,
  370. (*prcm)->cm_l4per_gpio5_clkctrl,
  371. (*prcm)->cm_l4per_gpio6_clkctrl,
  372. (*prcm)->cm_l4per_gpio7_clkctrl,
  373. (*prcm)->cm_l4per_gpio8_clkctrl,
  374. 0
  375. };
  376. u32 const clk_modules_explicit_en_essential[] = {
  377. (*prcm)->cm_wkup_gptimer1_clkctrl,
  378. (*prcm)->cm_l3init_hsmmc1_clkctrl,
  379. (*prcm)->cm_l3init_hsmmc2_clkctrl,
  380. (*prcm)->cm_l4per_gptimer2_clkctrl,
  381. (*prcm)->cm_wkup_wdtimer2_clkctrl,
  382. (*prcm)->cm_l4per_uart3_clkctrl,
  383. (*prcm)->cm_l4per_i2c1_clkctrl,
  384. #ifdef CONFIG_DRIVER_TI_CPSW
  385. (*prcm)->cm_gmac_gmac_clkctrl,
  386. #endif
  387. 0
  388. };
  389. /* Enable optional additional functional clock for GPIO4 */
  390. setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl,
  391. GPIO4_CLKCTRL_OPTFCLKEN_MASK);
  392. /* Enable 96 MHz clock for MMC1 & MMC2 */
  393. setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,
  394. HSMMC_CLKCTRL_CLKSEL_MASK);
  395. setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,
  396. HSMMC_CLKCTRL_CLKSEL_MASK);
  397. /* Set the correct clock dividers for mmc */
  398. setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,
  399. HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
  400. setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,
  401. HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
  402. /* Select 32KHz clock as the source of GPTIMER1 */
  403. setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl,
  404. GPTIMER1_CLKCTRL_CLKSEL_MASK);
  405. do_enable_clocks(clk_domains_essential,
  406. clk_modules_hw_auto_essential,
  407. clk_modules_explicit_en_essential,
  408. 1);
  409. /* Enable SCRM OPT clocks for PER and CORE dpll */
  410. setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
  411. OPTFCLKEN_SCRM_PER_MASK);
  412. setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
  413. OPTFCLKEN_SCRM_CORE_MASK);
  414. }
  415. void enable_basic_uboot_clocks(void)
  416. {
  417. u32 const clk_domains_essential[] = {
  418. 0
  419. };
  420. u32 const clk_modules_hw_auto_essential[] = {
  421. (*prcm)->cm_l3init_hsusbtll_clkctrl,
  422. 0
  423. };
  424. u32 const clk_modules_explicit_en_essential[] = {
  425. (*prcm)->cm_l4per_mcspi1_clkctrl,
  426. (*prcm)->cm_l4per_i2c2_clkctrl,
  427. (*prcm)->cm_l4per_i2c3_clkctrl,
  428. (*prcm)->cm_l4per_i2c4_clkctrl,
  429. (*prcm)->cm_l4per_i2c5_clkctrl,
  430. (*prcm)->cm_l3init_hsusbhost_clkctrl,
  431. (*prcm)->cm_l3init_fsusb_clkctrl,
  432. 0
  433. };
  434. do_enable_clocks(clk_domains_essential,
  435. clk_modules_hw_auto_essential,
  436. clk_modules_explicit_en_essential,
  437. 1);
  438. }
  439. /*
  440. * Enable non-essential clock domains, modules and
  441. * do some additional special settings needed
  442. */
  443. void enable_non_essential_clocks(void)
  444. {
  445. u32 const clk_domains_non_essential[] = {
  446. (*prcm)->cm_mpu_m3_clkstctrl,
  447. (*prcm)->cm_ivahd_clkstctrl,
  448. (*prcm)->cm_dsp_clkstctrl,
  449. (*prcm)->cm_dss_clkstctrl,
  450. (*prcm)->cm_sgx_clkstctrl,
  451. (*prcm)->cm1_abe_clkstctrl,
  452. (*prcm)->cm_c2c_clkstctrl,
  453. (*prcm)->cm_cam_clkstctrl,
  454. (*prcm)->cm_dss_clkstctrl,
  455. (*prcm)->cm_sdma_clkstctrl,
  456. 0
  457. };
  458. u32 const clk_modules_hw_auto_non_essential[] = {
  459. (*prcm)->cm_mpu_m3_mpu_m3_clkctrl,
  460. (*prcm)->cm_ivahd_ivahd_clkctrl,
  461. (*prcm)->cm_ivahd_sl2_clkctrl,
  462. (*prcm)->cm_dsp_dsp_clkctrl,
  463. (*prcm)->cm_l3instr_l3_3_clkctrl,
  464. (*prcm)->cm_l3instr_l3_instr_clkctrl,
  465. (*prcm)->cm_l3instr_intrconn_wp1_clkctrl,
  466. (*prcm)->cm_l3init_hsi_clkctrl,
  467. (*prcm)->cm_l4per_hdq1w_clkctrl,
  468. 0
  469. };
  470. u32 const clk_modules_explicit_en_non_essential[] = {
  471. (*prcm)->cm1_abe_aess_clkctrl,
  472. (*prcm)->cm1_abe_pdm_clkctrl,
  473. (*prcm)->cm1_abe_dmic_clkctrl,
  474. (*prcm)->cm1_abe_mcasp_clkctrl,
  475. (*prcm)->cm1_abe_mcbsp1_clkctrl,
  476. (*prcm)->cm1_abe_mcbsp2_clkctrl,
  477. (*prcm)->cm1_abe_mcbsp3_clkctrl,
  478. (*prcm)->cm1_abe_slimbus_clkctrl,
  479. (*prcm)->cm1_abe_timer5_clkctrl,
  480. (*prcm)->cm1_abe_timer6_clkctrl,
  481. (*prcm)->cm1_abe_timer7_clkctrl,
  482. (*prcm)->cm1_abe_timer8_clkctrl,
  483. (*prcm)->cm1_abe_wdt3_clkctrl,
  484. (*prcm)->cm_l4per_gptimer9_clkctrl,
  485. (*prcm)->cm_l4per_gptimer10_clkctrl,
  486. (*prcm)->cm_l4per_gptimer11_clkctrl,
  487. (*prcm)->cm_l4per_gptimer3_clkctrl,
  488. (*prcm)->cm_l4per_gptimer4_clkctrl,
  489. (*prcm)->cm_l4per_mcspi2_clkctrl,
  490. (*prcm)->cm_l4per_mcspi3_clkctrl,
  491. (*prcm)->cm_l4per_mcspi4_clkctrl,
  492. (*prcm)->cm_l4per_mmcsd3_clkctrl,
  493. (*prcm)->cm_l4per_mmcsd4_clkctrl,
  494. (*prcm)->cm_l4per_mmcsd5_clkctrl,
  495. (*prcm)->cm_l4per_uart1_clkctrl,
  496. (*prcm)->cm_l4per_uart2_clkctrl,
  497. (*prcm)->cm_l4per_uart4_clkctrl,
  498. (*prcm)->cm_wkup_keyboard_clkctrl,
  499. (*prcm)->cm_wkup_wdtimer2_clkctrl,
  500. (*prcm)->cm_cam_iss_clkctrl,
  501. (*prcm)->cm_cam_fdif_clkctrl,
  502. (*prcm)->cm_dss_dss_clkctrl,
  503. (*prcm)->cm_sgx_sgx_clkctrl,
  504. 0
  505. };
  506. /* Enable optional functional clock for ISS */
  507. setbits_le32((*prcm)->cm_cam_iss_clkctrl, ISS_CLKCTRL_OPTFCLKEN_MASK);
  508. /* Enable all optional functional clocks of DSS */
  509. setbits_le32((*prcm)->cm_dss_dss_clkctrl, DSS_CLKCTRL_OPTFCLKEN_MASK);
  510. do_enable_clocks(clk_domains_non_essential,
  511. clk_modules_hw_auto_non_essential,
  512. clk_modules_explicit_en_non_essential,
  513. 0);
  514. /* Put camera module in no sleep mode */
  515. clrsetbits_le32((*prcm)->cm_cam_clkstctrl,
  516. MODULE_CLKCTRL_MODULEMODE_MASK,
  517. CD_CLKCTRL_CLKTRCTRL_NO_SLEEP <<
  518. MODULE_CLKCTRL_MODULEMODE_SHIFT);
  519. }
  520. const struct ctrl_ioregs ioregs_omap5430 = {
  521. .ctrl_ddrch = DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN,
  522. .ctrl_lpddr2ch = DDR_IO_I_34OHM_SR_FASTEST_WD_CK_CKE_NCS_CA_PULL_DOWN,
  523. .ctrl_ddrio_0 = DDR_IO_0_DDR2_DQ_INT_EN_ALL_DDR3_CA_DIS_ALL,
  524. .ctrl_ddrio_1 = DDR_IO_1_DQ_OUT_EN_ALL_DQ_INT_EN_ALL,
  525. .ctrl_ddrio_2 = DDR_IO_2_CA_OUT_EN_ALL_CA_INT_EN_ALL,
  526. };
  527. const struct ctrl_ioregs ioregs_omap5432_es1 = {
  528. .ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL,
  529. .ctrl_lpddr2ch = 0x0,
  530. .ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL,
  531. .ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE,
  532. .ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE,
  533. .ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE,
  534. .ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES,
  535. };
  536. const struct ctrl_ioregs ioregs_omap5432_es2 = {
  537. .ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2,
  538. .ctrl_lpddr2ch = 0x0,
  539. .ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2,
  540. .ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE_ES2,
  541. .ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE_ES2,
  542. .ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE_ES2,
  543. .ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES,
  544. };
  545. const struct ctrl_ioregs ioregs_dra7xx_es1 = {
  546. .ctrl_ddrch = 0x40404040,
  547. .ctrl_lpddr2ch = 0x40404040,
  548. .ctrl_ddr3ch = 0x80808080,
  549. .ctrl_ddrio_0 = 0xbae8c631,
  550. .ctrl_ddrio_1 = 0xb46318d8,
  551. .ctrl_ddrio_2 = 0x84210000,
  552. .ctrl_emif_sdram_config_ext = 0xb2c00000,
  553. .ctrl_ddr_ctrl_ext_0 = 0xA2000000,
  554. };
  555. void hw_data_init(void)
  556. {
  557. u32 omap_rev = omap_revision();
  558. switch (omap_rev) {
  559. case OMAP5430_ES1_0:
  560. case OMAP5432_ES1_0:
  561. *prcm = &omap5_es1_prcm;
  562. *dplls_data = &omap5_dplls_es1;
  563. *omap_vcores = &omap5430_volts;
  564. *ctrl = &omap5_ctrl;
  565. break;
  566. case OMAP5430_ES2_0:
  567. case OMAP5432_ES2_0:
  568. *prcm = &omap5_es2_prcm;
  569. *dplls_data = &omap5_dplls_es2;
  570. *omap_vcores = &omap5430_volts_es2;
  571. *ctrl = &omap5_ctrl;
  572. break;
  573. case DRA752_ES1_0:
  574. *prcm = &dra7xx_prcm;
  575. *dplls_data = &dra7xx_dplls;
  576. *omap_vcores = &dra752_volts;
  577. *ctrl = &dra7xx_ctrl;
  578. break;
  579. default:
  580. printf("\n INVALID OMAP REVISION ");
  581. }
  582. }
  583. void get_ioregs(const struct ctrl_ioregs **regs)
  584. {
  585. u32 omap_rev = omap_revision();
  586. switch (omap_rev) {
  587. case OMAP5430_ES1_0:
  588. case OMAP5430_ES2_0:
  589. *regs = &ioregs_omap5430;
  590. break;
  591. case OMAP5432_ES1_0:
  592. *regs = &ioregs_omap5432_es1;
  593. break;
  594. case OMAP5432_ES2_0:
  595. *regs = &ioregs_omap5432_es2;
  596. break;
  597. case DRA752_ES1_0:
  598. *regs = &ioregs_dra7xx_es1;
  599. break;
  600. default:
  601. printf("\n INVALID OMAP REVISION ");
  602. }
  603. }