GNU Linux-libre 4.19.264-gnu1
[releases.git] / arch / arm / mm / fsr-2level.c
1 // SPDX-License-Identifier: GPL-2.0
2 static struct fsr_info fsr_info[] = {
3         /*
4          * The following are the standard ARMv3 and ARMv4 aborts.  ARMv5
5          * defines these to be "precise" aborts.
6          */
7         { do_bad,               SIGSEGV, 0,             "vector exception"                 },
8         { do_bad,               SIGBUS,  BUS_ADRALN,    "alignment exception"              },
9         { do_bad,               SIGKILL, 0,             "terminal exception"               },
10         { do_bad,               SIGBUS,  BUS_ADRALN,    "alignment exception"              },
11         { do_bad,               SIGBUS,  0,             "external abort on linefetch"      },
12         { do_translation_fault, SIGSEGV, SEGV_MAPERR,   "section translation fault"        },
13         { do_bad,               SIGBUS,  0,             "external abort on linefetch"      },
14         { do_page_fault,        SIGSEGV, SEGV_MAPERR,   "page translation fault"           },
15         { do_bad,               SIGBUS,  0,             "external abort on non-linefetch"  },
16         { do_bad,               SIGSEGV, SEGV_ACCERR,   "section domain fault"             },
17         { do_bad,               SIGBUS,  0,             "external abort on non-linefetch"  },
18         { do_bad,               SIGSEGV, SEGV_ACCERR,   "page domain fault"                },
19         { do_bad,               SIGBUS,  0,             "external abort on translation"    },
20         { do_sect_fault,        SIGSEGV, SEGV_ACCERR,   "section permission fault"         },
21         { do_bad,               SIGBUS,  0,             "external abort on translation"    },
22         { do_page_fault,        SIGSEGV, SEGV_ACCERR,   "page permission fault"            },
23         /*
24          * The following are "imprecise" aborts, which are signalled by bit
25          * 10 of the FSR, and may not be recoverable.  These are only
26          * supported if the CPU abort handler supports bit 10.
27          */
28         { do_bad,               SIGBUS,  0,             "unknown 16"                       },
29         { do_bad,               SIGBUS,  0,             "unknown 17"                       },
30         { do_bad,               SIGBUS,  0,             "unknown 18"                       },
31         { do_bad,               SIGBUS,  0,             "unknown 19"                       },
32         { do_bad,               SIGBUS,  0,             "lock abort"                       }, /* xscale */
33         { do_bad,               SIGBUS,  0,             "unknown 21"                       },
34         { do_bad,               SIGBUS,  BUS_OBJERR,    "imprecise external abort"         }, /* xscale */
35         { do_bad,               SIGBUS,  0,             "unknown 23"                       },
36         { do_bad,               SIGBUS,  0,             "dcache parity error"              }, /* xscale */
37         { do_bad,               SIGBUS,  0,             "unknown 25"                       },
38         { do_bad,               SIGBUS,  0,             "unknown 26"                       },
39         { do_bad,               SIGBUS,  0,             "unknown 27"                       },
40         { do_bad,               SIGBUS,  0,             "unknown 28"                       },
41         { do_bad,               SIGBUS,  0,             "unknown 29"                       },
42         { do_bad,               SIGBUS,  0,             "unknown 30"                       },
43         { do_bad,               SIGBUS,  0,             "unknown 31"                       },
44 };
45
46 static struct fsr_info ifsr_info[] = {
47         { do_bad,               SIGBUS,  0,             "unknown 0"                        },
48         { do_bad,               SIGBUS,  0,             "unknown 1"                        },
49         { do_bad,               SIGBUS,  0,             "debug event"                      },
50         { do_bad,               SIGSEGV, SEGV_ACCERR,   "section access flag fault"        },
51         { do_bad,               SIGBUS,  0,             "unknown 4"                        },
52         { do_translation_fault, SIGSEGV, SEGV_MAPERR,   "section translation fault"        },
53         { do_bad,               SIGSEGV, SEGV_ACCERR,   "page access flag fault"           },
54         { do_page_fault,        SIGSEGV, SEGV_MAPERR,   "page translation fault"           },
55         { do_bad,               SIGBUS,  0,             "external abort on non-linefetch"  },
56         { do_bad,               SIGSEGV, SEGV_ACCERR,   "section domain fault"             },
57         { do_bad,               SIGBUS,  0,             "unknown 10"                       },
58         { do_bad,               SIGSEGV, SEGV_ACCERR,   "page domain fault"                },
59         { do_bad,               SIGBUS,  0,             "external abort on translation"    },
60         { do_sect_fault,        SIGSEGV, SEGV_ACCERR,   "section permission fault"         },
61         { do_bad,               SIGBUS,  0,             "external abort on translation"    },
62         { do_page_fault,        SIGSEGV, SEGV_ACCERR,   "page permission fault"            },
63         { do_bad,               SIGBUS,  0,             "unknown 16"                       },
64         { do_bad,               SIGBUS,  0,             "unknown 17"                       },
65         { do_bad,               SIGBUS,  0,             "unknown 18"                       },
66         { do_bad,               SIGBUS,  0,             "unknown 19"                       },
67         { do_bad,               SIGBUS,  0,             "unknown 20"                       },
68         { do_bad,               SIGBUS,  0,             "unknown 21"                       },
69         { do_bad,               SIGBUS,  0,             "unknown 22"                       },
70         { do_bad,               SIGBUS,  0,             "unknown 23"                       },
71         { do_bad,               SIGBUS,  0,             "unknown 24"                       },
72         { do_bad,               SIGBUS,  0,             "unknown 25"                       },
73         { do_bad,               SIGBUS,  0,             "unknown 26"                       },
74         { do_bad,               SIGBUS,  0,             "unknown 27"                       },
75         { do_bad,               SIGBUS,  0,             "unknown 28"                       },
76         { do_bad,               SIGBUS,  0,             "unknown 29"                       },
77         { do_bad,               SIGBUS,  0,             "unknown 30"                       },
78         { do_bad,               SIGBUS,  0,             "unknown 31"                       },
79 };