OMAP2/3 PM: Adding powerdomain APIs for reading the next logic and mem state
This patch adds APIs pwrdm_read_logic_retst and pwrdm_read_mem_retst for reading the next programmed logic and memory state a powerdomain is to hit in event of the next power domain state being retention. These are needed for OSWR support. Signed-off-by: Thara Gopinath <thara@ti.com> Signed-off-by: Paul Walmsley <paul@pwsan.com>
This commit is contained in:
parent
b024b542c3
commit
1e3d0d2ba9
2 changed files with 75 additions and 0 deletions
|
@ -678,6 +678,29 @@ int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
|
|||
OMAP3430_LASTLOGICSTATEENTERED);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* The register bit names below may not correspond to the
|
||||
* actual names of the bits in each powerdomain's register,
|
||||
* but the type of value returned is the same for each
|
||||
* powerdomain.
|
||||
*/
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs, pwrstctrl_reg_offs,
|
||||
OMAP3430_LOGICSTATEST);
|
||||
}
|
||||
|
||||
/**
|
||||
* pwrdm_read_mem_pwrst - get current memory bank power state
|
||||
* @pwrdm: struct powerdomain * to get current memory bank power state
|
||||
|
@ -784,6 +807,56 @@ int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
|
|||
OMAP3430_PM_PREPWSTST, m);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
u32 m;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
if (pwrdm->banks < (bank + 1))
|
||||
return -EEXIST;
|
||||
|
||||
/*
|
||||
* The register bit names below may not correspond to the
|
||||
* actual names of the bits in each powerdomain's register,
|
||||
* but the type of value returned is the same for each
|
||||
* powerdomain.
|
||||
*/
|
||||
switch (bank) {
|
||||
case 0:
|
||||
m = OMAP_MEM0_RETSTATE_MASK;
|
||||
break;
|
||||
case 1:
|
||||
m = OMAP_MEM1_RETSTATE_MASK;
|
||||
break;
|
||||
case 2:
|
||||
m = OMAP_MEM2_RETSTATE_MASK;
|
||||
break;
|
||||
case 3:
|
||||
m = OMAP_MEM3_RETSTATE_MASK;
|
||||
break;
|
||||
case 4:
|
||||
m = OMAP_MEM4_RETSTATE_MASK;
|
||||
default:
|
||||
WARN_ON(1); /* should never happen */
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
pwrstctrl_reg_offs, m);
|
||||
}
|
||||
|
||||
/**
|
||||
* pwrdm_clear_all_prev_pwrst - clear previous powerstate register for a pwrdm
|
||||
* @pwrdm: struct powerdomain * to clear
|
||||
|
|
|
@ -137,8 +137,10 @@ int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst);
|
|||
|
||||
int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm);
|
||||
int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm);
|
||||
int pwrdm_read_logic_retst(struct powerdomain *pwrdm);
|
||||
int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank);
|
||||
int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank);
|
||||
int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank);
|
||||
|
||||
int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm);
|
||||
int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm);
|
||||
|
|
Loading…
Reference in a new issue