1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __ARCH_ARM_FAULT_H 3*4882a593Smuzhiyun #define __ARCH_ARM_FAULT_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun /* 6*4882a593Smuzhiyun * Fault status register encodings. We steal bit 31 for our own purposes. 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun #define FSR_LNX_PF (1 << 31) 9*4882a593Smuzhiyun #define FSR_CM (1 << 13) 10*4882a593Smuzhiyun #define FSR_WRITE (1 << 11) 11*4882a593Smuzhiyun #define FSR_FS4 (1 << 10) 12*4882a593Smuzhiyun #define FSR_FS3_0 (15) 13*4882a593Smuzhiyun #define FSR_FS5_0 (0x3f) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #ifdef CONFIG_ARM_LPAE 16*4882a593Smuzhiyun #define FSR_FS_AEA 17 17*4882a593Smuzhiyun fsr_fs(unsigned int fsr)18*4882a593Smuzhiyunstatic inline int fsr_fs(unsigned int fsr) 19*4882a593Smuzhiyun { 20*4882a593Smuzhiyun return fsr & FSR_FS5_0; 21*4882a593Smuzhiyun } 22*4882a593Smuzhiyun #else 23*4882a593Smuzhiyun #define FSR_FS_AEA 22 24*4882a593Smuzhiyun fsr_fs(unsigned int fsr)25*4882a593Smuzhiyunstatic inline int fsr_fs(unsigned int fsr) 26*4882a593Smuzhiyun { 27*4882a593Smuzhiyun return (fsr & FSR_FS3_0) | (fsr & FSR_FS4) >> 6; 28*4882a593Smuzhiyun } 29*4882a593Smuzhiyun #endif 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs); 32*4882a593Smuzhiyun void early_abt_enable(void); 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #endif /* __ARCH_ARM_FAULT_H */ 35