| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifdef CONFIG_KGDB |
| .globl arch_kgdb_breakpoint |
| .type arch_kgdb_breakpoint,#function |
| arch_kgdb_breakpoint: |
| ta 0x72 |
| retl |
| nop |
| .size arch_kgdb_breakpoint,.-arch_kgdb_breakpoint |
| #endif |
| |
| .type __do_privact,#function |
| __do_privact: |
| mov TLB_SFSR, %g3 |
| stxa %g0, [%g3] ASI_DMMU ! Clear FaultValid bit |
| membar #Sync |
| sethi %hi(109f), %g7 |
| ba,pt %xcc, etrap |
| 109: or %g7, %lo(109b), %g7 |
| call do_privact |
| add %sp, PTREGS_OFF, %o0 |
| ba,a,pt %xcc, rtrap |
| .size __do_privact,.-__do_privact |
| |
| .type do_mna,#function |
| do_mna: |
| rdpr %tl, %g3 |
| cmp %g3, 1 |
| |
| /* Setup %g4/%g5 now as they are used in the |
| * winfixup code. |
| */ |
| mov TLB_SFSR, %g3 |
| mov DMMU_SFAR, %g4 |
| ldxa [%g4] ASI_DMMU, %g4 |
| ldxa [%g3] ASI_DMMU, %g5 |
| stxa %g0, [%g3] ASI_DMMU ! Clear FaultValid bit |
| membar #Sync |
| bgu,pn %icc, winfix_mna |
| rdpr %tpc, %g3 |
| |
| 1: sethi %hi(109f), %g7 |
| ba,pt %xcc, etrap |
| 109: or %g7, %lo(109b), %g7 |
| mov %l4, %o1 |
| mov %l5, %o2 |
| call mem_address_unaligned |
| add %sp, PTREGS_OFF, %o0 |
| ba,a,pt %xcc, rtrap |
| .size do_mna,.-do_mna |
| |
| .type do_lddfmna,#function |
| do_lddfmna: |
| sethi %hi(109f), %g7 |
| mov TLB_SFSR, %g4 |
| ldxa [%g4] ASI_DMMU, %g5 |
| stxa %g0, [%g4] ASI_DMMU ! Clear FaultValid bit |
| membar #Sync |
| mov DMMU_SFAR, %g4 |
| ldxa [%g4] ASI_DMMU, %g4 |
| ba,pt %xcc, etrap |
| 109: or %g7, %lo(109b), %g7 |
| mov %l4, %o1 |
| mov %l5, %o2 |
| call handle_lddfmna |
| add %sp, PTREGS_OFF, %o0 |
| ba,a,pt %xcc, rtrap |
| .size do_lddfmna,.-do_lddfmna |
| |
| .type do_stdfmna,#function |
| do_stdfmna: |
| sethi %hi(109f), %g7 |
| mov TLB_SFSR, %g4 |
| ldxa [%g4] ASI_DMMU, %g5 |
| stxa %g0, [%g4] ASI_DMMU ! Clear FaultValid bit |
| membar #Sync |
| mov DMMU_SFAR, %g4 |
| ldxa [%g4] ASI_DMMU, %g4 |
| ba,pt %xcc, etrap |
| 109: or %g7, %lo(109b), %g7 |
| mov %l4, %o1 |
| mov %l5, %o2 |
| call handle_stdfmna |
| add %sp, PTREGS_OFF, %o0 |
| ba,a,pt %xcc, rtrap |
| nop |
| .size do_stdfmna,.-do_stdfmna |
| |
| .type breakpoint_trap,#function |
| breakpoint_trap: |
| call sparc_breakpoint |
| add %sp, PTREGS_OFF, %o0 |
| ba,pt %xcc, rtrap |
| nop |
| .size breakpoint_trap,.-breakpoint_trap |