Commit 9e78cb18 authored by Jan Kiszka's avatar Jan Kiszka
Browse files

rpi3/4: Add support for offlining CPUs



The hooks were populated but the power down left the CPU in limbo-land.
What we need to do - until there is a way to actually power off - is to
turn off the MMU and enter the spinning loop as if we were cold-booted.
This allows the on-call to pick up the CPU again.
Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
Change-Id: Iefc7a58424e3578ad3dd355a7bd6eaba4b412699
parent 87b582ef
...@@ -123,6 +123,15 @@ static void rpi3_pwr_domain_off(const psci_power_state_t *target_state) ...@@ -123,6 +123,15 @@ static void rpi3_pwr_domain_off(const psci_power_state_t *target_state)
#endif #endif
} }
void __dead2 plat_secondary_cold_boot_setup(void);
static void __dead2
rpi3_pwr_domain_pwr_down_wfi(const psci_power_state_t *target_state)
{
disable_mmu_el3();
plat_secondary_cold_boot_setup();
}
/******************************************************************************* /*******************************************************************************
* Platform handler called when a power domain is about to be turned on. The * Platform handler called when a power domain is about to be turned on. The
* mpidr determines the CPU to be turned on. * mpidr determines the CPU to be turned on.
...@@ -224,6 +233,7 @@ static void __dead2 rpi3_system_off(void) ...@@ -224,6 +233,7 @@ static void __dead2 rpi3_system_off(void)
static const plat_psci_ops_t plat_rpi3_psci_pm_ops = { static const plat_psci_ops_t plat_rpi3_psci_pm_ops = {
.cpu_standby = rpi3_cpu_standby, .cpu_standby = rpi3_cpu_standby,
.pwr_domain_off = rpi3_pwr_domain_off, .pwr_domain_off = rpi3_pwr_domain_off,
.pwr_domain_pwr_down_wfi = rpi3_pwr_domain_pwr_down_wfi,
.pwr_domain_on = rpi3_pwr_domain_on, .pwr_domain_on = rpi3_pwr_domain_on,
.pwr_domain_on_finish = rpi3_pwr_domain_on_finish, .pwr_domain_on_finish = rpi3_pwr_domain_on_finish,
.system_off = rpi3_system_off, .system_off = rpi3_system_off,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment