zynqmp: Add simple implementation of zynqmp_validate_power_state()
authorStefan Krsmanovic <[email protected]>
Mon, 9 May 2016 16:00:47 +0000 (18:00 +0200)
committerSoren Brinkmann <[email protected]>
Tue, 13 Sep 2016 16:19:02 +0000 (09:19 -0700)
Implementation is based on arm_validate_power_state().
This function is called during CPU_SUSPEND PSCI call to validate
power_state parameter. If state is valid this function populate it
in req_state array as power domain level specific local state.
ATF platform migration guide chapter 2.2 defines this function as
mandatory for PSCIv1.0 CPU_SUSPEND support.

Signed-off-by: Stefan Krsmanovic <[email protected]>
plat/xilinx/zynqmp/plat_psci.c

index 56eb742acadbfdfa8afcfcf24271489ac84f7dcb..f0e260dea927553541b065f4433eb0241a0b814c 100644 (file)
@@ -308,7 +308,20 @@ int zynqmp_validate_power_state(unsigned int power_state,
 {
        VERBOSE("%s: power_state: 0x%x\n", __func__, power_state);
 
-       /* FIXME: populate req_state */
+       int pstate = psci_get_pstate_type(power_state);
+
+       assert(req_state);
+
+       /* Sanity check the requested state */
+       if (pstate == PSTATE_TYPE_STANDBY)
+               req_state->pwr_domain_state[MPIDR_AFFLVL0] = PLAT_MAX_RET_STATE;
+       else
+               req_state->pwr_domain_state[MPIDR_AFFLVL0] = PLAT_MAX_OFF_STATE;
+
+       /* We expect the 'state id' to be zero */
+       if (psci_get_pstate_id(power_state))
+               return PSCI_E_INVALID_PARAMS;
+
        return PSCI_E_SUCCESS;
 }