static void eznps_init_per_cpu(int cpu) { smp_ipi_irq_setup(cpu, NPS_IPI_IRQ); eznps_init_core(cpu); mtm_enable_core(cpu); }
/* * Any SMP specific init any CPU does when it comes up. * Here we setup the CPU to enable Inter-Processor-Interrupts * Called for each CPU * -Master : init_IRQ() * -Other(s) : start_kernel_secondary() */ void eznps_smp_init_cpu(unsigned int cpu) { unsigned int rc; rc = smp_ipi_irq_setup(cpu, IPI_IRQ); if (rc) panic("IPI IRQ %d reg failed on BOOT cpu\n", IPI_IRQ); eznps_init_core(cpu); mtm_enable_core(cpu); }
/* * Any SMP specific init any CPU does when it comes up. * Here we setup the CPU to enable Inter-Processor-Interrupts * Called for each CPU * -Master : init_IRQ() * -Other(s) : start_kernel_secondary() */ void iss_model_init_smp(unsigned int cpu) { /* Check if CPU is configured for more than 16 interrupts */ if (NR_IRQS <= 16 || get_hw_config_num_irq() <= 16) panic("[arcfpga] IRQ system can't support IDU IPI\n"); idu_disable(); /**************************************************************** * IDU provides a set of Common IRQs, each of which can be dynamically * attached to (1|many|all) CPUs. * The Common IRQs [0-15] are mapped as CPU pvt [16-31] * * Here we use a simple 1:1 mapping: * A CPU 'x' is wired to Common IRQ 'x'. * So an IDU ASSERT on IRQ 'x' will trigger Interupt on CPU 'x', which * makes up for our simple IPI plumbing. * * TBD: Have a dedicated multicast IRQ for sending IPIs to all CPUs * w/o having to do one-at-a-time ******************************************************************/ /* * Claim an IRQ which would trigger IPI on this CPU. * In IDU parlance it involves setting up a cpu bitmask for the IRQ * The bitmap here contains only 1 CPU (self). */ idu_irq_set_tgtcpu(cpu, 0x1 << cpu); /* Set the IRQ destination to use the bitmask above */ idu_irq_set_mode(cpu, 7, /* XXX: IDU_IRQ_MOD_TCPU_ALLRECP: ISS bug */ IDU_IRQ_MODE_PULSE_TRIG); idu_enable(); /* Attach the arch-common IPI ISR to our IDU IRQ */ smp_ipi_irq_setup(cpu, IDU_INTERRUPT_0 + cpu); }
static void mcip_setup_per_cpu(int cpu) { smp_ipi_irq_setup(cpu, IPI_IRQ); smp_ipi_irq_setup(cpu, SOFTIRQ_IRQ); }
/* * Any SMP specific init any CPU does when it comes up. * Here we setup the CPU to enable Inter-Processor-Interrupts * Called for each CPU * -Master : init_IRQ() * -Other(s) : start_kernel_secondary() */ void mcip_init_smp(unsigned int cpu) { smp_ipi_irq_setup(cpu, IPI_IRQ); }