xref: /OK3568_Linux_fs/kernel/arch/arm/mm/fault.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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*4882a593Smuzhiyun static 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*4882a593Smuzhiyun static 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