xref: /onnv-gate/usr/src/uts/sun4v/sys/niagararegs.h (revision 11304:3092d1e303d6)
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