diff options
| -rw-r--r-- | arch/parisc/kernel/head.S | 2 | ||||
| -rw-r--r-- | arch/parisc/kernel/setup.c | 27 |
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 | |||
| 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 | } | ||
