blob: 384d061f0c3ee3e6976481d2d8c4dd268cbc0783 [file] [log] [blame] [edit]
/*
* ========== Copyright Header Begin ==========================================
*
* OpenSPARC T1 Processor File: tlu.h
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
*
* The above named program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License version 2 as published by the Free Software Foundation.
*
* The above named program is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*
* ========== Copyright Header End ============================================
*/
// ifu trap types
`define INST_ACC_EXC 9'h008
`define INST_ACC_MMU_MS 9'h009
`define INST_ACC_ERR 9'h00a
`define ILL_INST 9'h010
`define PRIV_OPC 9'h011
`define FP_DISABLED 9'h020
`define DATA_ACC_EXC 9'h030
`define MRA_TSB_PS0_HI 155
`define MRA_TSB_PS0_LO 108
`define MRA_TSB_PS1_HI 107
`define MRA_TSB_PS1_LO 60
`define MRA_TACCESS_HI 59
`define MRA_TACCESS_LO 12
`define MRA_CTXTCFG_HI 11
`define MRA_CTXTCFG_LO 6
//
// modified for hypervisor support
//
`define TLU_THRD_NUM 4
`define TLU_TT_LO 0
`define TLU_TT_HI 8
`define TLU_CWP_LO 9
`define TLU_CWP_HI 11
`define TLU_PSTATE_LO 12
`define TLU_PSTATE_HI 19
`define TLU_ASI_LO 20
`define TLU_ASI_HI 27
`define TLU_CCR_LO 28
`define TLU_CCR_HI 35
`define TLU_GL_LO 36
`define TLU_GL_HI 37
`define TLU_NPC_LO 38
`define TLU_NPC_HI 84
`define TLU_PC_LO 85
`define TLU_PC_HI 131
`define TLU_HTSTATE_LO 132
`define TLU_HTSTATE_HI 135
`define TLU_RD_NPC_HI 83
`define TLU_RD_PC_LO 84
`define TLU_RD_PC_HI 129
`define TLU_RD_HTSTATE_LO 130
`define TLU_RD_HTSTATE_HI 133
//
`define TSA_PSTATE_VRANGE1_LO 12
`define TSA_PSTATE_VRANGE1_HI 15
// modified due to bug 2588
// `define TSA_PSTATE_VRANGE2_LO 16
`define TSA_PSTATE_VRANGE2_LO 18
`define TSA_PSTATE_VRANGE2_HI 19
//
`define TLU_TSA_WIDTH 136
`define TLU_TDP_TSA_WIDTH 134
`define TSA_HTSTATE_WIDTH 4
`define TSA_GLOBAL_WIDTH 2
`define TSA_CCR_WIDTH 8
`define TSA_ASI_WIDTH 8
`define TSA_PSTATE_WIDTH 8
`define TSA_CWP_WIDTH 3
`define TSA_TTYPE_WIDTH 9
`define TLU_GLOBAL_WIDTH 4
`define TLU_HPSTATE_WIDTH 5
//
// added due to Niagara SRAMs methodology
// The following defines have been replaced due
// the memory macro replacement from:
// bw_r_rf32x144 -> 2x bw_r_rf32x80
/*
`define TSA_MEM_WIDTH 144
`define TSA_HTSTATE_HI 142 // 3 bits
`define TSA_HTSTATE_LO 140
`define TSA_TPC_HI 138 // 47 bits
`define TSA_TPC_LO 92
`define TSA_TNPC_HI 90 // 47 bits
`define TSA_TNPC_LO 44
`define TSA_TSTATE_HI 40 // 29 bits
`define TSA_TSTATE_LO 12
`define TSA_TTYPE_HI 8 // 9 bits
`define TSA_TTYPE_LO 0
`define TSA_MEM_CWP_LO 12
`define TSA_MEM_CWP_HI 14
`define TSA_MEM_PSTATE_LO 15
`define TSA_MEM_PSTATE_HI 22
`define TSA_MEM_ASI_LO 23
`define TSA_MEM_ASI_HI 30
`define TSA_MEM_CCR_LO 31
`define TSA_MEM_CCR_HI 38
`define TSA_MEM_GL_LO 39
`define TSA_MEM_GL_HI 40
*/
`define TSA_MEM_WIDTH 80
`define TSA1_HTSTATE_HI 63 // 4 bits
`define TSA1_HTSTATE_LO 60
`define TSA1_TNPC_HI 58 // 47 bits
`define TSA1_TNPC_LO 12
`define TSA1_TTYPE_HI 8 // 9 bits
`define TSA1_TTYPE_LO 0
`define TSA0_TPC_HI 78 // 47 bits
`define TSA0_TPC_LO 32
`define TSA0_TSTATE_HI 28 // 29 bits
`define TSA0_TSTATE_LO 0
//
`define TSA0_MEM_CWP_LO 0
`define TSA0_MEM_CWP_HI 2
`define TSA0_MEM_PSTATE_LO 3
`define TSA0_MEM_PSTATE_HI 10
`define TSA0_MEM_ASI_LO 11
`define TSA0_MEM_ASI_HI 18
`define TSA0_MEM_CCR_LO 19
`define TSA0_MEM_CCR_HI 26
`define TSA0_MEM_GL_LO 27
`define TSA0_MEM_GL_HI 28
// HPSTATE position definitions within wsr
`define WSR_HPSTATE_ENB 11
`define WSR_HPSTATE_IBE 10
`define WSR_HPSTATE_RED 5
`define WSR_HPSTATE_PRIV 2
`define WSR_HPSTATE_TLZ 0
// TSTATE postition definitions within wsr
`define WSR_TSTATE_GL_HI 41 // 2b
`define WSR_TSTATE_GL_LO 40
`define WSR_TSTATE_CCR_HI 39 // 8b
`define WSR_TSTATE_CCR_LO 32
`define WSR_TSTATE_ASI_HI 31 // 8b
`define WSR_TSTATE_ASI_LO 24
`define WSR_TSTATE_PS2_HI 17 // 4b
// modified due to bug 2588
`define WSR_TSTATE_PS2_LO 16
`define WSR_TSTATE_PS1_HI 12 // 4b
// added for bug 2584
`define WSR_TSTATE_PS_PRIV 10 // 4b
`define WSR_TSTATE_PS1_LO 9
`define WSR_TSTATE_CWP_HI 2 // 3b
`define WSR_TSTATE_CWP_LO 0
//
`define WSR_TSTATE_WIDTH 29
`define RDSR_TSTATE_WIDTH 48
`define RDSR_HPSTATE_WIDTH 12
`define TLU_ASR_DATA_WIDTH 64
`define TLU_ASR_ADDR_WIDTH 7
`define SFTINT_WIDTH 17
//
// tick_cmp and stick_cmp definitions
`define TICKCMP_RANGE_HI 60
`define TICKCMP_RANGE_LO 0
`define TICKCMP_INTDIS 63
`define SFTINT_TICK_CMP 0
`define SFTINT_STICK_CMP 16
//
// PIB WRAP
`define SFTINT_PIB_WRAP 15
`define PIB_OVERFLOW_TTYPE 7'h4f
// HPSTATE postition definitions
`define HPSTATE_IBE 4
`define HPSTATE_ENB 3
`define HPSTATE_RED 2
`define HPSTATE_PRIV 1
`define HPSTATE_TLZ 0
// HTBA definitions
`define TLU_HTBA_WIDTH 34 // supported physical width
`define TLU_HTBA_HI 47
`define TLU_HTBA_LO 14
// TBA definitions
`define TLU_TBA_WIDTH 33 // supported physical width
`define TLU_TBA_HI 47
`define TLU_TBA_LO 15
`define TPC 5'h0
`define TNPC 5'h1
`define TSTATE 5'h2
`define TT 5'h3
`define TICK 5'h4
`define TBA 5'h5
`define PSTATE 5'h6
`define TL 5'h7
`define PIL 5'h8
`define HPSTATE 5'h0
`define HTSTATE 5'h1
`define HINTP 5'h3
`define HTBA 5'h5
`define HTICKCMP 5'h1f
`define STICKCMP 5'h19
`define TICKCMP 5'h17
//
// added for the hypervisor support
`define PSTATE_VRANGE1_LO 1
`define PSTATE_VRANGE1_HI 4
// modified due to bug 2588
`define PSTATE_VRANGE2_LO 8
`define PSTATE_VRANGE2_HI 9
`define PSTATE_TRUE_WIDTH 12
`define PSTATE_AG 0
`define PSTATE_IE 1
`define PSTATE_PRIV 2
`define PSTATE_AM 3
`define PSTATE_PEF 4
`define PSTATE_RED 5
`define PSTATE_MM_LO 6
`define PSTATE_MM_HI 7
`define PSTATE_TLE 8
`define PSTATE_CLE 9
`define PSTATE_MG 10
`define PSTATE_IG 11
//
// compressed PSTATE WSR definitions
`define WSR_PSTATE_VRANGE1_LO 0
`define WSR_PSTATE_VR_PRIV 1
`define WSR_PSTATE_VRANGE1_HI 3
`define WSR_PSTATE_VRANGE2_LO 4
`define WSR_PSTATE_VRANGE2_HI 5
`define WSR_PSTATE_VR_WIDTH 6
`define MAXTL 3'b110
`define MAXTL_LESSONE 3'b101
`define MAXSTL 3'b010
`define MAXSTL_TL 3'b010 // Saturation point for GL and TL (supervisor)
`define MAXSTL_GL 2'b10 // Saturation point for GL and TL (supervisor)
`define MAXGL 4'b0011 // Saturation point for GL (hypervisor)
`define MAXGL_GL 2'b11 // Saturation point for GL (hypervisor)
//
// ASI_QUEUE for hypervisor
// Queues are: CPU_MONODO
// DEV_MONODO
// RESUMABLE_ERROR
// NON_RESUMABLE_ERROR
//
`define ASI_VA_WIDTH 48
`define TLU_ASI_QUE_HI 13
`define TLU_ASI_QUE_LO 6
`define TLU_ASI_QUE_WIDTH 8
`define TLU_ASI_VA_WIDTH 10
`define TLU_ASI_STATE_WIDTH 8
// for address range checking
`define TLU_ASI_QUE_VA_HI 9
`define TLU_ASI_QUE_VA_LO 3
`define TLU_ASI_QUE_ASI 8'h25
`define CPU_MONDO_HEAD 10'h3c0
`define CPU_MONDO_TAIL 10'h3c8
`define DEV_MONDO_HEAD 10'h3d0
`define DEV_MONDO_TAIL 10'h3d8
`define RESUM_ERR_HEAD 10'h3e0
`define RESUM_ERR_TAIL 10'h3e8
`define NRESUM_ERR_HEAD 10'h3f0
`define NRESUM_ERR_TAIL 10'h3f8
`define CPU_MONDO_TRAP 7'h7c // only 7 bits are defined; upper two are 2'b00
`define DEV_MONDO_TRAP 7'h7d // only 7 bits are defined; upper two are 2'b00
`define TLZ_TRAP 7'h5f // only 7 bits are defined; upper two are 2'b00
`define HWINT_INT 7'h60 // only 7 bits are defined; upper two are 2'b00
//
// Niagara scratch-pads
// VA address of 0x20 and 0x28 are exclusive to hypervisor
//
`define TLU_SCPD_DATA_WIDTH 64
`define SCPD_RW_ADDR_WIDTH 5
`define SCPD_ASI_VA_ADDR_WIDTH 3
`define PRI_SCPD_ASI_STATE 8'h20
`define SCPD_ASI_VA_ADDR_LO 10'h000
`define SCPD_ASI_VA_ADDR_HI 10'h038
//
// range checking
`define TLU_ASI_SCPD_VA_HI 5
`define TLU_ASI_SCPD_VA_LO 3
`define HPRI_SCPD_ASI_STATE 8'h4f
`define HSCPD_ASI_VA_ADDR_LO 3'h4
`define HSCPD_ASI_VA_ADDR_HI 3'h5
// PIB related definitions
// Bit definition for events
`define PIB_INSTR_COUNT 3'bxxx
`define PIB_SB_FULL_CNT 3'b000
`define PIB_FP_INST_CNT 3'b001
`define PIB_IC_MISS_CNT 3'b010
`define PIB_DC_MISS_CNT 3'b011
`define PIB_ITLB_MISS_CNT 3'b100
`define PIB_DTLB_MISS_CNT 3'b101
`define PIB_L2_IMISS_CNT 3'b110
`define PIB_L2_DMISS_CNT 3'b111
//
// PIB related definitions
// PCR and PIC address definitions
`define PCR_ASR_ADDR 7'b0010000
`define PIC_ASR_PRIV_ADDR 7'b0110001
`define PIC_ASR_NPRIV_ADDR 7'b0010001
//
// PCR bit definitions
`define WSR_PCR_PRIV 0 // PIC privilege
`define WSR_PCR_ST 1 // supervior trace
`define WSR_PCR_UT 2 // user trace
`define WSR_PCR_SL_LO 4 // PICL event mask
`define WSR_PCR_SL_HI 6 //
`define WSR_PCR_CL_OVF 8 //
`define WSR_PCR_CH_OVF 9 //
//
`define PIB_PCR_WIDTH 8
`define PIB_PCR_PRIV 0 // PIC privilege
`define PIB_PCR_ST 1 // privilege event trace
`define PIB_PCR_UT 2 // user event trace
`define PIB_PCR_SL_LO 3 // PICL event encode
`define PIB_PCR_SL_HI 5 //
`define PIB_PCR_CL_OVF 6 //
`define PIB_PCR_CH_OVF 7 //
// PIC definitions
`define PIB_PIC_FULL_WIDTH 64
`define PIB_PIC_CNT_WIDTH 33
`define PIB_PIC_CNT_WRAP 32
`define PIB_PICH_CNT_HI 63
`define PIB_PICH_CNT_LO 32
`define PIB_PICL_CNT_HI 31
`define PIB_PICL_CNT_LO 0
`define PIB_EVQ_CNT_WIDTH 3
// PIC mask bit position definitions
`define PICL_MASK_WIDTH 8
`define PICL_MASK_SB_FULL 0
`define PICL_MASK_FP_INST 1
`define PICL_MASK_IC_MISS 2
`define PICL_MASK_DC_MISS 3
`define PICL_MASK_ITLB_MISS 4
`define PICL_MASK_DTLB_MISS 5
`define PICL_MASK_L2_IMISS 6
`define PICL_MASK_L2_DMISS 7
// added define from sparc_tlu_int.v
`define INT_THR_HI 12
`define INT_VEC_HI 5
`define INT_VEC_LO 0
`define INT_THR_HI 12
`define INT_THR_LO 8
`define INT_TYPE_HI 17
`define INT_TYPE_LO 16
`define TLU_INRR_ASI 8'h72
`define TLU_INDR_ASI 8'h73
`define TLU_INVR_ASI 8'h74
//
// shadow scan related definitions
`define TLU_SSCAN_WIDTH 63
// modified due to logic redistribution
// `define TCL_SSCAN_WIDTH 12
`define TCL_SSCAN_WIDTH 3
`define MISCTL_SSCAN_WIDTH 9
`define TDP_SSCAN_WIDTH 51
`define TDP_SSCAN_LO 0
`define TDP_SSCAN_HI 50
// `define TCL_SSCAN_LO 51
`define MISCTL_SSCAN_LO 51
`define MISCTL_SSCAN_HI 59
`define TCL_SSCAN_LO 60
`define TCL_SSCAN_HI 62
//
// position definitions - TDP
`define TDP_SSCAN_PC_LO 0
`define TDP_SSCAN_PC_HI 45
`define TDP_SSCAN_PS_IE 46
`define TDP_SSCAN_PS_PRIV 47
`define TDP_SSCAN_HPS_LO 48
`define TDP_SSCAN_HPS_HI 50
//
// position definitions - TCL
`define TCL_SSCAN_TT_LO 0
`define TCL_SSCAN_TT_HI 8
`define TCL_SSCAN_TL_LO 9
`define TCL_SSCAN_TL_HI 11
//
// To speedup POR for verification purposes
`define RSTVADDR_BASE 34'h3_ffff_c000