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