|
|
@@ -202,26 +202,19 @@ static void bcm2836_arm_irqchip_send_ipi(const struct cpumask *mask,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/* Unmasks the IPI on the CPU when it's online. */
|
|
|
-static int bcm2836_arm_irqchip_cpu_notify(struct notifier_block *nfb,
|
|
|
- unsigned long action, void *hcpu)
|
|
|
+static int bcm2836_cpu_starting(unsigned int cpu)
|
|
|
{
|
|
|
- unsigned int cpu = (unsigned long)hcpu;
|
|
|
- unsigned int int_reg = LOCAL_MAILBOX_INT_CONTROL0;
|
|
|
- unsigned int mailbox = 0;
|
|
|
-
|
|
|
- if (action == CPU_STARTING || action == CPU_STARTING_FROZEN)
|
|
|
- bcm2836_arm_irqchip_unmask_per_cpu_irq(int_reg, mailbox, cpu);
|
|
|
- else if (action == CPU_DYING)
|
|
|
- bcm2836_arm_irqchip_mask_per_cpu_irq(int_reg, mailbox, cpu);
|
|
|
-
|
|
|
- return NOTIFY_OK;
|
|
|
+ bcm2836_arm_irqchip_unmask_per_cpu_irq(LOCAL_MAILBOX_INT_CONTROL0, 0,
|
|
|
+ cpu);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
-static struct notifier_block bcm2836_arm_irqchip_cpu_notifier = {
|
|
|
- .notifier_call = bcm2836_arm_irqchip_cpu_notify,
|
|
|
- .priority = 100,
|
|
|
-};
|
|
|
+static int bcm2836_cpu_dying(unsigned int cpu)
|
|
|
+{
|
|
|
+ bcm2836_arm_irqchip_mask_per_cpu_irq(LOCAL_MAILBOX_INT_CONTROL0, 0,
|
|
|
+ cpu);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
|
|
|
#ifdef CONFIG_ARM
|
|
|
int __init bcm2836_smp_boot_secondary(unsigned int cpu,
|
|
|
@@ -251,10 +244,9 @@ bcm2836_arm_irqchip_smp_init(void)
|
|
|
{
|
|
|
#ifdef CONFIG_SMP
|
|
|
/* Unmask IPIs to the boot CPU. */
|
|
|
- bcm2836_arm_irqchip_cpu_notify(&bcm2836_arm_irqchip_cpu_notifier,
|
|
|
- CPU_STARTING,
|
|
|
- (void *)(uintptr_t)smp_processor_id());
|
|
|
- register_cpu_notifier(&bcm2836_arm_irqchip_cpu_notifier);
|
|
|
+ cpuhp_setup_state(CPUHP_AP_IRQ_BCM2836_STARTING,
|
|
|
+ "AP_IRQ_BCM2836_STARTING", bcm2836_cpu_starting,
|
|
|
+ bcm2836_cpu_dying);
|
|
|
|
|
|
set_smp_cross_call(bcm2836_arm_irqchip_send_ipi);
|
|
|
|