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:
Vineet Gupta 2014-09-04 10:57:33 +05:30
parent 2ce7598c9a
commit 619f30188f
5 changed files with 13 additions and 16 deletions

View File

@ -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.

View File

@ -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:

View File

@ -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 ? : "";
} }
/* /*

View File

@ -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.

View File

@ -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