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

Commit 619f3018 authored by Vineet Gupta's avatar Vineet Gupta
Browse files

ARC: Allow SMP kernel to build/boot on UP-only infrastructure



In light of recent SNAFU with SMP build, allow simple platform to build
as SMP but run UP.

* Remove the dependence on simulation SMP extension to enable quick
  build/test iterations of SMP kernel.

* In absence of platform SMP registration, prevent the NULL smp feature
  name from borkign the system

Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
parent 2ce7598c
Loading
Loading
Loading
Loading
+9 −1
Original line number Original line Diff line number Diff line
@@ -59,7 +59,15 @@ struct plat_smp_ops {
/* TBD: stop exporting it for direct population by platform */
/* TBD: stop exporting it for direct population by platform */
extern struct plat_smp_ops  plat_smp_ops;
extern struct plat_smp_ops  plat_smp_ops;


#endif  /* CONFIG_SMP */
#else /* CONFIG_SMP */

static inline void smp_init_cpus(void) {}
static inline const char *arc_platform_smp_cpuinfo(void)
{
	return "";
}

#endif  /* !CONFIG_SMP */


/*
/*
 * ARC700 doesn't support atomic Read-Modify-Write ops.
 * ARC700 doesn't support atomic Read-Modify-Write ops.
+1 −12
Original line number Original line Diff line number Diff line
@@ -24,6 +24,7 @@
#include <asm/unwind.h>
#include <asm/unwind.h>
#include <asm/clk.h>
#include <asm/clk.h>
#include <asm/mach_desc.h>
#include <asm/mach_desc.h>
#include <asm/smp.h>


#define FIX_PTR(x)  __asm__ __volatile__(";" : "+r"(x))
#define FIX_PTR(x)  __asm__ __volatile__(";" : "+r"(x))


@@ -306,10 +307,7 @@ void setup_processor(void)
	arc_chk_ccms();
	arc_chk_ccms();


	printk(arc_extn_mumbojumbo(cpu_id, str, sizeof(str)));
	printk(arc_extn_mumbojumbo(cpu_id, str, sizeof(str)));

#ifdef CONFIG_SMP
	printk(arc_platform_smp_cpuinfo());
	printk(arc_platform_smp_cpuinfo());
#endif


	arc_chk_fpu();
	arc_chk_fpu();
}
}
@@ -360,11 +358,7 @@ void __init setup_arch(char **cmdline_p)
		machine_desc->init_early();
		machine_desc->init_early();


	setup_processor();
	setup_processor();

#ifdef CONFIG_SMP
	smp_init_cpus();
	smp_init_cpus();
#endif

	setup_arch_memory();
	setup_arch_memory();


	/* copy flat DT out of .init and then unflatten it */
	/* copy flat DT out of .init and then unflatten it */
@@ -424,14 +418,9 @@ static int show_cpuinfo(struct seq_file *m, void *v)
		   (loops_per_jiffy / (5000 / HZ)) % 100);
		   (loops_per_jiffy / (5000 / HZ)) % 100);


	seq_printf(m, arc_mmu_mumbojumbo(cpu_id, str, PAGE_SIZE));
	seq_printf(m, arc_mmu_mumbojumbo(cpu_id, str, PAGE_SIZE));

	seq_printf(m, arc_cache_mumbojumbo(cpu_id, str, PAGE_SIZE));
	seq_printf(m, arc_cache_mumbojumbo(cpu_id, str, PAGE_SIZE));

	seq_printf(m, arc_extn_mumbojumbo(cpu_id, str, PAGE_SIZE));
	seq_printf(m, arc_extn_mumbojumbo(cpu_id, str, PAGE_SIZE));

#ifdef CONFIG_SMP
	seq_printf(m, arc_platform_smp_cpuinfo());
	seq_printf(m, arc_platform_smp_cpuinfo());
#endif


	free_page((unsigned long)str);
	free_page((unsigned long)str);
done:
done:
+1 −1
Original line number Original line Diff line number Diff line
@@ -101,7 +101,7 @@ void __weak arc_platform_smp_wait_to_boot(int cpu)


const char *arc_platform_smp_cpuinfo(void)
const char *arc_platform_smp_cpuinfo(void)
{
{
	return plat_smp_ops.info;
	return plat_smp_ops.info ? : "";
}
}


/*
/*
+1 −1
Original line number Original line Diff line number Diff line
@@ -8,7 +8,7 @@


menuconfig ARC_PLAT_FPGA_LEGACY
menuconfig ARC_PLAT_FPGA_LEGACY
	bool "\"Legacy\" ARC FPGA dev Boards"
	bool "\"Legacy\" ARC FPGA dev Boards"
	select ISS_SMP_EXTN if SMP
	select ARC_HAS_COH_CACHES if SMP
	help
	help
	  Support for ARC development boards, provided by Synopsys.
	  Support for ARC development boards, provided by Synopsys.
	  These are based on FPGA or ISS. e.g.
	  These are based on FPGA or ISS. e.g.
+1 −1
Original line number Original line Diff line number Diff line
@@ -71,7 +71,7 @@ MACHINE_START(ML509, "ml509")
	.dt_compat	= ml509_compat,
	.dt_compat	= ml509_compat,
	.init_early	= plat_fpga_early_init,
	.init_early	= plat_fpga_early_init,
	.init_machine	= plat_fpga_populate_dev,
	.init_machine	= plat_fpga_populate_dev,
#ifdef CONFIG_SMP
#ifdef CONFIG_ISS_SMP_EXTN
	.init_smp	= iss_model_init_smp,
	.init_smp	= iss_model_init_smp,
#endif
#endif
MACHINE_END
MACHINE_END