[PATCH linux-next tag: next-20210322] ARM: aspeed: Add CPU hotplug callbacks for kexec support

Bruce Mitchell bruce.mitchell at linux.vnet.ibm.com
Tue Mar 23 02:57:20 AEDT 2021


These callbacks are required for kexec to function. The AST2600 does not
expose any controls for powering down it's CPU cores, so we borrow the
approach taken from socfpga and wait in the idle loop.

Author: Joel Stanley <joel at jms.id.au>

Signed-off-by: Bruce Mitchell <bruce.mitchell at linux.vnet.ibm.com>
---
 arch/arm/mach-aspeed/platsmp.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/arch/arm/mach-aspeed/platsmp.c b/arch/arm/mach-aspeed/platsmp.c
index 2324becf7991..1ae3ff5a9701 100644
--- a/arch/arm/mach-aspeed/platsmp.c
+++ b/arch/arm/mach-aspeed/platsmp.c
@@ -7,6 +7,8 @@
 #include <linux/of.h>
 #include <linux/smp.h>
 
+#include <asm/proc-fns.h>
+
 #define BOOT_ADDR	0x00
 #define BOOT_SIG	0x04
 
@@ -53,9 +55,27 @@ static void __init aspeed_g6_smp_prepare_cpus(unsigned int max_cpus)
 	iounmap(base);
 }
 
+#ifdef CONFIG_HOTPLUG_CPU
+static void aspeed_g6_cpu_die(unsigned int cpu)
+{
+        /* Do WFI. If we wake up early, go back into WFI */
+        while (1)
+                cpu_do_idle();
+}
+
+static int aspeed_g6_cpu_kill(unsigned int cpu)
+{
+        return 1;
+}
+#endif
+
 static const struct smp_operations aspeed_smp_ops __initconst = {
 	.smp_prepare_cpus	= aspeed_g6_smp_prepare_cpus,
 	.smp_boot_secondary	= aspeed_g6_boot_secondary,
+#ifdef CONFIG_HOTPLUG_CPU
+	.cpu_die		= aspeed_g6_cpu_die,
+	.cpu_kill		= aspeed_g6_cpu_kill,
+#endif
 };
 
 CPU_METHOD_OF_DECLARE(aspeed_smp, "aspeed,ast2600-smp", &aspeed_smp_ops);
-- 
2.25.1



More information about the openbmc mailing list