0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #include <linux/kernel.h>
0019 #include <linux/init.h>
0020
0021 #include "powerdomain.h"
0022
0023 #include "prcm-common.h"
0024 #include "prcm44xx.h"
0025 #include "prm54xx.h"
0026 #include "prcm_mpu54xx.h"
0027
0028
0029 static struct powerdomain core_54xx_pwrdm = {
0030 .name = "core_pwrdm",
0031 .voltdm = { .name = "core" },
0032 .prcm_offs = OMAP54XX_PRM_CORE_INST,
0033 .prcm_partition = OMAP54XX_PRM_PARTITION,
0034 .pwrsts = PWRSTS_RET_ON,
0035 .pwrsts_logic_ret = PWRSTS_RET,
0036 .banks = 5,
0037 .pwrsts_mem_ret = {
0038 [0] = PWRSTS_OFF_RET,
0039 [1] = PWRSTS_OFF_RET,
0040 [2] = PWRSTS_OFF_RET,
0041 [3] = PWRSTS_OFF_RET,
0042 [4] = PWRSTS_OFF_RET,
0043 },
0044 .pwrsts_mem_on = {
0045 [0] = PWRSTS_OFF_RET,
0046 [1] = PWRSTS_OFF_RET,
0047 [2] = PWRSTS_OFF_RET,
0048 [3] = PWRSTS_OFF_RET,
0049 [4] = PWRSTS_OFF_RET,
0050 },
0051 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0052 };
0053
0054
0055 static struct powerdomain abe_54xx_pwrdm = {
0056 .name = "abe_pwrdm",
0057 .voltdm = { .name = "core" },
0058 .prcm_offs = OMAP54XX_PRM_ABE_INST,
0059 .prcm_partition = OMAP54XX_PRM_PARTITION,
0060 .pwrsts = PWRSTS_OFF_RET_ON,
0061 .pwrsts_logic_ret = PWRSTS_OFF,
0062 .banks = 2,
0063 .pwrsts_mem_ret = {
0064 [0] = PWRSTS_OFF_RET,
0065 [1] = PWRSTS_OFF_RET,
0066 },
0067 .pwrsts_mem_on = {
0068 [0] = PWRSTS_OFF_RET,
0069 [1] = PWRSTS_OFF_RET,
0070 },
0071 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0072 };
0073
0074
0075 static struct powerdomain coreaon_54xx_pwrdm = {
0076 .name = "coreaon_pwrdm",
0077 .voltdm = { .name = "core" },
0078 .prcm_offs = OMAP54XX_PRM_COREAON_INST,
0079 .prcm_partition = OMAP54XX_PRM_PARTITION,
0080 .pwrsts = PWRSTS_ON,
0081 };
0082
0083
0084 static struct powerdomain dss_54xx_pwrdm = {
0085 .name = "dss_pwrdm",
0086 .voltdm = { .name = "core" },
0087 .prcm_offs = OMAP54XX_PRM_DSS_INST,
0088 .prcm_partition = OMAP54XX_PRM_PARTITION,
0089 .pwrsts = PWRSTS_OFF_RET_ON,
0090 .pwrsts_logic_ret = PWRSTS_OFF,
0091 .banks = 1,
0092 .pwrsts_mem_ret = {
0093 [0] = PWRSTS_OFF_RET,
0094 },
0095 .pwrsts_mem_on = {
0096 [0] = PWRSTS_OFF_RET,
0097 },
0098 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0099 };
0100
0101
0102 static struct powerdomain cpu0_54xx_pwrdm = {
0103 .name = "cpu0_pwrdm",
0104 .voltdm = { .name = "mpu" },
0105 .prcm_offs = OMAP54XX_PRCM_MPU_PRM_C0_INST,
0106 .prcm_partition = OMAP54XX_PRCM_MPU_PARTITION,
0107 .pwrsts = PWRSTS_RET_ON,
0108 .pwrsts_logic_ret = PWRSTS_RET,
0109 .banks = 1,
0110 .pwrsts_mem_ret = {
0111 [0] = PWRSTS_OFF_RET,
0112 },
0113 .pwrsts_mem_on = {
0114 [0] = PWRSTS_ON,
0115 },
0116 };
0117
0118
0119 static struct powerdomain cpu1_54xx_pwrdm = {
0120 .name = "cpu1_pwrdm",
0121 .voltdm = { .name = "mpu" },
0122 .prcm_offs = OMAP54XX_PRCM_MPU_PRM_C1_INST,
0123 .prcm_partition = OMAP54XX_PRCM_MPU_PARTITION,
0124 .pwrsts = PWRSTS_RET_ON,
0125 .pwrsts_logic_ret = PWRSTS_RET,
0126 .banks = 1,
0127 .pwrsts_mem_ret = {
0128 [0] = PWRSTS_OFF_RET,
0129 },
0130 .pwrsts_mem_on = {
0131 [0] = PWRSTS_ON,
0132 },
0133 };
0134
0135
0136 static struct powerdomain emu_54xx_pwrdm = {
0137 .name = "emu_pwrdm",
0138 .voltdm = { .name = "wkup" },
0139 .prcm_offs = OMAP54XX_PRM_EMU_INST,
0140 .prcm_partition = OMAP54XX_PRM_PARTITION,
0141 .pwrsts = PWRSTS_OFF_ON,
0142 .banks = 1,
0143 .pwrsts_mem_ret = {
0144 [0] = PWRSTS_OFF_RET,
0145 },
0146 .pwrsts_mem_on = {
0147 [0] = PWRSTS_OFF_RET,
0148 },
0149 };
0150
0151
0152 static struct powerdomain mpu_54xx_pwrdm = {
0153 .name = "mpu_pwrdm",
0154 .voltdm = { .name = "mpu" },
0155 .prcm_offs = OMAP54XX_PRM_MPU_INST,
0156 .prcm_partition = OMAP54XX_PRM_PARTITION,
0157 .pwrsts = PWRSTS_RET_ON,
0158 .pwrsts_logic_ret = PWRSTS_RET,
0159 .banks = 2,
0160 .pwrsts_mem_ret = {
0161 [0] = PWRSTS_OFF_RET,
0162 [1] = PWRSTS_RET,
0163 },
0164 .pwrsts_mem_on = {
0165 [0] = PWRSTS_OFF_RET,
0166 [1] = PWRSTS_OFF_RET,
0167 },
0168 };
0169
0170
0171 static struct powerdomain custefuse_54xx_pwrdm = {
0172 .name = "custefuse_pwrdm",
0173 .voltdm = { .name = "core" },
0174 .prcm_offs = OMAP54XX_PRM_CUSTEFUSE_INST,
0175 .prcm_partition = OMAP54XX_PRM_PARTITION,
0176 .pwrsts = PWRSTS_OFF_ON,
0177 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0178 };
0179
0180
0181 static struct powerdomain dsp_54xx_pwrdm = {
0182 .name = "dsp_pwrdm",
0183 .voltdm = { .name = "mm" },
0184 .prcm_offs = OMAP54XX_PRM_DSP_INST,
0185 .prcm_partition = OMAP54XX_PRM_PARTITION,
0186 .pwrsts = PWRSTS_OFF_RET_ON,
0187 .pwrsts_logic_ret = PWRSTS_OFF_RET,
0188 .banks = 3,
0189 .pwrsts_mem_ret = {
0190 [0] = PWRSTS_OFF_RET,
0191 [1] = PWRSTS_OFF_RET,
0192 [2] = PWRSTS_OFF_RET,
0193 },
0194 .pwrsts_mem_on = {
0195 [0] = PWRSTS_OFF_RET,
0196 [1] = PWRSTS_OFF_RET,
0197 [2] = PWRSTS_OFF_RET,
0198 },
0199 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0200 };
0201
0202
0203 static struct powerdomain cam_54xx_pwrdm = {
0204 .name = "cam_pwrdm",
0205 .voltdm = { .name = "core" },
0206 .prcm_offs = OMAP54XX_PRM_CAM_INST,
0207 .prcm_partition = OMAP54XX_PRM_PARTITION,
0208 .pwrsts = PWRSTS_OFF_ON,
0209 .banks = 1,
0210 .pwrsts_mem_ret = {
0211 [0] = PWRSTS_OFF_RET,
0212 },
0213 .pwrsts_mem_on = {
0214 [0] = PWRSTS_OFF_RET,
0215 },
0216 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0217 };
0218
0219
0220 static struct powerdomain l3init_54xx_pwrdm = {
0221 .name = "l3init_pwrdm",
0222 .voltdm = { .name = "core" },
0223 .prcm_offs = OMAP54XX_PRM_L3INIT_INST,
0224 .prcm_partition = OMAP54XX_PRM_PARTITION,
0225 .pwrsts = PWRSTS_RET_ON,
0226 .pwrsts_logic_ret = PWRSTS_OFF_RET,
0227 .banks = 2,
0228 .pwrsts_mem_ret = {
0229 [0] = PWRSTS_OFF_RET,
0230 [1] = PWRSTS_OFF_RET,
0231 },
0232 .pwrsts_mem_on = {
0233 [0] = PWRSTS_OFF_RET,
0234 [1] = PWRSTS_OFF_RET,
0235 },
0236 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0237 };
0238
0239
0240 static struct powerdomain gpu_54xx_pwrdm = {
0241 .name = "gpu_pwrdm",
0242 .voltdm = { .name = "mm" },
0243 .prcm_offs = OMAP54XX_PRM_GPU_INST,
0244 .prcm_partition = OMAP54XX_PRM_PARTITION,
0245 .pwrsts = PWRSTS_OFF_ON,
0246 .banks = 1,
0247 .pwrsts_mem_ret = {
0248 [0] = PWRSTS_OFF_RET,
0249 },
0250 .pwrsts_mem_on = {
0251 [0] = PWRSTS_OFF_RET,
0252 },
0253 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0254 };
0255
0256
0257 static struct powerdomain wkupaon_54xx_pwrdm = {
0258 .name = "wkupaon_pwrdm",
0259 .voltdm = { .name = "wkup" },
0260 .prcm_offs = OMAP54XX_PRM_WKUPAON_INST,
0261 .prcm_partition = OMAP54XX_PRM_PARTITION,
0262 .pwrsts = PWRSTS_ON,
0263 .banks = 1,
0264 .pwrsts_mem_ret = {
0265 },
0266 .pwrsts_mem_on = {
0267 [0] = PWRSTS_ON,
0268 },
0269 };
0270
0271
0272 static struct powerdomain iva_54xx_pwrdm = {
0273 .name = "iva_pwrdm",
0274 .voltdm = { .name = "mm" },
0275 .prcm_offs = OMAP54XX_PRM_IVA_INST,
0276 .prcm_partition = OMAP54XX_PRM_PARTITION,
0277 .pwrsts = PWRSTS_OFF_RET_ON,
0278 .pwrsts_logic_ret = PWRSTS_OFF,
0279 .banks = 4,
0280 .pwrsts_mem_ret = {
0281 [0] = PWRSTS_OFF_RET,
0282 [1] = PWRSTS_OFF_RET,
0283 [2] = PWRSTS_OFF_RET,
0284 [3] = PWRSTS_OFF_RET,
0285 },
0286 .pwrsts_mem_on = {
0287 [0] = PWRSTS_OFF_RET,
0288 [1] = PWRSTS_OFF_RET,
0289 [2] = PWRSTS_OFF_RET,
0290 [3] = PWRSTS_OFF_RET,
0291 },
0292 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0293 };
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303 static struct powerdomain *powerdomains_omap54xx[] __initdata = {
0304 &core_54xx_pwrdm,
0305 &abe_54xx_pwrdm,
0306 &coreaon_54xx_pwrdm,
0307 &dss_54xx_pwrdm,
0308 &cpu0_54xx_pwrdm,
0309 &cpu1_54xx_pwrdm,
0310 &emu_54xx_pwrdm,
0311 &mpu_54xx_pwrdm,
0312 &custefuse_54xx_pwrdm,
0313 &dsp_54xx_pwrdm,
0314 &cam_54xx_pwrdm,
0315 &l3init_54xx_pwrdm,
0316 &gpu_54xx_pwrdm,
0317 &wkupaon_54xx_pwrdm,
0318 &iva_54xx_pwrdm,
0319 NULL
0320 };
0321
0322 void __init omap54xx_powerdomains_init(void)
0323 {
0324 pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
0325 pwrdm_register_pwrdms(powerdomains_omap54xx);
0326 pwrdm_complete_init();
0327 }