Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags   |
/* SPDX-License-Identifier: GPL-2.0 */
<------>/* This is trivial with the new code... */
<------>.globl do_fpdis
<------>.type do_fpdis,#function
do_fpdis:
<------>sethi %hi(TSTATE_PEF), %g4
<------>rdpr %tstate, %g5
<------>andcc %g5, %g4, %g0
<------>be,pt %xcc, 1f
<------> nop
<------>rd %fprs, %g5
<------>andcc %g5, FPRS_FEF, %g0
<------>be,pt %xcc, 1f
<------> nop
<------>/* Legal state when DCR_IFPOE is set in Cheetah %dcr. */
<------>sethi %hi(109f), %g7
<------>ba,pt %xcc, etrap
109: or %g7, %lo(109b), %g7
<------>add %g0, %g0, %g0
<------>ba,a,pt %xcc, rtrap
1: TRAP_LOAD_THREAD_REG(%g6, %g1)
<------>ldub [%g6 + TI_FPSAVED], %g5
<------>wr %g0, FPRS_FEF, %fprs
<------>andcc %g5, FPRS_FEF, %g0
<------>be,a,pt %icc, 1f
<------> clr %g7
<------>ldx [%g6 + TI_GSR], %g7
1: andcc %g5, FPRS_DL, %g0
<------>bne,pn %icc, 2f
<------> fzero %f0
<------>andcc %g5, FPRS_DU, %g0
<------>bne,pn %icc, 1f
<------> fzero %f2
<------>faddd %f0, %f2, %f4
<------>fmuld %f0, %f2, %f6
<------>faddd %f0, %f2, %f8
<------>fmuld %f0, %f2, %f10
<------>faddd %f0, %f2, %f12
<------>fmuld %f0, %f2, %f14
<------>faddd %f0, %f2, %f16
<------>fmuld %f0, %f2, %f18
<------>faddd %f0, %f2, %f20
<------>fmuld %f0, %f2, %f22
<------>faddd %f0, %f2, %f24
<------>fmuld %f0, %f2, %f26
<------>faddd %f0, %f2, %f28
<------>fmuld %f0, %f2, %f30
<------>faddd %f0, %f2, %f32
<------>fmuld %f0, %f2, %f34
<------>faddd %f0, %f2, %f36
<------>fmuld %f0, %f2, %f38
<------>faddd %f0, %f2, %f40
<------>fmuld %f0, %f2, %f42
<------>faddd %f0, %f2, %f44
<------>fmuld %f0, %f2, %f46
<------>faddd %f0, %f2, %f48
<------>fmuld %f0, %f2, %f50
<------>faddd %f0, %f2, %f52
<------>fmuld %f0, %f2, %f54
<------>faddd %f0, %f2, %f56
<------>fmuld %f0, %f2, %f58
<------>b,pt %xcc, fpdis_exit2
<------> faddd %f0, %f2, %f60
1: mov SECONDARY_CONTEXT, %g3
<------>add %g6, TI_FPREGS + 0x80, %g1
<------>faddd %f0, %f2, %f4
<------>fmuld %f0, %f2, %f6
661: ldxa [%g3] ASI_DMMU, %g5
<------>.section .sun4v_1insn_patch, "ax"
<------>.word 661b
<------>ldxa [%g3] ASI_MMU, %g5
<------>.previous
<------>sethi %hi(sparc64_kern_sec_context), %g2
<------>ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2
661: stxa %g2, [%g3] ASI_DMMU
<------>.section .sun4v_1insn_patch, "ax"
<------>.word 661b
<------>stxa %g2, [%g3] ASI_MMU
<------>.previous
<------>membar #Sync
<------>add %g6, TI_FPREGS + 0xc0, %g2
<------>faddd %f0, %f2, %f8
<------>fmuld %f0, %f2, %f10
<------>membar #Sync
<------>ldda [%g1] ASI_BLK_S, %f32
<------>ldda [%g2] ASI_BLK_S, %f48
<------>membar #Sync
<------>faddd %f0, %f2, %f12
<------>fmuld %f0, %f2, %f14
<------>faddd %f0, %f2, %f16
<------>fmuld %f0, %f2, %f18
<------>faddd %f0, %f2, %f20
<------>fmuld %f0, %f2, %f22
<------>faddd %f0, %f2, %f24
<------>fmuld %f0, %f2, %f26
<------>faddd %f0, %f2, %f28
<------>fmuld %f0, %f2, %f30
<------>ba,a,pt %xcc, fpdis_exit
2: andcc %g5, FPRS_DU, %g0
<------>bne,pt %icc, 3f
<------> fzero %f32
<------>mov SECONDARY_CONTEXT, %g3
<------>fzero %f34
661: ldxa [%g3] ASI_DMMU, %g5
<------>.section .sun4v_1insn_patch, "ax"
<------>.word 661b
<------>ldxa [%g3] ASI_MMU, %g5
<------>.previous
<------>add %g6, TI_FPREGS, %g1
<------>sethi %hi(sparc64_kern_sec_context), %g2
<------>ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2
661: stxa %g2, [%g3] ASI_DMMU
<------>.section .sun4v_1insn_patch, "ax"
<------>.word 661b
<------>stxa %g2, [%g3] ASI_MMU
<------>.previous
<------>membar #Sync
<------>add %g6, TI_FPREGS + 0x40, %g2
<------>faddd %f32, %f34, %f36
<------>fmuld %f32, %f34, %f38
<------>membar #Sync
<------>ldda [%g1] ASI_BLK_S, %f0
<------>ldda [%g2] ASI_BLK_S, %f16
<------>membar #Sync
<------>faddd %f32, %f34, %f40
<------>fmuld %f32, %f34, %f42
<------>faddd %f32, %f34, %f44
<------>fmuld %f32, %f34, %f46
<------>faddd %f32, %f34, %f48
<------>fmuld %f32, %f34, %f50
<------>faddd %f32, %f34, %f52
<------>fmuld %f32, %f34, %f54
<------>faddd %f32, %f34, %f56
<------>fmuld %f32, %f34, %f58
<------>faddd %f32, %f34, %f60
<------>fmuld %f32, %f34, %f62
<------>ba,a,pt %xcc, fpdis_exit
3: mov SECONDARY_CONTEXT, %g3
<------>add %g6, TI_FPREGS, %g1
661: ldxa [%g3] ASI_DMMU, %g5
<------>.section .sun4v_1insn_patch, "ax"
<------>.word 661b
<------>ldxa [%g3] ASI_MMU, %g5
<------>.previous
<------>sethi %hi(sparc64_kern_sec_context), %g2
<------>ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2
661: stxa %g2, [%g3] ASI_DMMU
<------>.section .sun4v_1insn_patch, "ax"
<------>.word 661b
<------>stxa %g2, [%g3] ASI_MMU
<------>.previous
<------>membar #Sync
<------>mov 0x40, %g2
<------>membar #Sync
<------>ldda [%g1] ASI_BLK_S, %f0
<------>ldda [%g1 + %g2] ASI_BLK_S, %f16
<------>add %g1, 0x80, %g1
<------>ldda [%g1] ASI_BLK_S, %f32
<------>ldda [%g1 + %g2] ASI_BLK_S, %f48
<------>membar #Sync
fpdis_exit:
661: stxa %g5, [%g3] ASI_DMMU
<------>.section .sun4v_1insn_patch, "ax"
<------>.word 661b
<------>stxa %g5, [%g3] ASI_MMU
<------>.previous
<------>membar #Sync
fpdis_exit2:
<------>wr %g7, 0, %gsr
<------>ldx [%g6 + TI_XFSR], %fsr
<------>rdpr %tstate, %g3
<------>or %g3, %g4, %g3 ! anal...
<------>wrpr %g3, %tstate
<------>wr %g0, FPRS_FEF, %fprs ! clean DU/DL bits
<------>retry
<------>.size do_fpdis,.-do_fpdis
<------>.align 32
<------>.type fp_other_bounce,#function
fp_other_bounce:
<------>call do_fpother
<------> add %sp, PTREGS_OFF, %o0
<------>ba,a,pt %xcc, rtrap
<------>.size fp_other_bounce,.-fp_other_bounce
<------>.align 32
<------>.globl do_fpother_check_fitos
<------>.type do_fpother_check_fitos,#function
do_fpother_check_fitos:
<------>TRAP_LOAD_THREAD_REG(%g6, %g1)
<------>sethi %hi(fp_other_bounce - 4), %g7
<------>or %g7, %lo(fp_other_bounce - 4), %g7
<------>/* NOTE: Need to preserve %g7 until we fully commit
<------> * to the fitos fixup.
<------> */
<------>stx %fsr, [%g6 + TI_XFSR]
<------>rdpr %tstate, %g3
<------>andcc %g3, TSTATE_PRIV, %g0
<------>bne,pn %xcc, do_fptrap_after_fsr
<------> nop
<------>ldx [%g6 + TI_XFSR], %g3
<------>srlx %g3, 14, %g1
<------>and %g1, 7, %g1
<------>cmp %g1, 2 ! Unfinished FP-OP
<------>bne,pn %xcc, do_fptrap_after_fsr
<------> sethi %hi(1 << 23), %g1 ! Inexact
<------>andcc %g3, %g1, %g0
<------>bne,pn %xcc, do_fptrap_after_fsr
<------> rdpr %tpc, %g1
<------>lduwa [%g1] ASI_AIUP, %g3 ! This cannot ever fail
#define FITOS_MASK 0xc1f83fe0
#define FITOS_COMPARE 0x81a01880
<------>sethi %hi(FITOS_MASK), %g1
<------>or %g1, %lo(FITOS_MASK), %g1
<------>and %g3, %g1, %g1
<------>sethi %hi(FITOS_COMPARE), %g2
<------>or %g2, %lo(FITOS_COMPARE), %g2
<------>cmp %g1, %g2
<------>bne,pn %xcc, do_fptrap_after_fsr
<------> nop
<------>std %f62, [%g6 + TI_FPREGS + (62 * 4)]
<------>sethi %hi(fitos_table_1), %g1
<------>and %g3, 0x1f, %g2
<------>or %g1, %lo(fitos_table_1), %g1
<------>sllx %g2, 2, %g2
<------>jmpl %g1 + %g2, %g0
<------> ba,pt %xcc, fitos_emul_continue
fitos_table_1:
<------>fitod %f0, %f62
<------>fitod %f1, %f62
<------>fitod %f2, %f62
<------>fitod %f3, %f62
<------>fitod %f4, %f62
<------>fitod %f5, %f62
<------>fitod %f6, %f62
<------>fitod %f7, %f62
<------>fitod %f8, %f62
<------>fitod %f9, %f62
<------>fitod %f10, %f62
<------>fitod %f11, %f62
<------>fitod %f12, %f62
<------>fitod %f13, %f62
<------>fitod %f14, %f62
<------>fitod %f15, %f62
<------>fitod %f16, %f62
<------>fitod %f17, %f62
<------>fitod %f18, %f62
<------>fitod %f19, %f62
<------>fitod %f20, %f62
<------>fitod %f21, %f62
<------>fitod %f22, %f62
<------>fitod %f23, %f62
<------>fitod %f24, %f62
<------>fitod %f25, %f62
<------>fitod %f26, %f62
<------>fitod %f27, %f62
<------>fitod %f28, %f62
<------>fitod %f29, %f62
<------>fitod %f30, %f62
<------>fitod %f31, %f62
fitos_emul_continue:
<------>sethi %hi(fitos_table_2), %g1
<------>srl %g3, 25, %g2
<------>or %g1, %lo(fitos_table_2), %g1
<------>and %g2, 0x1f, %g2
<------>sllx %g2, 2, %g2
<------>jmpl %g1 + %g2, %g0
<------> ba,pt %xcc, fitos_emul_fini
fitos_table_2:
<------>fdtos %f62, %f0
<------>fdtos %f62, %f1
<------>fdtos %f62, %f2
<------>fdtos %f62, %f3
<------>fdtos %f62, %f4
<------>fdtos %f62, %f5
<------>fdtos %f62, %f6
<------>fdtos %f62, %f7
<------>fdtos %f62, %f8
<------>fdtos %f62, %f9
<------>fdtos %f62, %f10
<------>fdtos %f62, %f11
<------>fdtos %f62, %f12
<------>fdtos %f62, %f13
<------>fdtos %f62, %f14
<------>fdtos %f62, %f15
<------>fdtos %f62, %f16
<------>fdtos %f62, %f17
<------>fdtos %f62, %f18
<------>fdtos %f62, %f19
<------>fdtos %f62, %f20
<------>fdtos %f62, %f21
<------>fdtos %f62, %f22
<------>fdtos %f62, %f23
<------>fdtos %f62, %f24
<------>fdtos %f62, %f25
<------>fdtos %f62, %f26
<------>fdtos %f62, %f27
<------>fdtos %f62, %f28
<------>fdtos %f62, %f29
<------>fdtos %f62, %f30
<------>fdtos %f62, %f31
fitos_emul_fini:
<------>ldd [%g6 + TI_FPREGS + (62 * 4)], %f62
<------>done
<------>.size do_fpother_check_fitos,.-do_fpother_check_fitos
<------>.align 32
<------>.globl do_fptrap
<------>.type do_fptrap,#function
do_fptrap:
<------>TRAP_LOAD_THREAD_REG(%g6, %g1)
<------>stx %fsr, [%g6 + TI_XFSR]
do_fptrap_after_fsr:
<------>ldub [%g6 + TI_FPSAVED], %g3
<------>rd %fprs, %g1
<------>or %g3, %g1, %g3
<------>stb %g3, [%g6 + TI_FPSAVED]
<------>rd %gsr, %g3
<------>stx %g3, [%g6 + TI_GSR]
<------>mov SECONDARY_CONTEXT, %g3
661: ldxa [%g3] ASI_DMMU, %g5
<------>.section .sun4v_1insn_patch, "ax"
<------>.word 661b
<------>ldxa [%g3] ASI_MMU, %g5
<------>.previous
<------>sethi %hi(sparc64_kern_sec_context), %g2
<------>ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2
661: stxa %g2, [%g3] ASI_DMMU
<------>.section .sun4v_1insn_patch, "ax"
<------>.word 661b
<------>stxa %g2, [%g3] ASI_MMU
<------>.previous
<------>membar #Sync
<------>add %g6, TI_FPREGS, %g2
<------>andcc %g1, FPRS_DL, %g0
<------>be,pn %icc, 4f
<------> mov 0x40, %g3
<------>stda %f0, [%g2] ASI_BLK_S
<------>stda %f16, [%g2 + %g3] ASI_BLK_S
<------>andcc %g1, FPRS_DU, %g0
<------>be,pn %icc, 5f
4: add %g2, 128, %g2
<------>stda %f32, [%g2] ASI_BLK_S
<------>stda %f48, [%g2 + %g3] ASI_BLK_S
5: mov SECONDARY_CONTEXT, %g1
<------>membar #Sync
661: stxa %g5, [%g1] ASI_DMMU
<------>.section .sun4v_1insn_patch, "ax"
<------>.word 661b
<------>stxa %g5, [%g1] ASI_MMU
<------>.previous
<------>membar #Sync
<------>ba,pt %xcc, etrap
<------> wr %g0, 0, %fprs
<------>.size do_fptrap,.-do_fptrap