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:
parent
8fdbe8728d
commit
64ad843e0d
5 changed files with 21 additions and 3 deletions
|
@ -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
|
||||
********************************************************************/
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue