1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _SPARC64_HEAD_H 3*4882a593Smuzhiyun #define _SPARC64_HEAD_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <asm/pstate.h> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun /* wrpr %g0, val, %gl */ 8*4882a593Smuzhiyun #define SET_GL(val) \ 9*4882a593Smuzhiyun .word 0xa1902000 | val 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* rdpr %gl, %gN */ 12*4882a593Smuzhiyun #define GET_GL_GLOBAL(N) \ 13*4882a593Smuzhiyun .word 0x81540000 | (N << 25) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define KERNBASE 0x400000 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define PTREGS_OFF (STACK_BIAS + STACKFRAME_SZ) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define RTRAP_PSTATE (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_IE) 20*4882a593Smuzhiyun #define RTRAP_PSTATE_IRQOFF (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV) 21*4882a593Smuzhiyun #define RTRAP_PSTATE_AG_IRQOFF (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG) 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #define __CHEETAH_ID 0x003e0014 24*4882a593Smuzhiyun #define __JALAPENO_ID 0x003e0016 25*4882a593Smuzhiyun #define __SERRANO_ID 0x003e0022 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define CHEETAH_MANUF 0x003e 28*4882a593Smuzhiyun #define CHEETAH_IMPL 0x0014 /* Ultra-III */ 29*4882a593Smuzhiyun #define CHEETAH_PLUS_IMPL 0x0015 /* Ultra-III+ */ 30*4882a593Smuzhiyun #define JALAPENO_IMPL 0x0016 /* Ultra-IIIi */ 31*4882a593Smuzhiyun #define JAGUAR_IMPL 0x0018 /* Ultra-IV */ 32*4882a593Smuzhiyun #define PANTHER_IMPL 0x0019 /* Ultra-IV+ */ 33*4882a593Smuzhiyun #define SERRANO_IMPL 0x0022 /* Ultra-IIIi+ */ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define BRANCH_IF_SUN4V(tmp1,label) \ 36*4882a593Smuzhiyun sethi %hi(is_sun4v), %tmp1; \ 37*4882a593Smuzhiyun lduw [%tmp1 + %lo(is_sun4v)], %tmp1; \ 38*4882a593Smuzhiyun brnz,pn %tmp1, label; \ 39*4882a593Smuzhiyun nop 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #define BRANCH_IF_CHEETAH_BASE(tmp1,tmp2,label) \ 42*4882a593Smuzhiyun rdpr %ver, %tmp1; \ 43*4882a593Smuzhiyun sethi %hi(__CHEETAH_ID), %tmp2; \ 44*4882a593Smuzhiyun srlx %tmp1, 32, %tmp1; \ 45*4882a593Smuzhiyun or %tmp2, %lo(__CHEETAH_ID), %tmp2;\ 46*4882a593Smuzhiyun cmp %tmp1, %tmp2; \ 47*4882a593Smuzhiyun be,pn %icc, label; \ 48*4882a593Smuzhiyun nop; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #define BRANCH_IF_JALAPENO(tmp1,tmp2,label) \ 51*4882a593Smuzhiyun rdpr %ver, %tmp1; \ 52*4882a593Smuzhiyun sethi %hi(__JALAPENO_ID), %tmp2; \ 53*4882a593Smuzhiyun srlx %tmp1, 32, %tmp1; \ 54*4882a593Smuzhiyun or %tmp2, %lo(__JALAPENO_ID), %tmp2;\ 55*4882a593Smuzhiyun cmp %tmp1, %tmp2; \ 56*4882a593Smuzhiyun be,pn %icc, label; \ 57*4882a593Smuzhiyun nop; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #define BRANCH_IF_CHEETAH_PLUS_OR_FOLLOWON(tmp1,tmp2,label) \ 60*4882a593Smuzhiyun rdpr %ver, %tmp1; \ 61*4882a593Smuzhiyun srlx %tmp1, (32 + 16), %tmp2; \ 62*4882a593Smuzhiyun cmp %tmp2, CHEETAH_MANUF; \ 63*4882a593Smuzhiyun bne,pt %xcc, 99f; \ 64*4882a593Smuzhiyun sllx %tmp1, 16, %tmp1; \ 65*4882a593Smuzhiyun srlx %tmp1, (32 + 16), %tmp2; \ 66*4882a593Smuzhiyun cmp %tmp2, CHEETAH_PLUS_IMPL; \ 67*4882a593Smuzhiyun bgeu,pt %xcc, label; \ 68*4882a593Smuzhiyun 99: nop; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #define BRANCH_IF_ANY_CHEETAH(tmp1,tmp2,label) \ 71*4882a593Smuzhiyun rdpr %ver, %tmp1; \ 72*4882a593Smuzhiyun srlx %tmp1, (32 + 16), %tmp2; \ 73*4882a593Smuzhiyun cmp %tmp2, CHEETAH_MANUF; \ 74*4882a593Smuzhiyun bne,pt %xcc, 99f; \ 75*4882a593Smuzhiyun sllx %tmp1, 16, %tmp1; \ 76*4882a593Smuzhiyun srlx %tmp1, (32 + 16), %tmp2; \ 77*4882a593Smuzhiyun cmp %tmp2, CHEETAH_IMPL; \ 78*4882a593Smuzhiyun bgeu,pt %xcc, label; \ 79*4882a593Smuzhiyun 99: nop; 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun #endif /* !(_SPARC64_HEAD_H) */ 82