|  | @@ -635,3 +635,188 @@ int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * pwrdm_set_mem_retst - set memory power state while powerdomain in RET
 | 
	
		
			
				|  |  | + * @pwrdm: struct powerdomain * to set
 | 
	
		
			
				|  |  | + * @bank: memory bank number to set (0-3)
 | 
	
		
			
				|  |  | + * @pwrst: one of the PWRDM_POWER_* macros
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Set the next power state @pwrst that memory bank @bank of the
 | 
	
		
			
				|  |  | + * powerdomain @pwrdm will enter when the powerdomain enters the
 | 
	
		
			
				|  |  | + * RETENTION state.  Bank will be a number from 0 to 3, and represents
 | 
	
		
			
				|  |  | + * different types of memory, depending on the powerdomain.  @pwrst
 | 
	
		
			
				|  |  | + * will be either RETENTION or OFF, if supported.  Returns -EINVAL if
 | 
	
		
			
				|  |  | + * the powerdomain pointer is null or the target power state is not
 | 
	
		
			
				|  |  | + * not supported for this memory bank, -EEXIST if the target memory
 | 
	
		
			
				|  |  | + * bank does not exist or is not controllable, or returns 0 upon
 | 
	
		
			
				|  |  | + * success.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int ret = -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pwrdm)
 | 
	
		
			
				|  |  | +		return -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (pwrdm->banks < (bank + 1))
 | 
	
		
			
				|  |  | +		return -EEXIST;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!(pwrdm->pwrsts_mem_ret[bank] & (1 << pwrst)))
 | 
	
		
			
				|  |  | +		return -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	pr_debug("powerdomain: %s: setting next memory powerstate for bank %0x while pwrdm-RET to %0x\n",
 | 
	
		
			
				|  |  | +		 pwrdm->name, bank, pwrst);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (arch_pwrdm && arch_pwrdm->pwrdm_set_mem_retst)
 | 
	
		
			
				|  |  | +		ret = arch_pwrdm->pwrdm_set_mem_retst(pwrdm, bank, pwrst);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return ret;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * pwrdm_read_logic_pwrst - get current powerdomain logic retention power state
 | 
	
		
			
				|  |  | + * @pwrdm: struct powerdomain * to get current logic retention power state
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Return the power state that the logic portion of powerdomain @pwrdm
 | 
	
		
			
				|  |  | + * will enter when the powerdomain enters retention.  Returns -EINVAL
 | 
	
		
			
				|  |  | + * if the powerdomain pointer is null or returns the logic retention
 | 
	
		
			
				|  |  | + * power state upon success.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int ret = -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pwrdm)
 | 
	
		
			
				|  |  | +		return -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (arch_pwrdm && arch_pwrdm->pwrdm_read_logic_pwrst)
 | 
	
		
			
				|  |  | +		ret = arch_pwrdm->pwrdm_read_logic_pwrst(pwrdm);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return ret;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * pwrdm_read_prev_logic_pwrst - get previous powerdomain logic power state
 | 
	
		
			
				|  |  | + * @pwrdm: struct powerdomain * to get previous logic power state
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Return the powerdomain @pwrdm's previous logic power state.  Returns
 | 
	
		
			
				|  |  | + * -EINVAL if the powerdomain pointer is null or returns the previous
 | 
	
		
			
				|  |  | + * logic power state upon success.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int ret = -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pwrdm)
 | 
	
		
			
				|  |  | +		return -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_logic_pwrst)
 | 
	
		
			
				|  |  | +		ret = arch_pwrdm->pwrdm_read_prev_logic_pwrst(pwrdm);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return ret;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * pwrdm_read_logic_retst - get next powerdomain logic power state
 | 
	
		
			
				|  |  | + * @pwrdm: struct powerdomain * to get next logic power state
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Return the powerdomain pwrdm's logic power state.  Returns -EINVAL
 | 
	
		
			
				|  |  | + * if the powerdomain pointer is null or returns the next logic
 | 
	
		
			
				|  |  | + * power state upon success.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +int pwrdm_read_logic_retst(struct powerdomain *pwrdm)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int ret = -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pwrdm)
 | 
	
		
			
				|  |  | +		return -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (arch_pwrdm && arch_pwrdm->pwrdm_read_logic_retst)
 | 
	
		
			
				|  |  | +		ret = arch_pwrdm->pwrdm_read_logic_retst(pwrdm);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return ret;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * pwrdm_read_mem_pwrst - get current memory bank power state
 | 
	
		
			
				|  |  | + * @pwrdm: struct powerdomain * to get current memory bank power state
 | 
	
		
			
				|  |  | + * @bank: memory bank number (0-3)
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Return the powerdomain @pwrdm's current memory power state for bank
 | 
	
		
			
				|  |  | + * @bank.  Returns -EINVAL if the powerdomain pointer is null, -EEXIST if
 | 
	
		
			
				|  |  | + * the target memory bank does not exist or is not controllable, or
 | 
	
		
			
				|  |  | + * returns the current memory power state upon success.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int ret = -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pwrdm)
 | 
	
		
			
				|  |  | +		return ret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (pwrdm->banks < (bank + 1))
 | 
	
		
			
				|  |  | +		return ret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK)
 | 
	
		
			
				|  |  | +		bank = 1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (arch_pwrdm && arch_pwrdm->pwrdm_read_mem_pwrst)
 | 
	
		
			
				|  |  | +		ret = arch_pwrdm->pwrdm_read_mem_pwrst(pwrdm, bank);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return ret;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * pwrdm_read_prev_mem_pwrst - get previous memory bank power state
 | 
	
		
			
				|  |  | + * @pwrdm: struct powerdomain * to get previous memory bank power state
 | 
	
		
			
				|  |  | + * @bank: memory bank number (0-3)
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Return the powerdomain @pwrdm's previous memory power state for
 | 
	
		
			
				|  |  | + * bank @bank.  Returns -EINVAL if the powerdomain pointer is null,
 | 
	
		
			
				|  |  | + * -EEXIST if the target memory bank does not exist or is not
 | 
	
		
			
				|  |  | + * controllable, or returns the previous memory power state upon
 | 
	
		
			
				|  |  | + * success.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int ret = -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pwrdm)
 | 
	
		
			
				|  |  | +		return ret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (pwrdm->banks < (bank + 1))
 | 
	
		
			
				|  |  | +		return ret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK)
 | 
	
		
			
				|  |  | +		bank = 1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_mem_pwrst)
 | 
	
		
			
				|  |  | +		ret = arch_pwrdm->pwrdm_read_prev_mem_pwrst(pwrdm, bank);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return ret;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * pwrdm_read_mem_retst - get next memory bank power state
 | 
	
		
			
				|  |  | + * @pwrdm: struct powerdomain * to get mext memory bank power state
 | 
	
		
			
				|  |  | + * @bank: memory bank number (0-3)
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Return the powerdomain pwrdm's next memory power state for bank
 | 
	
		
			
				|  |  | + * x.  Returns -EINVAL if the powerdomain pointer is null, -EEXIST if
 | 
	
		
			
				|  |  | + * the target memory bank does not exist or is not controllable, or
 | 
	
		
			
				|  |  | + * returns the next memory power state upon success.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int ret = -EINVAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pwrdm)
 | 
	
		
			
				|  |  | +		return ret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (pwrdm->banks < (bank + 1))
 | 
	
		
			
				|  |  | +		return ret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (arch_pwrdm && arch_pwrdm->pwrdm_read_mem_retst)
 | 
	
		
			
				|  |  | +		ret = arch_pwrdm->pwrdm_read_mem_retst(pwrdm, bank);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return ret;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 |