aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/parisc/kernel/head.S2
-rw-r--r--arch/parisc/kernel/setup.c27
2 files changed, 27 insertions, 2 deletions
diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S
index a84e31e82876..0e3d9f9b9e33 100644
--- a/arch/parisc/kernel/head.S
+++ b/arch/parisc/kernel/head.S
@@ -121,7 +121,7 @@ $pgt_fill_loop:
121 copy %r0,%r2 121 copy %r0,%r2
122 122
123 /* And the RFI Target address too */ 123 /* And the RFI Target address too */
124 load32 start_kernel,%r11 124 load32 start_parisc,%r11
125 125
126 /* And the initial task pointer */ 126 /* And the initial task pointer */
127 load32 init_thread_union,%r6 127 load32 init_thread_union,%r6
diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c
index 39e7c5a5946a..a59b71efdbe5 100644
--- a/arch/parisc/kernel/setup.c
+++ b/arch/parisc/kernel/setup.c
@@ -368,6 +368,31 @@ static int __init parisc_init(void)
368 368
369 return 0; 369 return 0;
370} 370}
371
372arch_initcall(parisc_init); 371arch_initcall(parisc_init);
373 372
373void start_parisc(void)
374{
375 extern void start_kernel(void);
376
377 int ret, cpunum;
378 struct pdc_coproc_cfg coproc_cfg;
379
380 cpunum = smp_processor_id();
381
382 set_firmware_width_unlocked();
383
384 ret = pdc_coproc_cfg_unlocked(&coproc_cfg);
385 if (ret >= 0 && coproc_cfg.ccr_functional) {
386 mtctl(coproc_cfg.ccr_functional, 10);
387
388 cpu_data[cpunum].fp_rev = coproc_cfg.revision;
389 cpu_data[cpunum].fp_model = coproc_cfg.model;
390
391 asm volatile ("fstd %fr0,8(%sp)");
392 } else {
393 panic("must have an fpu to boot linux");
394 }
395
396 start_kernel();
397 // not reached
398}