1 /* SPDX-License-Identifier: GPL-2.0 */
2 #include <asm/assembler.h>
3 
4 /*
5  * Interrupt handling.  Preserves r7, r8, r9
6  */
7 	.macro	arch_irq_handler_default
8 	get_irqnr_preamble r6, lr
9 1:	get_irqnr_and_base r0, r2, r6, lr
10 	movne	r1, sp
11 	@
12 	@ routine called with r0 = irq number, r1 = struct pt_regs *
13 	@
14 	badrne	lr, 1b
15 	bne	asm_do_IRQ
16 
17 #ifdef CONFIG_SMP
18 	/*
19 	 * XXX
20 	 *
21 	 * this macro assumes that irqstat (r2) and base (r6) are
22 	 * preserved from get_irqnr_and_base above
23 	 */
24 	ALT_SMP(test_for_ipi r0, r2, r6, lr)
25 	ALT_UP_B(9997f)
26 	movne	r1, sp
27 	badrne	lr, 1b
28 	bne	do_IPI
29 #endif
30 9997:
31 	.endm
32 
33 	.macro	arch_irq_handler, symbol_name
34 	.align	5
35 	.global \symbol_name
36 \symbol_name:
37 	mov	r8, lr
38 	arch_irq_handler_default
39 	ret	r8
40 	.endm
41