clockdomains.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. /*
  2. * OMAP2/3 clockdomains
  3. *
  4. * Copyright (C) 2008 Texas Instruments, Inc.
  5. * Copyright (C) 2008 Nokia Corporation
  6. *
  7. * Written by Paul Walmsley
  8. */
  9. #ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_H
  10. #define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_H
  11. #include <mach/clockdomain.h>
  12. /*
  13. * OMAP2/3-common clockdomains
  14. */
  15. /* This is an implicit clockdomain - it is never defined as such in TRM */
  16. static struct clockdomain wkup_clkdm = {
  17. .name = "wkup_clkdm",
  18. .pwrdm_name = "wkup_pwrdm",
  19. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430),
  20. };
  21. /*
  22. * 2420-only clockdomains
  23. */
  24. #if defined(CONFIG_ARCH_OMAP2420)
  25. static struct clockdomain mpu_2420_clkdm = {
  26. .name = "mpu_clkdm",
  27. .pwrdm_name = "mpu_pwrdm",
  28. .flags = CLKDM_CAN_HWSUP,
  29. .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
  30. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
  31. };
  32. static struct clockdomain iva1_2420_clkdm = {
  33. .name = "iva1_clkdm",
  34. .pwrdm_name = "dsp_pwrdm",
  35. .flags = CLKDM_CAN_HWSUP_SWSUP,
  36. .clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK,
  37. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
  38. };
  39. #endif /* CONFIG_ARCH_OMAP2420 */
  40. /*
  41. * 2430-only clockdomains
  42. */
  43. #if defined(CONFIG_ARCH_OMAP2430)
  44. static struct clockdomain mpu_2430_clkdm = {
  45. .name = "mpu_clkdm",
  46. .pwrdm_name = "mpu_pwrdm",
  47. .flags = CLKDM_CAN_HWSUP_SWSUP,
  48. .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
  49. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  50. };
  51. static struct clockdomain mdm_clkdm = {
  52. .name = "mdm_clkdm",
  53. .pwrdm_name = "mdm_pwrdm",
  54. .flags = CLKDM_CAN_HWSUP_SWSUP,
  55. .clktrctrl_mask = OMAP2430_AUTOSTATE_MDM_MASK,
  56. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  57. };
  58. #endif /* CONFIG_ARCH_OMAP2430 */
  59. /*
  60. * 24XX-only clockdomains
  61. */
  62. #if defined(CONFIG_ARCH_OMAP24XX)
  63. static struct clockdomain dsp_clkdm = {
  64. .name = "dsp_clkdm",
  65. .pwrdm_name = "dsp_pwrdm",
  66. .flags = CLKDM_CAN_HWSUP_SWSUP,
  67. .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
  68. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
  69. };
  70. static struct clockdomain gfx_24xx_clkdm = {
  71. .name = "gfx_clkdm",
  72. .pwrdm_name = "gfx_pwrdm",
  73. .flags = CLKDM_CAN_HWSUP_SWSUP,
  74. .clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
  75. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
  76. };
  77. static struct clockdomain core_l3_24xx_clkdm = {
  78. .name = "core_l3_clkdm",
  79. .pwrdm_name = "core_pwrdm",
  80. .flags = CLKDM_CAN_HWSUP,
  81. .clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
  82. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
  83. };
  84. static struct clockdomain core_l4_24xx_clkdm = {
  85. .name = "core_l4_clkdm",
  86. .pwrdm_name = "core_pwrdm",
  87. .flags = CLKDM_CAN_HWSUP,
  88. .clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
  89. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
  90. };
  91. static struct clockdomain dss_24xx_clkdm = {
  92. .name = "dss_clkdm",
  93. .pwrdm_name = "core_pwrdm",
  94. .flags = CLKDM_CAN_HWSUP,
  95. .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
  96. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
  97. };
  98. #endif /* CONFIG_ARCH_OMAP24XX */
  99. /*
  100. * 34xx clockdomains
  101. */
  102. #if defined(CONFIG_ARCH_OMAP34XX)
  103. static struct clockdomain mpu_34xx_clkdm = {
  104. .name = "mpu_clkdm",
  105. .pwrdm_name = "mpu_pwrdm",
  106. .flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP,
  107. .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK,
  108. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  109. };
  110. static struct clockdomain neon_clkdm = {
  111. .name = "neon_clkdm",
  112. .pwrdm_name = "neon_pwrdm",
  113. .flags = CLKDM_CAN_HWSUP_SWSUP,
  114. .clktrctrl_mask = OMAP3430_CLKTRCTRL_NEON_MASK,
  115. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  116. };
  117. static struct clockdomain iva2_clkdm = {
  118. .name = "iva2_clkdm",
  119. .pwrdm_name = "iva2_pwrdm",
  120. .flags = CLKDM_CAN_HWSUP_SWSUP,
  121. .clktrctrl_mask = OMAP3430_CLKTRCTRL_IVA2_MASK,
  122. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  123. };
  124. static struct clockdomain gfx_3430es1_clkdm = {
  125. .name = "gfx_clkdm",
  126. .pwrdm_name = "gfx_pwrdm",
  127. .flags = CLKDM_CAN_HWSUP_SWSUP,
  128. .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_GFX_MASK,
  129. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1),
  130. };
  131. static struct clockdomain sgx_clkdm = {
  132. .name = "sgx_clkdm",
  133. .pwrdm_name = "sgx_pwrdm",
  134. .flags = CLKDM_CAN_HWSUP_SWSUP,
  135. .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK,
  136. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2),
  137. };
  138. /*
  139. * The die-to-die clockdomain was documented in the 34xx ES1 TRM, but
  140. * then that information was removed from the 34xx ES2+ TRM. It is
  141. * unclear whether the core is still there, but the clockdomain logic
  142. * is there, and must be programmed to an appropriate state if the
  143. * CORE clockdomain is to become inactive.
  144. */
  145. static struct clockdomain d2d_clkdm = {
  146. .name = "d2d_clkdm",
  147. .pwrdm_name = "core_pwrdm",
  148. .flags = CLKDM_CAN_HWSUP,
  149. .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK,
  150. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  151. };
  152. static struct clockdomain core_l3_34xx_clkdm = {
  153. .name = "core_l3_clkdm",
  154. .pwrdm_name = "core_pwrdm",
  155. .flags = CLKDM_CAN_HWSUP,
  156. .clktrctrl_mask = OMAP3430_CLKTRCTRL_L3_MASK,
  157. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  158. };
  159. static struct clockdomain core_l4_34xx_clkdm = {
  160. .name = "core_l4_clkdm",
  161. .pwrdm_name = "core_pwrdm",
  162. .flags = CLKDM_CAN_HWSUP,
  163. .clktrctrl_mask = OMAP3430_CLKTRCTRL_L4_MASK,
  164. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  165. };
  166. static struct clockdomain dss_34xx_clkdm = {
  167. .name = "dss_clkdm",
  168. .pwrdm_name = "dss_pwrdm",
  169. .flags = CLKDM_CAN_HWSUP_SWSUP,
  170. .clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK,
  171. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  172. };
  173. static struct clockdomain cam_clkdm = {
  174. .name = "cam_clkdm",
  175. .pwrdm_name = "cam_pwrdm",
  176. .flags = CLKDM_CAN_HWSUP_SWSUP,
  177. .clktrctrl_mask = OMAP3430_CLKTRCTRL_CAM_MASK,
  178. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  179. };
  180. static struct clockdomain usbhost_clkdm = {
  181. .name = "usbhost_clkdm",
  182. .pwrdm_name = "usbhost_pwrdm",
  183. .flags = CLKDM_CAN_HWSUP_SWSUP,
  184. .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK,
  185. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2),
  186. };
  187. static struct clockdomain per_clkdm = {
  188. .name = "per_clkdm",
  189. .pwrdm_name = "per_pwrdm",
  190. .flags = CLKDM_CAN_HWSUP_SWSUP,
  191. .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK,
  192. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  193. };
  194. static struct clockdomain emu_clkdm = {
  195. .name = "emu_clkdm",
  196. .pwrdm_name = "emu_pwrdm",
  197. .flags = CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_SWSUP,
  198. .clktrctrl_mask = OMAP3430_CLKTRCTRL_EMU_MASK,
  199. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
  200. };
  201. #endif /* CONFIG_ARCH_OMAP34XX */
  202. /*
  203. * Clockdomain-powerdomain hwsup dependencies (34XX only)
  204. */
  205. static struct clkdm_pwrdm_autodep clkdm_pwrdm_autodeps[] = {
  206. {
  207. .pwrdm_name = "mpu_pwrdm",
  208. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
  209. },
  210. {
  211. .pwrdm_name = "iva2_pwrdm",
  212. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
  213. },
  214. { NULL }
  215. };
  216. /*
  217. *
  218. */
  219. static struct clockdomain *clockdomains_omap[] = {
  220. &wkup_clkdm,
  221. #ifdef CONFIG_ARCH_OMAP2420
  222. &mpu_2420_clkdm,
  223. &iva1_2420_clkdm,
  224. #endif
  225. #ifdef CONFIG_ARCH_OMAP2430
  226. &mpu_2430_clkdm,
  227. &mdm_clkdm,
  228. #endif
  229. #ifdef CONFIG_ARCH_OMAP24XX
  230. &dsp_clkdm,
  231. &gfx_24xx_clkdm,
  232. &core_l3_24xx_clkdm,
  233. &core_l4_24xx_clkdm,
  234. &dss_24xx_clkdm,
  235. #endif
  236. #ifdef CONFIG_ARCH_OMAP34XX
  237. &mpu_34xx_clkdm,
  238. &neon_clkdm,
  239. &iva2_clkdm,
  240. &gfx_3430es1_clkdm,
  241. &sgx_clkdm,
  242. &d2d_clkdm,
  243. &core_l3_34xx_clkdm,
  244. &core_l4_34xx_clkdm,
  245. &dss_34xx_clkdm,
  246. &cam_clkdm,
  247. &usbhost_clkdm,
  248. &per_clkdm,
  249. &emu_clkdm,
  250. #endif
  251. NULL,
  252. };
  253. #endif