int psci_cpu_off(void) { int rc; unsigned long mpidr; int target_afflvl = get_max_afflvl(); mpidr = read_mpidr(); /* * Traverse from the highest to the lowest affinity level. When the * lowest affinity level is hit, all the locks are acquired. State * management is done immediately followed by cpu, cluster ... * ..target_afflvl specific actions as this function unwinds back. */ rc = psci_afflvl_off(mpidr, target_afflvl, MPIDR_AFFLVL0); if (rc != PSCI_E_SUCCESS) { assert(rc == PSCI_E_DENIED); } return rc; }
int psci_cpu_off(void) { int rc; unsigned long mpidr; int target_afflvl = get_max_afflvl(); mpidr = read_mpidr(); /* * Traverse from the highest to the lowest affinity level. When the * lowest affinity level is hit, all the locks are acquired. State * management is done immediately followed by cpu, cluster ... * ..target_afflvl specific actions as this function unwinds back. */ rc = psci_afflvl_off(mpidr, MPIDR_AFFLVL0, target_afflvl); /* * The only error cpu_off can return is E_DENIED. So check if that's * indeed the case. */ assert (rc == PSCI_E_SUCCESS || rc == PSCI_E_DENIED); return rc; }