diff options
-rw-r--r-- | arch/sparc/kernel/head_32.S | 10 | ||||
-rw-r--r-- | arch/sparc/kernel/kernel.h | 3 | ||||
-rw-r--r-- | arch/sparc/kernel/setup_32.c | 10 |
3 files changed, 15 insertions, 8 deletions
diff --git a/arch/sparc/kernel/head_32.S b/arch/sparc/kernel/head_32.S index f22a729dfb3..6c6b8c27c1b 100644 --- a/arch/sparc/kernel/head_32.S +++ b/arch/sparc/kernel/head_32.S | |||
@@ -661,16 +661,10 @@ continue_boot: | |||
661 | wr %g3, PSR_ET, %psr | 661 | wr %g3, PSR_ET, %psr |
662 | WRITE_PAUSE | 662 | WRITE_PAUSE |
663 | 663 | ||
664 | /* First we call prom_init() to set up PROMLIB, then | 664 | /* Call sparc32_start_kernel(struct linux_romvec *rp) */ |
665 | * off to start_kernel(). | ||
666 | */ | ||
667 | |||
668 | sethi %hi(prom_vector_p), %g5 | 665 | sethi %hi(prom_vector_p), %g5 |
669 | ld [%g5 + %lo(prom_vector_p)], %o0 | 666 | ld [%g5 + %lo(prom_vector_p)], %o0 |
670 | call prom_init | 667 | call sparc32_start_kernel |
671 | nop | ||
672 | |||
673 | call start_kernel | ||
674 | nop | 668 | nop |
675 | 669 | ||
676 | /* We should not get here. */ | 670 | /* We should not get here. */ |
diff --git a/arch/sparc/kernel/kernel.h b/arch/sparc/kernel/kernel.h index a86372d3458..291bb5de9ce 100644 --- a/arch/sparc/kernel/kernel.h +++ b/arch/sparc/kernel/kernel.h | |||
@@ -26,6 +26,9 @@ static inline unsigned long kimage_addr_to_ra(const char *p) | |||
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | #ifdef CONFIG_SPARC32 | 28 | #ifdef CONFIG_SPARC32 |
29 | /* setup_32.c */ | ||
30 | void sparc32_start_kernel(struct linux_romvec *rp); | ||
31 | |||
29 | /* cpu.c */ | 32 | /* cpu.c */ |
30 | extern void cpu_probe(void); | 33 | extern void cpu_probe(void); |
31 | 34 | ||
diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c index c052313f4dc..68dd63dea36 100644 --- a/arch/sparc/kernel/setup_32.c +++ b/arch/sparc/kernel/setup_32.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/cpu.h> | 32 | #include <linux/cpu.h> |
33 | #include <linux/kdebug.h> | 33 | #include <linux/kdebug.h> |
34 | #include <linux/export.h> | 34 | #include <linux/export.h> |
35 | #include <linux/start_kernel.h> | ||
35 | 36 | ||
36 | #include <asm/io.h> | 37 | #include <asm/io.h> |
37 | #include <asm/processor.h> | 38 | #include <asm/processor.h> |
@@ -244,6 +245,15 @@ struct tt_entry *sparc_ttable; | |||
244 | 245 | ||
245 | struct pt_regs fake_swapper_regs; | 246 | struct pt_regs fake_swapper_regs; |
246 | 247 | ||
248 | /* Called from head_32.S - before we have setup anything | ||
249 | * in the kernel. Be very careful with what you do here. | ||
250 | */ | ||
251 | void __init sparc32_start_kernel(struct linux_romvec *rp) | ||
252 | { | ||
253 | prom_init(rp); | ||
254 | start_kernel(); | ||
255 | } | ||
256 | |||
247 | void __init setup_arch(char **cmdline_p) | 257 | void __init setup_arch(char **cmdline_p) |
248 | { | 258 | { |
249 | int i; | 259 | int i; |