Lines Matching refs:pwrdm
67 struct powerdomain *pwrdm, *temp_pwrdm; in _pwrdm_lookup() local
69 pwrdm = NULL; in _pwrdm_lookup()
73 pwrdm = temp_pwrdm; in _pwrdm_lookup()
78 return pwrdm; in _pwrdm_lookup()
89 static int _pwrdm_register(struct powerdomain *pwrdm) in _pwrdm_register() argument
94 if (!pwrdm || !pwrdm->name) in _pwrdm_register()
98 pwrdm->prcm_partition == OMAP4430_INVALID_PRCM_PARTITION) { in _pwrdm_register()
100 pwrdm->name); in _pwrdm_register()
104 if (_pwrdm_lookup(pwrdm->name)) in _pwrdm_register()
111 voltdm = voltdm_lookup(pwrdm->voltdm.name); in _pwrdm_register()
114 pwrdm->name, pwrdm->voltdm.name); in _pwrdm_register()
117 pwrdm->voltdm.ptr = voltdm; in _pwrdm_register()
118 INIT_LIST_HEAD(&pwrdm->voltdm_node); in _pwrdm_register()
120 spin_lock_init(&pwrdm->_lock); in _pwrdm_register()
122 list_add(&pwrdm->node, &pwrdm_list); in _pwrdm_register()
126 pwrdm->state_counter[i] = 0; in _pwrdm_register()
128 pwrdm->ret_logic_off_counter = 0; in _pwrdm_register()
129 for (i = 0; i < pwrdm->banks; i++) in _pwrdm_register()
130 pwrdm->ret_mem_off_counter[i] = 0; in _pwrdm_register()
133 arch_pwrdm->pwrdm_wait_transition(pwrdm); in _pwrdm_register()
134 pwrdm->state = pwrdm_read_pwrst(pwrdm); in _pwrdm_register()
135 pwrdm->state_counter[pwrdm->state] = 1; in _pwrdm_register()
137 pr_debug("powerdomain: registered %s\n", pwrdm->name); in _pwrdm_register()
142 static void _update_logic_membank_counters(struct powerdomain *pwrdm) in _update_logic_membank_counters() argument
147 prev_logic_pwrst = pwrdm_read_prev_logic_pwrst(pwrdm); in _update_logic_membank_counters()
148 if ((pwrdm->pwrsts_logic_ret == PWRSTS_OFF_RET) && in _update_logic_membank_counters()
150 pwrdm->ret_logic_off_counter++; in _update_logic_membank_counters()
152 for (i = 0; i < pwrdm->banks; i++) { in _update_logic_membank_counters()
153 prev_mem_pwrst = pwrdm_read_prev_mem_pwrst(pwrdm, i); in _update_logic_membank_counters()
155 if ((pwrdm->pwrsts_mem_ret[i] == PWRSTS_OFF_RET) && in _update_logic_membank_counters()
157 pwrdm->ret_mem_off_counter[i]++; in _update_logic_membank_counters()
161 static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag) in _pwrdm_state_switch() argument
166 if (pwrdm == NULL) in _pwrdm_state_switch()
169 state = pwrdm_read_pwrst(pwrdm); in _pwrdm_state_switch()
173 prev = pwrdm->state; in _pwrdm_state_switch()
176 prev = pwrdm_read_prev_pwrst(pwrdm); in _pwrdm_state_switch()
177 if (pwrdm->state != prev) in _pwrdm_state_switch()
178 pwrdm->state_counter[prev]++; in _pwrdm_state_switch()
180 _update_logic_membank_counters(pwrdm); in _pwrdm_state_switch()
185 next = pwrdm_read_next_pwrst(pwrdm); in _pwrdm_state_switch()
190 trace_power_domain_target_rcuidle(pwrdm->name, in _pwrdm_state_switch()
200 pwrdm->state_counter[state]++; in _pwrdm_state_switch()
202 pm_dbg_update_time(pwrdm, prev); in _pwrdm_state_switch()
204 pwrdm->state = state; in _pwrdm_state_switch()
209 static int _pwrdm_pre_transition_cb(struct powerdomain *pwrdm, void *unused) in _pwrdm_pre_transition_cb() argument
211 pwrdm_clear_all_prev_pwrst(pwrdm); in _pwrdm_pre_transition_cb()
212 _pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW); in _pwrdm_pre_transition_cb()
216 static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused) in _pwrdm_post_transition_cb() argument
218 _pwrdm_state_switch(pwrdm, PWRDM_STATE_PREV); in _pwrdm_post_transition_cb()
236 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 clkdm_deny_idle_nolock(pwrdm->pwrdm_clkdms[0]); in _pwrdm_save_clkdm_state_and_activate()
270 static void _pwrdm_restore_clkdm_state(struct powerdomain *pwrdm, in _pwrdm_restore_clkdm_state() argument
275 clkdm_allow_idle_nolock(pwrdm->pwrdm_clkdms[0]); in _pwrdm_restore_clkdm_state()
278 if (pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE && in _pwrdm_restore_clkdm_state()
280 arch_pwrdm->pwrdm_set_lowpwrstchange(pwrdm); in _pwrdm_restore_clkdm_state()
281 pwrdm_state_switch_nolock(pwrdm); in _pwrdm_restore_clkdm_state()
390 void pwrdm_lock(struct powerdomain *pwrdm) in pwrdm_lock() argument
391 __acquires(&pwrdm->_lock) in pwrdm_lock()
393 spin_lock_irqsave(&pwrdm->_lock, pwrdm->_lock_flags); in pwrdm_lock()
402 void pwrdm_unlock(struct powerdomain *pwrdm) in pwrdm_unlock() argument
403 __releases(&pwrdm->_lock) in pwrdm_unlock()
405 spin_unlock_irqrestore(&pwrdm->_lock, pwrdm->_lock_flags); in pwrdm_unlock()
417 struct powerdomain *pwrdm; in pwrdm_lookup() local
422 pwrdm = _pwrdm_lookup(name); in pwrdm_lookup()
424 return pwrdm; in pwrdm_lookup()
437 int pwrdm_for_each(int (*fn)(struct powerdomain *pwrdm, void *user), in pwrdm_for_each() argument
465 int pwrdm_add_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm) in pwrdm_add_clkdm() argument
470 if (!pwrdm || !clkdm) in pwrdm_add_clkdm()
474 pwrdm->name, clkdm->name); in pwrdm_add_clkdm()
477 if (!pwrdm->pwrdm_clkdms[i]) in pwrdm_add_clkdm()
480 if (pwrdm->pwrdm_clkdms[i] == clkdm) { in pwrdm_add_clkdm()
489 pwrdm->name, clkdm->name); in pwrdm_add_clkdm()
495 pwrdm->pwrdm_clkdms[i] = clkdm; in pwrdm_add_clkdm()
510 int pwrdm_get_mem_bank_count(struct powerdomain *pwrdm) in pwrdm_get_mem_bank_count() argument
512 if (!pwrdm) in pwrdm_get_mem_bank_count()
515 return pwrdm->banks; in pwrdm_get_mem_bank_count()
529 int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst) in pwrdm_set_next_pwrst() argument
533 if (!pwrdm) in pwrdm_set_next_pwrst()
536 if (!(pwrdm->pwrsts & (1 << pwrst))) in pwrdm_set_next_pwrst()
540 pwrdm->name, pwrst); in pwrdm_set_next_pwrst()
544 trace_power_domain_target_rcuidle(pwrdm->name, pwrst, in pwrdm_set_next_pwrst()
547 ret = arch_pwrdm->pwrdm_set_next_pwrst(pwrdm, pwrst); in pwrdm_set_next_pwrst()
561 int pwrdm_read_next_pwrst(struct powerdomain *pwrdm) in pwrdm_read_next_pwrst() argument
565 if (!pwrdm) in pwrdm_read_next_pwrst()
569 ret = arch_pwrdm->pwrdm_read_next_pwrst(pwrdm); in pwrdm_read_next_pwrst()
583 int pwrdm_read_pwrst(struct powerdomain *pwrdm) in pwrdm_read_pwrst() argument
587 if (!pwrdm) in pwrdm_read_pwrst()
590 if (pwrdm->pwrsts == PWRSTS_ON) in pwrdm_read_pwrst()
594 ret = arch_pwrdm->pwrdm_read_pwrst(pwrdm); in pwrdm_read_pwrst()
607 int pwrdm_read_prev_pwrst(struct powerdomain *pwrdm) in pwrdm_read_prev_pwrst() argument
611 if (!pwrdm) in pwrdm_read_prev_pwrst()
615 ret = arch_pwrdm->pwrdm_read_prev_pwrst(pwrdm); in pwrdm_read_prev_pwrst()
631 int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst) in pwrdm_set_logic_retst() argument
635 if (!pwrdm) in pwrdm_set_logic_retst()
638 if (!(pwrdm->pwrsts_logic_ret & (1 << pwrst))) in pwrdm_set_logic_retst()
642 pwrdm->name, pwrst); in pwrdm_set_logic_retst()
645 ret = arch_pwrdm->pwrdm_set_logic_retst(pwrdm, pwrst); in pwrdm_set_logic_retst()
665 int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst) in pwrdm_set_mem_onst() argument
669 if (!pwrdm) in pwrdm_set_mem_onst()
672 if (pwrdm->banks < (bank + 1)) in pwrdm_set_mem_onst()
675 if (!(pwrdm->pwrsts_mem_on[bank] & (1 << pwrst))) in pwrdm_set_mem_onst()
679 pwrdm->name, bank, pwrst); in pwrdm_set_mem_onst()
682 ret = arch_pwrdm->pwrdm_set_mem_onst(pwrdm, bank, pwrst); in pwrdm_set_mem_onst()
703 int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst) in pwrdm_set_mem_retst() argument
707 if (!pwrdm) in pwrdm_set_mem_retst()
710 if (pwrdm->banks < (bank + 1)) in pwrdm_set_mem_retst()
713 if (!(pwrdm->pwrsts_mem_ret[bank] & (1 << pwrst))) in pwrdm_set_mem_retst()
717 pwrdm->name, bank, pwrst); in pwrdm_set_mem_retst()
720 ret = arch_pwrdm->pwrdm_set_mem_retst(pwrdm, bank, pwrst); in pwrdm_set_mem_retst()
734 int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm) in pwrdm_read_logic_pwrst() argument
738 if (!pwrdm) in pwrdm_read_logic_pwrst()
742 ret = arch_pwrdm->pwrdm_read_logic_pwrst(pwrdm); in pwrdm_read_logic_pwrst()
755 int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm) in pwrdm_read_prev_logic_pwrst() argument
759 if (!pwrdm) in pwrdm_read_prev_logic_pwrst()
763 ret = arch_pwrdm->pwrdm_read_prev_logic_pwrst(pwrdm); in pwrdm_read_prev_logic_pwrst()
776 int pwrdm_read_logic_retst(struct powerdomain *pwrdm) in pwrdm_read_logic_retst() argument
780 if (!pwrdm) in pwrdm_read_logic_retst()
784 ret = arch_pwrdm->pwrdm_read_logic_retst(pwrdm); in pwrdm_read_logic_retst()
799 int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank) in pwrdm_read_mem_pwrst() argument
803 if (!pwrdm) in pwrdm_read_mem_pwrst()
806 if (pwrdm->banks < (bank + 1)) in pwrdm_read_mem_pwrst()
809 if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK) in pwrdm_read_mem_pwrst()
813 ret = arch_pwrdm->pwrdm_read_mem_pwrst(pwrdm, bank); in pwrdm_read_mem_pwrst()
829 int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank) in pwrdm_read_prev_mem_pwrst() argument
833 if (!pwrdm) in pwrdm_read_prev_mem_pwrst()
836 if (pwrdm->banks < (bank + 1)) in pwrdm_read_prev_mem_pwrst()
839 if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK) in pwrdm_read_prev_mem_pwrst()
843 ret = arch_pwrdm->pwrdm_read_prev_mem_pwrst(pwrdm, bank); in pwrdm_read_prev_mem_pwrst()
858 int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank) in pwrdm_read_mem_retst() argument
862 if (!pwrdm) in pwrdm_read_mem_retst()
865 if (pwrdm->banks < (bank + 1)) in pwrdm_read_mem_retst()
869 ret = arch_pwrdm->pwrdm_read_mem_retst(pwrdm, bank); in pwrdm_read_mem_retst()
883 int pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm) in pwrdm_clear_all_prev_pwrst() argument
887 if (!pwrdm) in pwrdm_clear_all_prev_pwrst()
896 pwrdm->name); in pwrdm_clear_all_prev_pwrst()
899 ret = arch_pwrdm->pwrdm_clear_all_prev_pwrst(pwrdm); in pwrdm_clear_all_prev_pwrst()
915 int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm) in pwrdm_enable_hdwr_sar() argument
919 if (!pwrdm) in pwrdm_enable_hdwr_sar()
922 if (!(pwrdm->flags & PWRDM_HAS_HDWR_SAR)) in pwrdm_enable_hdwr_sar()
925 pr_debug("powerdomain: %s: setting SAVEANDRESTORE bit\n", pwrdm->name); in pwrdm_enable_hdwr_sar()
928 ret = arch_pwrdm->pwrdm_enable_hdwr_sar(pwrdm); in pwrdm_enable_hdwr_sar()
944 int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm) in pwrdm_disable_hdwr_sar() argument
948 if (!pwrdm) in pwrdm_disable_hdwr_sar()
951 if (!(pwrdm->flags & PWRDM_HAS_HDWR_SAR)) in pwrdm_disable_hdwr_sar()
954 pr_debug("powerdomain: %s: clearing SAVEANDRESTORE bit\n", pwrdm->name); in pwrdm_disable_hdwr_sar()
957 ret = arch_pwrdm->pwrdm_disable_hdwr_sar(pwrdm); in pwrdm_disable_hdwr_sar()
969 bool pwrdm_has_hdwr_sar(struct powerdomain *pwrdm) in pwrdm_has_hdwr_sar() argument
971 return (pwrdm && pwrdm->flags & PWRDM_HAS_HDWR_SAR) ? 1 : 0; in pwrdm_has_hdwr_sar()
974 int pwrdm_state_switch_nolock(struct powerdomain *pwrdm) in pwrdm_state_switch_nolock() argument
978 if (!pwrdm || !arch_pwrdm) in pwrdm_state_switch_nolock()
981 ret = arch_pwrdm->pwrdm_wait_transition(pwrdm); in pwrdm_state_switch_nolock()
983 ret = _pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW); in pwrdm_state_switch_nolock()
988 int __deprecated pwrdm_state_switch(struct powerdomain *pwrdm) in pwrdm_state_switch() argument
992 pwrdm_lock(pwrdm); in pwrdm_state_switch()
993 ret = pwrdm_state_switch_nolock(pwrdm); in pwrdm_state_switch()
994 pwrdm_unlock(pwrdm); in pwrdm_state_switch()
999 int pwrdm_pre_transition(struct powerdomain *pwrdm) in pwrdm_pre_transition() argument
1001 if (pwrdm) in pwrdm_pre_transition()
1002 _pwrdm_pre_transition_cb(pwrdm, NULL); in pwrdm_pre_transition()
1009 int pwrdm_post_transition(struct powerdomain *pwrdm) in pwrdm_post_transition() argument
1011 if (pwrdm) in pwrdm_post_transition()
1012 _pwrdm_post_transition_cb(pwrdm, NULL); in pwrdm_post_transition()
1042 u8 pwrdm_get_valid_lp_state(struct powerdomain *pwrdm, in pwrdm_get_valid_lp_state() argument
1045 u8 pwrdm_states = is_logic_state ? pwrdm->pwrsts_logic_ret : in pwrdm_get_valid_lp_state()
1046 pwrdm->pwrsts; in pwrdm_get_valid_lp_state()
1083 pwrdm->name); in pwrdm_get_valid_lp_state()
1108 int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst) in omap_set_pwrdm_state() argument
1114 if (!pwrdm || IS_ERR(pwrdm)) in omap_set_pwrdm_state()
1117 while (!(pwrdm->pwrsts & (1 << pwrst))) { in omap_set_pwrdm_state()
1123 pwrdm_lock(pwrdm); in omap_set_pwrdm_state()
1125 curr_pwrst = pwrdm_read_pwrst(pwrdm); in omap_set_pwrdm_state()
1131 next_pwrst = pwrdm_read_next_pwrst(pwrdm); in omap_set_pwrdm_state()
1135 sleep_switch = _pwrdm_save_clkdm_state_and_activate(pwrdm, curr_pwrst, in omap_set_pwrdm_state()
1138 ret = pwrdm_set_next_pwrst(pwrdm, pwrst); in omap_set_pwrdm_state()
1141 __func__, pwrdm->name); in omap_set_pwrdm_state()
1143 _pwrdm_restore_clkdm_state(pwrdm, sleep_switch); in omap_set_pwrdm_state()
1146 pwrdm_unlock(pwrdm); in omap_set_pwrdm_state()
1159 int pwrdm_get_context_loss_count(struct powerdomain *pwrdm) in pwrdm_get_context_loss_count() argument
1163 if (!pwrdm) { in pwrdm_get_context_loss_count()
1168 count = pwrdm->state_counter[PWRDM_POWER_OFF]; in pwrdm_get_context_loss_count()
1169 count += pwrdm->ret_logic_off_counter; in pwrdm_get_context_loss_count()
1171 for (i = 0; i < pwrdm->banks; i++) in pwrdm_get_context_loss_count()
1172 count += pwrdm->ret_mem_off_counter[i]; in pwrdm_get_context_loss_count()
1181 pwrdm->name, count); in pwrdm_get_context_loss_count()
1198 bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm) in pwrdm_can_ever_lose_context() argument
1202 if (!pwrdm) { in pwrdm_can_ever_lose_context()
1208 if (pwrdm->pwrsts & PWRSTS_OFF) in pwrdm_can_ever_lose_context()
1211 if (pwrdm->pwrsts & PWRSTS_RET) { in pwrdm_can_ever_lose_context()
1212 if (pwrdm->pwrsts_logic_ret & PWRSTS_OFF) in pwrdm_can_ever_lose_context()
1215 for (i = 0; i < pwrdm->banks; i++) in pwrdm_can_ever_lose_context()
1216 if (pwrdm->pwrsts_mem_ret[i] & PWRSTS_OFF) in pwrdm_can_ever_lose_context()
1220 for (i = 0; i < pwrdm->banks; i++) in pwrdm_can_ever_lose_context()
1221 if (pwrdm->pwrsts_mem_on[i] & PWRSTS_OFF) in pwrdm_can_ever_lose_context()
1233 static int pwrdm_save_context(struct powerdomain *pwrdm, void *unused) in pwrdm_save_context() argument
1236 arch_pwrdm->pwrdm_save_context(pwrdm); in pwrdm_save_context()
1246 static int pwrdm_restore_context(struct powerdomain *pwrdm, void *unused) in pwrdm_restore_context() argument
1249 arch_pwrdm->pwrdm_restore_context(pwrdm); in pwrdm_restore_context()
1253 static int pwrdm_lost_power(struct powerdomain *pwrdm, void *unused) in pwrdm_lost_power() argument
1262 state = pwrdm_read_pwrst(pwrdm); in pwrdm_lost_power()
1264 pwrdm->state_counter[state]++; in pwrdm_lost_power()
1265 pwrdm->state_counter[PWRDM_POWER_OFF]++; in pwrdm_lost_power()
1267 pwrdm->state = state; in pwrdm_lost_power()