powerdomains33xx_data.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * AM33XX Power domain data
  4. *
  5. * Copyright (C) 2011-2012 Texas Instruments Incorporated - https://www.ti.com/
  6. */
  7. #include <linux/kernel.h>
  8. #include <linux/init.h>
  9. #include "powerdomain.h"
  10. #include "prcm-common.h"
  11. #include "prm-regbits-33xx.h"
  12. #include "prm33xx.h"
  13. static struct powerdomain gfx_33xx_pwrdm = {
  14. .name = "gfx_pwrdm",
  15. .voltdm = { .name = "core" },
  16. .prcm_offs = AM33XX_PRM_GFX_MOD,
  17. .pwrstctrl_offs = AM33XX_PM_GFX_PWRSTCTRL_OFFSET,
  18. .pwrstst_offs = AM33XX_PM_GFX_PWRSTST_OFFSET,
  19. .pwrsts = PWRSTS_OFF_RET_ON,
  20. .pwrsts_logic_ret = PWRSTS_OFF_RET,
  21. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  22. .banks = 1,
  23. .logicretstate_mask = AM33XX_LOGICRETSTATE_MASK,
  24. .mem_on_mask = {
  25. [0] = AM33XX_GFX_MEM_ONSTATE_MASK, /* gfx_mem */
  26. },
  27. .mem_ret_mask = {
  28. [0] = AM33XX_GFX_MEM_RETSTATE_MASK, /* gfx_mem */
  29. },
  30. .mem_pwrst_mask = {
  31. [0] = AM33XX_GFX_MEM_STATEST_MASK, /* gfx_mem */
  32. },
  33. .mem_retst_mask = {
  34. [0] = AM33XX_GFX_MEM_RETSTATE_MASK, /* gfx_mem */
  35. },
  36. .pwrsts_mem_ret = {
  37. [0] = PWRSTS_OFF_RET, /* gfx_mem */
  38. },
  39. .pwrsts_mem_on = {
  40. [0] = PWRSTS_ON, /* gfx_mem */
  41. },
  42. };
  43. static struct powerdomain rtc_33xx_pwrdm = {
  44. .name = "rtc_pwrdm",
  45. .voltdm = { .name = "rtc" },
  46. .prcm_offs = AM33XX_PRM_RTC_MOD,
  47. .pwrstctrl_offs = AM33XX_PM_RTC_PWRSTCTRL_OFFSET,
  48. .pwrstst_offs = AM33XX_PM_RTC_PWRSTST_OFFSET,
  49. .pwrsts = PWRSTS_ON,
  50. .logicretstate_mask = AM33XX_LOGICRETSTATE_MASK,
  51. };
  52. static struct powerdomain wkup_33xx_pwrdm = {
  53. .name = "wkup_pwrdm",
  54. .voltdm = { .name = "core" },
  55. .prcm_offs = AM33XX_PRM_WKUP_MOD,
  56. .pwrstctrl_offs = AM33XX_PM_WKUP_PWRSTCTRL_OFFSET,
  57. .pwrstst_offs = AM33XX_PM_WKUP_PWRSTST_OFFSET,
  58. .pwrsts = PWRSTS_ON,
  59. .logicretstate_mask = AM33XX_LOGICRETSTATE_3_3_MASK,
  60. };
  61. static struct powerdomain per_33xx_pwrdm = {
  62. .name = "per_pwrdm",
  63. .voltdm = { .name = "core" },
  64. .prcm_offs = AM33XX_PRM_PER_MOD,
  65. .pwrstctrl_offs = AM33XX_PM_PER_PWRSTCTRL_OFFSET,
  66. .pwrstst_offs = AM33XX_PM_PER_PWRSTST_OFFSET,
  67. .pwrsts = PWRSTS_OFF_RET_ON,
  68. .pwrsts_logic_ret = PWRSTS_OFF_RET,
  69. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  70. .banks = 3,
  71. .logicretstate_mask = AM33XX_LOGICRETSTATE_3_3_MASK,
  72. .mem_on_mask = {
  73. [0] = AM33XX_PRUSS_MEM_ONSTATE_MASK, /* pruss_mem */
  74. [1] = AM33XX_PER_MEM_ONSTATE_MASK, /* per_mem */
  75. [2] = AM33XX_RAM_MEM_ONSTATE_MASK, /* ram_mem */
  76. },
  77. .mem_ret_mask = {
  78. [0] = AM33XX_PRUSS_MEM_RETSTATE_MASK, /* pruss_mem */
  79. [1] = AM33XX_PER_MEM_RETSTATE_MASK, /* per_mem */
  80. [2] = AM33XX_RAM_MEM_RETSTATE_MASK, /* ram_mem */
  81. },
  82. .mem_pwrst_mask = {
  83. [0] = AM33XX_PRUSS_MEM_STATEST_MASK, /* pruss_mem */
  84. [1] = AM33XX_PER_MEM_STATEST_MASK, /* per_mem */
  85. [2] = AM33XX_RAM_MEM_STATEST_MASK, /* ram_mem */
  86. },
  87. .mem_retst_mask = {
  88. [0] = AM33XX_PRUSS_MEM_RETSTATE_MASK, /* pruss_mem */
  89. [1] = AM33XX_PER_MEM_RETSTATE_MASK, /* per_mem */
  90. [2] = AM33XX_RAM_MEM_RETSTATE_MASK, /* ram_mem */
  91. },
  92. .pwrsts_mem_ret = {
  93. [0] = PWRSTS_OFF_RET, /* pruss_mem */
  94. [1] = PWRSTS_OFF_RET, /* per_mem */
  95. [2] = PWRSTS_OFF_RET, /* ram_mem */
  96. },
  97. .pwrsts_mem_on = {
  98. [0] = PWRSTS_ON, /* pruss_mem */
  99. [1] = PWRSTS_ON, /* per_mem */
  100. [2] = PWRSTS_ON, /* ram_mem */
  101. },
  102. };
  103. static struct powerdomain mpu_33xx_pwrdm = {
  104. .name = "mpu_pwrdm",
  105. .voltdm = { .name = "mpu" },
  106. .prcm_offs = AM33XX_PRM_MPU_MOD,
  107. .pwrstctrl_offs = AM33XX_PM_MPU_PWRSTCTRL_OFFSET,
  108. .pwrstst_offs = AM33XX_PM_MPU_PWRSTST_OFFSET,
  109. .pwrsts = PWRSTS_OFF_RET_ON,
  110. .pwrsts_logic_ret = PWRSTS_OFF_RET,
  111. .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
  112. .banks = 3,
  113. .logicretstate_mask = AM33XX_LOGICRETSTATE_MASK,
  114. .mem_on_mask = {
  115. [0] = AM33XX_MPU_L1_ONSTATE_MASK, /* mpu_l1 */
  116. [1] = AM33XX_MPU_L2_ONSTATE_MASK, /* mpu_l2 */
  117. [2] = AM33XX_MPU_RAM_ONSTATE_MASK, /* mpu_ram */
  118. },
  119. .mem_ret_mask = {
  120. [0] = AM33XX_MPU_L1_RETSTATE_MASK, /* mpu_l1 */
  121. [1] = AM33XX_MPU_L2_RETSTATE_MASK, /* mpu_l2 */
  122. [2] = AM33XX_MPU_RAM_RETSTATE_MASK, /* mpu_ram */
  123. },
  124. .mem_pwrst_mask = {
  125. [0] = AM33XX_MPU_L1_STATEST_MASK, /* mpu_l1 */
  126. [1] = AM33XX_MPU_L2_STATEST_MASK, /* mpu_l2 */
  127. [2] = AM33XX_MPU_RAM_STATEST_MASK, /* mpu_ram */
  128. },
  129. .mem_retst_mask = {
  130. [0] = AM33XX_MPU_L1_RETSTATE_MASK, /* mpu_l1 */
  131. [1] = AM33XX_MPU_L2_RETSTATE_MASK, /* mpu_l2 */
  132. [2] = AM33XX_MPU_RAM_RETSTATE_MASK, /* mpu_ram */
  133. },
  134. .pwrsts_mem_ret = {
  135. [0] = PWRSTS_OFF_RET, /* mpu_l1 */
  136. [1] = PWRSTS_OFF_RET, /* mpu_l2 */
  137. [2] = PWRSTS_OFF_RET, /* mpu_ram */
  138. },
  139. .pwrsts_mem_on = {
  140. [0] = PWRSTS_ON, /* mpu_l1 */
  141. [1] = PWRSTS_ON, /* mpu_l2 */
  142. [2] = PWRSTS_ON, /* mpu_ram */
  143. },
  144. };
  145. static struct powerdomain cefuse_33xx_pwrdm = {
  146. .name = "cefuse_pwrdm",
  147. .voltdm = { .name = "core" },
  148. .prcm_offs = AM33XX_PRM_CEFUSE_MOD,
  149. .pwrstctrl_offs = AM33XX_PM_CEFUSE_PWRSTCTRL_OFFSET,
  150. .pwrstst_offs = AM33XX_PM_CEFUSE_PWRSTST_OFFSET,
  151. .pwrsts = PWRSTS_OFF_ON,
  152. };
  153. static struct powerdomain *powerdomains_am33xx[] __initdata = {
  154. &gfx_33xx_pwrdm,
  155. &rtc_33xx_pwrdm,
  156. &wkup_33xx_pwrdm,
  157. &per_33xx_pwrdm,
  158. &mpu_33xx_pwrdm,
  159. &cefuse_33xx_pwrdm,
  160. NULL,
  161. };
  162. void __init am33xx_powerdomains_init(void)
  163. {
  164. pwrdm_register_platform_funcs(&am33xx_pwrdm_operations);
  165. pwrdm_register_pwrdms(powerdomains_am33xx);
  166. pwrdm_complete_init();
  167. }