Skip to content

Commit

Permalink
parisc: hijack jump to start_kernel
Browse files Browse the repository at this point in the history
Bang in our own start_parisc call, which initializes the PDC
width, and turns on the FPU.

Previously, if CONFIG_PRINTK_TIME was on, we'd attempt to use
the FPU before we had enabled it, resulting in a difficult
to diagnose panic.

This patch causes init_per_cpu to redundantly set these for
cpu0, but this is harmless.
  • Loading branch information
Kyle McMartin authored and Kyle McMartin committed Oct 10, 2008
1 parent 24b574d commit 089d552
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
2 changes: 1 addition & 1 deletion arch/parisc/kernel/head.S
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ $pgt_fill_loop:
copy %r0,%r2

/* And the RFI Target address too */
load32 start_kernel,%r11
load32 start_parisc,%r11

/* And the initial task pointer */
load32 init_thread_union,%r6
Expand Down
27 changes: 26 additions & 1 deletion arch/parisc/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,31 @@ static int __init parisc_init(void)

return 0;
}

arch_initcall(parisc_init);

void start_parisc(void)
{
extern void start_kernel(void);

int ret, cpunum;
struct pdc_coproc_cfg coproc_cfg;

cpunum = smp_processor_id();

set_firmware_width_unlocked();

ret = pdc_coproc_cfg_unlocked(&coproc_cfg);
if (ret >= 0 && coproc_cfg.ccr_functional) {
mtctl(coproc_cfg.ccr_functional, 10);

cpu_data[cpunum].fp_rev = coproc_cfg.revision;
cpu_data[cpunum].fp_model = coproc_cfg.model;

asm volatile ("fstd %fr0,8(%sp)");
} else {
panic("must have an fpu to boot linux");
}

start_kernel();
// not reached
}

0 comments on commit 089d552

Please sign in to comment.