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