clockdomains43xx_data.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * AM43xx Clock domains framework
  4. *
  5. * Copyright (C) 2013 Texas Instruments, Inc.
  6. */
  7. #include <linux/kernel.h>
  8. #include <linux/io.h>
  9. #include "clockdomain.h"
  10. #include "prcm44xx.h"
  11. #include "prcm43xx.h"
  12. static struct clockdomain l4_cefuse_43xx_clkdm = {
  13. .name = "l4_cefuse_clkdm",
  14. .pwrdm = { .name = "cefuse_pwrdm" },
  15. .prcm_partition = AM43XX_CM_PARTITION,
  16. .cm_inst = AM43XX_CM_CEFUSE_INST,
  17. .clkdm_offs = AM43XX_CM_CEFUSE_CEFUSE_CDOFFS,
  18. .flags = CLKDM_CAN_SWSUP,
  19. };
  20. static struct clockdomain mpu_43xx_clkdm = {
  21. .name = "mpu_clkdm",
  22. .pwrdm = { .name = "mpu_pwrdm" },
  23. .prcm_partition = AM43XX_CM_PARTITION,
  24. .cm_inst = AM43XX_CM_MPU_INST,
  25. .clkdm_offs = AM43XX_CM_MPU_MPU_CDOFFS,
  26. .flags = CLKDM_CAN_HWSUP_SWSUP,
  27. };
  28. static struct clockdomain l4ls_43xx_clkdm = {
  29. .name = "l4ls_clkdm",
  30. .pwrdm = { .name = "per_pwrdm" },
  31. .prcm_partition = AM43XX_CM_PARTITION,
  32. .cm_inst = AM43XX_CM_PER_INST,
  33. .clkdm_offs = AM43XX_CM_PER_L4LS_CDOFFS,
  34. .flags = CLKDM_CAN_SWSUP,
  35. };
  36. static struct clockdomain tamper_43xx_clkdm = {
  37. .name = "tamper_clkdm",
  38. .pwrdm = { .name = "tamper_pwrdm" },
  39. .prcm_partition = AM43XX_CM_PARTITION,
  40. .cm_inst = AM43XX_CM_TAMPER_INST,
  41. .clkdm_offs = AM43XX_CM_TAMPER_TAMPER_CDOFFS,
  42. .flags = CLKDM_CAN_SWSUP,
  43. };
  44. static struct clockdomain l4_rtc_43xx_clkdm = {
  45. .name = "l4_rtc_clkdm",
  46. .pwrdm = { .name = "rtc_pwrdm" },
  47. .prcm_partition = AM43XX_CM_PARTITION,
  48. .cm_inst = AM43XX_CM_RTC_INST,
  49. .clkdm_offs = AM43XX_CM_RTC_RTC_CDOFFS,
  50. .flags = CLKDM_CAN_SWSUP,
  51. };
  52. static struct clockdomain pruss_ocp_43xx_clkdm = {
  53. .name = "pruss_ocp_clkdm",
  54. .pwrdm = { .name = "per_pwrdm" },
  55. .prcm_partition = AM43XX_CM_PARTITION,
  56. .cm_inst = AM43XX_CM_PER_INST,
  57. .clkdm_offs = AM43XX_CM_PER_ICSS_CDOFFS,
  58. .flags = CLKDM_CAN_SWSUP,
  59. };
  60. static struct clockdomain ocpwp_l3_43xx_clkdm = {
  61. .name = "ocpwp_l3_clkdm",
  62. .pwrdm = { .name = "per_pwrdm" },
  63. .prcm_partition = AM43XX_CM_PARTITION,
  64. .cm_inst = AM43XX_CM_PER_INST,
  65. .clkdm_offs = AM43XX_CM_PER_OCPWP_L3_CDOFFS,
  66. .flags = CLKDM_CAN_SWSUP,
  67. };
  68. static struct clockdomain l3s_tsc_43xx_clkdm = {
  69. .name = "l3s_tsc_clkdm",
  70. .pwrdm = { .name = "wkup_pwrdm" },
  71. .prcm_partition = AM43XX_CM_PARTITION,
  72. .cm_inst = AM43XX_CM_WKUP_INST,
  73. .clkdm_offs = AM43XX_CM_WKUP_L3S_TSC_CDOFFS,
  74. .flags = CLKDM_CAN_SWSUP,
  75. };
  76. static struct clockdomain lcdc_43xx_clkdm = {
  77. .name = "lcdc_clkdm",
  78. .pwrdm = { .name = "per_pwrdm" },
  79. .prcm_partition = AM43XX_CM_PARTITION,
  80. .cm_inst = AM43XX_CM_PER_INST,
  81. .clkdm_offs = AM43XX_CM_PER_LCDC_CDOFFS,
  82. .flags = CLKDM_CAN_SWSUP,
  83. };
  84. static struct clockdomain dss_43xx_clkdm = {
  85. .name = "dss_clkdm",
  86. .pwrdm = { .name = "per_pwrdm" },
  87. .prcm_partition = AM43XX_CM_PARTITION,
  88. .cm_inst = AM43XX_CM_PER_INST,
  89. .clkdm_offs = AM43XX_CM_PER_DSS_CDOFFS,
  90. .flags = CLKDM_CAN_SWSUP,
  91. };
  92. static struct clockdomain l3_aon_43xx_clkdm = {
  93. .name = "l3_aon_clkdm",
  94. .pwrdm = { .name = "wkup_pwrdm" },
  95. .prcm_partition = AM43XX_CM_PARTITION,
  96. .cm_inst = AM43XX_CM_WKUP_INST,
  97. .clkdm_offs = AM43XX_CM_WKUP_L3_AON_CDOFFS,
  98. .flags = CLKDM_CAN_SWSUP,
  99. };
  100. static struct clockdomain emif_43xx_clkdm = {
  101. .name = "emif_clkdm",
  102. .pwrdm = { .name = "per_pwrdm" },
  103. .prcm_partition = AM43XX_CM_PARTITION,
  104. .cm_inst = AM43XX_CM_PER_INST,
  105. .clkdm_offs = AM43XX_CM_PER_EMIF_CDOFFS,
  106. .flags = CLKDM_CAN_SWSUP,
  107. };
  108. static struct clockdomain l4_wkup_aon_43xx_clkdm = {
  109. .name = "l4_wkup_aon_clkdm",
  110. .pwrdm = { .name = "wkup_pwrdm" },
  111. .prcm_partition = AM43XX_CM_PARTITION,
  112. .cm_inst = AM43XX_CM_WKUP_INST,
  113. .clkdm_offs = AM43XX_CM_WKUP_L4_WKUP_AON_CDOFFS,
  114. };
  115. static struct clockdomain l3_43xx_clkdm = {
  116. .name = "l3_clkdm",
  117. .pwrdm = { .name = "per_pwrdm" },
  118. .prcm_partition = AM43XX_CM_PARTITION,
  119. .cm_inst = AM43XX_CM_PER_INST,
  120. .clkdm_offs = AM43XX_CM_PER_L3_CDOFFS,
  121. .flags = CLKDM_CAN_SWSUP,
  122. };
  123. static struct clockdomain l4_wkup_43xx_clkdm = {
  124. .name = "l4_wkup_clkdm",
  125. .pwrdm = { .name = "wkup_pwrdm" },
  126. .prcm_partition = AM43XX_CM_PARTITION,
  127. .cm_inst = AM43XX_CM_WKUP_INST,
  128. .clkdm_offs = AM43XX_CM_WKUP_WKUP_CDOFFS,
  129. .flags = CLKDM_CAN_SWSUP,
  130. };
  131. static struct clockdomain cpsw_125mhz_43xx_clkdm = {
  132. .name = "cpsw_125mhz_clkdm",
  133. .pwrdm = { .name = "per_pwrdm" },
  134. .prcm_partition = AM43XX_CM_PARTITION,
  135. .cm_inst = AM43XX_CM_PER_INST,
  136. .clkdm_offs = AM43XX_CM_PER_CPSW_CDOFFS,
  137. .flags = CLKDM_CAN_SWSUP,
  138. };
  139. static struct clockdomain gfx_l3_43xx_clkdm = {
  140. .name = "gfx_l3_clkdm",
  141. .pwrdm = { .name = "gfx_pwrdm" },
  142. .prcm_partition = AM43XX_CM_PARTITION,
  143. .cm_inst = AM43XX_CM_GFX_INST,
  144. .clkdm_offs = AM43XX_CM_GFX_GFX_L3_CDOFFS,
  145. .flags = CLKDM_CAN_SWSUP,
  146. };
  147. static struct clockdomain l3s_43xx_clkdm = {
  148. .name = "l3s_clkdm",
  149. .pwrdm = { .name = "per_pwrdm" },
  150. .prcm_partition = AM43XX_CM_PARTITION,
  151. .cm_inst = AM43XX_CM_PER_INST,
  152. .clkdm_offs = AM43XX_CM_PER_L3S_CDOFFS,
  153. .flags = CLKDM_CAN_SWSUP,
  154. };
  155. static struct clockdomain *clockdomains_am43xx[] __initdata = {
  156. &l4_cefuse_43xx_clkdm,
  157. &mpu_43xx_clkdm,
  158. &l4ls_43xx_clkdm,
  159. &tamper_43xx_clkdm,
  160. &l4_rtc_43xx_clkdm,
  161. &pruss_ocp_43xx_clkdm,
  162. &ocpwp_l3_43xx_clkdm,
  163. &l3s_tsc_43xx_clkdm,
  164. &lcdc_43xx_clkdm,
  165. &dss_43xx_clkdm,
  166. &l3_aon_43xx_clkdm,
  167. &emif_43xx_clkdm,
  168. &l4_wkup_aon_43xx_clkdm,
  169. &l3_43xx_clkdm,
  170. &l4_wkup_43xx_clkdm,
  171. &cpsw_125mhz_43xx_clkdm,
  172. &gfx_l3_43xx_clkdm,
  173. &l3s_43xx_clkdm,
  174. NULL
  175. };
  176. void __init am43xx_clockdomains_init(void)
  177. {
  178. clkdm_register_platform_funcs(&am43xx_clkdm_operations);
  179. clkdm_register_clkdms(clockdomains_am43xx);
  180. clkdm_complete_init();
  181. }