|  | @@ -962,3 +962,58 @@ int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
 | 
	
		
			
				|  |  |  int pwrdm_wait_transition(struct powerdomain *pwrdm)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	int ret = -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pwrdm)
 | 
	
		
			
				|  |  | +		return -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (arch_pwrdm && arch_pwrdm->pwrdm_wait_transition)
 | 
	
		
			
				|  |  | +		ret = arch_pwrdm->pwrdm_wait_transition(pwrdm);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return ret;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +int pwrdm_state_switch(struct powerdomain *pwrdm)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int ret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	ret = pwrdm_wait_transition(pwrdm);
 | 
	
		
			
				|  |  | +	if (!ret)
 | 
	
		
			
				|  |  | +		ret = _pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return ret;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +int pwrdm_pre_transition(struct powerdomain *pwrdm)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	if (pwrdm)
 | 
	
		
			
				|  |  | +		_pwrdm_pre_transition_cb(pwrdm, NULL);
 | 
	
		
			
				|  |  | +	else
 | 
	
		
			
				|  |  | +		pwrdm_for_each(_pwrdm_pre_transition_cb, NULL);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +int pwrdm_post_transition(struct powerdomain *pwrdm)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	if (pwrdm)
 | 
	
		
			
				|  |  | +		_pwrdm_post_transition_cb(pwrdm, NULL);
 | 
	
		
			
				|  |  | +	else
 | 
	
		
			
				|  |  | +		pwrdm_for_each(_pwrdm_post_transition_cb, NULL);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * pwrdm_get_context_loss_count - get powerdomain's context loss count
 | 
	
		
			
				|  |  | + * @pwrdm: struct powerdomain * to wait for
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Context loss count is the sum of powerdomain off-mode counter, the
 | 
	
		
			
				|  |  | + * logic off counter and the per-bank memory off counter.  Returns negative
 | 
	
		
			
				|  |  | + * (and WARNs) upon error, otherwise, returns the context loss count.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +int pwrdm_get_context_loss_count(struct powerdomain *pwrdm)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int i, count;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pwrdm) {
 | 
	
		
			
				|  |  | +		WARN(1, "powerdomain: %s: pwrdm is null\n", __func__);
 |