diff options
Diffstat (limited to 'arch/sparc/kernel/setup_64.c')
-rw-r--r-- | arch/sparc/kernel/setup_64.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c index e629b8377587..c38d19fc27ba 100644 --- a/arch/sparc/kernel/setup_64.c +++ b/arch/sparc/kernel/setup_64.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/cpu.h> | 30 | #include <linux/cpu.h> |
31 | #include <linux/initrd.h> | 31 | #include <linux/initrd.h> |
32 | #include <linux/module.h> | 32 | #include <linux/module.h> |
33 | #include <linux/start_kernel.h> | ||
33 | 34 | ||
34 | #include <asm/io.h> | 35 | #include <asm/io.h> |
35 | #include <asm/processor.h> | 36 | #include <asm/processor.h> |
@@ -162,7 +163,7 @@ char reboot_command[COMMAND_LINE_SIZE]; | |||
162 | 163 | ||
163 | static struct pt_regs fake_swapper_regs = { { 0, }, 0, 0, 0, 0 }; | 164 | static struct pt_regs fake_swapper_regs = { { 0, }, 0, 0, 0, 0 }; |
164 | 165 | ||
165 | void __init per_cpu_patch(void) | 166 | static void __init per_cpu_patch(void) |
166 | { | 167 | { |
167 | struct cpuid_patch_entry *p; | 168 | struct cpuid_patch_entry *p; |
168 | unsigned long ver; | 169 | unsigned long ver; |
@@ -254,7 +255,7 @@ void sun4v_patch_2insn_range(struct sun4v_2insn_patch_entry *start, | |||
254 | } | 255 | } |
255 | } | 256 | } |
256 | 257 | ||
257 | void __init sun4v_patch(void) | 258 | static void __init sun4v_patch(void) |
258 | { | 259 | { |
259 | extern void sun4v_hvapi_init(void); | 260 | extern void sun4v_hvapi_init(void); |
260 | 261 | ||
@@ -323,14 +324,25 @@ static void __init pause_patch(void) | |||
323 | } | 324 | } |
324 | } | 325 | } |
325 | 326 | ||
326 | #ifdef CONFIG_SMP | 327 | void __init start_early_boot(void) |
327 | void __init boot_cpu_id_too_large(int cpu) | ||
328 | { | 328 | { |
329 | prom_printf("Serious problem, boot cpu id (%d) >= NR_CPUS (%d)\n", | 329 | int cpu; |
330 | cpu, NR_CPUS); | 330 | |
331 | prom_halt(); | 331 | check_if_starfire(); |
332 | per_cpu_patch(); | ||
333 | sun4v_patch(); | ||
334 | |||
335 | cpu = hard_smp_processor_id(); | ||
336 | if (cpu >= NR_CPUS) { | ||
337 | prom_printf("Serious problem, boot cpu id (%d) >= NR_CPUS (%d)\n", | ||
338 | cpu, NR_CPUS); | ||
339 | prom_halt(); | ||
340 | } | ||
341 | current_thread_info()->cpu = cpu; | ||
342 | |||
343 | prom_init_report(); | ||
344 | start_kernel(); | ||
332 | } | 345 | } |
333 | #endif | ||
334 | 346 | ||
335 | /* On Ultra, we support all of the v8 capabilities. */ | 347 | /* On Ultra, we support all of the v8 capabilities. */ |
336 | unsigned long sparc64_elf_hwcap = (HWCAP_SPARC_FLUSH | HWCAP_SPARC_STBAR | | 348 | unsigned long sparc64_elf_hwcap = (HWCAP_SPARC_FLUSH | HWCAP_SPARC_STBAR | |