Commit 9c2853af authored by Sam Ravnborg's avatar Sam Ravnborg Committed by David S. Miller

sparc32: probe for cpu info only during startup

We did a cpu_probe() call each time a CPU got online - which
only effect was to save latest CPU/FPU info for use by show_cpuinfo().
Use same setup as for sparc64 where we probe for this info during startup,
and only once.

This allowed us to annotate a few functions __init which again
fixed the following section mismatch warnings:

WARNING: vmlinux.o(.text+0x65f0): Section mismatch in reference from the function set_cpu_and_fpu() to the (unknown reference) .init.rodata:(unknown)
WARNING: vmlinux.o(.text+0x65f8): Section mismatch in reference from the function set_cpu_and_fpu() to the (unknown reference) .init.rodata:(unknown)
WARNING: vmlinux.o(.text+0x664c): Section mismatch in reference from the function set_cpu_and_fpu() to the variable .init.rodata:manufacturer_info
WARNING: vmlinux.o(.text+0x6650): Section mismatch in reference from the function set_cpu_and_fpu() to the variable .init.rodata:manufacturer_info
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cb1b8209
...@@ -343,7 +343,6 @@ extern void leon_smp_done(void); ...@@ -343,7 +343,6 @@ extern void leon_smp_done(void);
extern void leon_boot_cpus(void); extern void leon_boot_cpus(void);
extern int leon_boot_one_cpu(int i); extern int leon_boot_one_cpu(int i);
void leon_init_smp(void); void leon_init_smp(void);
extern void cpu_probe(void);
extern void cpu_idle(void); extern void cpu_idle(void);
extern void init_IRQ(void); extern void init_IRQ(void);
extern void cpu_panic(void); extern void cpu_panic(void);
......
...@@ -258,7 +258,7 @@ static const char *sparc_fpu_type; ...@@ -258,7 +258,7 @@ static const char *sparc_fpu_type;
const char *sparc_pmu_type; const char *sparc_pmu_type;
static void set_cpu_and_fpu(int psr_impl, int psr_vers, int fpu_vers) static void __init set_cpu_and_fpu(int psr_impl, int psr_vers, int fpu_vers)
{ {
const struct manufacturer_info *manuf; const struct manufacturer_info *manuf;
int i; int i;
...@@ -434,7 +434,7 @@ const struct seq_operations cpuinfo_op = { ...@@ -434,7 +434,7 @@ const struct seq_operations cpuinfo_op = {
}; };
#ifdef CONFIG_SPARC32 #ifdef CONFIG_SPARC32
void __cpuinit cpu_probe(void) static int __init cpu_type_probe(void)
{ {
int psr_impl, psr_vers, fpu_vers; int psr_impl, psr_vers, fpu_vers;
int psr; int psr;
...@@ -453,8 +453,12 @@ void __cpuinit cpu_probe(void) ...@@ -453,8 +453,12 @@ void __cpuinit cpu_probe(void)
put_psr(psr); put_psr(psr);
set_cpu_and_fpu(psr_impl, psr_vers, fpu_vers); set_cpu_and_fpu(psr_impl, psr_vers, fpu_vers);
return 0;
} }
#else #endif /* CONFIG_SPARC32 */
#ifdef CONFIG_SPARC64
static void __init sun4v_cpu_probe(void) static void __init sun4v_cpu_probe(void)
{ {
switch (sun4v_chip_type) { switch (sun4v_chip_type) {
...@@ -495,6 +499,6 @@ static int __init cpu_type_probe(void) ...@@ -495,6 +499,6 @@ static int __init cpu_type_probe(void)
} }
return 0; return 0;
} }
#endif /* CONFIG_SPARC64 */
early_initcall(cpu_type_probe); early_initcall(cpu_type_probe);
#endif
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include <asm/system.h> #include <asm/system.h>
#include <asm/cpudata.h> #include <asm/cpudata.h>
extern void cpu_probe(void);
extern void clock_stop_probe(void); /* tadpole.c */ extern void clock_stop_probe(void); /* tadpole.c */
extern void sun4c_probe_memerr_reg(void); extern void sun4c_probe_memerr_reg(void);
...@@ -133,7 +132,6 @@ void __init device_scan(void) ...@@ -133,7 +132,6 @@ void __init device_scan(void)
} }
#endif /* !CONFIG_SMP */ #endif /* !CONFIG_SMP */
cpu_probe();
{ {
extern void auxio_probe(void); extern void auxio_probe(void);
extern void auxio_power_probe(void); extern void auxio_power_probe(void);
......
...@@ -94,8 +94,6 @@ void __cpuinit leon_callin(void) ...@@ -94,8 +94,6 @@ void __cpuinit leon_callin(void)
local_flush_cache_all(); local_flush_cache_all();
local_flush_tlb_all(); local_flush_tlb_all();
cpu_probe();
/* Fix idle thread fields. */ /* Fix idle thread fields. */
__asm__ __volatile__("ld [%0], %%g6\n\t" : : "r"(&current_set[cpuid]) __asm__ __volatile__("ld [%0], %%g6\n\t" : : "r"(&current_set[cpuid])
: "memory" /* paranoid */); : "memory" /* paranoid */);
......
...@@ -80,8 +80,6 @@ void __cpuinit smp4d_callin(void) ...@@ -80,8 +80,6 @@ void __cpuinit smp4d_callin(void)
local_flush_cache_all(); local_flush_cache_all();
local_flush_tlb_all(); local_flush_tlb_all();
cpu_probe();
while ((unsigned long)current_set[cpuid] < PAGE_OFFSET) while ((unsigned long)current_set[cpuid] < PAGE_OFFSET)
barrier(); barrier();
......
...@@ -59,8 +59,6 @@ void __cpuinit smp4m_callin(void) ...@@ -59,8 +59,6 @@ void __cpuinit smp4m_callin(void)
local_flush_cache_all(); local_flush_cache_all();
local_flush_tlb_all(); local_flush_tlb_all();
cpu_probe();
/* Fix idle thread fields. */ /* Fix idle thread fields. */
__asm__ __volatile__("ld [%0], %%g6\n\t" __asm__ __volatile__("ld [%0], %%g6\n\t"
: : "r" (&current_set[cpuid]) : : "r" (&current_set[cpuid])
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment