License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[linux-block.git] / arch / sparc / kernel / urtt_fill.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #include <asm/thread_info.h>
3 #include <asm/trap_block.h>
4 #include <asm/spitfire.h>
5 #include <asm/ptrace.h>
6 #include <asm/head.h>
7
8                 .text
9                 .align  8
10                 .globl  user_rtt_fill_fixup_common
11 user_rtt_fill_fixup_common:
12                 rdpr    %cwp, %g1
13                 add     %g1, 1, %g1
14                 wrpr    %g1, 0x0, %cwp
15
16                 rdpr    %wstate, %g2
17                 sll     %g2, 3, %g2
18                 wrpr    %g2, 0x0, %wstate
19
20                 /* We know %canrestore and %otherwin are both zero.  */
21
22                 sethi   %hi(sparc64_kern_pri_context), %g2
23                 ldx     [%g2 + %lo(sparc64_kern_pri_context)], %g2
24                 mov     PRIMARY_CONTEXT, %g1
25
26 661:            stxa    %g2, [%g1] ASI_DMMU
27                 .section .sun4v_1insn_patch, "ax"
28                 .word   661b
29                 stxa    %g2, [%g1] ASI_MMU
30                 .previous
31
32                 sethi   %hi(KERNBASE), %g1
33                 flush   %g1
34
35                 mov     %g4, %l4
36                 mov     %g5, %l5
37                 brnz,pn %g3, 1f
38                  mov    %g3, %l3
39
40                 or      %g4, FAULT_CODE_WINFIXUP, %g4
41                 stb     %g4, [%g6 + TI_FAULT_CODE]
42                 stx     %g5, [%g6 + TI_FAULT_ADDR]
43 1:
44                 mov     %g6, %l1
45                 wrpr    %g0, 0x0, %tl
46
47 661:            nop
48                 .section                .sun4v_1insn_patch, "ax"
49                 .word                   661b
50                 SET_GL(0)
51                 .previous
52
53                 wrpr    %g0, RTRAP_PSTATE, %pstate
54
55                 mov     %l1, %g6
56                 ldx     [%g6 + TI_TASK], %g4
57                 LOAD_PER_CPU_BASE(%g5, %g6, %g1, %g2, %g3)
58
59                 brnz,pn %l3, 1f
60                  nop
61
62                 call    do_sparc64_fault
63                  add    %sp, PTREGS_OFF, %o0
64                 ba,pt   %xcc, rtrap
65                  nop
66
67 1:              cmp     %g3, 2
68                 bne,pn  %xcc, 2f
69                  nop
70
71                 sethi   %hi(tlb_type), %g1
72                 lduw    [%g1 + %lo(tlb_type)], %g1
73                 cmp     %g1, 3
74                 bne,pt  %icc, 1f
75                  add    %sp, PTREGS_OFF, %o0
76                 mov     %l4, %o2
77                 call    sun4v_do_mna
78                  mov    %l5, %o1
79                 ba,a,pt %xcc, rtrap
80 1:              mov     %l4, %o1
81                 mov     %l5, %o2
82                 call    mem_address_unaligned
83                  nop
84                 ba,a,pt %xcc, rtrap
85
86 2:              sethi   %hi(tlb_type), %g1
87                 mov     %l4, %o1
88                 lduw    [%g1 + %lo(tlb_type)], %g1
89                 mov     %l5, %o2
90                 cmp     %g1, 3
91                 bne,pt  %icc, 1f
92                  add    %sp, PTREGS_OFF, %o0
93                 call    sun4v_data_access_exception
94                  nop
95                 ba,a,pt %xcc, rtrap
96                  nop
97
98 1:              call    spitfire_data_access_exception
99                  nop
100                 ba,a,pt %xcc, rtrap