18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#include <asm/assembler.h>
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci/*
58c2ecf20Sopenharmony_ci * Interrupt handling.  Preserves r7, r8, r9
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci	.macro	arch_irq_handler_default
88c2ecf20Sopenharmony_ci	get_irqnr_preamble r6, lr
98c2ecf20Sopenharmony_ci1:	get_irqnr_and_base r0, r2, r6, lr
108c2ecf20Sopenharmony_ci	movne	r1, sp
118c2ecf20Sopenharmony_ci	@
128c2ecf20Sopenharmony_ci	@ routine called with r0 = irq number, r1 = struct pt_regs *
138c2ecf20Sopenharmony_ci	@
148c2ecf20Sopenharmony_ci	badrne	lr, 1b
158c2ecf20Sopenharmony_ci	bne	asm_do_IRQ
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci#ifdef CONFIG_SMP
188c2ecf20Sopenharmony_ci	/*
198c2ecf20Sopenharmony_ci	 * XXX
208c2ecf20Sopenharmony_ci	 *
218c2ecf20Sopenharmony_ci	 * this macro assumes that irqstat (r2) and base (r6) are
228c2ecf20Sopenharmony_ci	 * preserved from get_irqnr_and_base above
238c2ecf20Sopenharmony_ci	 */
248c2ecf20Sopenharmony_ci	ALT_SMP(test_for_ipi r0, r2, r6, lr)
258c2ecf20Sopenharmony_ci	ALT_UP_B(9997f)
268c2ecf20Sopenharmony_ci	movne	r1, sp
278c2ecf20Sopenharmony_ci	badrne	lr, 1b
288c2ecf20Sopenharmony_ci	bne	do_IPI
298c2ecf20Sopenharmony_ci#endif
308c2ecf20Sopenharmony_ci9997:
318c2ecf20Sopenharmony_ci	.endm
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci	.macro	arch_irq_handler, symbol_name
348c2ecf20Sopenharmony_ci	.align	5
358c2ecf20Sopenharmony_ci	.global \symbol_name
368c2ecf20Sopenharmony_ci\symbol_name:
378c2ecf20Sopenharmony_ci	mov	r8, lr
388c2ecf20Sopenharmony_ci	arch_irq_handler_default
398c2ecf20Sopenharmony_ci	ret	r8
408c2ecf20Sopenharmony_ci	.endm
41