aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arc/kernel/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arc/kernel/irq.c')
-rw-r--r--arch/arc/kernel/irq.c50
1 files changed, 2 insertions, 48 deletions
diff --git a/arch/arc/kernel/irq.c b/arch/arc/kernel/irq.c
index ba17f85285cf..538b36afe89e 100644
--- a/arch/arc/kernel/irq.c
+++ b/arch/arc/kernel/irq.c
@@ -41,53 +41,7 @@ void __init init_IRQ(void)
41 * "C" Entry point for any ARC ISR, called from low level vector handler 41 * "C" Entry point for any ARC ISR, called from low level vector handler
42 * @irq is the vector number read from ICAUSE reg of on-chip intc 42 * @irq is the vector number read from ICAUSE reg of on-chip intc
43 */ 43 */
44void arch_do_IRQ(unsigned int irq, struct pt_regs *regs) 44void arch_do_IRQ(unsigned int hwirq, struct pt_regs *regs)
45{ 45{
46 struct pt_regs *old_regs = set_irq_regs(regs); 46 handle_domain_irq(NULL, hwirq, regs);
47
48 irq_enter();
49 generic_handle_irq(irq);
50 irq_exit();
51 set_irq_regs(old_regs);
52}
53
54/*
55 * API called for requesting percpu interrupts - called by each CPU
56 * - For boot CPU, actually request the IRQ with genirq core + enables
57 * - For subsequent callers only enable called locally
58 *
59 * Relies on being called by boot cpu first (i.e. request called ahead) of
60 * any enable as expected by genirq. Hence Suitable only for TIMER, IPI
61 * which are guaranteed to be setup on boot core first.
62 * Late probed peripherals such as perf can't use this as there no guarantee
63 * of being called on boot CPU first.
64 */
65
66void arc_request_percpu_irq(int irq, int cpu,
67 irqreturn_t (*isr)(int irq, void *dev),
68 const char *irq_nm,
69 void *percpu_dev)
70{
71 /* Boot cpu calls request, all call enable */
72 if (!cpu) {
73 int rc;
74
75#ifdef CONFIG_ISA_ARCOMPACT
76 /*
77 * A subsequent request_percpu_irq() fails if percpu_devid is
78 * not set. That in turns sets NOAUTOEN, meaning each core needs
79 * to call enable_percpu_irq()
80 *
81 * For ARCv2, this is done in irq map function since we know
82 * which irqs are strictly per cpu
83 */
84 irq_set_percpu_devid(irq);
85#endif
86
87 rc = request_percpu_irq(irq, isr, irq_nm, percpu_dev);
88 if (rc)
89 panic("Percpu IRQ request failed for %d\n", irq);
90 }
91
92 enable_percpu_irq(irq, 0);
93} 47}