1/* 2 * (C) Copyright 2013 3 * David Feng <fenghua@phytium.com.cn> 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8#include <asm-offsets.h> 9#include <config.h> 10#include <asm/ptrace.h> 11#include <asm/macro.h> 12#include <linux/linkage.h> 13 14/* 15 * Enter Exception. 16 * This will save the processor state that is ELR/X0~X30 17 * to the stack frame. 18 */ 19.macro exception_entry 20 stp x29, x30, [sp, #-16]! 21 stp x27, x28, [sp, #-16]! 22 stp x25, x26, [sp, #-16]! 23 stp x23, x24, [sp, #-16]! 24 stp x21, x22, [sp, #-16]! 25 stp x19, x20, [sp, #-16]! 26 stp x17, x18, [sp, #-16]! 27 stp x15, x16, [sp, #-16]! 28 stp x13, x14, [sp, #-16]! 29 stp x11, x12, [sp, #-16]! 30 stp x9, x10, [sp, #-16]! 31 stp x7, x8, [sp, #-16]! 32 stp x5, x6, [sp, #-16]! 33 stp x3, x4, [sp, #-16]! 34 stp x1, x2, [sp, #-16]! 35 36 /* Could be running at EL3/EL2/EL1 */ 37 switch_el x11, 3f, 2f, 1f 383: mrs x1, esr_el3 39 mrs x2, elr_el3 40 b 0f 412: mrs x1, esr_el2 42 mrs x2, elr_el2 43 b 0f 441: mrs x1, esr_el1 45 mrs x2, elr_el1 460: 47 stp x2, x0, [sp, #-16]! 48 mov x0, sp 49.endm 50 51/* 52 * Exception vectors. 53 */ 54 .align 11 55 .globl vectors 56vectors: 57 .align 7 58 b _do_bad_sync /* Current EL Synchronous Thread */ 59 60 .align 7 61 b _do_bad_irq /* Current EL IRQ Thread */ 62 63 .align 7 64 b _do_bad_fiq /* Current EL FIQ Thread */ 65 66 .align 7 67 b _do_bad_error /* Current EL Error Thread */ 68 69 .align 7 70 b _do_sync /* Current EL Synchronous Handler */ 71 72 .align 7 73 b _do_irq /* Current EL IRQ Handler */ 74 75 .align 7 76 b _do_fiq /* Current EL FIQ Handler */ 77 78 .align 7 79 b _do_error /* Current EL Error Handler */ 80 81 82_do_bad_sync: 83 exception_entry 84 bl do_bad_sync 85 86_do_bad_irq: 87 exception_entry 88 bl do_bad_irq 89 90_do_bad_fiq: 91 exception_entry 92 bl do_bad_fiq 93 94_do_bad_error: 95 exception_entry 96 bl do_bad_error 97 98_do_sync: 99 exception_entry 100 bl do_sync 101 102_do_irq: 103 exception_entry 104 bl do_irq 105 106_do_fiq: 107 exception_entry 108 bl do_fiq 109 110_do_error: 111 exception_entry 112 bl do_error 113