diff options
author | Rajendra Nayak <rnayak@ti.com> | 2010-12-21 22:01:18 -0500 |
---|---|---|
committer | Paul Walmsley <paul@pwsan.com> | 2010-12-21 22:01:18 -0500 |
commit | 3b1e8b21fcbd686445f0bb42f84701b4621cdec6 (patch) | |
tree | 0de10fe595631821b60bbc847ede377e370bc147 | |
parent | 74bea6b9881f4b32f6c0379e46d2f5e16fd34a07 (diff) |
OMAP: powerdomain: Infrastructure to put arch specific code
Put infrastructure in place, so arch specific func pointers
can be hooked up to the platform-independent part of the
framework.
This is in preparation of splitting the powerdomain framework into
platform-independent part (for all omaps) and platform-specific
parts.
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Paul Walmsley <paul@pwsan.com>
Cc: Benoit Cousson <b-cousson@ti.com>
Cc: Kevin Hilman <khilman@deeprootsystems.com>
Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com>
Tested-by: Kevin Hilman <khilman@deeprootsystems.com>
Tested-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Tested-by: Rajendra Nayak <rnayak@ti.com>
-rw-r--r-- | arch/arm/mach-omap2/powerdomain.c | 11 | ||||
-rw-r--r-- | arch/arm/mach-omap2/powerdomains_data.c | 2 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/powerdomain.h | 43 |
3 files changed, 52 insertions, 4 deletions
diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c index 6527ec30dc17..3aa3eb335416 100644 --- a/arch/arm/mach-omap2/powerdomain.c +++ b/arch/arm/mach-omap2/powerdomain.c | |||
@@ -80,6 +80,8 @@ static u16 pwrstst_reg_offs; | |||
80 | /* pwrdm_list contains all registered struct powerdomains */ | 80 | /* pwrdm_list contains all registered struct powerdomains */ |
81 | static LIST_HEAD(pwrdm_list); | 81 | static LIST_HEAD(pwrdm_list); |
82 | 82 | ||
83 | static struct pwrdm_ops *arch_pwrdm; | ||
84 | |||
83 | /* Private functions */ | 85 | /* Private functions */ |
84 | 86 | ||
85 | static struct powerdomain *_pwrdm_lookup(const char *name) | 87 | static struct powerdomain *_pwrdm_lookup(const char *name) |
@@ -211,6 +213,7 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused) | |||
211 | /** | 213 | /** |
212 | * pwrdm_init - set up the powerdomain layer | 214 | * pwrdm_init - set up the powerdomain layer |
213 | * @pwrdm_list: array of struct powerdomain pointers to register | 215 | * @pwrdm_list: array of struct powerdomain pointers to register |
216 | * @custom_funcs: func pointers for arch specfic implementations | ||
214 | * | 217 | * |
215 | * Loop through the array of powerdomains @pwrdm_list, registering all | 218 | * Loop through the array of powerdomains @pwrdm_list, registering all |
216 | * that are available on the current CPU. If pwrdm_list is supplied | 219 | * that are available on the current CPU. If pwrdm_list is supplied |
@@ -218,7 +221,7 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused) | |||
218 | * registered. No return value. XXX pwrdm_list is not really a | 221 | * registered. No return value. XXX pwrdm_list is not really a |
219 | * "list"; it is an array. Rename appropriately. | 222 | * "list"; it is an array. Rename appropriately. |
220 | */ | 223 | */ |
221 | void pwrdm_init(struct powerdomain **pwrdm_list) | 224 | void pwrdm_init(struct powerdomain **pwrdm_list, struct pwrdm_ops *custom_funcs) |
222 | { | 225 | { |
223 | struct powerdomain **p = NULL; | 226 | struct powerdomain **p = NULL; |
224 | 227 | ||
@@ -234,6 +237,11 @@ void pwrdm_init(struct powerdomain **pwrdm_list) | |||
234 | return; | 237 | return; |
235 | } | 238 | } |
236 | 239 | ||
240 | if (!custom_funcs) | ||
241 | WARN(1, "powerdomain: No custom pwrdm functions registered\n"); | ||
242 | else | ||
243 | arch_pwrdm = custom_funcs; | ||
244 | |||
237 | if (pwrdm_list) { | 245 | if (pwrdm_list) { |
238 | for (p = pwrdm_list; *p; p++) | 246 | for (p = pwrdm_list; *p; p++) |
239 | _pwrdm_register(*p); | 247 | _pwrdm_register(*p); |
@@ -1074,4 +1082,3 @@ int pwrdm_post_transition(void) | |||
1074 | pwrdm_for_each(_pwrdm_post_transition_cb, NULL); | 1082 | pwrdm_for_each(_pwrdm_post_transition_cb, NULL); |
1075 | return 0; | 1083 | return 0; |
1076 | } | 1084 | } |
1077 | |||
diff --git a/arch/arm/mach-omap2/powerdomains_data.c b/arch/arm/mach-omap2/powerdomains_data.c index 475763e42f35..bf5b39be8240 100644 --- a/arch/arm/mach-omap2/powerdomains_data.c +++ b/arch/arm/mach-omap2/powerdomains_data.c | |||
@@ -149,5 +149,5 @@ static struct powerdomain *powerdomains_omap[] __initdata = { | |||
149 | 149 | ||
150 | void pwrdm_fw_init(void) | 150 | void pwrdm_fw_init(void) |
151 | { | 151 | { |
152 | pwrdm_init(powerdomains_omap); | 152 | pwrdm_init(powerdomains_omap, NULL); |
153 | } | 153 | } |
diff --git a/arch/arm/plat-omap/include/plat/powerdomain.h b/arch/arm/plat-omap/include/plat/powerdomain.h index e322b39f3a3f..583758cbd7d3 100644 --- a/arch/arm/plat-omap/include/plat/powerdomain.h +++ b/arch/arm/plat-omap/include/plat/powerdomain.h | |||
@@ -117,9 +117,50 @@ struct powerdomain { | |||
117 | #endif | 117 | #endif |
118 | }; | 118 | }; |
119 | 119 | ||
120 | /** | ||
121 | * struct pwrdm_ops - Arch specfic function implementations | ||
122 | * @pwrdm_set_next_pwrst: Set the target power state for a pd | ||
123 | * @pwrdm_read_next_pwrst: Read the target power state set for a pd | ||
124 | * @pwrdm_read_pwrst: Read the current power state of a pd | ||
125 | * @pwrdm_read_prev_pwrst: Read the prev power state entered by the pd | ||
126 | * @pwrdm_set_logic_retst: Set the logic state in RET for a pd | ||
127 | * @pwrdm_set_mem_onst: Set the Memory state in ON for a pd | ||
128 | * @pwrdm_set_mem_retst: Set the Memory state in RET for a pd | ||
129 | * @pwrdm_read_logic_pwrst: Read the current logic state of a pd | ||
130 | * @pwrdm_read_prev_logic_pwrst: Read the previous logic state entered by a pd | ||
131 | * @pwrdm_read_logic_retst: Read the logic state in RET for a pd | ||
132 | * @pwrdm_read_mem_pwrst: Read the current memory state of a pd | ||
133 | * @pwrdm_read_prev_mem_pwrst: Read the previous memory state entered by a pd | ||
134 | * @pwrdm_read_mem_retst: Read the memory state in RET for a pd | ||
135 | * @pwrdm_clear_all_prev_pwrst: Clear all previous power states logged for a pd | ||
136 | * @pwrdm_enable_hdwr_sar: Enable Hardware Save-Restore feature for the pd | ||
137 | * @pwrdm_disable_hdwr_sar: Disable Hardware Save-Restore feature for a pd | ||
138 | * @pwrdm_set_lowpwrstchange: Enable pd transitions from a shallow to deep sleep | ||
139 | * @pwrdm_wait_transition: Wait for a pd state transition to complete | ||
140 | */ | ||
141 | struct pwrdm_ops { | ||
142 | int (*pwrdm_set_next_pwrst)(struct powerdomain *pwrdm, u8 pwrst); | ||
143 | int (*pwrdm_read_next_pwrst)(struct powerdomain *pwrdm); | ||
144 | int (*pwrdm_read_pwrst)(struct powerdomain *pwrdm); | ||
145 | int (*pwrdm_read_prev_pwrst)(struct powerdomain *pwrdm); | ||
146 | int (*pwrdm_set_logic_retst)(struct powerdomain *pwrdm, u8 pwrst); | ||
147 | int (*pwrdm_set_mem_onst)(struct powerdomain *pwrdm, u8 bank, u8 pwrst); | ||
148 | int (*pwrdm_set_mem_retst)(struct powerdomain *pwrdm, u8 bank, u8 pwrst); | ||
149 | int (*pwrdm_read_logic_pwrst)(struct powerdomain *pwrdm); | ||
150 | int (*pwrdm_read_prev_logic_pwrst)(struct powerdomain *pwrdm); | ||
151 | int (*pwrdm_read_logic_retst)(struct powerdomain *pwrdm); | ||
152 | int (*pwrdm_read_mem_pwrst)(struct powerdomain *pwrdm, u8 bank); | ||
153 | int (*pwrdm_read_prev_mem_pwrst)(struct powerdomain *pwrdm, u8 bank); | ||
154 | int (*pwrdm_read_mem_retst)(struct powerdomain *pwrdm, u8 bank); | ||
155 | int (*pwrdm_clear_all_prev_pwrst)(struct powerdomain *pwrdm); | ||
156 | int (*pwrdm_enable_hdwr_sar)(struct powerdomain *pwrdm); | ||
157 | int (*pwrdm_disable_hdwr_sar)(struct powerdomain *pwrdm); | ||
158 | int (*pwrdm_set_lowpwrstchange)(struct powerdomain *pwrdm); | ||
159 | int (*pwrdm_wait_transition)(struct powerdomain *pwrdm); | ||
160 | }; | ||
120 | 161 | ||
121 | void pwrdm_fw_init(void); | 162 | void pwrdm_fw_init(void); |
122 | void pwrdm_init(struct powerdomain **pwrdm_list); | 163 | void pwrdm_init(struct powerdomain **pwrdm_list, struct pwrdm_ops *custom_funcs); |
123 | 164 | ||
124 | struct powerdomain *pwrdm_lookup(const char *name); | 165 | struct powerdomain *pwrdm_lookup(const char *name); |
125 | 166 | ||