mt8183-pm-domains.h 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. #ifndef __SOC_MEDIATEK_MT8183_PM_DOMAINS_H
  3. #define __SOC_MEDIATEK_MT8183_PM_DOMAINS_H
  4. #include "mtk-pm-domains.h"
  5. #include <dt-bindings/power/mt8183-power.h>
  6. /*
  7. * MT8183 power domain support
  8. */
  9. static const struct scpsys_domain_data scpsys_domain_data_mt8183[] = {
  10. [MT8183_POWER_DOMAIN_AUDIO] = {
  11. .name = "audio",
  12. .sta_mask = PWR_STATUS_AUDIO,
  13. .ctl_offs = 0x0314,
  14. .pwr_sta_offs = 0x0180,
  15. .pwr_sta2nd_offs = 0x0184,
  16. .sram_pdn_bits = GENMASK(11, 8),
  17. .sram_pdn_ack_bits = GENMASK(15, 12),
  18. },
  19. [MT8183_POWER_DOMAIN_CONN] = {
  20. .name = "conn",
  21. .sta_mask = PWR_STATUS_CONN,
  22. .ctl_offs = 0x032c,
  23. .pwr_sta_offs = 0x0180,
  24. .pwr_sta2nd_offs = 0x0184,
  25. .sram_pdn_bits = 0,
  26. .sram_pdn_ack_bits = 0,
  27. .bp_infracfg = {
  28. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_CONN, MT8183_TOP_AXI_PROT_EN_SET,
  29. MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
  30. },
  31. },
  32. [MT8183_POWER_DOMAIN_MFG_ASYNC] = {
  33. .name = "mfg_async",
  34. .sta_mask = PWR_STATUS_MFG_ASYNC,
  35. .ctl_offs = 0x0334,
  36. .pwr_sta_offs = 0x0180,
  37. .pwr_sta2nd_offs = 0x0184,
  38. .sram_pdn_bits = 0,
  39. .sram_pdn_ack_bits = 0,
  40. .caps = MTK_SCPD_DOMAIN_SUPPLY,
  41. },
  42. [MT8183_POWER_DOMAIN_MFG] = {
  43. .name = "mfg",
  44. .sta_mask = PWR_STATUS_MFG,
  45. .ctl_offs = 0x0338,
  46. .pwr_sta_offs = 0x0180,
  47. .pwr_sta2nd_offs = 0x0184,
  48. .sram_pdn_bits = GENMASK(8, 8),
  49. .sram_pdn_ack_bits = GENMASK(12, 12),
  50. .caps = MTK_SCPD_DOMAIN_SUPPLY,
  51. },
  52. [MT8183_POWER_DOMAIN_MFG_CORE0] = {
  53. .name = "mfg_core0",
  54. .sta_mask = BIT(7),
  55. .ctl_offs = 0x034c,
  56. .pwr_sta_offs = 0x0180,
  57. .pwr_sta2nd_offs = 0x0184,
  58. .sram_pdn_bits = GENMASK(8, 8),
  59. .sram_pdn_ack_bits = GENMASK(12, 12),
  60. },
  61. [MT8183_POWER_DOMAIN_MFG_CORE1] = {
  62. .name = "mfg_core1",
  63. .sta_mask = BIT(20),
  64. .ctl_offs = 0x0310,
  65. .pwr_sta_offs = 0x0180,
  66. .pwr_sta2nd_offs = 0x0184,
  67. .sram_pdn_bits = GENMASK(8, 8),
  68. .sram_pdn_ack_bits = GENMASK(12, 12),
  69. },
  70. [MT8183_POWER_DOMAIN_MFG_2D] = {
  71. .name = "mfg_2d",
  72. .sta_mask = PWR_STATUS_MFG_2D,
  73. .ctl_offs = 0x0348,
  74. .pwr_sta_offs = 0x0180,
  75. .pwr_sta2nd_offs = 0x0184,
  76. .sram_pdn_bits = GENMASK(8, 8),
  77. .sram_pdn_ack_bits = GENMASK(12, 12),
  78. .bp_infracfg = {
  79. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_1_MFG, MT8183_TOP_AXI_PROT_EN_1_SET,
  80. MT8183_TOP_AXI_PROT_EN_1_CLR, MT8183_TOP_AXI_PROT_EN_STA1_1),
  81. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MFG, MT8183_TOP_AXI_PROT_EN_SET,
  82. MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
  83. },
  84. },
  85. [MT8183_POWER_DOMAIN_DISP] = {
  86. .name = "disp",
  87. .sta_mask = PWR_STATUS_DISP,
  88. .ctl_offs = 0x030c,
  89. .pwr_sta_offs = 0x0180,
  90. .pwr_sta2nd_offs = 0x0184,
  91. .sram_pdn_bits = GENMASK(8, 8),
  92. .sram_pdn_ack_bits = GENMASK(12, 12),
  93. .bp_infracfg = {
  94. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_1_DISP, MT8183_TOP_AXI_PROT_EN_1_SET,
  95. MT8183_TOP_AXI_PROT_EN_1_CLR, MT8183_TOP_AXI_PROT_EN_STA1_1),
  96. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_DISP, MT8183_TOP_AXI_PROT_EN_SET,
  97. MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
  98. },
  99. .bp_smi = {
  100. BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_DISP,
  101. MT8183_SMI_COMMON_CLAMP_EN_SET,
  102. MT8183_SMI_COMMON_CLAMP_EN_CLR,
  103. MT8183_SMI_COMMON_CLAMP_EN),
  104. },
  105. },
  106. [MT8183_POWER_DOMAIN_CAM] = {
  107. .name = "cam",
  108. .sta_mask = BIT(25),
  109. .ctl_offs = 0x0344,
  110. .pwr_sta_offs = 0x0180,
  111. .pwr_sta2nd_offs = 0x0184,
  112. .sram_pdn_bits = GENMASK(9, 8),
  113. .sram_pdn_ack_bits = GENMASK(13, 12),
  114. .bp_infracfg = {
  115. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_CAM, MT8183_TOP_AXI_PROT_EN_MM_SET,
  116. MT8183_TOP_AXI_PROT_EN_MM_CLR, MT8183_TOP_AXI_PROT_EN_MM_STA1),
  117. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_CAM, MT8183_TOP_AXI_PROT_EN_SET,
  118. MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1),
  119. BUS_PROT_WR_IGN(MT8183_TOP_AXI_PROT_EN_MM_CAM_2ND,
  120. MT8183_TOP_AXI_PROT_EN_MM_SET,
  121. MT8183_TOP_AXI_PROT_EN_MM_CLR,
  122. MT8183_TOP_AXI_PROT_EN_MM_STA1),
  123. },
  124. .bp_smi = {
  125. BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_CAM,
  126. MT8183_SMI_COMMON_CLAMP_EN_SET,
  127. MT8183_SMI_COMMON_CLAMP_EN_CLR,
  128. MT8183_SMI_COMMON_CLAMP_EN),
  129. },
  130. },
  131. [MT8183_POWER_DOMAIN_ISP] = {
  132. .name = "isp",
  133. .sta_mask = PWR_STATUS_ISP,
  134. .ctl_offs = 0x0308,
  135. .pwr_sta_offs = 0x0180,
  136. .pwr_sta2nd_offs = 0x0184,
  137. .sram_pdn_bits = GENMASK(9, 8),
  138. .sram_pdn_ack_bits = GENMASK(13, 12),
  139. .bp_infracfg = {
  140. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_ISP,
  141. MT8183_TOP_AXI_PROT_EN_MM_SET,
  142. MT8183_TOP_AXI_PROT_EN_MM_CLR,
  143. MT8183_TOP_AXI_PROT_EN_MM_STA1),
  144. BUS_PROT_WR_IGN(MT8183_TOP_AXI_PROT_EN_MM_ISP_2ND,
  145. MT8183_TOP_AXI_PROT_EN_MM_SET,
  146. MT8183_TOP_AXI_PROT_EN_MM_CLR,
  147. MT8183_TOP_AXI_PROT_EN_MM_STA1),
  148. },
  149. .bp_smi = {
  150. BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_ISP,
  151. MT8183_SMI_COMMON_CLAMP_EN_SET,
  152. MT8183_SMI_COMMON_CLAMP_EN_CLR,
  153. MT8183_SMI_COMMON_CLAMP_EN),
  154. },
  155. },
  156. [MT8183_POWER_DOMAIN_VDEC] = {
  157. .name = "vdec",
  158. .sta_mask = BIT(31),
  159. .ctl_offs = 0x0300,
  160. .pwr_sta_offs = 0x0180,
  161. .pwr_sta2nd_offs = 0x0184,
  162. .sram_pdn_bits = GENMASK(8, 8),
  163. .sram_pdn_ack_bits = GENMASK(12, 12),
  164. .bp_smi = {
  165. BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VDEC,
  166. MT8183_SMI_COMMON_CLAMP_EN_SET,
  167. MT8183_SMI_COMMON_CLAMP_EN_CLR,
  168. MT8183_SMI_COMMON_CLAMP_EN),
  169. },
  170. },
  171. [MT8183_POWER_DOMAIN_VENC] = {
  172. .name = "venc",
  173. .sta_mask = PWR_STATUS_VENC,
  174. .ctl_offs = 0x0304,
  175. .pwr_sta_offs = 0x0180,
  176. .pwr_sta2nd_offs = 0x0184,
  177. .sram_pdn_bits = GENMASK(11, 8),
  178. .sram_pdn_ack_bits = GENMASK(15, 12),
  179. .bp_smi = {
  180. BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VENC,
  181. MT8183_SMI_COMMON_CLAMP_EN_SET,
  182. MT8183_SMI_COMMON_CLAMP_EN_CLR,
  183. MT8183_SMI_COMMON_CLAMP_EN),
  184. },
  185. },
  186. [MT8183_POWER_DOMAIN_VPU_TOP] = {
  187. .name = "vpu_top",
  188. .sta_mask = BIT(26),
  189. .ctl_offs = 0x0324,
  190. .pwr_sta_offs = 0x0180,
  191. .pwr_sta2nd_offs = 0x0184,
  192. .sram_pdn_bits = GENMASK(8, 8),
  193. .sram_pdn_ack_bits = GENMASK(12, 12),
  194. .bp_infracfg = {
  195. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_VPU_TOP,
  196. MT8183_TOP_AXI_PROT_EN_MM_SET,
  197. MT8183_TOP_AXI_PROT_EN_MM_CLR,
  198. MT8183_TOP_AXI_PROT_EN_MM_STA1),
  199. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_VPU_TOP,
  200. MT8183_TOP_AXI_PROT_EN_SET,
  201. MT8183_TOP_AXI_PROT_EN_CLR,
  202. MT8183_TOP_AXI_PROT_EN_STA1),
  203. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_VPU_TOP_2ND,
  204. MT8183_TOP_AXI_PROT_EN_MM_SET,
  205. MT8183_TOP_AXI_PROT_EN_MM_CLR,
  206. MT8183_TOP_AXI_PROT_EN_MM_STA1),
  207. },
  208. .bp_smi = {
  209. BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VPU_TOP,
  210. MT8183_SMI_COMMON_CLAMP_EN_SET,
  211. MT8183_SMI_COMMON_CLAMP_EN_CLR,
  212. MT8183_SMI_COMMON_CLAMP_EN),
  213. },
  214. },
  215. [MT8183_POWER_DOMAIN_VPU_CORE0] = {
  216. .name = "vpu_core0",
  217. .sta_mask = BIT(27),
  218. .ctl_offs = 0x33c,
  219. .pwr_sta_offs = 0x0180,
  220. .pwr_sta2nd_offs = 0x0184,
  221. .sram_pdn_bits = GENMASK(11, 8),
  222. .sram_pdn_ack_bits = GENMASK(13, 12),
  223. .bp_infracfg = {
  224. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE0,
  225. MT8183_TOP_AXI_PROT_EN_MCU_SET,
  226. MT8183_TOP_AXI_PROT_EN_MCU_CLR,
  227. MT8183_TOP_AXI_PROT_EN_MCU_STA1),
  228. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE0_2ND,
  229. MT8183_TOP_AXI_PROT_EN_MCU_SET,
  230. MT8183_TOP_AXI_PROT_EN_MCU_CLR,
  231. MT8183_TOP_AXI_PROT_EN_MCU_STA1),
  232. },
  233. .caps = MTK_SCPD_SRAM_ISO,
  234. },
  235. [MT8183_POWER_DOMAIN_VPU_CORE1] = {
  236. .name = "vpu_core1",
  237. .sta_mask = BIT(28),
  238. .ctl_offs = 0x0340,
  239. .pwr_sta_offs = 0x0180,
  240. .pwr_sta2nd_offs = 0x0184,
  241. .sram_pdn_bits = GENMASK(11, 8),
  242. .sram_pdn_ack_bits = GENMASK(13, 12),
  243. .bp_infracfg = {
  244. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE1,
  245. MT8183_TOP_AXI_PROT_EN_MCU_SET,
  246. MT8183_TOP_AXI_PROT_EN_MCU_CLR,
  247. MT8183_TOP_AXI_PROT_EN_MCU_STA1),
  248. BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE1_2ND,
  249. MT8183_TOP_AXI_PROT_EN_MCU_SET,
  250. MT8183_TOP_AXI_PROT_EN_MCU_CLR,
  251. MT8183_TOP_AXI_PROT_EN_MCU_STA1),
  252. },
  253. .caps = MTK_SCPD_SRAM_ISO,
  254. },
  255. };
  256. static const struct scpsys_soc_data mt8183_scpsys_data = {
  257. .domains_data = scpsys_domain_data_mt8183,
  258. .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8183),
  259. };
  260. #endif /* __SOC_MEDIATEK_MT8183_PM_DOMAINS_H */