Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef _SPARC64_HEAD_H
0003 #define _SPARC64_HEAD_H
0004 
0005 #include <asm/pstate.h>
0006 
0007     /* wrpr %g0, val, %gl */
0008 #define SET_GL(val) \
0009     .word   0xa1902000 | val
0010 
0011     /* rdpr %gl, %gN */
0012 #define GET_GL_GLOBAL(N)    \
0013     .word   0x81540000 | (N << 25)
0014 
0015 #define KERNBASE    0x400000
0016 
0017 #define PTREGS_OFF  (STACK_BIAS + STACKFRAME_SZ)
0018 
0019 #define RTRAP_PSTATE        (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_IE)
0020 #define RTRAP_PSTATE_IRQOFF (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV)
0021 #define RTRAP_PSTATE_AG_IRQOFF  (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG)
0022 
0023 #define __CHEETAH_ID    0x003e0014
0024 #define __JALAPENO_ID   0x003e0016
0025 #define __SERRANO_ID    0x003e0022
0026 
0027 #define CHEETAH_MANUF       0x003e
0028 #define CHEETAH_IMPL        0x0014 /* Ultra-III   */
0029 #define CHEETAH_PLUS_IMPL   0x0015 /* Ultra-III+  */
0030 #define JALAPENO_IMPL       0x0016 /* Ultra-IIIi  */
0031 #define JAGUAR_IMPL     0x0018 /* Ultra-IV    */
0032 #define PANTHER_IMPL        0x0019 /* Ultra-IV+   */
0033 #define SERRANO_IMPL        0x0022 /* Ultra-IIIi+ */
0034 
0035 #define BRANCH_IF_SUN4V(tmp1,label)     \
0036     sethi   %hi(is_sun4v), %tmp1;       \
0037     lduw    [%tmp1 + %lo(is_sun4v)], %tmp1; \
0038     brnz,pn %tmp1, label;           \
0039      nop
0040 
0041 #define BRANCH_IF_CHEETAH_BASE(tmp1,tmp2,label) \
0042     rdpr    %ver, %tmp1;            \
0043     sethi   %hi(__CHEETAH_ID), %tmp2;   \
0044     srlx    %tmp1, 32, %tmp1;       \
0045     or  %tmp2, %lo(__CHEETAH_ID), %tmp2;\
0046     cmp %tmp1, %tmp2;           \
0047     be,pn   %icc, label;            \
0048      nop;
0049 
0050 #define BRANCH_IF_JALAPENO(tmp1,tmp2,label) \
0051     rdpr    %ver, %tmp1;            \
0052     sethi   %hi(__JALAPENO_ID), %tmp2;  \
0053     srlx    %tmp1, 32, %tmp1;       \
0054     or  %tmp2, %lo(__JALAPENO_ID), %tmp2;\
0055     cmp %tmp1, %tmp2;           \
0056     be,pn   %icc, label;            \
0057      nop;
0058 
0059 #define BRANCH_IF_CHEETAH_PLUS_OR_FOLLOWON(tmp1,tmp2,label) \
0060     rdpr    %ver, %tmp1;            \
0061     srlx    %tmp1, (32 + 16), %tmp2;    \
0062     cmp %tmp2, CHEETAH_MANUF;       \
0063     bne,pt  %xcc, 99f;          \
0064      sllx   %tmp1, 16, %tmp1;       \
0065     srlx    %tmp1, (32 + 16), %tmp2;    \
0066     cmp %tmp2, CHEETAH_PLUS_IMPL;   \
0067     bgeu,pt %xcc, label;            \
0068 99:  nop;
0069 
0070 #define BRANCH_IF_ANY_CHEETAH(tmp1,tmp2,label)  \
0071     rdpr    %ver, %tmp1;            \
0072     srlx    %tmp1, (32 + 16), %tmp2;    \
0073     cmp %tmp2, CHEETAH_MANUF;       \
0074     bne,pt  %xcc, 99f;          \
0075      sllx   %tmp1, 16, %tmp1;       \
0076     srlx    %tmp1, (32 + 16), %tmp2;    \
0077     cmp %tmp2, CHEETAH_IMPL;        \
0078     bgeu,pt %xcc, label;            \
0079 99:  nop;
0080 
0081 #endif /* !(_SPARC64_HEAD_H) */