void __cpuinit platform_secondary_init(unsigned int cpu) { local_irq_disable(); /* Clone setup for peripheral interrupt sources from CoreA. */ bfin_write_SICB_IMASK0(bfin_read_SICA_IMASK0()); bfin_write_SICB_IMASK1(bfin_read_SICA_IMASK1()); SSYNC(); /* Clone setup for IARs from CoreA. */ bfin_write_SICB_IAR0(bfin_read_SICA_IAR0()); bfin_write_SICB_IAR1(bfin_read_SICA_IAR1()); bfin_write_SICB_IAR2(bfin_read_SICA_IAR2()); bfin_write_SICB_IAR3(bfin_read_SICA_IAR3()); bfin_write_SICB_IAR4(bfin_read_SICA_IAR4()); bfin_write_SICB_IAR5(bfin_read_SICA_IAR5()); bfin_write_SICB_IAR6(bfin_read_SICA_IAR6()); bfin_write_SICB_IAR7(bfin_read_SICA_IAR7()); SSYNC(); local_irq_enable(); /* Calibrate loops per jiffy value. */ calibrate_delay(); /* Store CPU-private information to the cpu_data array. */ bfin_setup_cpudata(cpu); /* We are done with local CPU inits, unblock the boot CPU. */ cpu_set(cpu, cpu_callin_map); spin_lock(&boot_lock); spin_unlock(&boot_lock); }
void platform_secondary_init(unsigned int cpu) { /* Clone setup for peripheral interrupt sources from CoreA. */ bfin_write_SICB_IMASK0(bfin_read_SIC_IMASK0()); bfin_write_SICB_IMASK1(bfin_read_SIC_IMASK1()); SSYNC(); /* Clone setup for IARs from CoreA. */ bfin_write_SICB_IAR0(bfin_read_SIC_IAR0()); bfin_write_SICB_IAR1(bfin_read_SIC_IAR1()); bfin_write_SICB_IAR2(bfin_read_SIC_IAR2()); bfin_write_SICB_IAR3(bfin_read_SIC_IAR3()); bfin_write_SICB_IAR4(bfin_read_SIC_IAR4()); bfin_write_SICB_IAR5(bfin_read_SIC_IAR5()); bfin_write_SICB_IAR6(bfin_read_SIC_IAR6()); bfin_write_SICB_IAR7(bfin_read_SIC_IAR7()); bfin_write_SICB_IWR0(IWR_DISABLE_ALL); bfin_write_SICB_IWR1(IWR_DISABLE_ALL); SSYNC(); /* We are done with local CPU inits, unblock the boot CPU. */ set_cpu_online(cpu, true); spin_lock(&boot_lock); spin_unlock(&boot_lock); }