GNU Linux-libre 6.9.1-gnu
[releases.git] / arch / sparc / kernel / misctrap.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifdef CONFIG_KGDB
3         .globl          arch_kgdb_breakpoint
4         .type           arch_kgdb_breakpoint,#function
5 arch_kgdb_breakpoint:
6         ta              0x72
7         retl
8          nop
9         .size           arch_kgdb_breakpoint,.-arch_kgdb_breakpoint
10 #endif
11
12         .type           __do_privact,#function
13 __do_privact:
14         mov             TLB_SFSR, %g3
15         stxa            %g0, [%g3] ASI_DMMU     ! Clear FaultValid bit
16         membar          #Sync
17         sethi           %hi(109f), %g7
18         ba,pt           %xcc, etrap
19 109:    or              %g7, %lo(109b), %g7
20         call            do_privact
21          add            %sp, PTREGS_OFF, %o0
22         ba,a,pt         %xcc, rtrap
23         .size           __do_privact,.-__do_privact
24
25         .type           do_mna,#function
26 do_mna:
27         rdpr            %tl, %g3
28         cmp             %g3, 1
29
30         /* Setup %g4/%g5 now as they are used in the
31          * winfixup code.
32          */
33         mov             TLB_SFSR, %g3
34         mov             DMMU_SFAR, %g4
35         ldxa            [%g4] ASI_DMMU, %g4
36         ldxa            [%g3] ASI_DMMU, %g5
37         stxa            %g0, [%g3] ASI_DMMU     ! Clear FaultValid bit
38         membar          #Sync
39         bgu,pn          %icc, winfix_mna
40          rdpr           %tpc, %g3
41
42 1:      sethi           %hi(109f), %g7
43         ba,pt           %xcc, etrap
44 109:     or             %g7, %lo(109b), %g7
45         mov             %l4, %o1
46         mov             %l5, %o2
47         call            mem_address_unaligned
48          add            %sp, PTREGS_OFF, %o0
49         ba,a,pt         %xcc, rtrap
50         .size           do_mna,.-do_mna
51
52         .type           do_lddfmna,#function
53 do_lddfmna:
54         sethi           %hi(109f), %g7
55         mov             TLB_SFSR, %g4
56         ldxa            [%g4] ASI_DMMU, %g5
57         stxa            %g0, [%g4] ASI_DMMU     ! Clear FaultValid bit
58         membar          #Sync
59         mov             DMMU_SFAR, %g4
60         ldxa            [%g4] ASI_DMMU, %g4
61         ba,pt           %xcc, etrap
62 109:     or             %g7, %lo(109b), %g7
63         mov             %l4, %o1
64         mov             %l5, %o2
65         call            handle_lddfmna
66          add            %sp, PTREGS_OFF, %o0
67         ba,a,pt         %xcc, rtrap
68         .size           do_lddfmna,.-do_lddfmna
69
70         .type           do_stdfmna,#function
71 do_stdfmna:
72         sethi           %hi(109f), %g7
73         mov             TLB_SFSR, %g4
74         ldxa            [%g4] ASI_DMMU, %g5
75         stxa            %g0, [%g4] ASI_DMMU     ! Clear FaultValid bit
76         membar          #Sync
77         mov             DMMU_SFAR, %g4
78         ldxa            [%g4] ASI_DMMU, %g4
79         ba,pt           %xcc, etrap
80 109:     or             %g7, %lo(109b), %g7
81         mov             %l4, %o1
82         mov             %l5, %o2
83         call            handle_stdfmna
84          add            %sp, PTREGS_OFF, %o0
85         ba,a,pt         %xcc, rtrap
86          nop
87         .size           do_stdfmna,.-do_stdfmna
88
89         .type           breakpoint_trap,#function
90 breakpoint_trap:
91         call            sparc_breakpoint
92          add            %sp, PTREGS_OFF, %o0
93         ba,pt           %xcc, rtrap
94          nop
95         .size           breakpoint_trap,.-breakpoint_trap