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