arm64: smp: Add wakeup IPI support

Add support for IPI_WAKEUP which is used by hotplug code
path to wake up CPU from low power states.

Change-Id: I258d05e109a377613064624a5bfda21ab8ea9869
Signed-off-by: Abhimanyu Kapur <abhimany@codeaurora.org>
[satyap@codeaurora.org: trivial merge conflict resolution]
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
This commit is contained in:
Abhimanyu Kapur 2014-02-08 00:45:00 -08:00 committed by David Keitel
parent 1e97815c3d
commit e38a985cba
3 changed files with 12 additions and 1 deletions

View file

@ -20,7 +20,7 @@
#include <linux/threads.h>
#include <asm/irq.h>
#define NR_IPI 5
#define NR_IPI 6
typedef struct {
unsigned int __softirq_pending;

View file

@ -63,6 +63,7 @@ extern void secondary_entry(void);
extern void arch_send_call_function_single_ipi(int cpu);
extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
extern void arch_send_wakeup_ipi_mask(const struct cpumask *mask);
extern int __cpu_disable(void);

View file

@ -70,6 +70,7 @@ enum ipi_msg_type {
IPI_CPU_STOP,
IPI_TIMER,
IPI_IRQ_WORK,
IPI_WAKEUP,
};
/*
@ -629,6 +630,7 @@ static const char *ipi_types[NR_IPI] __tracepoint_string = {
S(IPI_CPU_STOP, "CPU stop interrupts"),
S(IPI_TIMER, "Timer broadcast interrupts"),
S(IPI_IRQ_WORK, "IRQ work interrupts"),
S(IPI_WAKEUP, "CPU wakeup interrupts"),
};
static void smp_cross_call(const struct cpumask *target, unsigned int ipinr)
@ -677,6 +679,11 @@ void arch_send_call_function_single_ipi(int cpu)
smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC);
}
void arch_send_wakeup_ipi_mask(const struct cpumask *mask)
{
smp_cross_call(mask, IPI_WAKEUP);
}
#ifdef CONFIG_IRQ_WORK
void arch_irq_work_raise(void)
{
@ -758,6 +765,9 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
break;
#endif
case IPI_WAKEUP:
break;
default:
pr_crit("CPU%u: Unknown IPI message 0x%x\n", cpu, ipinr);
break;