10Sstevel@tonic-gate /* 20Sstevel@tonic-gate * CDDL HEADER START 30Sstevel@tonic-gate * 40Sstevel@tonic-gate * The contents of this file are subject to the terms of the 51717Swesolows * Common Development and Distribution License (the "License"). 61717Swesolows * You may not use this file except in compliance with the License. 70Sstevel@tonic-gate * 80Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 90Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 100Sstevel@tonic-gate * See the License for the specific language governing permissions 110Sstevel@tonic-gate * and limitations under the License. 120Sstevel@tonic-gate * 130Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 140Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 150Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 160Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 170Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 180Sstevel@tonic-gate * 190Sstevel@tonic-gate * CDDL HEADER END 200Sstevel@tonic-gate */ 211717Swesolows 220Sstevel@tonic-gate /* 23*11304SJanie.Lu@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 240Sstevel@tonic-gate * Use is subject to license terms. 250Sstevel@tonic-gate */ 260Sstevel@tonic-gate 270Sstevel@tonic-gate #ifndef _SYS_NIAGARAREGS_H 280Sstevel@tonic-gate #define _SYS_NIAGARAREGS_H 290Sstevel@tonic-gate 300Sstevel@tonic-gate #ifdef __cplusplus 310Sstevel@tonic-gate extern "C" { 320Sstevel@tonic-gate #endif 330Sstevel@tonic-gate 340Sstevel@tonic-gate /* 350Sstevel@tonic-gate * Niagara SPARC Performance Instrumentation Counter 360Sstevel@tonic-gate */ 370Sstevel@tonic-gate #define PIC0_MASK (((uint64_t)1 << 32) - 1) /* pic0 in bits 31:0 */ 380Sstevel@tonic-gate #define PIC1_SHIFT 32 /* pic1 in bits 64:32 */ 390Sstevel@tonic-gate 400Sstevel@tonic-gate /* 410Sstevel@tonic-gate * Niagara SPARC Performance Control Register 420Sstevel@tonic-gate */ 430Sstevel@tonic-gate 44*11304SJanie.Lu@Sun.COM #define CPC_PCR_PRIVPIC 0 45*11304SJanie.Lu@Sun.COM #define CPC_PCR_SYS 1 46*11304SJanie.Lu@Sun.COM #define CPC_PCR_USR 2 470Sstevel@tonic-gate 48*11304SJanie.Lu@Sun.COM #define CPC_PCR_PIC0_SHIFT 4 49*11304SJanie.Lu@Sun.COM #define CPC_PCR_PIC1_SHIFT 0 50*11304SJanie.Lu@Sun.COM #define CPC_PCR_PIC0_MASK UINT64_C(0x7) 51*11304SJanie.Lu@Sun.COM #define CPC_PCR_PIC1_MASK UINT64_C(0) 520Sstevel@tonic-gate 53*11304SJanie.Lu@Sun.COM #define CPC_PCR_OVF_MASK UINT64_C(0x300) 54*11304SJanie.Lu@Sun.COM #define CPC_PCR_OVF_SHIFT 8 550Sstevel@tonic-gate 560Sstevel@tonic-gate /* 570Sstevel@tonic-gate * Niagara DRAM performance counters 580Sstevel@tonic-gate */ 59*11304SJanie.Lu@Sun.COM #define DRAM_BANKS 0x4 600Sstevel@tonic-gate 61*11304SJanie.Lu@Sun.COM #define DRAM_PIC0_SEL_SHIFT 0x4 62*11304SJanie.Lu@Sun.COM #define DRAM_PIC1_SEL_SHIFT 0x0 630Sstevel@tonic-gate 64*11304SJanie.Lu@Sun.COM #define DRAM_PIC0_SHIFT 0x20 65*11304SJanie.Lu@Sun.COM #define DRAM_PIC0_MASK 0x7fffffff 66*11304SJanie.Lu@Sun.COM #define DRAM_PIC1_SHIFT 0x0 67*11304SJanie.Lu@Sun.COM #define DRAM_PIC1_MASK 0x7fffffff 680Sstevel@tonic-gate 690Sstevel@tonic-gate /* 700Sstevel@tonic-gate * Niagara JBUS performance counters 710Sstevel@tonic-gate */ 720Sstevel@tonic-gate #define NIAGARA_JBUS_PIC0_SEL_SHIFT 0x4 730Sstevel@tonic-gate #define NIAGARA_JBUS_PIC1_SEL_SHIFT 0x0 740Sstevel@tonic-gate 750Sstevel@tonic-gate #define NIAGARA_JBUS_PIC0_SHIFT 0x20 760Sstevel@tonic-gate #define NIAGARA_JBUS_PIC0_MASK 0x7fffffff 770Sstevel@tonic-gate #define NIAGARA_JBUS_PIC1_SHIFT 0x0 780Sstevel@tonic-gate #define NIAGARA_JBUS_PIC1_MASK 0x7fffffff 790Sstevel@tonic-gate 800Sstevel@tonic-gate 810Sstevel@tonic-gate /* 820Sstevel@tonic-gate * Hypervisor FAST_TRAP API function numbers to get/set DRAM and 830Sstevel@tonic-gate * JBUS performance counters 840Sstevel@tonic-gate */ 850Sstevel@tonic-gate #define HV_NIAGARA_GETPERF 0x100 860Sstevel@tonic-gate #define HV_NIAGARA_SETPERF 0x101 870Sstevel@tonic-gate 881050Sgirish /* 891050Sgirish * Hypervisor FAST_TRAP API function numbers for Niagara MMU statistics 901050Sgirish */ 911050Sgirish #define HV_NIAGARA_MMUSTAT_CONF 0x102 921050Sgirish #define HV_NIAGARA_MMUSTAT_INFO 0x103 930Sstevel@tonic-gate 940Sstevel@tonic-gate /* 950Sstevel@tonic-gate * DRAM/JBUS performance counter register numbers for HV_NIAGARA_GETPERF 960Sstevel@tonic-gate * and HV_NIAGARA_SETPERF 970Sstevel@tonic-gate */ 980Sstevel@tonic-gate #define HV_NIAGARA_JBUS_CTL 0x0 990Sstevel@tonic-gate #define HV_NIAGARA_JBUS_COUNT 0x1 100*11304SJanie.Lu@Sun.COM #define HV_DRAM_CTL0 0x2 101*11304SJanie.Lu@Sun.COM #define HV_DRAM_COUNT0 0x3 102*11304SJanie.Lu@Sun.COM #define HV_DRAM_CTL1 0x4 103*11304SJanie.Lu@Sun.COM #define HV_DRAM_COUNT1 0x5 104*11304SJanie.Lu@Sun.COM #define HV_DRAM_CTL2 0x6 105*11304SJanie.Lu@Sun.COM #define HV_DRAM_COUNT2 0x7 106*11304SJanie.Lu@Sun.COM #define HV_DRAM_CTL3 0x8 107*11304SJanie.Lu@Sun.COM #define HV_DRAM_COUNT3 0x9 1080Sstevel@tonic-gate 1091050Sgirish #ifndef _ASM 1101050Sgirish 1111050Sgirish /* 1121050Sgirish * Niagara MMU statistics data structure 1131050Sgirish */ 1141050Sgirish 1151050Sgirish #define NIAGARA_MMUSTAT_PGSZS 8 1161050Sgirish 1171050Sgirish typedef struct niagara_tsbinfo { 1181050Sgirish uint64_t tsbhit_count; 1191050Sgirish uint64_t tsbhit_time; 1201050Sgirish } niagara_tsbinfo_t; 1211050Sgirish 1221050Sgirish typedef struct niagara_mmustat { 1231050Sgirish niagara_tsbinfo_t kitsb[NIAGARA_MMUSTAT_PGSZS]; 1241050Sgirish niagara_tsbinfo_t uitsb[NIAGARA_MMUSTAT_PGSZS]; 1251050Sgirish niagara_tsbinfo_t kdtsb[NIAGARA_MMUSTAT_PGSZS]; 1261050Sgirish niagara_tsbinfo_t udtsb[NIAGARA_MMUSTAT_PGSZS]; 1271050Sgirish } niagara_mmustat_t; 1281050Sgirish 1291050Sgirish 1300Sstevel@tonic-gate /* 1310Sstevel@tonic-gate * prototypes for hypervisor interface to get/set DRAM and JBUS 1320Sstevel@tonic-gate * performance counters 1330Sstevel@tonic-gate */ 1340Sstevel@tonic-gate extern uint64_t hv_niagara_setperf(uint64_t regnum, uint64_t val); 1350Sstevel@tonic-gate extern uint64_t hv_niagara_getperf(uint64_t regnum, uint64_t *val); 1361050Sgirish extern uint64_t hv_niagara_mmustat_conf(uint64_t buf, uint64_t *prev_buf); 1371050Sgirish extern uint64_t hv_niagara_mmustat_info(uint64_t *buf); 1381050Sgirish 1391050Sgirish #endif /* _ASM */ 1400Sstevel@tonic-gate 141962Stsien /* 142962Stsien * Bits defined in L2 Error Status Register 143962Stsien * 1443325Ssd77468 * (Niagara 1) 145962Stsien * +---+---+---+---+----+----+----+----+----+----+----+----+----+----+ 146962Stsien * |MEU|MEC|RW |RSV|MODA|VCID|LDAC|LDAU|LDWC|LDWU|LDRC|LDRU|LDSC|LDSU| 147962Stsien * +---+---+---+---+----+----+----+----+----+----+----+----+----+----+ 148962Stsien * 63 62 61 60 59 58-54 53 52 51 50 49 48 47 46 149962Stsien * 1503325Ssd77468 * (Niagara 2) 1513325Ssd77468 * +---+---+---+----+--------+----+----+----+----+----+----+----+----+ 1523325Ssd77468 * |MEU|MEC|RW |MODA| VCID |LDAC|LDAU|LDWC|LDWU|LDRC|LDRU|LDSC|LDSU| 1533325Ssd77468 * +---+---+---+----+--------+----+----+----+----+----+----+----+----+ 1543325Ssd77468 * 63 62 61 60 59-54 53 52 51 50 49 48 47 46 1553325Ssd77468 * 1563325Ssd77468 * (Niagara 1) 157962Stsien * +---+---+---+---+---+---+---+---+---+---+---+-------+------+ 158962Stsien * |LTC|LRU|LVU|DAC|DAU|DRC|DRU|DSC|DSU|VEC|VEU| RSVD1 | SYND | 159962Stsien * +---+---+---+---+---+---+---+---+---+---+---+-------+------+ 160962Stsien * 45 44 43 42 41 40 39 38 37 36 35 34-32 31-0 1613325Ssd77468 * 1623325Ssd77468 * (Niagara 2) 1633325Ssd77468 * +---+---+---+---+---+---+---+---+---+---+---+---+----+-----+ 1643325Ssd77468 * |LTC|LRU|LVU|DAC|DAU|DRC|DRU|DSC|DSU|VEC|VEU|LVC|RSVD| SYND| 1653325Ssd77468 * +---+---+---+---+---+---+---+---+---+---+---+---+----+-----+ 1663325Ssd77468 * 45 44 43 42 41 40 39 38 37 36 35 34 33-28 27-0 1673325Ssd77468 * 1683325Ssd77468 * Note that relative to error status bits, Niagara-1 is a strict subset of 1693325Ssd77468 * Niagara-2. 170962Stsien */ 1713325Ssd77468 1721717Swesolows #define NI_L2AFSR_MEU 0x8000000000000000ULL 1731717Swesolows #define NI_L2AFSR_MEC 0x4000000000000000ULL 1741717Swesolows #define NI_L2AFSR_RW 0x2000000000000000ULL 1753325Ssd77468 #define NI2_L2AFSR_MODA 0x1000000000000000ULL 1763325Ssd77468 #define NI1_L2AFSR_MODA 0x0800000000000000ULL 1771717Swesolows #define NI_L2AFSR_VCID 0x07C0000000000000ULL 1781717Swesolows #define NI_L2AFSR_LDAC 0x0020000000000000ULL 1791717Swesolows #define NI_L2AFSR_LDAU 0x0010000000000000ULL 1801717Swesolows #define NI_L2AFSR_LDWC 0x0008000000000000ULL 1811717Swesolows #define NI_L2AFSR_LDWU 0x0004000000000000ULL 1821717Swesolows #define NI_L2AFSR_LDRC 0x0002000000000000ULL 1831717Swesolows #define NI_L2AFSR_LDRU 0x0001000000000000ULL 1841717Swesolows #define NI_L2AFSR_LDSC 0x0000800000000000ULL 1851717Swesolows #define NI_L2AFSR_LDSU 0x0000400000000000ULL 1861717Swesolows #define NI_L2AFSR_LTC 0x0000200000000000ULL 1871717Swesolows #define NI_L2AFSR_LRU 0x0000100000000000ULL 1881717Swesolows #define NI_L2AFSR_LVU 0x0000080000000000ULL 1891717Swesolows #define NI_L2AFSR_DAC 0x0000040000000000ULL 1901717Swesolows #define NI_L2AFSR_DAU 0x0000020000000000ULL 1911717Swesolows #define NI_L2AFSR_DRC 0x0000010000000000ULL 1921717Swesolows #define NI_L2AFSR_DRU 0x0000008000000000ULL 1931717Swesolows #define NI_L2AFSR_DSC 0x0000004000000000ULL 1941717Swesolows #define NI_L2AFSR_DSU 0x0000002000000000ULL 1951717Swesolows #define NI_L2AFSR_VEC 0x0000001000000000ULL 1961717Swesolows #define NI_L2AFSR_VEU 0x0000000800000000ULL 1973325Ssd77468 #define NI_L2AFSR_LVC 0x0000000400000000ULL 1983325Ssd77468 #define NI1_L2AFSR_SYND 0x00000000FFFFFFFFULL 1993325Ssd77468 #define NI2_L2AFSR_SYND 0x000000000FFFFFFFULL 200962Stsien 201962Stsien /* 202962Stsien * These L2 bit masks are used to determine if another bit of higher priority 203962Stsien * is set. This tells us whether the reported syndrome and address are valid 204962Stsien * for this ereport. If the error in hand is Pn, use Pn-1 to bitwise & with 205962Stsien * the l2-afsr value. If result is 0, then this ereport's afsr is valid. 206962Stsien */ 207962Stsien #define NI_L2AFSR_P01 (NI_L2AFSR_LVU) 208962Stsien #define NI_L2AFSR_P02 (NI_L2AFSR_P01 | NI_L2AFSR_LRU) 209962Stsien #define NI_L2AFSR_P03 (NI_L2AFSR_P02 | NI_L2AFSR_LDAU | NI_L2AFSR_LDSU) 210962Stsien #define NI_L2AFSR_P04 (NI_L2AFSR_P03 | NI_L2AFSR_LDWU) 211962Stsien #define NI_L2AFSR_P05 (NI_L2AFSR_P04 | NI_L2AFSR_LDRU) 212962Stsien #define NI_L2AFSR_P06 (NI_L2AFSR_P05 | NI_L2AFSR_DAU | NI_L2AFSR_DRU) 2133325Ssd77468 #define NI_L2AFSR_P07 (NI_L2AFSR_P06 | NI_L2AFSR_LVC) 2143325Ssd77468 #define NI_L2AFSR_P08 (NI_L2AFSR_P07 | NI_L2AFSR_LTC) 2153325Ssd77468 #define NI_L2AFSR_P09 (NI_L2AFSR_P08 | NI_L2AFSR_LDAC | NI_L2AFSR_LDSC) 2163325Ssd77468 #define NI_L2AFSR_P10 (NI_L2AFSR_P09 | NI_L2AFSR_LDWC) 2173325Ssd77468 #define NI_L2AFSR_P11 (NI_L2AFSR_P10 | NI_L2AFSR_LDRC) 2183325Ssd77468 #define NI_L2AFSR_P12 (NI_L2AFSR_P11 | NI_L2AFSR_DAC | NI_L2AFSR_DRC) 219962Stsien 220962Stsien /* 2213325Ssd77468 * Bits defined in DRAM Error Status Register (Niagara-2) 2223325Ssd77468 * Niagara-1 is strict subset 223962Stsien * 2243325Ssd77468 * +---+---+---+---+---+---+---+---+---+---+----------+------+ 2253325Ssd77468 * |MEU|MEC|DAC|DAU|DSC|DSU|DBU|MEB|FBU|FBR| RESERVED | SYND | 2263325Ssd77468 * +---+---+---+---+---+---+---+---+---+---+----------+------+ 2273325Ssd77468 * 63 62 61 60 59 58 57 56 55 54 53-16 15-0 228962Stsien * 229962Stsien */ 2301717Swesolows #define NI_DMAFSR_MEU 0x8000000000000000ULL 2311717Swesolows #define NI_DMAFSR_MEC 0x4000000000000000ULL 2321717Swesolows #define NI_DMAFSR_DAC 0x2000000000000000ULL 2331717Swesolows #define NI_DMAFSR_DAU 0x1000000000000000ULL 2341717Swesolows #define NI_DMAFSR_DSC 0x0800000000000000ULL 2351717Swesolows #define NI_DMAFSR_DSU 0x0400000000000000ULL 2361717Swesolows #define NI_DMAFSR_DBU 0x0200000000000000ULL 2373325Ssd77468 #define NI_DMAFSR_MEB 0x0100000000000000ULL 2383325Ssd77468 #define NI_DMAFSR_FBU 0x0080000000000000ULL 2393325Ssd77468 #define NI_DMAFSR_FBR 0x0040000000000000ULL 2401717Swesolows #define NI_DMAFSR_SYND 0x000000000000FFFFULL 241962Stsien 242962Stsien /* Bit mask for DRAM priority determination */ 2433325Ssd77468 #define NI_DMAFSR_P01 (NI_DMAFSR_DSU | NI_DMAFSR_DAU | NI_DMAFSR_FBU) 244962Stsien 245962Stsien /* 246962Stsien * The following is the syndrome value placed in memory 247962Stsien * when an uncorrectable error is written back from L2 cache. 248962Stsien */ 249962Stsien #define NI_DRAM_POISON_SYND_FROM_LDWU 0x1118 2505138Std122701 #define N2_DRAM_POISON_SYND_FROM_LDWU 0x8221 251962Stsien 252962Stsien /* 253962Stsien * This L2 poison syndrome is placed on 4 byte checkwords of L2 254962Stsien * when a UE is loaded or DMA'ed into L2 255962Stsien */ 256962Stsien #define NI_L2_POISON_SYND_FROM_DAU 0x3 257962Stsien #define NI_L2_POISON_SYND_MASK 0x7F 258962Stsien #define NI_L2_POISON_SYND_SIZE 7 259962Stsien 2600Sstevel@tonic-gate #ifdef __cplusplus 2610Sstevel@tonic-gate } 2620Sstevel@tonic-gate #endif 2630Sstevel@tonic-gate 2640Sstevel@tonic-gate #endif /* _SYS_NIAGARAREGS_H */ 265