1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2136848d4SCatalin Marinas #ifndef __ARCH_ARM_FAULT_H 3136848d4SCatalin Marinas #define __ARCH_ARM_FAULT_H 41da177e4SLinus Torvalds 5136848d4SCatalin Marinas /* 6136848d4SCatalin Marinas * Fault status register encodings. We steal bit 31 for our own purposes. 7136848d4SCatalin Marinas */ 8136848d4SCatalin Marinas #define FSR_LNX_PF (1 << 31) 983402036SWill Deacon #define FSR_CM (1 << 13) 10136848d4SCatalin Marinas #define FSR_WRITE (1 << 11) 11136848d4SCatalin Marinas #define FSR_FS4 (1 << 10) 12136848d4SCatalin Marinas #define FSR_FS3_0 (15) 13f7b8156dSCatalin Marinas #define FSR_FS5_0 (0x3f) 14136848d4SCatalin Marinas 15f7b8156dSCatalin Marinas #ifdef CONFIG_ARM_LPAE 1697a98ae5SAlexander Sverdlin #define FSR_FS_AEA 17 1773a0b6eeSWang Kefeng #define FS_TRANS_NOLL 0x4 18abc25bbcSWang Kefeng #define FS_PERM_NOLL 0xC 1973a0b6eeSWang Kefeng #define FS_MMU_NOLL_MASK 0x3C 2097a98ae5SAlexander Sverdlin fsr_fs(unsigned int fsr)21f7b8156dSCatalin Marinasstatic inline int fsr_fs(unsigned int fsr) 22f7b8156dSCatalin Marinas { 23f7b8156dSCatalin Marinas return fsr & FSR_FS5_0; 24f7b8156dSCatalin Marinas } 25f7b8156dSCatalin Marinas #else 2697a98ae5SAlexander Sverdlin #define FSR_FS_AEA 22 2773a0b6eeSWang Kefeng #define FS_L1_TRANS 0x5 2873a0b6eeSWang Kefeng #define FS_L2_TRANS 0x7 29abc25bbcSWang Kefeng #define FS_L1_PERM 0xD 30abc25bbcSWang Kefeng #define FS_L2_PERM 0xF 3197a98ae5SAlexander Sverdlin fsr_fs(unsigned int fsr)32136848d4SCatalin Marinasstatic inline int fsr_fs(unsigned int fsr) 33136848d4SCatalin Marinas { 34136848d4SCatalin Marinas return (fsr & FSR_FS3_0) | (fsr & FSR_FS4) >> 6; 35136848d4SCatalin Marinas } 36f7b8156dSCatalin Marinas #endif 37136848d4SCatalin Marinas 38136848d4SCatalin Marinas void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs); 399254970cSLucas Stach void early_abt_enable(void); 40*ae1f8d79SArnd Bergmann asmlinkage void do_DataAbort(unsigned long addr, unsigned int fsr, 41*ae1f8d79SArnd Bergmann struct pt_regs *regs); 42*ae1f8d79SArnd Bergmann asmlinkage void do_PrefetchAbort(unsigned long addr, unsigned int ifsr, 43*ae1f8d79SArnd Bergmann struct pt_regs *regs); 44136848d4SCatalin Marinas 45136848d4SCatalin Marinas #endif /* __ARCH_ARM_FAULT_H */ 46