forked from Minki/linux
41173abc57
Based on 1 normalized pattern(s): this program is free software you can distribute it and or modify it under the terms of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 59 temple place suite 330 boston ma 02111 1307 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 32 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Richard Fontana <rfontana@redhat.com> Reviewed-by: Steve Winslow <swinslow@gmail.com> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190528170026.531157061@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
67 lines
1.5 KiB
C
67 lines
1.5 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Copyright (C) 2000, 2001, 2004 MIPS Technologies, Inc.
|
|
* Copyright (C) 2001 Ralf Baechle
|
|
* Copyright (C) 2010 PMC-Sierra, Inc.
|
|
*
|
|
* VSMP support for MSP platforms . Derived from malta vsmp support.
|
|
*/
|
|
#include <linux/smp.h>
|
|
#include <linux/interrupt.h>
|
|
|
|
#include <asm/setup.h>
|
|
|
|
#ifdef CONFIG_MIPS_MT_SMP
|
|
#define MIPS_CPU_IPI_RESCHED_IRQ 0 /* SW int 0 for resched */
|
|
#define MIPS_CPU_IPI_CALL_IRQ 1 /* SW int 1 for call */
|
|
|
|
|
|
static void ipi_resched_dispatch(void)
|
|
{
|
|
do_IRQ(MIPS_CPU_IPI_RESCHED_IRQ);
|
|
}
|
|
|
|
static void ipi_call_dispatch(void)
|
|
{
|
|
do_IRQ(MIPS_CPU_IPI_CALL_IRQ);
|
|
}
|
|
|
|
static irqreturn_t ipi_resched_interrupt(int irq, void *dev_id)
|
|
{
|
|
return IRQ_HANDLED;
|
|
}
|
|
|
|
static irqreturn_t ipi_call_interrupt(int irq, void *dev_id)
|
|
{
|
|
generic_smp_call_function_interrupt();
|
|
|
|
return IRQ_HANDLED;
|
|
}
|
|
|
|
static struct irqaction irq_resched = {
|
|
.handler = ipi_resched_interrupt,
|
|
.flags = IRQF_PERCPU,
|
|
.name = "IPI_resched"
|
|
};
|
|
|
|
static struct irqaction irq_call = {
|
|
.handler = ipi_call_interrupt,
|
|
.flags = IRQF_PERCPU,
|
|
.name = "IPI_call"
|
|
};
|
|
|
|
void __init arch_init_ipiirq(int irq, struct irqaction *action)
|
|
{
|
|
setup_irq(irq, action);
|
|
irq_set_handler(irq, handle_percpu_irq);
|
|
}
|
|
|
|
void __init msp_vsmp_int_init(void)
|
|
{
|
|
set_vi_handler(MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch);
|
|
set_vi_handler(MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch);
|
|
arch_init_ipiirq(MIPS_CPU_IPI_RESCHED_IRQ, &irq_resched);
|
|
arch_init_ipiirq(MIPS_CPU_IPI_CALL_IRQ, &irq_call);
|
|
}
|
|
#endif /* CONFIG_MIPS_MT_SMP */
|