void __init start_parisc(void) { extern void early_trap_init(void); int ret, cpunum; struct pdc_coproc_cfg coproc_cfg; /* check QEMU/SeaBIOS marker in PAGE0 */ running_on_qemu = (memcmp(&PAGE0->pad0, "SeaBIOS", 8) == 0); cpunum = smp_processor_id(); init_cpu_topology(); set_firmware_width_unlocked(); ret = pdc_coproc_cfg_unlocked(&coproc_cfg); if (ret >= 0 && coproc_cfg.ccr_functional) { mtctl(coproc_cfg.ccr_functional, 10); per_cpu(cpu_data, cpunum).fp_rev = coproc_cfg.revision; per_cpu(cpu_data, cpunum).fp_model = coproc_cfg.model; asm volatile ("fstd %fr0,8(%sp)"); } else {
/** * pdc_coproc_cfg - To identify coprocessors attached to the processor. * @pdc_coproc_info: Return buffer address. * * This PDC call returns the presence and status of all the coprocessors * attached to the processor. */ int __cpuinit pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info) { int ret; unsigned long flags; spin_lock_irqsave(&pdc_lock, flags); ret = pdc_coproc_cfg_unlocked(pdc_coproc_info); spin_unlock_irqrestore(&pdc_lock, flags); return ret; }
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); per_cpu(cpu_data, cpunum).fp_rev = coproc_cfg.revision; per_cpu(cpu_data, cpunum).fp_model = coproc_cfg.model; asm volatile ("fstd %fr0,8(%sp)"); } else {