[PATCHv3] ARM: omap2+: Revert omap-smp.c changes resetting CPU1 during boot

Tony Lindgren tony at atomide.com
Tue Mar 28 10:09:44 PDT 2017


* Russell King - ARM Linux <linux at armlinux.org.uk> [170328 04:39]:
> On Mon, Mar 27, 2017 at 09:43:09AM -0700, Tony Lindgren wrote:
> > Yes problems still remains. I think the immediate fix there is to
> > disable kexec during runtime based on some criteria for your use
> > case rather than BUG() though. Somehow kexec needs to know if CPU1
> > reset is acceptable, then reset CPU1 before kexec.
> 
> The only acceptable way to do that is to make the decision when loading
> the image(s), and refuse to load the image(s) if kexec is not possible.
> (As is already done when dealing with whether we can CPU hot-unplug the
> secondary CPUs.)

OK so how about the following to disable kexec for Andrew's
test case?

That is assuming that omap_type() test works for HS dra7
like it does for the other omap2 variants.

Regards,

Tony

8< ---------------------
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h
--- a/arch/arm/mach-omap2/common.h
+++ b/arch/arm/mach-omap2/common.h
@@ -260,6 +260,7 @@ extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask);
 extern void omap_auxcoreboot_addr(u32 cpu_addr);
 extern u32 omap_read_auxcoreboot0(void);
 
+extern bool omap4_cpu_can_disable(unsigned int cpu);
 extern void omap4_cpu_die(unsigned int cpu);
 extern int omap4_cpu_kill(unsigned int cpu);
 
diff --git a/arch/arm/mach-omap2/omap-hotplug.c b/arch/arm/mach-omap2/omap-hotplug.c
--- a/arch/arm/mach-omap2/omap-hotplug.c
+++ b/arch/arm/mach-omap2/omap-hotplug.c
@@ -22,6 +22,15 @@
 #include "omap-wakeupgen.h"
 #include "common.h"
 #include "powerdomain.h"
+#include "soc.h"
+
+bool omap4_cpu_can_disable(unsigned int cpu)
+{
+	if (soc_is_dra7xx() && (omap_type() != OMAP2_DEVICE_TYPE_GP))
+		return false;
+
+	return true;
+}
 
 /*
  * platform-specific code to shutdown a CPU
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
--- a/arch/arm/mach-omap2/omap-smp.c
+++ b/arch/arm/mach-omap2/omap-smp.c
@@ -390,6 +390,7 @@ const struct smp_operations omap4_smp_ops __initconst = {
 	.smp_secondary_init	= omap4_secondary_init,
 	.smp_boot_secondary	= omap4_boot_secondary,
 #ifdef CONFIG_HOTPLUG_CPU
+	.cpu_can_disable	= omap4_cpu_can_disable,
 	.cpu_die		= omap4_cpu_die,
 	.cpu_kill		= omap4_cpu_kill,
 #endif
-- 
2.12.1



More information about the linux-arm-kernel mailing list