|
@@ -368,6 +368,31 @@ static int __init parisc_init(void)
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
-
|
|
|
|
arch_initcall(parisc_init);
|
|
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
|
|
|
|
+}
|