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 11user_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 26661: 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] 431: 44 mov %g6, %l1 45 wrpr %g0, 0x0, %tl 46 47661: nop 48 .section .sun4v_1insn_patch, "ax" 49 .word 661b 50 SET_GL(0) 51 .previous 52 53661: wrpr %g0, RTRAP_PSTATE, %pstate 54 .section .sun_m7_1insn_patch, "ax" 55 .word 661b 56 /* Re-enable PSTATE.mcde to maintain ADI security */ 57 wrpr %g0, RTRAP_PSTATE|PSTATE_MCDE, %pstate 58 .previous 59 60 mov %l1, %g6 61 ldx [%g6 + TI_TASK], %g4 62 LOAD_PER_CPU_BASE(%g5, %g6, %g1, %g2, %g3) 63 64 brnz,pn %l3, 1f 65 nop 66 67 call do_sparc64_fault 68 add %sp, PTREGS_OFF, %o0 69 ba,pt %xcc, rtrap 70 nop 71 721: cmp %g3, 2 73 bne,pn %xcc, 2f 74 nop 75 76 sethi %hi(tlb_type), %g1 77 lduw [%g1 + %lo(tlb_type)], %g1 78 cmp %g1, 3 79 bne,pt %icc, 1f 80 add %sp, PTREGS_OFF, %o0 81 mov %l4, %o2 82 call sun4v_do_mna 83 mov %l5, %o1 84 ba,a,pt %xcc, rtrap 851: mov %l4, %o1 86 mov %l5, %o2 87 call mem_address_unaligned 88 nop 89 ba,a,pt %xcc, rtrap 90 912: sethi %hi(tlb_type), %g1 92 mov %l4, %o1 93 lduw [%g1 + %lo(tlb_type)], %g1 94 mov %l5, %o2 95 cmp %g1, 3 96 bne,pt %icc, 1f 97 add %sp, PTREGS_OFF, %o0 98 call sun4v_data_access_exception 99 nop 100 ba,a,pt %xcc, rtrap 101 nop 102 1031: call spitfire_data_access_exception 104 nop 105 ba,a,pt %xcc, rtrap 106