arm64: add PSCI CPU_OFF-based hotplug support
This patch adds support for using PSCI CPU_OFF calls for CPU hotplug. With this code it is possible to hot unplug CPUs with "psci" as their boot-method, as long as there's an appropriate cpu_off function id specified in the psci node. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
9327e2c6bb
commit
831ccf79b4
1 changed files with 30 additions and 0 deletions
|
@ -256,11 +256,41 @@ static int cpu_psci_cpu_boot(unsigned int cpu)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
|
static int cpu_psci_cpu_disable(unsigned int cpu)
|
||||||
|
{
|
||||||
|
/* Fail early if we don't have CPU_OFF support */
|
||||||
|
if (!psci_ops.cpu_off)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void cpu_psci_cpu_die(unsigned int cpu)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
/*
|
||||||
|
* There are no known implementations of PSCI actually using the
|
||||||
|
* power state field, pass a sensible default for now.
|
||||||
|
*/
|
||||||
|
struct psci_power_state state = {
|
||||||
|
.type = PSCI_POWER_STATE_TYPE_POWER_DOWN,
|
||||||
|
};
|
||||||
|
|
||||||
|
ret = psci_ops.cpu_off(state);
|
||||||
|
|
||||||
|
pr_crit("psci: unable to power off CPU%u (%d)\n", cpu, ret);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
const struct cpu_operations cpu_psci_ops = {
|
const struct cpu_operations cpu_psci_ops = {
|
||||||
.name = "psci",
|
.name = "psci",
|
||||||
.cpu_init = cpu_psci_cpu_init,
|
.cpu_init = cpu_psci_cpu_init,
|
||||||
.cpu_prepare = cpu_psci_cpu_prepare,
|
.cpu_prepare = cpu_psci_cpu_prepare,
|
||||||
.cpu_boot = cpu_psci_cpu_boot,
|
.cpu_boot = cpu_psci_cpu_boot,
|
||||||
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
|
.cpu_disable = cpu_psci_cpu_disable,
|
||||||
|
.cpu_die = cpu_psci_cpu_die,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue