/** * PmSramFsmHandler() - Sram FSM handler, performs transition actions * @slave Slave whose state should be changed * @nextState State the slave should enter * * @return Status of performing transition action */ static int PmSramFsmHandler(PmSlave* const slave, const PmStateId nextState) { int status = XST_PM_INTERNAL; PmSlaveSram* sram = (PmSlaveSram*)slave->node.derived; switch (slave->node.currState) { case PM_SRAM_STATE_ON: if (PM_SRAM_STATE_RET == nextState) { /* ON -> RET */ XPfw_RMW32(sram->retCtrlAddr, sram->retCtrlMask, sram->retCtrlMask); status = sram->PwrDn(); } else if (PM_SRAM_STATE_OFF == nextState) { /* ON -> OFF*/ XPfw_RMW32(sram->retCtrlAddr, sram->retCtrlMask, ~sram->retCtrlMask); status = sram->PwrDn(); } else { status = XST_NO_FEATURE; } break; case PM_SRAM_STATE_RET: if (PM_SRAM_STATE_ON == nextState) { /* RET -> ON */ status = sram->PwrUp(); } else if (PM_SRAM_STATE_OFF == nextState) { /* RET -> OFF */ XPfw_RMW32(sram->retCtrlAddr, sram->retCtrlMask, ~sram->retCtrlMask); status = sram->PwrDn(); } else { status = XST_NO_FEATURE; } break; case PM_SRAM_STATE_OFF: if (PM_SRAM_STATE_ON == nextState) { /* OFF -> ON */ status = sram->PwrUp(); } else { status = XST_NO_FEATURE; } break; default: status = XST_PM_INTERNAL; PmDbg("ERROR: Unknown SRAM state #%d\n", slave->node.currState); break; } if (XST_SUCCESS == status) { PmNodeUpdateCurrState(&slave->node, nextState); } return status; }
/** * PmEnableAllMasterIpis() - Iterate through all masters and enable their IPI * interrupt */ void PmEnableAllMasterIpis(void) { u8 i; for (i = 0U; i < ARRAY_SIZE(pmAllMasters); i++) { XPfw_RMW32(IPI_PMU_0_IER, pmAllMasters[i]->ipiMask, pmAllMasters[i]->ipiMask); } }