Lines Matching refs:pwrdm

66 	struct powerdomain *pwrdm, *temp_pwrdm;  in _pwrdm_lookup()  local
68 pwrdm = NULL; in _pwrdm_lookup()
72 pwrdm = temp_pwrdm; in _pwrdm_lookup()
77 return pwrdm; in _pwrdm_lookup()
88 static int _pwrdm_register(struct powerdomain *pwrdm) in _pwrdm_register() argument
93 if (!pwrdm || !pwrdm->name) in _pwrdm_register()
97 pwrdm->prcm_partition == OMAP4430_INVALID_PRCM_PARTITION) { in _pwrdm_register()
99 pwrdm->name); in _pwrdm_register()
103 if (_pwrdm_lookup(pwrdm->name)) in _pwrdm_register()
110 voltdm = voltdm_lookup(pwrdm->voltdm.name); in _pwrdm_register()
113 pwrdm->name, pwrdm->voltdm.name); in _pwrdm_register()
116 pwrdm->voltdm.ptr = voltdm; in _pwrdm_register()
117 INIT_LIST_HEAD(&pwrdm->voltdm_node); in _pwrdm_register()
119 spin_lock_init(&pwrdm->_lock); in _pwrdm_register()
121 list_add(&pwrdm->node, &pwrdm_list); in _pwrdm_register()
125 pwrdm->state_counter[i] = 0; in _pwrdm_register()
127 pwrdm->ret_logic_off_counter = 0; in _pwrdm_register()
128 for (i = 0; i < pwrdm->banks; i++) in _pwrdm_register()
129 pwrdm->ret_mem_off_counter[i] = 0; in _pwrdm_register()
132 arch_pwrdm->pwrdm_wait_transition(pwrdm); in _pwrdm_register()
133 pwrdm->state = pwrdm_read_pwrst(pwrdm); in _pwrdm_register()
134 pwrdm->state_counter[pwrdm->state] = 1; in _pwrdm_register()
136 pr_debug("powerdomain: registered %s\n", pwrdm->name); in _pwrdm_register()
141 static void _update_logic_membank_counters(struct powerdomain *pwrdm) in _update_logic_membank_counters() argument
146 prev_logic_pwrst = pwrdm_read_prev_logic_pwrst(pwrdm); in _update_logic_membank_counters()
147 if ((pwrdm->pwrsts_logic_ret == PWRSTS_OFF_RET) && in _update_logic_membank_counters()
149 pwrdm->ret_logic_off_counter++; in _update_logic_membank_counters()
151 for (i = 0; i < pwrdm->banks; i++) { in _update_logic_membank_counters()
152 prev_mem_pwrst = pwrdm_read_prev_mem_pwrst(pwrdm, i); in _update_logic_membank_counters()
154 if ((pwrdm->pwrsts_mem_ret[i] == PWRSTS_OFF_RET) && in _update_logic_membank_counters()
156 pwrdm->ret_mem_off_counter[i]++; in _update_logic_membank_counters()
160 static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag) in _pwrdm_state_switch() argument
165 if (pwrdm == NULL) in _pwrdm_state_switch()
168 state = pwrdm_read_pwrst(pwrdm); in _pwrdm_state_switch()
172 prev = pwrdm->state; in _pwrdm_state_switch()
175 prev = pwrdm_read_prev_pwrst(pwrdm); in _pwrdm_state_switch()
176 if (pwrdm->state != prev) in _pwrdm_state_switch()
177 pwrdm->state_counter[prev]++; in _pwrdm_state_switch()
179 _update_logic_membank_counters(pwrdm); in _pwrdm_state_switch()
184 next = pwrdm_read_next_pwrst(pwrdm); in _pwrdm_state_switch()
189 trace_power_domain_target(pwrdm->name, trace_state, in _pwrdm_state_switch()
198 pwrdm->state_counter[state]++; in _pwrdm_state_switch()
200 pm_dbg_update_time(pwrdm, prev); in _pwrdm_state_switch()
202 pwrdm->state = state; in _pwrdm_state_switch()
207 static int _pwrdm_pre_transition_cb(struct powerdomain *pwrdm, void *unused) in _pwrdm_pre_transition_cb() argument
209 pwrdm_clear_all_prev_pwrst(pwrdm); in _pwrdm_pre_transition_cb()
210 _pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW); in _pwrdm_pre_transition_cb()
214 static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused) in _pwrdm_post_transition_cb() argument
216 _pwrdm_state_switch(pwrdm, PWRDM_STATE_PREV); in _pwrdm_post_transition_cb()
235 static u8 _pwrdm_save_clkdm_state_and_activate(struct powerdomain *pwrdm, in _pwrdm_save_clkdm_state_and_activate() argument
243 pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE && in _pwrdm_save_clkdm_state_and_activate()
247 *hwsup = clkdm_in_hwsup(pwrdm->pwrdm_clkdms[0]); in _pwrdm_save_clkdm_state_and_activate()
248 clkdm_wakeup_nolock(pwrdm->pwrdm_clkdms[0]); in _pwrdm_save_clkdm_state_and_activate()
272 static void _pwrdm_restore_clkdm_state(struct powerdomain *pwrdm, in _pwrdm_restore_clkdm_state() argument
278 clkdm_allow_idle_nolock(pwrdm->pwrdm_clkdms[0]); in _pwrdm_restore_clkdm_state()
280 clkdm_sleep_nolock(pwrdm->pwrdm_clkdms[0]); in _pwrdm_restore_clkdm_state()
283 if (pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE && in _pwrdm_restore_clkdm_state()
285 arch_pwrdm->pwrdm_set_lowpwrstchange(pwrdm); in _pwrdm_restore_clkdm_state()
286 pwrdm_state_switch_nolock(pwrdm); in _pwrdm_restore_clkdm_state()
372 void pwrdm_lock(struct powerdomain *pwrdm) in pwrdm_lock() argument
373 __acquires(&pwrdm->_lock) in pwrdm_lock()
375 spin_lock_irqsave(&pwrdm->_lock, pwrdm->_lock_flags); in pwrdm_lock()
384 void pwrdm_unlock(struct powerdomain *pwrdm) in pwrdm_unlock() argument
385 __releases(&pwrdm->_lock) in pwrdm_unlock()
387 spin_unlock_irqrestore(&pwrdm->_lock, pwrdm->_lock_flags); in pwrdm_unlock()
399 struct powerdomain *pwrdm; in pwrdm_lookup() local
404 pwrdm = _pwrdm_lookup(name); in pwrdm_lookup()
406 return pwrdm; in pwrdm_lookup()
419 int pwrdm_for_each(int (*fn)(struct powerdomain *pwrdm, void *user), in pwrdm_for_each() argument
447 int pwrdm_add_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm) in pwrdm_add_clkdm() argument
452 if (!pwrdm || !clkdm) in pwrdm_add_clkdm()
456 pwrdm->name, clkdm->name); in pwrdm_add_clkdm()
459 if (!pwrdm->pwrdm_clkdms[i]) in pwrdm_add_clkdm()
462 if (pwrdm->pwrdm_clkdms[i] == clkdm) { in pwrdm_add_clkdm()
471 pwrdm->name, clkdm->name); in pwrdm_add_clkdm()
477 pwrdm->pwrdm_clkdms[i] = clkdm; in pwrdm_add_clkdm()
492 int pwrdm_get_mem_bank_count(struct powerdomain *pwrdm) in pwrdm_get_mem_bank_count() argument
494 if (!pwrdm) in pwrdm_get_mem_bank_count()
497 return pwrdm->banks; in pwrdm_get_mem_bank_count()
511 int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst) in pwrdm_set_next_pwrst() argument
515 if (!pwrdm) in pwrdm_set_next_pwrst()
518 if (!(pwrdm->pwrsts & (1 << pwrst))) in pwrdm_set_next_pwrst()
522 pwrdm->name, pwrst); in pwrdm_set_next_pwrst()
526 trace_power_domain_target(pwrdm->name, pwrst, in pwrdm_set_next_pwrst()
529 ret = arch_pwrdm->pwrdm_set_next_pwrst(pwrdm, pwrst); in pwrdm_set_next_pwrst()
543 int pwrdm_read_next_pwrst(struct powerdomain *pwrdm) in pwrdm_read_next_pwrst() argument
547 if (!pwrdm) in pwrdm_read_next_pwrst()
551 ret = arch_pwrdm->pwrdm_read_next_pwrst(pwrdm); in pwrdm_read_next_pwrst()
565 int pwrdm_read_pwrst(struct powerdomain *pwrdm) in pwrdm_read_pwrst() argument
569 if (!pwrdm) in pwrdm_read_pwrst()
572 if (pwrdm->pwrsts == PWRSTS_ON) in pwrdm_read_pwrst()
576 ret = arch_pwrdm->pwrdm_read_pwrst(pwrdm); in pwrdm_read_pwrst()
589 int pwrdm_read_prev_pwrst(struct powerdomain *pwrdm) in pwrdm_read_prev_pwrst() argument
593 if (!pwrdm) in pwrdm_read_prev_pwrst()
597 ret = arch_pwrdm->pwrdm_read_prev_pwrst(pwrdm); in pwrdm_read_prev_pwrst()
613 int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst) in pwrdm_set_logic_retst() argument
617 if (!pwrdm) in pwrdm_set_logic_retst()
620 if (!(pwrdm->pwrsts_logic_ret & (1 << pwrst))) in pwrdm_set_logic_retst()
624 pwrdm->name, pwrst); in pwrdm_set_logic_retst()
627 ret = arch_pwrdm->pwrdm_set_logic_retst(pwrdm, pwrst); in pwrdm_set_logic_retst()
647 int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst) in pwrdm_set_mem_onst() argument
651 if (!pwrdm) in pwrdm_set_mem_onst()
654 if (pwrdm->banks < (bank + 1)) in pwrdm_set_mem_onst()
657 if (!(pwrdm->pwrsts_mem_on[bank] & (1 << pwrst))) in pwrdm_set_mem_onst()
661 pwrdm->name, bank, pwrst); in pwrdm_set_mem_onst()
664 ret = arch_pwrdm->pwrdm_set_mem_onst(pwrdm, bank, pwrst); in pwrdm_set_mem_onst()
685 int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst) in pwrdm_set_mem_retst() argument
689 if (!pwrdm) in pwrdm_set_mem_retst()
692 if (pwrdm->banks < (bank + 1)) in pwrdm_set_mem_retst()
695 if (!(pwrdm->pwrsts_mem_ret[bank] & (1 << pwrst))) in pwrdm_set_mem_retst()
699 pwrdm->name, bank, pwrst); in pwrdm_set_mem_retst()
702 ret = arch_pwrdm->pwrdm_set_mem_retst(pwrdm, bank, pwrst); in pwrdm_set_mem_retst()
716 int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm) in pwrdm_read_logic_pwrst() argument
720 if (!pwrdm) in pwrdm_read_logic_pwrst()
724 ret = arch_pwrdm->pwrdm_read_logic_pwrst(pwrdm); in pwrdm_read_logic_pwrst()
737 int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm) in pwrdm_read_prev_logic_pwrst() argument
741 if (!pwrdm) in pwrdm_read_prev_logic_pwrst()
745 ret = arch_pwrdm->pwrdm_read_prev_logic_pwrst(pwrdm); in pwrdm_read_prev_logic_pwrst()
758 int pwrdm_read_logic_retst(struct powerdomain *pwrdm) in pwrdm_read_logic_retst() argument
762 if (!pwrdm) in pwrdm_read_logic_retst()
766 ret = arch_pwrdm->pwrdm_read_logic_retst(pwrdm); in pwrdm_read_logic_retst()
781 int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank) in pwrdm_read_mem_pwrst() argument
785 if (!pwrdm) in pwrdm_read_mem_pwrst()
788 if (pwrdm->banks < (bank + 1)) in pwrdm_read_mem_pwrst()
791 if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK) in pwrdm_read_mem_pwrst()
795 ret = arch_pwrdm->pwrdm_read_mem_pwrst(pwrdm, bank); in pwrdm_read_mem_pwrst()
811 int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank) in pwrdm_read_prev_mem_pwrst() argument
815 if (!pwrdm) in pwrdm_read_prev_mem_pwrst()
818 if (pwrdm->banks < (bank + 1)) in pwrdm_read_prev_mem_pwrst()
821 if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK) in pwrdm_read_prev_mem_pwrst()
825 ret = arch_pwrdm->pwrdm_read_prev_mem_pwrst(pwrdm, bank); in pwrdm_read_prev_mem_pwrst()
840 int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank) in pwrdm_read_mem_retst() argument
844 if (!pwrdm) in pwrdm_read_mem_retst()
847 if (pwrdm->banks < (bank + 1)) in pwrdm_read_mem_retst()
851 ret = arch_pwrdm->pwrdm_read_mem_retst(pwrdm, bank); in pwrdm_read_mem_retst()
865 int pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm) in pwrdm_clear_all_prev_pwrst() argument
869 if (!pwrdm) in pwrdm_clear_all_prev_pwrst()
878 pwrdm->name); in pwrdm_clear_all_prev_pwrst()
881 ret = arch_pwrdm->pwrdm_clear_all_prev_pwrst(pwrdm); in pwrdm_clear_all_prev_pwrst()
897 int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm) in pwrdm_enable_hdwr_sar() argument
901 if (!pwrdm) in pwrdm_enable_hdwr_sar()
904 if (!(pwrdm->flags & PWRDM_HAS_HDWR_SAR)) in pwrdm_enable_hdwr_sar()
907 pr_debug("powerdomain: %s: setting SAVEANDRESTORE bit\n", pwrdm->name); in pwrdm_enable_hdwr_sar()
910 ret = arch_pwrdm->pwrdm_enable_hdwr_sar(pwrdm); in pwrdm_enable_hdwr_sar()
926 int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm) in pwrdm_disable_hdwr_sar() argument
930 if (!pwrdm) in pwrdm_disable_hdwr_sar()
933 if (!(pwrdm->flags & PWRDM_HAS_HDWR_SAR)) in pwrdm_disable_hdwr_sar()
936 pr_debug("powerdomain: %s: clearing SAVEANDRESTORE bit\n", pwrdm->name); in pwrdm_disable_hdwr_sar()
939 ret = arch_pwrdm->pwrdm_disable_hdwr_sar(pwrdm); in pwrdm_disable_hdwr_sar()
951 bool pwrdm_has_hdwr_sar(struct powerdomain *pwrdm) in pwrdm_has_hdwr_sar() argument
953 return (pwrdm && pwrdm->flags & PWRDM_HAS_HDWR_SAR) ? 1 : 0; in pwrdm_has_hdwr_sar()
956 int pwrdm_state_switch_nolock(struct powerdomain *pwrdm) in pwrdm_state_switch_nolock() argument
960 if (!pwrdm || !arch_pwrdm) in pwrdm_state_switch_nolock()
963 ret = arch_pwrdm->pwrdm_wait_transition(pwrdm); in pwrdm_state_switch_nolock()
965 ret = _pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW); in pwrdm_state_switch_nolock()
970 int __deprecated pwrdm_state_switch(struct powerdomain *pwrdm) in pwrdm_state_switch() argument
974 pwrdm_lock(pwrdm); in pwrdm_state_switch()
975 ret = pwrdm_state_switch_nolock(pwrdm); in pwrdm_state_switch()
976 pwrdm_unlock(pwrdm); in pwrdm_state_switch()
981 int pwrdm_pre_transition(struct powerdomain *pwrdm) in pwrdm_pre_transition() argument
983 if (pwrdm) in pwrdm_pre_transition()
984 _pwrdm_pre_transition_cb(pwrdm, NULL); in pwrdm_pre_transition()
991 int pwrdm_post_transition(struct powerdomain *pwrdm) in pwrdm_post_transition() argument
993 if (pwrdm) in pwrdm_post_transition()
994 _pwrdm_post_transition_cb(pwrdm, NULL); in pwrdm_post_transition()
1024 u8 pwrdm_get_valid_lp_state(struct powerdomain *pwrdm, in pwrdm_get_valid_lp_state() argument
1027 u8 pwrdm_states = is_logic_state ? pwrdm->pwrsts_logic_ret : in pwrdm_get_valid_lp_state()
1028 pwrdm->pwrsts; in pwrdm_get_valid_lp_state()
1065 pwrdm->name); in pwrdm_get_valid_lp_state()
1090 int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst) in omap_set_pwrdm_state() argument
1097 if (!pwrdm || IS_ERR(pwrdm)) in omap_set_pwrdm_state()
1100 while (!(pwrdm->pwrsts & (1 << pwrst))) { in omap_set_pwrdm_state()
1106 pwrdm_lock(pwrdm); in omap_set_pwrdm_state()
1108 curr_pwrst = pwrdm_read_pwrst(pwrdm); in omap_set_pwrdm_state()
1114 next_pwrst = pwrdm_read_next_pwrst(pwrdm); in omap_set_pwrdm_state()
1118 sleep_switch = _pwrdm_save_clkdm_state_and_activate(pwrdm, curr_pwrst, in omap_set_pwrdm_state()
1121 ret = pwrdm_set_next_pwrst(pwrdm, pwrst); in omap_set_pwrdm_state()
1124 __func__, pwrdm->name); in omap_set_pwrdm_state()
1126 _pwrdm_restore_clkdm_state(pwrdm, sleep_switch, hwsup); in omap_set_pwrdm_state()
1129 pwrdm_unlock(pwrdm); in omap_set_pwrdm_state()
1142 int pwrdm_get_context_loss_count(struct powerdomain *pwrdm) in pwrdm_get_context_loss_count() argument
1146 if (!pwrdm) { in pwrdm_get_context_loss_count()
1151 count = pwrdm->state_counter[PWRDM_POWER_OFF]; in pwrdm_get_context_loss_count()
1152 count += pwrdm->ret_logic_off_counter; in pwrdm_get_context_loss_count()
1154 for (i = 0; i < pwrdm->banks; i++) in pwrdm_get_context_loss_count()
1155 count += pwrdm->ret_mem_off_counter[i]; in pwrdm_get_context_loss_count()
1164 pwrdm->name, count); in pwrdm_get_context_loss_count()
1181 bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm) in pwrdm_can_ever_lose_context() argument
1185 if (!pwrdm) { in pwrdm_can_ever_lose_context()
1191 if (pwrdm->pwrsts & PWRSTS_OFF) in pwrdm_can_ever_lose_context()
1194 if (pwrdm->pwrsts & PWRSTS_RET) { in pwrdm_can_ever_lose_context()
1195 if (pwrdm->pwrsts_logic_ret & PWRSTS_OFF) in pwrdm_can_ever_lose_context()
1198 for (i = 0; i < pwrdm->banks; i++) in pwrdm_can_ever_lose_context()
1199 if (pwrdm->pwrsts_mem_ret[i] & PWRSTS_OFF) in pwrdm_can_ever_lose_context()
1203 for (i = 0; i < pwrdm->banks; i++) in pwrdm_can_ever_lose_context()
1204 if (pwrdm->pwrsts_mem_on[i] & PWRSTS_OFF) in pwrdm_can_ever_lose_context()