PMUFW: PM: slave: Power up power parent before entering state

-Added PM_CAP_POWER as generic capability (defined in pm_defs).
-Slaves' FSMs should define PM_CAP_POWER capability in states which
 require power parent to be ON before the state is entered. This
 capability has no effect if slave node does not have power parent
-Powering up parent of a slave is done automatically by the
 framework before the FSM of a slave is triggered to change the
 state (slave's FSM should assume all prerequisites regarding power
 are configured before FSM is triggered)
-Added PM_CAP_POWER capability in ON state of standard fsm (used for
 SATA)

Signed-off-by: Mirela Simonovic <mirela.simonovic@aggios.com>
Acked-by: Jyotheeswar Reddy Mutthareddyvari <jyothee@xilinx.com>
This commit is contained in:
Mirela Simonovic 2015-05-31 21:13:53 -07:00 committed by Nava kishore Manne
parent 8fdbe8728d
commit 64ad843e0d
5 changed files with 21 additions and 3 deletions

View file

@ -114,6 +114,9 @@ typedef u32 (*const PmTranHandler)(void);
#define ENABLE_WAKE(mask) XPfw_RMW32(PMU_LOCAL_GPI1_ENABLE, mask, mask);
#define DISABLE_WAKE(mask) XPfw_RMW32(PMU_LOCAL_GPI1_ENABLE, mask, ~(mask));
/* PMU internal capabilities used in definition of slaves' states */
#define PM_CAP_POWER 0x8U
/*********************************************************************
* Function declarations
********************************************************************/

View file

@ -49,7 +49,10 @@
#define PM_VERSION ((PM_VERSION_MAJOR << 16) | PM_VERSION_MINOR)
/* Capabilities common for all slave nodes */
/*
* Capabilities common for all slave nodes (common capabilities should take
* lower 16 bits, specific capabilities of each slave take higher 16 bits)
*/
#define PM_CAP_ACCESS 0x1U
#define PM_CAP_CONTEXT 0x2U
#define PM_CAP_WAKEUP 0x4U

View file

@ -83,7 +83,8 @@ PmSlaveTtc pmSlaveTtc0_g = {
*/
static const u32 pmStdStates[] = {
[PM_STD_SLAVE_STATE_OFF] = 0U,
[PM_STD_SLAVE_STATE_ON] = PM_CAP_WAKEUP | PM_CAP_ACCESS | PM_CAP_CONTEXT,
[PM_STD_SLAVE_STATE_ON] = PM_CAP_WAKEUP | PM_CAP_ACCESS |
PM_CAP_CONTEXT | PM_CAP_POWER,
};
/* Standard slave transitions (from which to which state Std slave transits) */

View file

@ -191,6 +191,16 @@ static int PmSlaveChangeState(PmSlave* const slave, const PmStateId state)
continue;
}
if ((0U != (slave->slvFsm->states[state] & PM_CAP_POWER)) &&
(NULL != slave->node.parent) &&
(true == IS_OFF(&slave->node.parent->node))) {
/* Next state requires powering up power parent */
status = PmTriggerPowerUp(slave->node.parent);
if (XST_SUCCESS != status) {
goto done;
}
}
if (NULL != slave->slvFsm->enterState) {
/* Execute transition action of slave's FSM */
status = slave->slvFsm->enterState(slave, state);
@ -213,6 +223,7 @@ static int PmSlaveChangeState(PmSlave* const slave, const PmStateId state)
}
#endif
done:
return status;
}

View file

@ -1,4 +1,4 @@
#ifndef ZYNQMP_XPFW_VERSION__H_
#define ZYNQMP_XPFW_VERSION__H_
#define ZYNQMP_XPFW_VERSION "2015.1-swbeta2-37-g79629747082f"
#define ZYNQMP_XPFW_VERSION "2015.1-swbeta2-39-g8cd4c95b44ef"
#endif