Пример #1
0
/**
 * PmGppFsmHandler() - FSM handler of a GPP slave
 * @slave       Slave whose state should be changed
 * @nextState   State the slave should enter
 *
 * @return      Status of performing transition action
 */
static int PmGppFsmHandler(PmSlave* const slave, const PmStateId nextState)
{
    int status = XST_PM_INTERNAL;
    PmSlaveGpp* gpp = (PmSlaveGpp*)slave->node.derived;

    switch (slave->node.currState) {
    case PM_GPP_SLAVE_STATE_ON:
        if (PM_GPP_SLAVE_STATE_OFF == nextState) {
            /* ON -> OFF*/
            status = gpp->PwrDn();
        } else {
            status = XST_NO_FEATURE;
        }
        break;
    case PM_GPP_SLAVE_STATE_OFF:
        if (PM_GPP_SLAVE_STATE_ON == nextState) {
            /* OFF -> ON */
            status = gpp->PwrUp();
        } else {
            status = XST_NO_FEATURE;
        }
        break;
    default:
        PmDbg("ERROR: Unknown state #%d\n", slave->node.currState);
        break;
    }
    if (XST_SUCCESS == status) {
        PmNodeUpdateCurrState(&slave->node, nextState);
    }

    return status;
}
Пример #2
0
/**
 * 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;
}