0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/kernel.h>
0009 #include <linux/init.h>
0010
0011 #include "powerdomain.h"
0012
0013 #include "prcm-common.h"
0014 #include "prcm44xx.h"
0015 #include "prcm43xx.h"
0016
0017 static struct powerdomain gfx_43xx_pwrdm = {
0018 .name = "gfx_pwrdm",
0019 .voltdm = { .name = "core" },
0020 .prcm_offs = AM43XX_PRM_GFX_INST,
0021 .prcm_partition = AM43XX_PRM_PARTITION,
0022 .pwrsts = PWRSTS_OFF_ON,
0023 .banks = 1,
0024 .pwrsts_mem_on = {
0025 [0] = PWRSTS_ON,
0026 },
0027 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0028 };
0029
0030 static struct powerdomain mpu_43xx_pwrdm = {
0031 .name = "mpu_pwrdm",
0032 .voltdm = { .name = "mpu" },
0033 .prcm_offs = AM43XX_PRM_MPU_INST,
0034 .prcm_partition = AM43XX_PRM_PARTITION,
0035 .pwrsts = PWRSTS_OFF_RET_ON,
0036 .pwrsts_logic_ret = PWRSTS_OFF_RET,
0037 .banks = 3,
0038 .pwrsts_mem_ret = {
0039 [0] = PWRSTS_OFF_RET,
0040 [1] = PWRSTS_OFF_RET,
0041 [2] = PWRSTS_OFF_RET,
0042 },
0043 .pwrsts_mem_on = {
0044 [0] = PWRSTS_ON,
0045 [1] = PWRSTS_ON,
0046 [2] = PWRSTS_ON,
0047 },
0048 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0049 };
0050
0051 static struct powerdomain rtc_43xx_pwrdm = {
0052 .name = "rtc_pwrdm",
0053 .voltdm = { .name = "rtc" },
0054 .prcm_offs = AM43XX_PRM_RTC_INST,
0055 .prcm_partition = AM43XX_PRM_PARTITION,
0056 .pwrsts = PWRSTS_ON,
0057 };
0058
0059 static struct powerdomain wkup_43xx_pwrdm = {
0060 .name = "wkup_pwrdm",
0061 .voltdm = { .name = "core" },
0062 .prcm_offs = AM43XX_PRM_WKUP_INST,
0063 .prcm_partition = AM43XX_PRM_PARTITION,
0064 .pwrsts = PWRSTS_ON,
0065 .banks = 1,
0066 .pwrsts_mem_on = {
0067 [0] = PWRSTS_ON,
0068 },
0069 };
0070
0071 static struct powerdomain tamper_43xx_pwrdm = {
0072 .name = "tamper_pwrdm",
0073 .voltdm = { .name = "tamper" },
0074 .prcm_offs = AM43XX_PRM_TAMPER_INST,
0075 .prcm_partition = AM43XX_PRM_PARTITION,
0076 .pwrsts = PWRSTS_ON,
0077 };
0078
0079 static struct powerdomain cefuse_43xx_pwrdm = {
0080 .name = "cefuse_pwrdm",
0081 .voltdm = { .name = "core" },
0082 .prcm_offs = AM43XX_PRM_CEFUSE_INST,
0083 .prcm_partition = AM43XX_PRM_PARTITION,
0084 .pwrsts = PWRSTS_OFF_ON,
0085 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0086 };
0087
0088 static struct powerdomain per_43xx_pwrdm = {
0089 .name = "per_pwrdm",
0090 .voltdm = { .name = "core" },
0091 .prcm_offs = AM43XX_PRM_PER_INST,
0092 .prcm_partition = AM43XX_PRM_PARTITION,
0093 .pwrsts = PWRSTS_OFF_RET_ON,
0094 .pwrsts_logic_ret = PWRSTS_OFF_RET,
0095 .banks = 4,
0096 .pwrsts_mem_ret = {
0097 [0] = PWRSTS_OFF_RET,
0098 [1] = PWRSTS_OFF_RET,
0099 [2] = PWRSTS_OFF_RET,
0100 [3] = PWRSTS_OFF_RET,
0101 },
0102 .pwrsts_mem_on = {
0103 [0] = PWRSTS_ON,
0104 [1] = PWRSTS_ON,
0105 [2] = PWRSTS_ON,
0106 [3] = PWRSTS_ON,
0107 },
0108 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
0109 };
0110
0111 static struct powerdomain *powerdomains_am43xx[] __initdata = {
0112 &gfx_43xx_pwrdm,
0113 &mpu_43xx_pwrdm,
0114 &rtc_43xx_pwrdm,
0115 &wkup_43xx_pwrdm,
0116 &tamper_43xx_pwrdm,
0117 &cefuse_43xx_pwrdm,
0118 &per_43xx_pwrdm,
0119 NULL
0120 };
0121
0122 static int am43xx_check_vcvp(void)
0123 {
0124 return 0;
0125 }
0126
0127 void __init am43xx_powerdomains_init(void)
0128 {
0129 omap4_pwrdm_operations.pwrdm_has_voltdm = am43xx_check_vcvp;
0130 pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
0131 pwrdm_register_pwrdms(powerdomains_am43xx);
0132 pwrdm_complete_init();
0133 }