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: Vineet Gupta <vgupta@synopsys.com>
This commit is contained in:
parent
2ce7598c9a
commit
619f30188f
|
@ -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.
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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 ? : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue