powerdomains7xx_data.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * DRA7xx Power domains framework
  4. *
  5. * Copyright (C) 2009-2013 Texas Instruments, Inc.
  6. * Copyright (C) 2009-2011 Nokia Corporation
  7. *
  8. * Generated by code originally written by:
  9. * Abhijit Pagare ([email protected])
  10. * Benoit Cousson ([email protected])
  11. * Paul Walmsley ([email protected])
  12. *
  13. * This file is automatically generated from the OMAP hardware databases.
  14. * We respectfully ask that any modifications to this file be coordinated
  15. * with the public [email protected] mailing list and the
  16. * authors above to ensure that the autogeneration scripts are kept
  17. * up-to-date with the file contents.
  18. */
  19. #include <linux/kernel.h>
  20. #include <linux/init.h>
  21. #include "powerdomain.h"
  22. #include "prcm-common.h"
  23. #include "prcm44xx.h"
  24. #include "prm7xx.h"
  25. #include "prcm_mpu7xx.h"
  26. #include "soc.h"
  27. /* iva_7xx_pwrdm: IVA-HD power domain */
  28. static struct powerdomain iva_7xx_pwrdm = {
  29. .name = "iva_pwrdm",
  30. .prcm_offs = DRA7XX_PRM_IVA_INST,
  31. .prcm_partition = DRA7XX_PRM_PARTITION,
  32. .pwrsts = PWRSTS_OFF_ON,
  33. .banks = 4,
  34. .pwrsts_mem_on = {
  35. [0] = PWRSTS_ON, /* hwa_mem */
  36. [1] = PWRSTS_ON, /* sl2_mem */
  37. [2] = PWRSTS_ON, /* tcm1_mem */
  38. [3] = PWRSTS_ON, /* tcm2_mem */
  39. },
  40. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  41. };
  42. /* rtc_7xx_pwrdm: */
  43. static struct powerdomain rtc_7xx_pwrdm = {
  44. .name = "rtc_pwrdm",
  45. .prcm_offs = DRA7XX_PRM_RTC_INST,
  46. .prcm_partition = DRA7XX_PRM_PARTITION,
  47. .pwrsts = PWRSTS_ON,
  48. };
  49. /* custefuse_7xx_pwrdm: Customer efuse controller power domain */
  50. static struct powerdomain custefuse_7xx_pwrdm = {
  51. .name = "custefuse_pwrdm",
  52. .prcm_offs = DRA7XX_PRM_CUSTEFUSE_INST,
  53. .prcm_partition = DRA7XX_PRM_PARTITION,
  54. .pwrsts = PWRSTS_OFF_ON,
  55. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  56. };
  57. /* custefuse_aon_7xx_pwrdm: Customer efuse controller power domain */
  58. static struct powerdomain custefuse_aon_7xx_pwrdm = {
  59. .name = "custefuse_pwrdm",
  60. .prcm_offs = DRA7XX_PRM_CUSTEFUSE_INST,
  61. .prcm_partition = DRA7XX_PRM_PARTITION,
  62. .pwrsts = PWRSTS_ON,
  63. };
  64. /* ipu_7xx_pwrdm: Audio back end power domain */
  65. static struct powerdomain ipu_7xx_pwrdm = {
  66. .name = "ipu_pwrdm",
  67. .prcm_offs = DRA7XX_PRM_IPU_INST,
  68. .prcm_partition = DRA7XX_PRM_PARTITION,
  69. .pwrsts = PWRSTS_OFF_ON,
  70. .banks = 2,
  71. .pwrsts_mem_on = {
  72. [0] = PWRSTS_ON, /* aessmem */
  73. [1] = PWRSTS_ON, /* periphmem */
  74. },
  75. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  76. };
  77. /* dss_7xx_pwrdm: Display subsystem power domain */
  78. static struct powerdomain dss_7xx_pwrdm = {
  79. .name = "dss_pwrdm",
  80. .prcm_offs = DRA7XX_PRM_DSS_INST,
  81. .prcm_partition = DRA7XX_PRM_PARTITION,
  82. .pwrsts = PWRSTS_OFF_ON,
  83. .banks = 1,
  84. .pwrsts_mem_on = {
  85. [0] = PWRSTS_ON, /* dss_mem */
  86. },
  87. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  88. };
  89. /* l4per_7xx_pwrdm: Target peripherals power domain */
  90. static struct powerdomain l4per_7xx_pwrdm = {
  91. .name = "l4per_pwrdm",
  92. .prcm_offs = DRA7XX_PRM_L4PER_INST,
  93. .prcm_partition = DRA7XX_PRM_PARTITION,
  94. .pwrsts = PWRSTS_ON,
  95. .banks = 2,
  96. .pwrsts_mem_on = {
  97. [0] = PWRSTS_ON, /* nonretained_bank */
  98. [1] = PWRSTS_ON, /* retained_bank */
  99. },
  100. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  101. };
  102. /* gpu_7xx_pwrdm: 3D accelerator power domain */
  103. static struct powerdomain gpu_7xx_pwrdm = {
  104. .name = "gpu_pwrdm",
  105. .prcm_offs = DRA7XX_PRM_GPU_INST,
  106. .prcm_partition = DRA7XX_PRM_PARTITION,
  107. .pwrsts = PWRSTS_OFF_ON,
  108. .banks = 1,
  109. .pwrsts_mem_on = {
  110. [0] = PWRSTS_ON, /* gpu_mem */
  111. },
  112. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  113. };
  114. /* wkupaon_7xx_pwrdm: Wake-up power domain */
  115. static struct powerdomain wkupaon_7xx_pwrdm = {
  116. .name = "wkupaon_pwrdm",
  117. .prcm_offs = DRA7XX_PRM_WKUPAON_INST,
  118. .prcm_partition = DRA7XX_PRM_PARTITION,
  119. .pwrsts = PWRSTS_ON,
  120. .banks = 1,
  121. .pwrsts_mem_on = {
  122. [0] = PWRSTS_ON, /* wkup_bank */
  123. },
  124. };
  125. /* core_7xx_pwrdm: CORE power domain */
  126. static struct powerdomain core_7xx_pwrdm = {
  127. .name = "core_pwrdm",
  128. .prcm_offs = DRA7XX_PRM_CORE_INST,
  129. .prcm_partition = DRA7XX_PRM_PARTITION,
  130. .pwrsts = PWRSTS_ON,
  131. .banks = 5,
  132. .pwrsts_mem_on = {
  133. [0] = PWRSTS_ON, /* core_nret_bank */
  134. [1] = PWRSTS_ON, /* core_ocmram */
  135. [2] = PWRSTS_ON, /* core_other_bank */
  136. [3] = PWRSTS_ON, /* ipu_l2ram */
  137. [4] = PWRSTS_ON, /* ipu_unicache */
  138. },
  139. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  140. };
  141. /* coreaon_7xx_pwrdm: Always ON logic that sits in VDD_CORE voltage domain */
  142. static struct powerdomain coreaon_7xx_pwrdm = {
  143. .name = "coreaon_pwrdm",
  144. .prcm_offs = DRA7XX_PRM_COREAON_INST,
  145. .prcm_partition = DRA7XX_PRM_PARTITION,
  146. .pwrsts = PWRSTS_ON,
  147. };
  148. /* cpu0_7xx_pwrdm: MPU0 processor and Neon coprocessor power domain */
  149. static struct powerdomain cpu0_7xx_pwrdm = {
  150. .name = "cpu0_pwrdm",
  151. .prcm_offs = DRA7XX_MPU_PRCM_PRM_C0_INST,
  152. .prcm_partition = DRA7XX_MPU_PRCM_PARTITION,
  153. .pwrsts = PWRSTS_RET_ON,
  154. .pwrsts_logic_ret = PWRSTS_RET,
  155. .banks = 1,
  156. .pwrsts_mem_ret = {
  157. [0] = PWRSTS_OFF_RET, /* cpu0_l1 */
  158. },
  159. .pwrsts_mem_on = {
  160. [0] = PWRSTS_ON, /* cpu0_l1 */
  161. },
  162. };
  163. /* cpu1_7xx_pwrdm: MPU1 processor and Neon coprocessor power domain */
  164. static struct powerdomain cpu1_7xx_pwrdm = {
  165. .name = "cpu1_pwrdm",
  166. .prcm_offs = DRA7XX_MPU_PRCM_PRM_C1_INST,
  167. .prcm_partition = DRA7XX_MPU_PRCM_PARTITION,
  168. .pwrsts = PWRSTS_RET_ON,
  169. .pwrsts_logic_ret = PWRSTS_RET,
  170. .banks = 1,
  171. .pwrsts_mem_ret = {
  172. [0] = PWRSTS_OFF_RET, /* cpu1_l1 */
  173. },
  174. .pwrsts_mem_on = {
  175. [0] = PWRSTS_ON, /* cpu1_l1 */
  176. },
  177. };
  178. /* vpe_7xx_pwrdm: */
  179. static struct powerdomain vpe_7xx_pwrdm = {
  180. .name = "vpe_pwrdm",
  181. .prcm_offs = DRA7XX_PRM_VPE_INST,
  182. .prcm_partition = DRA7XX_PRM_PARTITION,
  183. .pwrsts = PWRSTS_OFF_ON,
  184. .banks = 1,
  185. .pwrsts_mem_on = {
  186. [0] = PWRSTS_ON, /* vpe_bank */
  187. },
  188. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  189. };
  190. /* mpu_7xx_pwrdm: Modena processor and the Neon coprocessor power domain */
  191. static struct powerdomain mpu_7xx_pwrdm = {
  192. .name = "mpu_pwrdm",
  193. .prcm_offs = DRA7XX_PRM_MPU_INST,
  194. .prcm_partition = DRA7XX_PRM_PARTITION,
  195. .pwrsts = PWRSTS_RET_ON,
  196. .pwrsts_logic_ret = PWRSTS_RET,
  197. .banks = 2,
  198. .pwrsts_mem_ret = {
  199. [0] = PWRSTS_OFF_RET, /* mpu_l2 */
  200. [1] = PWRSTS_RET, /* mpu_ram */
  201. },
  202. .pwrsts_mem_on = {
  203. [0] = PWRSTS_ON, /* mpu_l2 */
  204. [1] = PWRSTS_ON, /* mpu_ram */
  205. },
  206. };
  207. /* l3init_7xx_pwrdm: L3 initators pheripherals power domain */
  208. static struct powerdomain l3init_7xx_pwrdm = {
  209. .name = "l3init_pwrdm",
  210. .prcm_offs = DRA7XX_PRM_L3INIT_INST,
  211. .prcm_partition = DRA7XX_PRM_PARTITION,
  212. .pwrsts = PWRSTS_ON,
  213. .banks = 3,
  214. .pwrsts_mem_on = {
  215. [0] = PWRSTS_ON, /* gmac_bank */
  216. [1] = PWRSTS_ON, /* l3init_bank1 */
  217. [2] = PWRSTS_ON, /* l3init_bank2 */
  218. },
  219. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  220. };
  221. /* eve3_7xx_pwrdm: */
  222. static struct powerdomain eve3_7xx_pwrdm = {
  223. .name = "eve3_pwrdm",
  224. .prcm_offs = DRA7XX_PRM_EVE3_INST,
  225. .prcm_partition = DRA7XX_PRM_PARTITION,
  226. .pwrsts = PWRSTS_OFF_ON,
  227. .banks = 1,
  228. .pwrsts_mem_on = {
  229. [0] = PWRSTS_ON, /* eve3_bank */
  230. },
  231. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  232. };
  233. /* emu_7xx_pwrdm: Emulation power domain */
  234. static struct powerdomain emu_7xx_pwrdm = {
  235. .name = "emu_pwrdm",
  236. .prcm_offs = DRA7XX_PRM_EMU_INST,
  237. .prcm_partition = DRA7XX_PRM_PARTITION,
  238. .pwrsts = PWRSTS_OFF_ON,
  239. .banks = 1,
  240. .pwrsts_mem_on = {
  241. [0] = PWRSTS_ON, /* emu_bank */
  242. },
  243. };
  244. /* dsp2_7xx_pwrdm: */
  245. static struct powerdomain dsp2_7xx_pwrdm = {
  246. .name = "dsp2_pwrdm",
  247. .prcm_offs = DRA7XX_PRM_DSP2_INST,
  248. .prcm_partition = DRA7XX_PRM_PARTITION,
  249. .pwrsts = PWRSTS_OFF_ON,
  250. .banks = 3,
  251. .pwrsts_mem_on = {
  252. [0] = PWRSTS_ON, /* dsp2_edma */
  253. [1] = PWRSTS_ON, /* dsp2_l1 */
  254. [2] = PWRSTS_ON, /* dsp2_l2 */
  255. },
  256. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  257. };
  258. /* dsp1_7xx_pwrdm: Tesla processor power domain */
  259. static struct powerdomain dsp1_7xx_pwrdm = {
  260. .name = "dsp1_pwrdm",
  261. .prcm_offs = DRA7XX_PRM_DSP1_INST,
  262. .prcm_partition = DRA7XX_PRM_PARTITION,
  263. .pwrsts = PWRSTS_OFF_ON,
  264. .banks = 3,
  265. .pwrsts_mem_on = {
  266. [0] = PWRSTS_ON, /* dsp1_edma */
  267. [1] = PWRSTS_ON, /* dsp1_l1 */
  268. [2] = PWRSTS_ON, /* dsp1_l2 */
  269. },
  270. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  271. };
  272. /* cam_7xx_pwrdm: Camera subsystem power domain */
  273. static struct powerdomain cam_7xx_pwrdm = {
  274. .name = "cam_pwrdm",
  275. .prcm_offs = DRA7XX_PRM_CAM_INST,
  276. .prcm_partition = DRA7XX_PRM_PARTITION,
  277. .pwrsts = PWRSTS_OFF_ON,
  278. .banks = 1,
  279. .pwrsts_mem_on = {
  280. [0] = PWRSTS_ON, /* vip_bank */
  281. },
  282. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  283. };
  284. /* eve4_7xx_pwrdm: */
  285. static struct powerdomain eve4_7xx_pwrdm = {
  286. .name = "eve4_pwrdm",
  287. .prcm_offs = DRA7XX_PRM_EVE4_INST,
  288. .prcm_partition = DRA7XX_PRM_PARTITION,
  289. .pwrsts = PWRSTS_OFF_ON,
  290. .banks = 1,
  291. .pwrsts_mem_on = {
  292. [0] = PWRSTS_ON, /* eve4_bank */
  293. },
  294. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  295. };
  296. /* eve2_7xx_pwrdm: */
  297. static struct powerdomain eve2_7xx_pwrdm = {
  298. .name = "eve2_pwrdm",
  299. .prcm_offs = DRA7XX_PRM_EVE2_INST,
  300. .prcm_partition = DRA7XX_PRM_PARTITION,
  301. .pwrsts = PWRSTS_OFF_ON,
  302. .banks = 1,
  303. .pwrsts_mem_on = {
  304. [0] = PWRSTS_ON, /* eve2_bank */
  305. },
  306. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  307. };
  308. /* eve1_7xx_pwrdm: */
  309. static struct powerdomain eve1_7xx_pwrdm = {
  310. .name = "eve1_pwrdm",
  311. .prcm_offs = DRA7XX_PRM_EVE1_INST,
  312. .prcm_partition = DRA7XX_PRM_PARTITION,
  313. .pwrsts = PWRSTS_OFF_ON,
  314. .banks = 1,
  315. .pwrsts_mem_on = {
  316. [0] = PWRSTS_ON, /* eve1_bank */
  317. },
  318. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  319. };
  320. /*
  321. * The following power domains are not under SW control
  322. *
  323. * mpuaon
  324. * mmaon
  325. */
  326. /* As powerdomains are added or removed above, this list must also be changed */
  327. static struct powerdomain *powerdomains_dra7xx[] __initdata = {
  328. &iva_7xx_pwrdm,
  329. &rtc_7xx_pwrdm,
  330. &ipu_7xx_pwrdm,
  331. &dss_7xx_pwrdm,
  332. &l4per_7xx_pwrdm,
  333. &gpu_7xx_pwrdm,
  334. &wkupaon_7xx_pwrdm,
  335. &core_7xx_pwrdm,
  336. &coreaon_7xx_pwrdm,
  337. &cpu0_7xx_pwrdm,
  338. &cpu1_7xx_pwrdm,
  339. &vpe_7xx_pwrdm,
  340. &mpu_7xx_pwrdm,
  341. &l3init_7xx_pwrdm,
  342. &eve3_7xx_pwrdm,
  343. &emu_7xx_pwrdm,
  344. &dsp2_7xx_pwrdm,
  345. &dsp1_7xx_pwrdm,
  346. &cam_7xx_pwrdm,
  347. &eve4_7xx_pwrdm,
  348. &eve2_7xx_pwrdm,
  349. &eve1_7xx_pwrdm,
  350. NULL
  351. };
  352. static struct powerdomain *powerdomains_dra76x[] __initdata = {
  353. &custefuse_aon_7xx_pwrdm,
  354. NULL
  355. };
  356. static struct powerdomain *powerdomains_dra74x[] __initdata = {
  357. &custefuse_7xx_pwrdm,
  358. NULL
  359. };
  360. static struct powerdomain *powerdomains_dra72x[] __initdata = {
  361. &custefuse_aon_7xx_pwrdm,
  362. NULL
  363. };
  364. void __init dra7xx_powerdomains_init(void)
  365. {
  366. pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
  367. pwrdm_register_pwrdms(powerdomains_dra7xx);
  368. if (soc_is_dra76x())
  369. pwrdm_register_pwrdms(powerdomains_dra76x);
  370. else if (soc_is_dra74x())
  371. pwrdm_register_pwrdms(powerdomains_dra74x);
  372. else if (soc_is_dra72x())
  373. pwrdm_register_pwrdms(powerdomains_dra72x);
  374. pwrdm_complete_init();
  375. }