mt8186-pm-domains.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2022 MediaTek Inc.
  4. * Author: Chun-Jie Chen <[email protected]>
  5. */
  6. #ifndef __SOC_MEDIATEK_MT8186_PM_DOMAINS_H
  7. #define __SOC_MEDIATEK_MT8186_PM_DOMAINS_H
  8. #include "mtk-pm-domains.h"
  9. #include <dt-bindings/power/mt8186-power.h>
  10. /*
  11. * MT8186 power domain support
  12. */
  13. static const struct scpsys_domain_data scpsys_domain_data_mt8186[] = {
  14. [MT8186_POWER_DOMAIN_MFG0] = {
  15. .name = "mfg0",
  16. .sta_mask = BIT(2),
  17. .ctl_offs = 0x308,
  18. .pwr_sta_offs = 0x16C,
  19. .pwr_sta2nd_offs = 0x170,
  20. .sram_pdn_bits = BIT(8),
  21. .sram_pdn_ack_bits = BIT(12),
  22. .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
  23. },
  24. [MT8186_POWER_DOMAIN_MFG1] = {
  25. .name = "mfg1",
  26. .sta_mask = BIT(3),
  27. .ctl_offs = 0x30c,
  28. .pwr_sta_offs = 0x16C,
  29. .pwr_sta2nd_offs = 0x170,
  30. .sram_pdn_bits = BIT(8),
  31. .sram_pdn_ack_bits = BIT(12),
  32. .bp_infracfg = {
  33. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP1,
  34. MT8186_TOP_AXI_PROT_EN_1_SET,
  35. MT8186_TOP_AXI_PROT_EN_1_CLR,
  36. MT8186_TOP_AXI_PROT_EN_1_STA),
  37. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_MFG1_STEP2,
  38. MT8186_TOP_AXI_PROT_EN_SET,
  39. MT8186_TOP_AXI_PROT_EN_CLR,
  40. MT8186_TOP_AXI_PROT_EN_STA),
  41. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_MFG1_STEP3,
  42. MT8186_TOP_AXI_PROT_EN_SET,
  43. MT8186_TOP_AXI_PROT_EN_CLR,
  44. MT8186_TOP_AXI_PROT_EN_STA),
  45. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP4,
  46. MT8186_TOP_AXI_PROT_EN_1_SET,
  47. MT8186_TOP_AXI_PROT_EN_1_CLR,
  48. MT8186_TOP_AXI_PROT_EN_1_STA),
  49. },
  50. .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY,
  51. },
  52. [MT8186_POWER_DOMAIN_MFG2] = {
  53. .name = "mfg2",
  54. .sta_mask = BIT(4),
  55. .ctl_offs = 0x310,
  56. .pwr_sta_offs = 0x16C,
  57. .pwr_sta2nd_offs = 0x170,
  58. .sram_pdn_bits = BIT(8),
  59. .sram_pdn_ack_bits = BIT(12),
  60. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  61. },
  62. [MT8186_POWER_DOMAIN_MFG3] = {
  63. .name = "mfg3",
  64. .sta_mask = BIT(5),
  65. .ctl_offs = 0x314,
  66. .pwr_sta_offs = 0x16C,
  67. .pwr_sta2nd_offs = 0x170,
  68. .sram_pdn_bits = BIT(8),
  69. .sram_pdn_ack_bits = BIT(12),
  70. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  71. },
  72. [MT8186_POWER_DOMAIN_SSUSB] = {
  73. .name = "ssusb",
  74. .sta_mask = BIT(20),
  75. .ctl_offs = 0x9F0,
  76. .pwr_sta_offs = 0x16C,
  77. .pwr_sta2nd_offs = 0x170,
  78. .sram_pdn_bits = BIT(8),
  79. .sram_pdn_ack_bits = BIT(12),
  80. .caps = MTK_SCPD_ACTIVE_WAKEUP,
  81. },
  82. [MT8186_POWER_DOMAIN_SSUSB_P1] = {
  83. .name = "ssusb_p1",
  84. .sta_mask = BIT(19),
  85. .ctl_offs = 0x9F4,
  86. .pwr_sta_offs = 0x16C,
  87. .pwr_sta2nd_offs = 0x170,
  88. .sram_pdn_bits = BIT(8),
  89. .sram_pdn_ack_bits = BIT(12),
  90. .caps = MTK_SCPD_ACTIVE_WAKEUP,
  91. },
  92. [MT8186_POWER_DOMAIN_DIS] = {
  93. .name = "dis",
  94. .sta_mask = BIT(21),
  95. .ctl_offs = 0x354,
  96. .pwr_sta_offs = 0x16C,
  97. .pwr_sta2nd_offs = 0x170,
  98. .sram_pdn_bits = BIT(8),
  99. .sram_pdn_ack_bits = BIT(12),
  100. .bp_infracfg = {
  101. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_DIS_STEP1,
  102. MT8186_TOP_AXI_PROT_EN_1_SET,
  103. MT8186_TOP_AXI_PROT_EN_1_CLR,
  104. MT8186_TOP_AXI_PROT_EN_1_STA),
  105. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_DIS_STEP2,
  106. MT8186_TOP_AXI_PROT_EN_SET,
  107. MT8186_TOP_AXI_PROT_EN_CLR,
  108. MT8186_TOP_AXI_PROT_EN_STA),
  109. },
  110. },
  111. [MT8186_POWER_DOMAIN_IMG] = {
  112. .name = "img",
  113. .sta_mask = BIT(13),
  114. .ctl_offs = 0x334,
  115. .pwr_sta_offs = 0x16C,
  116. .pwr_sta2nd_offs = 0x170,
  117. .sram_pdn_bits = BIT(8),
  118. .sram_pdn_ack_bits = BIT(12),
  119. .bp_infracfg = {
  120. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IMG_STEP1,
  121. MT8186_TOP_AXI_PROT_EN_1_SET,
  122. MT8186_TOP_AXI_PROT_EN_1_CLR,
  123. MT8186_TOP_AXI_PROT_EN_1_STA),
  124. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IMG_STEP2,
  125. MT8186_TOP_AXI_PROT_EN_1_SET,
  126. MT8186_TOP_AXI_PROT_EN_1_CLR,
  127. MT8186_TOP_AXI_PROT_EN_1_STA),
  128. },
  129. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  130. },
  131. [MT8186_POWER_DOMAIN_IMG2] = {
  132. .name = "img2",
  133. .sta_mask = BIT(14),
  134. .ctl_offs = 0x338,
  135. .pwr_sta_offs = 0x16C,
  136. .pwr_sta2nd_offs = 0x170,
  137. .sram_pdn_bits = BIT(8),
  138. .sram_pdn_ack_bits = BIT(12),
  139. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  140. },
  141. [MT8186_POWER_DOMAIN_IPE] = {
  142. .name = "ipe",
  143. .sta_mask = BIT(15),
  144. .ctl_offs = 0x33C,
  145. .pwr_sta_offs = 0x16C,
  146. .pwr_sta2nd_offs = 0x170,
  147. .sram_pdn_bits = BIT(8),
  148. .sram_pdn_ack_bits = BIT(12),
  149. .bp_infracfg = {
  150. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IPE_STEP1,
  151. MT8186_TOP_AXI_PROT_EN_1_SET,
  152. MT8186_TOP_AXI_PROT_EN_1_CLR,
  153. MT8186_TOP_AXI_PROT_EN_1_STA),
  154. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IPE_STEP2,
  155. MT8186_TOP_AXI_PROT_EN_1_SET,
  156. MT8186_TOP_AXI_PROT_EN_1_CLR,
  157. MT8186_TOP_AXI_PROT_EN_1_STA),
  158. },
  159. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  160. },
  161. [MT8186_POWER_DOMAIN_CAM] = {
  162. .name = "cam",
  163. .sta_mask = BIT(23),
  164. .ctl_offs = 0x35C,
  165. .pwr_sta_offs = 0x16C,
  166. .pwr_sta2nd_offs = 0x170,
  167. .sram_pdn_bits = BIT(8),
  168. .sram_pdn_ack_bits = BIT(12),
  169. .bp_infracfg = {
  170. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CAM_STEP1,
  171. MT8186_TOP_AXI_PROT_EN_1_SET,
  172. MT8186_TOP_AXI_PROT_EN_1_CLR,
  173. MT8186_TOP_AXI_PROT_EN_1_STA),
  174. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CAM_STEP2,
  175. MT8186_TOP_AXI_PROT_EN_1_SET,
  176. MT8186_TOP_AXI_PROT_EN_1_CLR,
  177. MT8186_TOP_AXI_PROT_EN_1_STA),
  178. },
  179. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  180. },
  181. [MT8186_POWER_DOMAIN_CAM_RAWA] = {
  182. .name = "cam_rawa",
  183. .sta_mask = BIT(24),
  184. .ctl_offs = 0x360,
  185. .pwr_sta_offs = 0x16C,
  186. .pwr_sta2nd_offs = 0x170,
  187. .sram_pdn_bits = BIT(8),
  188. .sram_pdn_ack_bits = BIT(12),
  189. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  190. },
  191. [MT8186_POWER_DOMAIN_CAM_RAWB] = {
  192. .name = "cam_rawb",
  193. .sta_mask = BIT(25),
  194. .ctl_offs = 0x364,
  195. .pwr_sta_offs = 0x16C,
  196. .pwr_sta2nd_offs = 0x170,
  197. .sram_pdn_bits = BIT(8),
  198. .sram_pdn_ack_bits = BIT(12),
  199. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  200. },
  201. [MT8186_POWER_DOMAIN_VENC] = {
  202. .name = "venc",
  203. .sta_mask = BIT(18),
  204. .ctl_offs = 0x348,
  205. .pwr_sta_offs = 0x16C,
  206. .pwr_sta2nd_offs = 0x170,
  207. .sram_pdn_bits = BIT(8),
  208. .sram_pdn_ack_bits = BIT(12),
  209. .bp_infracfg = {
  210. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VENC_STEP1,
  211. MT8186_TOP_AXI_PROT_EN_1_SET,
  212. MT8186_TOP_AXI_PROT_EN_1_CLR,
  213. MT8186_TOP_AXI_PROT_EN_1_STA),
  214. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VENC_STEP2,
  215. MT8186_TOP_AXI_PROT_EN_1_SET,
  216. MT8186_TOP_AXI_PROT_EN_1_CLR,
  217. MT8186_TOP_AXI_PROT_EN_1_STA),
  218. },
  219. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  220. },
  221. [MT8186_POWER_DOMAIN_VDEC] = {
  222. .name = "vdec",
  223. .sta_mask = BIT(16),
  224. .ctl_offs = 0x340,
  225. .pwr_sta_offs = 0x16C,
  226. .pwr_sta2nd_offs = 0x170,
  227. .sram_pdn_bits = BIT(8),
  228. .sram_pdn_ack_bits = BIT(12),
  229. .bp_infracfg = {
  230. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP1,
  231. MT8186_TOP_AXI_PROT_EN_1_SET,
  232. MT8186_TOP_AXI_PROT_EN_1_CLR,
  233. MT8186_TOP_AXI_PROT_EN_1_STA),
  234. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP2,
  235. MT8186_TOP_AXI_PROT_EN_1_SET,
  236. MT8186_TOP_AXI_PROT_EN_1_CLR,
  237. MT8186_TOP_AXI_PROT_EN_1_STA),
  238. },
  239. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  240. },
  241. [MT8186_POWER_DOMAIN_WPE] = {
  242. .name = "wpe",
  243. .sta_mask = BIT(0),
  244. .ctl_offs = 0x3F8,
  245. .pwr_sta_offs = 0x16C,
  246. .pwr_sta2nd_offs = 0x170,
  247. .sram_pdn_bits = BIT(8),
  248. .sram_pdn_ack_bits = BIT(12),
  249. .bp_infracfg = {
  250. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_2_WPE_STEP1,
  251. MT8186_TOP_AXI_PROT_EN_2_SET,
  252. MT8186_TOP_AXI_PROT_EN_2_CLR,
  253. MT8186_TOP_AXI_PROT_EN_2_STA),
  254. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_2_WPE_STEP2,
  255. MT8186_TOP_AXI_PROT_EN_2_SET,
  256. MT8186_TOP_AXI_PROT_EN_2_CLR,
  257. MT8186_TOP_AXI_PROT_EN_2_STA),
  258. },
  259. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  260. },
  261. [MT8186_POWER_DOMAIN_CONN_ON] = {
  262. .name = "conn_on",
  263. .sta_mask = BIT(1),
  264. .ctl_offs = 0x304,
  265. .pwr_sta_offs = 0x16C,
  266. .pwr_sta2nd_offs = 0x170,
  267. .bp_infracfg = {
  268. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CONN_ON_STEP1,
  269. MT8186_TOP_AXI_PROT_EN_1_SET,
  270. MT8186_TOP_AXI_PROT_EN_1_CLR,
  271. MT8186_TOP_AXI_PROT_EN_1_STA),
  272. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP2,
  273. MT8186_TOP_AXI_PROT_EN_SET,
  274. MT8186_TOP_AXI_PROT_EN_CLR,
  275. MT8186_TOP_AXI_PROT_EN_STA),
  276. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP3,
  277. MT8186_TOP_AXI_PROT_EN_SET,
  278. MT8186_TOP_AXI_PROT_EN_CLR,
  279. MT8186_TOP_AXI_PROT_EN_STA),
  280. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP4,
  281. MT8186_TOP_AXI_PROT_EN_SET,
  282. MT8186_TOP_AXI_PROT_EN_CLR,
  283. MT8186_TOP_AXI_PROT_EN_STA),
  284. },
  285. .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP,
  286. },
  287. [MT8186_POWER_DOMAIN_CSIRX_TOP] = {
  288. .name = "csirx_top",
  289. .sta_mask = BIT(6),
  290. .ctl_offs = 0x318,
  291. .pwr_sta_offs = 0x16C,
  292. .pwr_sta2nd_offs = 0x170,
  293. .sram_pdn_bits = BIT(8),
  294. .sram_pdn_ack_bits = BIT(12),
  295. .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
  296. },
  297. [MT8186_POWER_DOMAIN_ADSP_AO] = {
  298. .name = "adsp_ao",
  299. .sta_mask = BIT(17),
  300. .ctl_offs = 0x9FC,
  301. .pwr_sta_offs = 0x16C,
  302. .pwr_sta2nd_offs = 0x170,
  303. },
  304. [MT8186_POWER_DOMAIN_ADSP_INFRA] = {
  305. .name = "adsp_infra",
  306. .sta_mask = BIT(10),
  307. .ctl_offs = 0x9F8,
  308. .pwr_sta_offs = 0x16C,
  309. .pwr_sta2nd_offs = 0x170,
  310. },
  311. [MT8186_POWER_DOMAIN_ADSP_TOP] = {
  312. .name = "adsp_top",
  313. .sta_mask = BIT(31),
  314. .ctl_offs = 0x3E4,
  315. .pwr_sta_offs = 0x16C,
  316. .pwr_sta2nd_offs = 0x170,
  317. .sram_pdn_bits = BIT(8),
  318. .sram_pdn_ack_bits = BIT(12),
  319. .bp_infracfg = {
  320. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP1,
  321. MT8186_TOP_AXI_PROT_EN_3_SET,
  322. MT8186_TOP_AXI_PROT_EN_3_CLR,
  323. MT8186_TOP_AXI_PROT_EN_3_STA),
  324. BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP2,
  325. MT8186_TOP_AXI_PROT_EN_3_SET,
  326. MT8186_TOP_AXI_PROT_EN_3_CLR,
  327. MT8186_TOP_AXI_PROT_EN_3_STA),
  328. },
  329. .caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP,
  330. },
  331. };
  332. static const struct scpsys_soc_data mt8186_scpsys_data = {
  333. .domains_data = scpsys_domain_data_mt8186,
  334. .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8186),
  335. };
  336. #endif /* __SOC_MEDIATEK_MT8186_PM_DOMAINS_H */