root/arch/sparc/kernel/misctrap.S
/* 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