Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 033a899c authored by Jon Medhurst's avatar Jon Medhurst Committed by Nicolas Pitre
Browse files

ARM: vexpress: Select multi-cluster SMP operation if required

parent d41418c0
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@

void vexpress_dt_smp_map_io(void);

bool vexpress_smp_init_ops(void);

extern struct smp_operations	vexpress_smp_ops;

extern void vexpress_cpu_die(unsigned int cpu);
+20 −0
Original line number Diff line number Diff line
@@ -12,9 +12,11 @@
#include <linux/errno.h>
#include <linux/smp.h>
#include <linux/io.h>
#include <linux/of.h>
#include <linux/of_fdt.h>
#include <linux/vexpress.h>

#include <asm/mcpm.h>
#include <asm/smp_scu.h>
#include <asm/mach/map.h>

@@ -203,3 +205,21 @@ struct smp_operations __initdata vexpress_smp_ops = {
	.cpu_die		= vexpress_cpu_die,
#endif
};

bool __init vexpress_smp_init_ops(void)
{
#ifdef CONFIG_MCPM
	/*
	 * The best way to detect a multi-cluster configuration at the moment
	 * is to look for the presence of a CCI in the system.
	 * Override the default vexpress_smp_ops if so.
	 */
	struct device_node *node;
	node = of_find_compatible_node(NULL, NULL, "arm,cci-400");
	if (node && of_device_is_available(node)) {
		mcpm_smp_set_ops();
		return true;
	}
#endif
	return false;
}
+1 −0
Original line number Diff line number Diff line
@@ -456,6 +456,7 @@ static const char * const v2m_dt_match[] __initconst = {
DT_MACHINE_START(VEXPRESS_DT, "ARM-Versatile Express")
	.dt_compat	= v2m_dt_match,
	.smp		= smp_ops(vexpress_smp_ops),
	.smp_init	= smp_init_ops(vexpress_smp_init_ops),
	.map_io		= v2m_dt_map_io,
	.init_early	= v2m_dt_init_early,
	.init_irq	= irqchip_init,