1 /*
2 * AM33XX Power domains framework
3 *
4 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation version 2.
9 *
10 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
11 * kind, whether express or implied; without even the implied warranty
12 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
16 #include <linux/kernel.h>
17 #include <linux/init.h>
19 #include "powerdomain.h"
20 #include "prcm-common.h"
21 #include "prm33xx.h"
22 #include "prcm44xx.h"
24 static struct powerdomain gfx_33xx_pwrdm = {
25 .name = "gfx_pwrdm",
26 .voltdm = { .name = "core" },
27 .prcm_partition = AM33XX_PRM_PARTITION,
28 .prcm_offs = AM33XX_PRM_GFX_MOD,
29 .pwrsts = PWRSTS_OFF_ON,
30 // .pwrsts_logic_ret = PWRSTS_OFF_RET,
31 .pwrstctrl_offs = AM33XX_PM_GFX_PWRSTCTRL_OFFSET,
32 .pwrstst_offs = AM33XX_PM_GFX_PWRSTST_OFFSET,
33 #if 0
34 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
35 .banks = 1,
36 .pwrsts_mem_ret = {
37 [0] = PWRSTS_OFF_RET, /* gfx_mem */
38 },
39 .pwrsts_mem_on = {
40 [0] = PWRSTS_ON, /* gfx_mem */
41 },
42 #endif
43 };
45 static struct powerdomain rtc_33xx_pwrdm = {
46 .name = "rtc_pwrdm",
47 .voltdm = { .name = "rtc" },
48 .prcm_partition = AM33XX_PRM_PARTITION,
49 .prcm_offs = AM33XX_PRM_RTC_MOD,
50 .pwrsts = PWRSTS_ON,
51 .pwrstctrl_offs = AM33XX_PM_RTC_PWRSTCTRL_OFFSET,
52 .pwrstst_offs = AM33XX_PM_RTC_PWRSTST_OFFSET,
53 };
55 static struct powerdomain wkup_33xx_pwrdm = {
56 .name = "wkup_pwrdm",
57 .voltdm = { .name = "core" },
58 .prcm_partition = AM33XX_PRM_PARTITION,
59 .prcm_offs = AM33XX_PRM_WKUP_MOD,
60 .pwrsts = PWRSTS_ON,
61 .pwrstctrl_offs = AM33XX_PM_WKUP_PWRSTCTRL_OFFSET,
62 .pwrstst_offs = AM33XX_PM_WKUP_PWRSTST_OFFSET,
63 };
65 static struct powerdomain per_33xx_pwrdm = {
66 .name = "per_pwrdm",
67 .voltdm = { .name = "core" },
68 .prcm_partition = AM33XX_PRM_PARTITION,
69 .prcm_offs = AM33XX_PRM_PER_MOD,
70 .pwrsts = PWRSTS_OFF_RET_ON,
71 .pwrsts_logic_ret = PWRSTS_OFF_RET,
72 .pwrstctrl_offs = AM33XX_PM_PER_PWRSTCTRL_OFFSET,
73 .pwrstst_offs = AM33XX_PM_PER_PWRSTST_OFFSET,
74 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
75 .banks = 3,
76 .pwrsts_mem_ret = {
77 [0] = PWRSTS_OFF_RET, /* pruss_mem */
78 [1] = PWRSTS_OFF_RET, /* per_mem */
79 [2] = PWRSTS_OFF_RET, /* ram_mem */
80 },
81 .pwrsts_mem_on = {
82 [0] = PWRSTS_ON, /* pruss_mem */
83 [1] = PWRSTS_ON, /* per_mem */
84 [2] = PWRSTS_ON, /* ram_mem */
85 },
86 };
88 static struct powerdomain mpu_33xx_pwrdm = {
89 .name = "mpu_pwrdm",
90 .voltdm = { .name = "mpu" },
91 .prcm_partition = AM33XX_PRM_PARTITION,
92 .prcm_offs = AM33XX_PRM_MPU_MOD,
93 .pwrsts = PWRSTS_OFF_RET_ON,
94 .pwrsts_logic_ret = PWRSTS_OFF_RET,
95 .pwrstctrl_offs = AM33XX_PM_MPU_PWRSTCTRL_OFFSET,
96 .pwrstst_offs = AM33XX_PM_MPU_PWRSTST_OFFSET,
97 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
98 .banks = 3,
99 .pwrsts_mem_ret = {
100 [0] = PWRSTS_OFF_RET, /* mpu_l1 */
101 [1] = PWRSTS_OFF_RET, /* mpu_l2 */
102 [2] = PWRSTS_OFF_RET, /* mpu_ram */
103 },
104 .pwrsts_mem_on = {
105 [0] = PWRSTS_ON, /* mpu_l1 */
106 [1] = PWRSTS_ON, /* mpu_l2 */
107 [2] = PWRSTS_ON, /* mpu_ram */
108 },
109 };
111 static struct powerdomain cefuse_33xx_pwrdm = {
112 .name = "cefuse_pwrdm",
113 .voltdm = { .name = "core" },
114 .prcm_partition = AM33XX_PRM_PARTITION,
115 .prcm_offs = AM33XX_PRM_CEFUSE_MOD,
116 .pwrsts = PWRSTS_OFF_ON,
117 .pwrstctrl_offs = AM33XX_PM_CEFUSE_PWRSTCTRL_OFFSET,
118 .pwrstst_offs = AM33XX_PM_CEFUSE_PWRSTST_OFFSET,
119 };
121 static struct powerdomain *powerdomains_am33xx[] __initdata = {
122 &gfx_33xx_pwrdm,
123 &rtc_33xx_pwrdm,
124 &wkup_33xx_pwrdm,
125 &per_33xx_pwrdm,
126 &mpu_33xx_pwrdm,
127 &cefuse_33xx_pwrdm,
128 NULL,
129 };
131 void __init am33xx_powerdomains_init(void)
132 {
133 pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
134 pwrdm_register_pwrdms(powerdomains_am33xx);
135 pwrdm_complete_init();
136 }