diff options
Diffstat (limited to 'arch/parisc/kernel/setup.c')
-rw-r--r-- | arch/parisc/kernel/setup.c | 27 |
1 files changed, 26 insertions, 1 deletions
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 | |||
372 | arch_initcall(parisc_init); | 371 | arch_initcall(parisc_init); |
373 | 372 | ||
373 | void 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 | } | ||