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