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