0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <linux/kernel.h>
0021 #include <linux/init.h>
0022
0023 #include "powerdomain.h"
0024
0025 #include "prcm-common.h"
0026 #include "prcm44xx.h"
0027 #include "prm7xx.h"
0028 #include "prcm_mpu7xx.h"
0029 #include "soc.h"
0030
0031
0032 static struct powerdomain iva_7xx_pwrdm = {
0033 .name = "iva_pwrdm",
0034 .prcm_offs = DRA7XX_PRM_IVA_INST,
0035 .prcm_partition = DRA7XX_PRM_PARTITION,
0036 .pwrsts = PWRSTS_OFF_ON,
0037 .banks = 4,
0038 .pwrsts_mem_on = {
0039 [0] = PWRSTS_ON,
0040 [1] = PWRSTS_ON,
0041 [2] = PWRSTS_ON,
0042 [3] = PWRSTS_ON,
0043 },
0044 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0045 };
0046
0047
0048 static struct powerdomain rtc_7xx_pwrdm = {
0049 .name = "rtc_pwrdm",
0050 .prcm_offs = DRA7XX_PRM_RTC_INST,
0051 .prcm_partition = DRA7XX_PRM_PARTITION,
0052 .pwrsts = PWRSTS_ON,
0053 };
0054
0055
0056 static struct powerdomain custefuse_7xx_pwrdm = {
0057 .name = "custefuse_pwrdm",
0058 .prcm_offs = DRA7XX_PRM_CUSTEFUSE_INST,
0059 .prcm_partition = DRA7XX_PRM_PARTITION,
0060 .pwrsts = PWRSTS_OFF_ON,
0061 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0062 };
0063
0064
0065 static struct powerdomain custefuse_aon_7xx_pwrdm = {
0066 .name = "custefuse_pwrdm",
0067 .prcm_offs = DRA7XX_PRM_CUSTEFUSE_INST,
0068 .prcm_partition = DRA7XX_PRM_PARTITION,
0069 .pwrsts = PWRSTS_ON,
0070 };
0071
0072
0073 static struct powerdomain ipu_7xx_pwrdm = {
0074 .name = "ipu_pwrdm",
0075 .prcm_offs = DRA7XX_PRM_IPU_INST,
0076 .prcm_partition = DRA7XX_PRM_PARTITION,
0077 .pwrsts = PWRSTS_OFF_ON,
0078 .banks = 2,
0079 .pwrsts_mem_on = {
0080 [0] = PWRSTS_ON,
0081 [1] = PWRSTS_ON,
0082 },
0083 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0084 };
0085
0086
0087 static struct powerdomain dss_7xx_pwrdm = {
0088 .name = "dss_pwrdm",
0089 .prcm_offs = DRA7XX_PRM_DSS_INST,
0090 .prcm_partition = DRA7XX_PRM_PARTITION,
0091 .pwrsts = PWRSTS_OFF_ON,
0092 .banks = 1,
0093 .pwrsts_mem_on = {
0094 [0] = PWRSTS_ON,
0095 },
0096 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0097 };
0098
0099
0100 static struct powerdomain l4per_7xx_pwrdm = {
0101 .name = "l4per_pwrdm",
0102 .prcm_offs = DRA7XX_PRM_L4PER_INST,
0103 .prcm_partition = DRA7XX_PRM_PARTITION,
0104 .pwrsts = PWRSTS_ON,
0105 .banks = 2,
0106 .pwrsts_mem_on = {
0107 [0] = PWRSTS_ON,
0108 [1] = PWRSTS_ON,
0109 },
0110 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0111 };
0112
0113
0114 static struct powerdomain gpu_7xx_pwrdm = {
0115 .name = "gpu_pwrdm",
0116 .prcm_offs = DRA7XX_PRM_GPU_INST,
0117 .prcm_partition = DRA7XX_PRM_PARTITION,
0118 .pwrsts = PWRSTS_OFF_ON,
0119 .banks = 1,
0120 .pwrsts_mem_on = {
0121 [0] = PWRSTS_ON,
0122 },
0123 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0124 };
0125
0126
0127 static struct powerdomain wkupaon_7xx_pwrdm = {
0128 .name = "wkupaon_pwrdm",
0129 .prcm_offs = DRA7XX_PRM_WKUPAON_INST,
0130 .prcm_partition = DRA7XX_PRM_PARTITION,
0131 .pwrsts = PWRSTS_ON,
0132 .banks = 1,
0133 .pwrsts_mem_on = {
0134 [0] = PWRSTS_ON,
0135 },
0136 };
0137
0138
0139 static struct powerdomain core_7xx_pwrdm = {
0140 .name = "core_pwrdm",
0141 .prcm_offs = DRA7XX_PRM_CORE_INST,
0142 .prcm_partition = DRA7XX_PRM_PARTITION,
0143 .pwrsts = PWRSTS_ON,
0144 .banks = 5,
0145 .pwrsts_mem_on = {
0146 [0] = PWRSTS_ON,
0147 [1] = PWRSTS_ON,
0148 [2] = PWRSTS_ON,
0149 [3] = PWRSTS_ON,
0150 [4] = PWRSTS_ON,
0151 },
0152 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0153 };
0154
0155
0156 static struct powerdomain coreaon_7xx_pwrdm = {
0157 .name = "coreaon_pwrdm",
0158 .prcm_offs = DRA7XX_PRM_COREAON_INST,
0159 .prcm_partition = DRA7XX_PRM_PARTITION,
0160 .pwrsts = PWRSTS_ON,
0161 };
0162
0163
0164 static struct powerdomain cpu0_7xx_pwrdm = {
0165 .name = "cpu0_pwrdm",
0166 .prcm_offs = DRA7XX_MPU_PRCM_PRM_C0_INST,
0167 .prcm_partition = DRA7XX_MPU_PRCM_PARTITION,
0168 .pwrsts = PWRSTS_RET_ON,
0169 .pwrsts_logic_ret = PWRSTS_RET,
0170 .banks = 1,
0171 .pwrsts_mem_ret = {
0172 [0] = PWRSTS_OFF_RET,
0173 },
0174 .pwrsts_mem_on = {
0175 [0] = PWRSTS_ON,
0176 },
0177 };
0178
0179
0180 static struct powerdomain cpu1_7xx_pwrdm = {
0181 .name = "cpu1_pwrdm",
0182 .prcm_offs = DRA7XX_MPU_PRCM_PRM_C1_INST,
0183 .prcm_partition = DRA7XX_MPU_PRCM_PARTITION,
0184 .pwrsts = PWRSTS_RET_ON,
0185 .pwrsts_logic_ret = PWRSTS_RET,
0186 .banks = 1,
0187 .pwrsts_mem_ret = {
0188 [0] = PWRSTS_OFF_RET,
0189 },
0190 .pwrsts_mem_on = {
0191 [0] = PWRSTS_ON,
0192 },
0193 };
0194
0195
0196 static struct powerdomain vpe_7xx_pwrdm = {
0197 .name = "vpe_pwrdm",
0198 .prcm_offs = DRA7XX_PRM_VPE_INST,
0199 .prcm_partition = DRA7XX_PRM_PARTITION,
0200 .pwrsts = PWRSTS_OFF_ON,
0201 .banks = 1,
0202 .pwrsts_mem_on = {
0203 [0] = PWRSTS_ON,
0204 },
0205 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0206 };
0207
0208
0209 static struct powerdomain mpu_7xx_pwrdm = {
0210 .name = "mpu_pwrdm",
0211 .prcm_offs = DRA7XX_PRM_MPU_INST,
0212 .prcm_partition = DRA7XX_PRM_PARTITION,
0213 .pwrsts = PWRSTS_RET_ON,
0214 .pwrsts_logic_ret = PWRSTS_RET,
0215 .banks = 2,
0216 .pwrsts_mem_ret = {
0217 [0] = PWRSTS_OFF_RET,
0218 [1] = PWRSTS_RET,
0219 },
0220 .pwrsts_mem_on = {
0221 [0] = PWRSTS_ON,
0222 [1] = PWRSTS_ON,
0223 },
0224 };
0225
0226
0227 static struct powerdomain l3init_7xx_pwrdm = {
0228 .name = "l3init_pwrdm",
0229 .prcm_offs = DRA7XX_PRM_L3INIT_INST,
0230 .prcm_partition = DRA7XX_PRM_PARTITION,
0231 .pwrsts = PWRSTS_ON,
0232 .banks = 3,
0233 .pwrsts_mem_on = {
0234 [0] = PWRSTS_ON,
0235 [1] = PWRSTS_ON,
0236 [2] = PWRSTS_ON,
0237 },
0238 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0239 };
0240
0241
0242 static struct powerdomain eve3_7xx_pwrdm = {
0243 .name = "eve3_pwrdm",
0244 .prcm_offs = DRA7XX_PRM_EVE3_INST,
0245 .prcm_partition = DRA7XX_PRM_PARTITION,
0246 .pwrsts = PWRSTS_OFF_ON,
0247 .banks = 1,
0248 .pwrsts_mem_on = {
0249 [0] = PWRSTS_ON,
0250 },
0251 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0252 };
0253
0254
0255 static struct powerdomain emu_7xx_pwrdm = {
0256 .name = "emu_pwrdm",
0257 .prcm_offs = DRA7XX_PRM_EMU_INST,
0258 .prcm_partition = DRA7XX_PRM_PARTITION,
0259 .pwrsts = PWRSTS_OFF_ON,
0260 .banks = 1,
0261 .pwrsts_mem_on = {
0262 [0] = PWRSTS_ON,
0263 },
0264 };
0265
0266
0267 static struct powerdomain dsp2_7xx_pwrdm = {
0268 .name = "dsp2_pwrdm",
0269 .prcm_offs = DRA7XX_PRM_DSP2_INST,
0270 .prcm_partition = DRA7XX_PRM_PARTITION,
0271 .pwrsts = PWRSTS_OFF_ON,
0272 .banks = 3,
0273 .pwrsts_mem_on = {
0274 [0] = PWRSTS_ON,
0275 [1] = PWRSTS_ON,
0276 [2] = PWRSTS_ON,
0277 },
0278 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0279 };
0280
0281
0282 static struct powerdomain dsp1_7xx_pwrdm = {
0283 .name = "dsp1_pwrdm",
0284 .prcm_offs = DRA7XX_PRM_DSP1_INST,
0285 .prcm_partition = DRA7XX_PRM_PARTITION,
0286 .pwrsts = PWRSTS_OFF_ON,
0287 .banks = 3,
0288 .pwrsts_mem_on = {
0289 [0] = PWRSTS_ON,
0290 [1] = PWRSTS_ON,
0291 [2] = PWRSTS_ON,
0292 },
0293 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0294 };
0295
0296
0297 static struct powerdomain cam_7xx_pwrdm = {
0298 .name = "cam_pwrdm",
0299 .prcm_offs = DRA7XX_PRM_CAM_INST,
0300 .prcm_partition = DRA7XX_PRM_PARTITION,
0301 .pwrsts = PWRSTS_OFF_ON,
0302 .banks = 1,
0303 .pwrsts_mem_on = {
0304 [0] = PWRSTS_ON,
0305 },
0306 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0307 };
0308
0309
0310 static struct powerdomain eve4_7xx_pwrdm = {
0311 .name = "eve4_pwrdm",
0312 .prcm_offs = DRA7XX_PRM_EVE4_INST,
0313 .prcm_partition = DRA7XX_PRM_PARTITION,
0314 .pwrsts = PWRSTS_OFF_ON,
0315 .banks = 1,
0316 .pwrsts_mem_on = {
0317 [0] = PWRSTS_ON,
0318 },
0319 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0320 };
0321
0322
0323 static struct powerdomain eve2_7xx_pwrdm = {
0324 .name = "eve2_pwrdm",
0325 .prcm_offs = DRA7XX_PRM_EVE2_INST,
0326 .prcm_partition = DRA7XX_PRM_PARTITION,
0327 .pwrsts = PWRSTS_OFF_ON,
0328 .banks = 1,
0329 .pwrsts_mem_on = {
0330 [0] = PWRSTS_ON,
0331 },
0332 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0333 };
0334
0335
0336 static struct powerdomain eve1_7xx_pwrdm = {
0337 .name = "eve1_pwrdm",
0338 .prcm_offs = DRA7XX_PRM_EVE1_INST,
0339 .prcm_partition = DRA7XX_PRM_PARTITION,
0340 .pwrsts = PWRSTS_OFF_ON,
0341 .banks = 1,
0342 .pwrsts_mem_on = {
0343 [0] = PWRSTS_ON,
0344 },
0345 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0346 };
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356 static struct powerdomain *powerdomains_dra7xx[] __initdata = {
0357 &iva_7xx_pwrdm,
0358 &rtc_7xx_pwrdm,
0359 &ipu_7xx_pwrdm,
0360 &dss_7xx_pwrdm,
0361 &l4per_7xx_pwrdm,
0362 &gpu_7xx_pwrdm,
0363 &wkupaon_7xx_pwrdm,
0364 &core_7xx_pwrdm,
0365 &coreaon_7xx_pwrdm,
0366 &cpu0_7xx_pwrdm,
0367 &cpu1_7xx_pwrdm,
0368 &vpe_7xx_pwrdm,
0369 &mpu_7xx_pwrdm,
0370 &l3init_7xx_pwrdm,
0371 &eve3_7xx_pwrdm,
0372 &emu_7xx_pwrdm,
0373 &dsp2_7xx_pwrdm,
0374 &dsp1_7xx_pwrdm,
0375 &cam_7xx_pwrdm,
0376 &eve4_7xx_pwrdm,
0377 &eve2_7xx_pwrdm,
0378 &eve1_7xx_pwrdm,
0379 NULL
0380 };
0381
0382 static struct powerdomain *powerdomains_dra76x[] __initdata = {
0383 &custefuse_aon_7xx_pwrdm,
0384 NULL
0385 };
0386
0387 static struct powerdomain *powerdomains_dra74x[] __initdata = {
0388 &custefuse_7xx_pwrdm,
0389 NULL
0390 };
0391
0392 static struct powerdomain *powerdomains_dra72x[] __initdata = {
0393 &custefuse_aon_7xx_pwrdm,
0394 NULL
0395 };
0396
0397 void __init dra7xx_powerdomains_init(void)
0398 {
0399 pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
0400 pwrdm_register_pwrdms(powerdomains_dra7xx);
0401
0402 if (soc_is_dra76x())
0403 pwrdm_register_pwrdms(powerdomains_dra76x);
0404 else if (soc_is_dra74x())
0405 pwrdm_register_pwrdms(powerdomains_dra74x);
0406 else if (soc_is_dra72x())
0407 pwrdm_register_pwrdms(powerdomains_dra72x);
0408
0409 pwrdm_complete_init();
0410 }