提交 c956b753 编写于 作者: R Rajendra Nayak 提交者: Paul Walmsley

OMAP: powerdomains: Make all powerdomain target states as ON at init

Program all powerdomain target state as ON; this is to prevent domains
from hitting low power states (if bootloader has target states set to
something other than ON) and potentially even losing context while PM
is not fully initialized, which can cause the system to crash.  The PM
late init code can then program the desired target state for all the
power domains.
Signed-off-by: NRajendra Nayak <rnayak@ti.com>
Signed-off-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
[paul@pwsan.com: dropped comment typo hunk; fixed comment indent and moved
 to kerneldoc; moved code to pwrdm_init(); changed pwrdm_init() argument name
 to prevent clash; cleaned up patch description]
Signed-off-by: NPaul Walmsley <paul@pwsan.com>
上级 5ccc3874
...@@ -195,28 +195,35 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused) ...@@ -195,28 +195,35 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused)
/** /**
* pwrdm_init - set up the powerdomain layer * pwrdm_init - set up the powerdomain layer
* @pwrdm_list: array of struct powerdomain pointers to register * @pwrdms: array of struct powerdomain pointers to register
* @custom_funcs: func pointers for arch specific implementations * @custom_funcs: func pointers for arch specific implementations
* *
* Loop through the array of powerdomains @pwrdm_list, registering all * Loop through the array of powerdomains @pwrdms, registering all
* that are available on the current CPU. If pwrdm_list is supplied * that are available on the current CPU. Also, program all
* and not null, all of the referenced powerdomains will be * powerdomain target state as ON; this is to prevent domains from
* registered. No return value. XXX pwrdm_list is not really a * hitting low power states (if bootloader has target states set to
* "list"; it is an array. Rename appropriately. * something other than ON) and potentially even losing context while
* PM is not fully initialized. The PM late init code can then program
* the desired target state for all the power domains. No return
* value.
*/ */
void pwrdm_init(struct powerdomain **pwrdm_list, struct pwrdm_ops *custom_funcs) void pwrdm_init(struct powerdomain **pwrdms, struct pwrdm_ops *custom_funcs)
{ {
struct powerdomain **p = NULL; struct powerdomain **p = NULL;
struct powerdomain *temp_p;
if (!custom_funcs) if (!custom_funcs)
WARN(1, "powerdomain: No custom pwrdm functions registered\n"); WARN(1, "powerdomain: No custom pwrdm functions registered\n");
else else
arch_pwrdm = custom_funcs; arch_pwrdm = custom_funcs;
if (pwrdm_list) { if (pwrdms) {
for (p = pwrdm_list; *p; p++) for (p = pwrdms; *p; p++)
_pwrdm_register(*p); _pwrdm_register(*p);
} }
list_for_each_entry(temp_p, &pwrdm_list, node)
pwrdm_set_next_pwrst(temp_p, PWRDM_POWER_ON);
} }
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册