diff options
Diffstat (limited to 'arch/sparc/kernel/misctrap.S')
-rw-r--r-- | arch/sparc/kernel/misctrap.S | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/arch/sparc/kernel/misctrap.S b/arch/sparc/kernel/misctrap.S new file mode 100644 index 000000000000..753b4f031bfb --- /dev/null +++ b/arch/sparc/kernel/misctrap.S | |||
@@ -0,0 +1,97 @@ | |||
1 | #ifdef CONFIG_KGDB | ||
2 | .globl arch_kgdb_breakpoint | ||
3 | .type arch_kgdb_breakpoint,#function | ||
4 | arch_kgdb_breakpoint: | ||
5 | ta 0x72 | ||
6 | retl | ||
7 | nop | ||
8 | .size arch_kgdb_breakpoint,.-arch_kgdb_breakpoint | ||
9 | #endif | ||
10 | |||
11 | .type __do_privact,#function | ||
12 | __do_privact: | ||
13 | mov TLB_SFSR, %g3 | ||
14 | stxa %g0, [%g3] ASI_DMMU ! Clear FaultValid bit | ||
15 | membar #Sync | ||
16 | sethi %hi(109f), %g7 | ||
17 | ba,pt %xcc, etrap | ||
18 | 109: or %g7, %lo(109b), %g7 | ||
19 | call do_privact | ||
20 | add %sp, PTREGS_OFF, %o0 | ||
21 | ba,pt %xcc, rtrap | ||
22 | nop | ||
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,pt %xcc, rtrap | ||
50 | nop | ||
51 | .size do_mna,.-do_mna | ||
52 | |||
53 | .type do_lddfmna,#function | ||
54 | do_lddfmna: | ||
55 | sethi %hi(109f), %g7 | ||
56 | mov TLB_SFSR, %g4 | ||
57 | ldxa [%g4] ASI_DMMU, %g5 | ||
58 | stxa %g0, [%g4] ASI_DMMU ! Clear FaultValid bit | ||
59 | membar #Sync | ||
60 | mov DMMU_SFAR, %g4 | ||
61 | ldxa [%g4] ASI_DMMU, %g4 | ||
62 | ba,pt %xcc, etrap | ||
63 | 109: or %g7, %lo(109b), %g7 | ||
64 | mov %l4, %o1 | ||
65 | mov %l5, %o2 | ||
66 | call handle_lddfmna | ||
67 | add %sp, PTREGS_OFF, %o0 | ||
68 | ba,pt %xcc, rtrap | ||
69 | nop | ||
70 | .size do_lddfmna,.-do_lddfmna | ||
71 | |||
72 | .type do_stdfmna,#function | ||
73 | do_stdfmna: | ||
74 | sethi %hi(109f), %g7 | ||
75 | mov TLB_SFSR, %g4 | ||
76 | ldxa [%g4] ASI_DMMU, %g5 | ||
77 | stxa %g0, [%g4] ASI_DMMU ! Clear FaultValid bit | ||
78 | membar #Sync | ||
79 | mov DMMU_SFAR, %g4 | ||
80 | ldxa [%g4] ASI_DMMU, %g4 | ||
81 | ba,pt %xcc, etrap | ||
82 | 109: or %g7, %lo(109b), %g7 | ||
83 | mov %l4, %o1 | ||
84 | mov %l5, %o2 | ||
85 | call handle_stdfmna | ||
86 | add %sp, PTREGS_OFF, %o0 | ||
87 | ba,pt %xcc, rtrap | ||
88 | nop | ||
89 | .size do_stdfmna,.-do_stdfmna | ||
90 | |||
91 | .type breakpoint_trap,#function | ||
92 | breakpoint_trap: | ||
93 | call sparc_breakpoint | ||
94 | add %sp, PTREGS_OFF, %o0 | ||
95 | ba,pt %xcc, rtrap | ||
96 | nop | ||
97 | .size breakpoint_trap,.-breakpoint_trap | ||