xref: /illumos-gate/usr/src/uts/sun4u/sys/pci/pcisch.h (revision 65a89a64c60f3061bbe2381edaacc81660af9a95)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _SYS_PCISCH_H
28 #define	_SYS_PCISCH_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef	__cplusplus
33 extern "C" {
34 #endif
35 
36 /*
37  * Performance counters information.
38  */
39 #define	SCHIZO_SHIFT_PIC0	4
40 #define	SCHIZO_SHIFT_PIC1	11
41 
42 /*
43  * Schizo-specific register offsets & bit field positions.
44  */
45 
46 /*
47  * [msb]				[lsb]
48  * 0x00 <chip_type> <version#> <module-revision#>
49  */
50 #define	SCHIZO_VER_10		CHIP_ID(PCI_CHIP_SCHIZO, 0x00, 0x00)
51 #define	SCHIZO_VER_20		CHIP_ID(PCI_CHIP_SCHIZO, 0x02, 0x00)
52 #define	SCHIZO_VER_21		CHIP_ID(PCI_CHIP_SCHIZO, 0x03, 0x00)
53 #define	SCHIZO_VER_22		CHIP_ID(PCI_CHIP_SCHIZO, 0x04, 0x00)
54 #define	SCHIZO_VER_23		CHIP_ID(PCI_CHIP_SCHIZO, 0x05, 0x00)
55 #define	SCHIZO_VER_24		CHIP_ID(PCI_CHIP_SCHIZO, 0x06, 0x00)
56 #define	SCHIZO_VER_25		CHIP_ID(PCI_CHIP_SCHIZO, 0x07, 0x00)
57 #define	XMITS_VER_10		CHIP_ID(PCI_CHIP_XMITS, 0x05, 0x01)
58 #define	XMITS_VER_21		CHIP_ID(PCI_CHIP_XMITS, 0x05, 0x03)
59 #define	XMITS_VER_30		CHIP_ID(PCI_CHIP_XMITS, 0x05, 0x04)
60 #define	TOMATILLO_VER_10	CHIP_ID(PCI_CHIP_TOMATILLO, 0x00, 0x00)
61 #define	TOMATILLO_VER_20	CHIP_ID(PCI_CHIP_TOMATILLO, 0x01, 0x00)
62 #define	TOMATILLO_VER_21	CHIP_ID(PCI_CHIP_TOMATILLO, 0x02, 0x00)
63 #define	TOMATILLO_VER_22	CHIP_ID(PCI_CHIP_TOMATILLO, 0x03, 0x00)
64 #define	TOMATILLO_VER_23	CHIP_ID(PCI_CHIP_TOMATILLO, 0x04, 0x00)
65 #define	TOMATILLO_VER_24	CHIP_ID(PCI_CHIP_TOMATILLO, 0X05, 0X00)
66 
67 /*
68  * Offsets of Control Block registers ("reg" property 2nd entry)
69  */
70 #define	SCHIZO_CB_CSR_OFFSET			0x0	/* reg 1 */
71 #define	SCHIZO_CB_ERRCTRL_OFFSET		0x8
72 #define	SCHIZO_CB_INTCTRL_OFFSET		0x10
73 #define	SCHIZO_CB_ERRLOG_OFFSET			0x18
74 #define	SCHIZO_CB_ECCCTRL_OFFSET		0x20
75 #define	SCHIZO_CB_UEAFSR_OFFSET			0x30
76 #define	SCHIZO_CB_UEAFAR_OFFSET			0x38
77 #define	SCHIZO_CB_CEAFSR_OFFSET			0x40
78 #define	SCHIZO_CB_CEAFAR_OFFSET			0x48
79 #define	SCHIZO_CB_ESTRCTRL_OFFSET		0x50
80 #define	XMITS_CB_SOFT_PAUSE_OFFSET		0x58
81 #define	XMITS_CB_IO_LOOPBACK_CONTROL_OFFSET	0x60
82 #define	XMITS_CB_SAF_PED_CONTROL_OFFSET		0x68
83 #define	XMITS_CB_SAF_PED_LOG_OFFSET		0x70
84 #define	XMITS_CB_SAF_PAR_INJECT_IMM_OFFSET	0x78
85 #define	XMITS_CB_SAF_PAR_INJECT_1_OFFSET	0x80
86 #define	XMITS_CB_SAF_PAR_INJECT_0_OFFSET	0x88
87 #define	XMITS_CB_FIRST_ERROR_LOG		0x90
88 #define	XMITS_CB_FIRST_ERROR_ADDR		0x98
89 #define	XMITS_CB_PCI_LEAF_STATUS		0xA0
90 
91 /*
92  * Tomatillo only bits in IOMMU control registers.
93  */
94 #define	TOMATILLO_IOMMU_SEG_DISP_SHIFT		4
95 #define	TOMATILLO_IOMMU_TSB_MAX			7
96 #define	TOMATIILO_IOMMU_ERR_REG_SHIFT		24
97 #define	TOMATILLO_IOMMU_ERRSTS_SHIFT		25
98 #define	TOMATILLO_IOMMU_ERR			(1ull << 24)
99 #define	TOMATILLO_IOMMU_ERRSTS			(3ull << 25)
100 #define	TOMATILLO_IOMMU_ERR_ILLTSBTBW		(1ull << 27)
101 #define	TOMATILLO_IOMMU_ERR_BAD_VA		(1ull << 28)
102 
103 #define	TOMATILLO_IOMMU_PROTECTION_ERR		0x0
104 #define	TOMATILLO_IOMMU_INVALID_ERR		0x1
105 #define	TOMATILLO_IOMMU_TIMEOUT_ERR		0x2
106 #define	TOMATILLO_IOMMU_ECC_ERR			0x3
107 
108 /*
109  * Offsets of performance monitoring registers.
110  */
111 #define	SCHIZO_PERF_PCI_PCR_OFFSET		0x00000100
112 #define	SCHIZO_PERF_PCI_PIC_OFFSET		0x00000108
113 #define	SCHIZO_PERF_PCI_ICD_OFFSET		0x00000110
114 #define	SCHIZO_PERF_SAF_PCR_OFFSET		0x00007000
115 #define	SCHIZO_PERF_SAF_PIC_OFFSET		0x00007008
116 
117 /*
118  * Offsets of registers in the PBM block:
119  */
120 #define	SCHIZO_PCI_CTRL_REG_OFFSET		0x2000
121 #define	SCHIZO_PCI_ASYNC_FLT_STATUS_REG_OFFSET	0x2010
122 #define	SCHIZO_PCI_ASYNC_FLT_ADDR_REG_OFFSET	0x2018
123 #define	SCHIZO_PCI_DIAG_REG_OFFSET		0x2020
124 #define	SCHIZO_PCI_ESTAR_REG_OFFSET		0x2028
125 #define	TOMATILLO_TGT_ADDR_SPACE_OFFSET		0x2490
126 #define	TOMATILLO_TGT_ERR_VALOG_OFFSET		0x2498
127 
128 #define	XMITS10_PCI_X_ERROR_STATUS_REG_OFFSET	0x2030
129 #define	XMITS10_PCI_X_DIAG_REG_OFFSET		0x2038
130 #define	XMITS_PCI_X_ERROR_STATUS_REG_OFFSET	0x2300
131 #define	XMITS_PCI_X_DIAG_REG_OFFSET		0x2308
132 #define	XMITS_PARITY_DETECT_REG_OFFSET		0x2040
133 #define	XMITS_PARITY_LOG_REG_OFFSET		0x2048
134 #define	XMITS_PARITY_INJECT_REG_OFFSET		0x2050
135 #define	XMITS_PARITY_INJECT_1_REG_OFFSET	0x2058
136 #define	XMITS_PARITY_INJECT_0_REG_OFFSET	0x2060
137 #define	XMITS_UPPER_RETRY_COUNTER_REG_OFFSET	0x2310
138 
139 /*
140  * Offsets of IO Cache Registers:
141  */
142 #define	TOMATILLO_IOC_CSR_OFF			0x2248
143 #define	TOMATILLO_IOC_TAG_OFF			0x2250
144 #define	TOMATIILO_IOC_DAT_OFF			0x2290
145 
146 /*
147  * Offsets of registers in the iommu block:
148  */
149 #define	SCHIZO_IOMMU_FLUSH_CTX_REG_OFFSET	0x00000218
150 #define	TOMATILLO_IOMMU_ERR_TFAR_OFFSET		0x0220
151 
152 /*
153  * Offsets of registers in the streaming cache block:
154  */
155 #define	SCHIZO_SC_CTRL_REG_OFFSET		0x00002800
156 #define	SCHIZO_SC_INVL_REG_OFFSET		0x00002808
157 #define	SCHIZO_SC_SYNC_REG_OFFSET		0x00002810
158 #define	SCHIZO_SC_CTX_INVL_REG_OFFSET		0x00002818
159 #define	SCHIZO_SC_CTX_MATCH_REG_OFFSET		0x00010000
160 #define	SCHIZO_SC_DATA_DIAG_OFFSET		0x0000b000
161 #define	SCHIZO_SC_TAG_DIAG_OFFSET		0x0000ba00
162 #define	SCHIZO_SC_LTAG_DIAG_OFFSET		0x0000bb00
163 
164 /*
165  * MAX_PRF when enabled will always prefetch the max of 8
166  * prefetches if possible.
167  */
168 #define	XMITS_SC_MAX_PRF			(0x1ull << 7)
169 
170 /*
171  * Offsets of registers in the PCI Idle Check Diagnostics Register.
172  */
173 #define	SCHIZO_PERF_PCI_ICD_DMAW_PARITY_INT_ENABLE	0x4000
174 #define	SCHIZO_PERF_PCI_ICD_PCI_2_0_COMPATIBLE		0x8000
175 
176 /*
177  * Offsets of registers in the interrupt block:
178  */
179 #define	SCHIZO_IB_SLOT_INTR_MAP_REG_OFFSET	0x1100
180 #define	SCHIZO_IB_INTR_MAP_REG_OFFSET		0x1000
181 #define	SCHIZO_IB_CLEAR_INTR_REG_OFFSET		0x1400
182 #define	SCHIZO_PBM_DMA_SYNC_REG_OFFSET		0x1A08
183 #define	PBM_DMA_SYNC_COMP_REG_OFFSET		0x1A10
184 #define	PBM_DMA_SYNC_PEND_REG_OFFSET		0x1A18
185 
186 /*
187  * Address space offsets and sizes:
188  */
189 #define	SCHIZO_SIZE				0x0000800000000000ull
190 
191 /*
192  * Schizo-specific fields of interrupt mapping register:
193  */
194 #define	SCHIZO_INTR_MAP_REG_NID			0x0000000003E00000ull
195 #define	SCHIZO_INTR_MAP_REG_NID_SHIFT		21
196 
197 /*
198  * schizo ECC UE AFSR bit definitions:
199  */
200 #define	SCHIZO_ECC_UE_AFSR_ERRPNDG		0x0300000000000000ull
201 #define	SCHIZO_ECC_UE_AFSR_MASK			0x000003ff00000000ull
202 #define	SCHIZO_ECC_UE_AFSR_MASK_SHIFT		32
203 #define	SCHIZO_ECC_UE_AFSR_QW_OFFSET		0x00000000C0000000ull
204 #define	SCHIZO_ECC_UE_AFSR_QW_OFFSET_SHIFT	30
205 #define	SCHIZO_ECC_UE_AFSR_AGENT_MID		0x000000001f000000ull
206 #define	SCHIZO_ECC_UE_AFSR_AGENT_MID_SHIFT	24
207 #define	SCHIZO_ECC_UE_AFSR_PARTIAL		0x0000000000800000ull
208 #define	SCHIZO_ECC_UE_AFSR_OWNED_IN		0x0000000000400000ull
209 #define	SCHIZO_ECC_UE_AFSR_MTAG_SYND		0x00000000000f0000ull
210 #define	SCHIZO_ECC_UE_AFSR_MTAG_SYND_SHIFT	16
211 #define	SCHIZO_ECC_UE_AFSR_MTAG			0x000000000000e000ull
212 #define	SCHIZO_ECC_UE_AFSR_MTAG_SHIFT		13
213 #define	SCHIZO_ECC_UE_AFSR_SYND			0x00000000000001ffull
214 #define	SCHIZO_ECC_UE_AFSR_SYND_SHIFT		0
215 
216 /*
217  * schizo ECC CE AFSR bit definitions:
218  */
219 #define	SCHIZO_ECC_CE_AFSR_ERRPNDG		0x0300000000000000ull
220 #define	SCHIZO_ECC_CE_AFSR_MASK			0x000003ff00000000ull
221 #define	SCHIZO_ECC_CE_AFSR_MASK_SHIFT		32
222 #define	SCHIZO_ECC_CE_AFSR_QW_OFFSET		0x00000000C0000000ull
223 #define	SCHIZO_ECC_CE_AFSR_QW_OFFSET_SHIFT	30
224 #define	SCHIZO_ECC_CE_AFSR_AGENT_MID		0x000000001f000000ull
225 #define	SCHIZO_ECC_CE_AFSR_AGENT_MID_SHIFT	24
226 #define	SCHIZO_ECC_CE_AFSR_PARTIAL		0x0000000000800000ull
227 #define	SCHIZO_ECC_CE_AFSR_OWNED_IN		0x0000000000400000ull
228 #define	SCHIZO_ECC_CE_AFSR_MTAG_SYND		0x00000000000f0000ull
229 #define	SCHIZO_ECC_CE_AFSR_MTAG_SYND_SHIFT	16
230 #define	SCHIZO_ECC_CE_AFSR_MTAG			0x000000000000e000ull
231 #define	SCHIZO_ECC_CE_AFSR_MTAG_SHIFT		13
232 #define	SCHIZO_ECC_CE_AFSR_SYND			0x00000000000001ffull
233 #define	SCHIZO_ECC_CE_AFSR_SYND_SHIFT		0
234 
235 /*
236  * schizo ECC UE/CE AFAR bit definitions:
237  */
238 #define	SCHIZO_ECC_AFAR_IO_TXN			0x0000080000000000ull
239 #define	SCHIZO_ECC_AFAR_PIOW_MASK		0x0000078000000000ull
240 #define	SCHIZO_ECC_AFAR_PIOW_UPA64S		0x0000078000000000ull
241 #define	SCHIZO_ECC_AFAR_PIOW_NL_REG		0x0000040000000000ull
242 #define	SCHIZO_ECC_AFAR_PIOW_NL			0x0000050000000000ull
243 #define	SCHIZO_ECC_AFAR_PIOW_NL_ALT		0x0000051000000000ull
244 #define	SCHIZO_ECC_AFAR_PIOW_PCIA_REG		0x0000020000000000ull
245 #define	SCHIZO_ECC_AFAR_PIOW_PCIA_MEM		0x0000030000000000ull
246 #define	SCHIZO_ECC_AFAR_PIOW_PCIA_CFGIO		0x0000031000000000ull
247 #define	SCHIZO_ECC_AFAR_PIOW_PCIB_REG		0x0000000000000000ull
248 #define	SCHIZO_ECC_AFAR_PIOW_PCIB_MEM		0x0000010000000000ull
249 #define	SCHIZO_ECC_AFAR_PIOW_PCIB_CFGIO		0x0000011000000000ull
250 #define	SCHIZO_ECC_AFAR_PIOW_SAFARI_REGS	0x0000060000000000ull
251 #define	SCHIZO_ECC_AFAR_PIOW_ADDR_MASK		0x0000000fffffffffull
252 #define	SCHIZO_ECC_AFAR_ADDR_MASK		0x000007ffffffffffull
253 
254 /*
255  * schizo pci control register bits:
256  */
257 #define	SCHIZO_PCI_CTRL_BUS_UNUSABLE		(1ull << 63)
258 #define	TOMATILLO_PCI_CTRL_PCI_DTO_ERR		(1ull << 62)
259 #define	TOMATILLO_PCI_CTRL_DTO_INT_EN		(1ull << 61)
260 #define	SCHIZO_PCI_CTRL_ERR_SLOT_LOCK		(1ull << 51)
261 #define	SCHIZO_PCI_CTRL_ERR_SLOT		(7ull << 48)
262 #define	SCHIZO_PCI_CTRL_ERR_SLOT_SHIFT		48
263 #define	SCHIZO_PCI_CTRL_PCI_TTO_ERR		(1ull << 38)
264 #define	SCHIZO_PCI_CTRL_PCI_RTRY_ERR		(1ull << 37)
265 #define	SCHIZO_PCI_CTRL_PCI_MMU_ERR		(1ull << 36)
266 #define	TOMATILLO_PCI_CTRL_PEN_RD_MLTPL		(1ull << 30)
267 #define	TOMATILLO_PCI_CTRL_PEN_RD_ONE		(1ull << 29)
268 #define	TOMATILLO_PCI_CTRL_PEN_RD_LINE		(1ull << 28)
269 #define	TOMATILLO_PCI_CTRL_FRC_TRGT_ABRT	(1ull << 27)
270 #define	TOMATILLO_PCI_CTRL_FRC_TRGT_RTRY	(1ull << 26)
271 #define	SCHIZO_PCI_CTRL_PTO			(3ull << 24)
272 #define	SCHIZO_PCI_CTRL_PTO_SHIFT		24
273 #define	TOMATILLO_PCI_CTRL_TRGT_RW_STL_WT	(3ull << 21)
274 #define	TOMATILLO_PCI_CTRL_TRGT_RW_STL_WT_SHIFT	21
275 #define	SCHIZO_PCI_CTRL_MMU_INT_EN		(1ull << 19)
276 #define	SCHIZO_PCI_CTRL_SBH_INT_EN		(1ull << 18)
277 #define	SCHIZO_PCI_CTRL_ERR_INT_EN		(1ull << 17)
278 #define	SCHIZO_PCI_CTRL_ARB_PARK		(1ull << 16)
279 #define	SCHIZO_PCI_CTRL_RST			(1ull << 8)
280 #define	SCHIZO_PCI_CTRL_ARB_EN_MASK		0xffull
281 
282 #define	XMITS10_PCI_CTRL_ARB_EN_MASK		0x0full
283 #define	XMITS_PCI_CTRL_X_MODE			(0x1ull << 32)
284 #define	XMITS_PCI_CTRL_X_ERRINT_EN		(0x1ull << 20)
285 #define	XMITS_PCI_CTRL_DMA_WR_PERR		(0x1ull << 51)
286 
287 /*
288  * schizo PCI asynchronous fault status register bit definitions:
289  */
290 #define	SCHIZO_PCI_AFSR_PE_SHIFT		58
291 #define	SCHIZO_PCI_AFSR_SE_SHIFT		52
292 #define	SCHIZO_PCI_AFSR_E_MA			0x0000000000000020ull
293 #define	SCHIZO_PCI_AFSR_E_TA			0x0000000000000010ull
294 #define	SCHIZO_PCI_AFSR_E_RTRY			0x0000000000000008ull
295 #define	SCHIZO_PCI_AFSR_E_PERR			0x0000000000000004ull
296 #define	SCHIZO_PCI_AFSR_E_TTO			0x0000000000000002ull
297 #define	SCHIZO_PCI_AFSR_E_UNUSABLE		0x0000000000000001ull
298 #define	SCHIZO_PCI_AFSR_E_MASK			0x000000000000003full
299 #define	SCHIZO_PCI_AFSR_DWORDMASK		0x0000030000000000ull
300 #define	SCHIZO_PCI_AFSR_DWORDMASK_SHIFT		40
301 #define	SCHIZO_PCI_AFSR_BYTEMASK		0x000000ff00000000ull
302 #define	SCHIZO_PCI_AFSR_BYTEMASK_SHIFT		32
303 #define	SCHIZO_PCI_AFSR_BLK			0x0000000080000000ull
304 #define	SCHIZO_PCI_AFSR_CONF_SPACE		0x0000000040000000ull
305 #define	SCHIZO_PCI_AFSR_MEM_SPACE		0x0000000020000000ull
306 #define	SCHIZO_PCI_AFSR_IO_SPACE		0x0000000010000000ull
307 
308 /* Schizo/Xmits control block Safari Error log bits */
309 #define	SCHIZO_CB_ELOG_BAD_CMD			(0x1ull << 62)
310 #define	SCHIZO_CB_ELOG_SSM_DIS			(0x1ull << 61)
311 #define	SCHIZO_CB_ELOG_BAD_CMD_PCIA		(0x1ull << 60)
312 #define	SCHIZO_CB_ELOG_BAD_CMD_PCIB		(0x1ull << 59)
313 #define	XMITS_CB_ELOG_PAR_ERR_INT_PCIB		(0x1ull << 19)
314 #define	XMITS_CB_ELOG_PAR_ERR_INT_PCIA		(0x1ull << 18)
315 #define	XMITS_CB_ELOG_PAR_ERR_INT_SAF		(0x1ull << 17)
316 #define	XMITS_CB_ELOG_PLL_ERR_PCIB		(0x1ull << 16)
317 #define	XMITS_CB_ELOG_PLL_ERR_PCIA		(0x1ull << 15)
318 #define	XMITS_CB_ELOG_PLL_ERR_SAF		(0x1ull << 14)
319 #define	SCHIZO_CB_ELOG_CPU1_PAR_SINGLE		(0x1ull << 13)
320 #define	SCHIZO_CB_ELOG_CPU1_PAR_BIDI		(0x1ull << 12)
321 #define	SCHIZO_CB_ELOG_CPU0_PAR_SINGLE		(0x1ull << 11)
322 #define	SCHIZO_CB_ELOG_CPU0_PAR_BIDI		(0x1ull << 10)
323 #define	SCHIZO_CB_ELOG_SAF_CIQ_TO		(0x1ull << 9)
324 #define	SCHIZO_CB_ELOG_SAF_LPQ_TO		(0x1ull << 8)
325 #define	SCHIZO_CB_ELOG_SAF_SFPQ_TO		(0x1ull << 7)
326 #define	SCHIZO_CB_ELOG_SAF_UFPQ_TO		(0x1ull << 6)
327 #define	SCHIZO_CB_ELOG_ADDR_PAR_ERR		(0x1ull << 5)
328 #define	SCHIZO_CB_ELOG_UNMAP_ERR		(0x1ull << 4)
329 #define	SCHIZO_CB_ELOG_BUS_ERR			(0x1ull << 2)
330 #define	SCHIZO_CB_ELOG_TO_ERR			(0x1ull << 1)
331 #define	SCHIZO_CB_ELOG_DSTAT_ERR		0x1ull
332 
333 /* Used for the tomatillo micro tlb bug. errata #82 */
334 #define	SCHIZO_VPN_MASK			((1 << 19) - 1)
335 
336 /* Tomatillo control block JBUS error log bits */
337 #define	TOMATILLO_CB_ELOG_SNOOP_ERR_GR		(0x1ull << 21)
338 #define	TOMATILLO_CB_ELOG_SNOOP_ERR_PCI		(0x1ull << 20)
339 #define	TOMATILLO_CB_ELOG_SNOOP_ERR_RD		(0x1ull << 19)
340 #define	TOMATILLO_CB_ELOG_SNOOP_ERR_RDS		(0x1ull << 17)
341 #define	TOMATILLO_CB_ELOG_SNOOP_ERR_RDSA	(0x1ull << 16)
342 #define	TOMATILLO_CB_ELOG_SNOOP_ERR_OWN		(0x1ull << 15)
343 #define	TOMATILLO_CB_ELOG_SNOOP_ERR_RDO		(0x1ull << 14)
344 #define	TOMATILLO_CB_ELOG_WR_DATA_PAR_ERR	(0x1ull << 13)
345 #define	TOMATILLO_CB_ELOG_CTL_PAR_ERR		(0x1ull << 12)
346 #define	TOMATILLO_CB_ELOG_SNOOP_ERR		(0x1ull << 11)
347 #define	TOMATILLO_CB_ELOG_ILL_BYTE_EN		(0x1ull << 10)
348 #define	TOMATILLO_CB_ELOG_ILL_COH_IN		(0x1ull << 8)
349 #define	TOMATILLO_CB_ELOG_RD_DATA_PAR_ERR	(0x1ull << 6)
350 #define	TOMATILLO_CB_ELOG_TO_EXP_ERR		(0x1ull << 3)
351 
352 /* Tomatillo control block JBUS control/status bits */
353 #define	TOMATILLO_CB_CSR_CTRL_PERR_GEN		(0x1ull << 29)
354 
355 #define	XMITS_PCI_X_AFSR_P_SC_ERR		(0x1ull << 51)
356 #define	XMITS_PCI_X_AFSR_S_SC_ERR		(0x1ull << 50)
357 
358 #define	XMITS_PCIX_MSG_CLASS_MASK		0xf00
359 #define	XMITS_PCIX_MSG_INDEX_MASK		0xff
360 #define	XMITS_PCIX_MSG_MASK	\
361 		(XMITS_PCIX_MSG_CLASS_MASK | XMITS_PCIX_MSG_INDEX_MASK)
362 
363 #define	XMITS_PCI_X_P_MSG_SHIFT			16
364 #define	XMITS_PCI_X_S_MSG_SHIFT			4
365 
366 #define	PBM_AFSR_TO_PRIERR(afsr)	\
367 	(afsr >> SCHIZO_PCI_AFSR_PE_SHIFT & SCHIZO_PCI_AFSR_E_MASK)
368 #define	PBM_AFSR_TO_SECERR(afsr)	\
369 	(afsr >> SCHIZO_PCI_AFSR_SE_SHIFT & SCHIZO_PCI_AFSR_E_MASK)
370 #define	PBM_AFSR_TO_BYTEMASK(afsr)	\
371 	((afsr & SCHIZO_PCI_AFSR_BYTEMASK) >> SCHIZO_PCI_AFSR_BYTEMASK_SHIFT)
372 #define	PBM_AFSR_TO_DWORDMASK(afsr)	\
373 	((afsr & SCHIZO_PCI_AFSR_DWORDMASK) >>	\
374 		SCHIZO_PCI_AFSR_DWORDMASK_SHIFT)
375 
376 /*
377  * XMITS Upper Retry Counter Register (bits 15:0)
378  */
379 #define	XMITS_UPPER_RETRY_MASK			0xFFFF
380 
381 /*
382  * XMITS PCI-X Diagnostic Register bit definitions
383  */
384 #define	XMITS_PCI_X_DIAG_DIS_FAIR		(0x1ull << 19)
385 #define	XMITS_PCI_X_DIAG_CRCQ_VALID		(0x1ull << 18)
386 #define	XMITS_PCI_X_DIAG_SRCQ_VALID_SHIFT	10
387 #define	XMITS_PCI_X_DIAG_SRCQ_ONE		(0x1ull << 9)
388 #define	XMITS_PCI_X_DIAG_CRCQ_FLUSH		(0x1ull << 8)
389 #define	XMITS_PCI_X_DIAG_SRCQ_FLUSH_SHIFT	0
390 
391 #define	XMITS_PCI_X_DIAG_SRCQ_MASK		0xff
392 
393 /*
394  * XMITS PCI-X Error Status Register bit definitions
395  */
396 
397 #define	XMITS_PCI_X_STATUS_PE_SHIFT		58
398 #define	XMITS_PCI_X_STATUS_SE_SHIFT		50
399 #define	XMITS_PCI_X_STATUS_E_MASK		0x3f
400 #define	XMITS_PCI_X_STATUS_PFAR_MASK		0xffffffff
401 #define	XMITS_PCIX_STAT_SC_DSCRD		0x20ull
402 #define	XMITS_PCIX_STAT_SC_TTO			0x10ull
403 #define	XMITS_PCIX_STAT_SMMU			0x8ull
404 #define	XMITS_PCIX_STAT_SDSTAT			0x4ull
405 #define	XMITS_PCIX_STAT_CMMU			0x2ull
406 #define	XMITS_PCIX_STAT_CDSTAT			0x1ull
407 #define	XMITS_PCIX_STAT_SERR_ON_PERR		(1ull << 32)
408 #define	XMITS_PCIX_STAT_PERR_RECOV_INT_EN	(1ull << 33)
409 #define	XMITS_PCIX_STAT_PERR_RECOV_INT		(1ull << 34)
410 
411 /*
412  * PCI-X Message Classes and Indexes
413  */
414 #define	PCIX_CLASS_WRITE_COMPLETION		0x000
415 #define	PCIX_WRITE_COMPLETION_NORMAL		0x00
416 
417 #define	PCIX_CLASS_BRIDGE			0x100
418 #define	PCIX_BRIDGE_MASTER_ABORT		0x00
419 #define	PCIX_BRIDGE_TARGET_ABORT		0x01
420 #define	PCIX_BRIDGE_WRITE_DATA_PARITY		0x02
421 
422 #define	PCIX_CLASS_CPLT				0x200
423 #define	PCIX_CPLT_OUT_OF_RANGE			0x00
424 #define	PCIX_CPLT_SPLIT_WRITE_DATA		0x01
425 #define	XMITS_CPLT_NO_ERROR			0x80
426 #define	XMITS_CPLT_STREAM_DSTAT			0x81
427 #define	XMITS_CPLT_STREAM_MMU			0x82
428 #define	XMITS_CPLT_CONSIST_DSTAT		0x85
429 #define	XMITS_CPLT_CONSIST_MMU			0x86
430 
431 #define	PCIX_NO_CLASS				0x999
432 #define	PCIX_MULTI_ERR	1
433 #define	PCIX_SINGLE_ERR	0
434 
435 #define	PBM_PCIX_TO_PRIERR(pcix_stat)   \
436 	(pcix_stat >> XMITS_PCI_X_STATUS_PE_SHIFT & XMITS_PCI_X_STATUS_E_MASK)
437 #define	PBM_PCIX_TO_SECERR(pcix_stat)   \
438 	(pcix_stat >> XMITS_PCI_X_STATUS_SE_SHIFT & XMITS_PCI_X_STATUS_E_MASK)
439 #define	PBM_AFSR_TO_PRISPLIT(afsr)      \
440 	((afsr >> XMITS_PCI_X_P_MSG_SHIFT) & XMITS_PCIX_MSG_MASK)
441 #define	PBM_AFSR_TO_SECSPLIT(afsr)      \
442 	((afsr >> XMITS_PCI_X_S_MSG_SHIFT) & XMITS_PCIX_MSG_MASK)
443 
444 #define	PCIX_ERRREG_OFFSET (XMITS_PCI_X_ERROR_STATUS_REG_OFFSET -\
445 		SCHIZO_PCI_CTRL_REG_OFFSET)
446 
447 /*
448  * Nested message structure to allow for storing all the PCI-X
449  * split completion messages in tabular form.
450  */
451 typedef struct pcix_err_msg_rec {
452 	uint32_t msg_key;
453 	char	*msg_class;
454 	char    *msg_str;
455 } pcix_err_msg_rec_t;
456 
457 typedef struct pcix_err_tbl {
458 	uint32_t err_class;
459 	uint32_t err_rec_num;
460 	pcix_err_msg_rec_t *err_msg_tbl;
461 } pcix_err_tbl_t;
462 
463 
464 /*
465  * Tomatillo IO Cache CSR bit definitions:
466  */
467 
468 #define	TOMATILLO_WRT_PEN		(1ull << 19)
469 #define	TOMATILLO_NC_PEN_RD_MLTPL	(1ull << 18)
470 #define	TOMATILLO_NC_PEN_RD_ONE		(1ull << 17)
471 #define	TOMATILLO_NC_PEN_RD_LINE	(1ull << 16)
472 #define	TOMATILLO_PLEN_RD_MTLPL		(3ull << 14)
473 #define	TOMATILLO_PLEN_RD_ONE		(3ull << 12)
474 #define	TOMATILLO_PLEN_RD_LINE		(3ull << 10)
475 #define	TOMATILLO_POFFSET_SHIFT		3
476 #define	TOMATILLO_POFFSET		(0x7full << TOMATILLO_POFFSET_SHIFT)
477 #define	TOMATILLO_C_PEN_RD_MLTPL	(1ull << 2)
478 #define	TOMATILLO_C_PEN_RD_ONE		(1ull << 1)
479 #define	TOMATILLO_C_PEN_RD_LINE		(1ull << 0)
480 
481 /*
482  * schizo PCI diagnostic register bit definitions:
483  */
484 #define	SCHIZO_PCI_DIAG_DIS_RTRY_ARB		0x0000000000000080ull
485 
486 /*
487  * schizo IOMMU TLB TAG diagnostic register bits
488  */
489 #define	TLBTAG_CONTEXT_SHIFT		25
490 #define	TLBTAG_ERRSTAT_SHIFT		23
491 #define	TLBTAG_CONTEXT_BITS		(0xfffull << TLBTAG_CONTEXT_SHIFT)
492 #define	TLBTAG_ERRSTAT_BITS		(0x3ull << TLBTAG_ERRSTAT_SHIFT)
493 #define	TLBTAG_ERR_BIT			(0x1ull << 22)
494 #define	TLBTAG_WRITABLE_BIT		(0x1ull << 21)
495 #define	TLBTAG_STREAM_BIT		(0x1ull << 20)
496 #define	TLBTAG_PGSIZE_BIT		(0x1ull << 19)
497 #define	TLBTAG_PCIVPN_BITS		0x7ffffull
498 
499 #define	TLBTAG_ERRSTAT_PROT		0
500 #define	TLBTAG_ERRSTAT_INVALID		1
501 #define	TLBTAG_ERRSTAT_TIMEOUT		2
502 #define	TLBTAG_ERRSTAT_ECCUE		3
503 
504 /*
505  * schizo IOMMU TLB Data RAM diagnostic register bits
506  */
507 #define	TLBDATA_VALID_BIT			(0x1ull << 32)
508 #define	TLBDATA_CACHE_BIT			(0x1ull << 30)
509 #define	TLBDATA_MEMPA_BITS			((0x1ull << 30) - 1)
510 
511 extern uint_t cb_buserr_intr(caddr_t a);
512 
513 /*
514  * pbm_cdma_flag(schizo only): consistent dma sync handshake
515  */
516 #define	PBM_CDMA_DONE	0xcc /* arbitrary pattern set by interrupt handler */
517 #define	PBM_CDMA_PEND	0x55 /* arbitrary pattern set by sync requester */
518 #define	PBM_CDMA_INO_BASE	0x35    /* ino can be used for cdma sync */
519 
520 /*
521  * Estar control bit for schizo estar reg
522  */
523 #define	SCHIZO_PCI_CTRL_BUS_SPEED		0x0000000000000001ull
524 
525 #define	PCI_CMN_ID(chip_type, id) \
526 	((chip_type) == PCI_CHIP_TOMATILLO ? ((id) >> 1) << 1 : (id))
527 #define	PCI_ID_TO_IGN(pci_id)		((pci_ign_t)((pci_id) & 0x1f))
528 #define	PCI_ID_TO_NODEID(pci_id)	((cb_nid_t)((pci_id) >> PCI_IGN_BITS))
529 
530 #define	PCI_BRIDGE_TYPE(cmn_p) \
531 	(((cmn_p->pci_chip_id >> 16) == PCI_CHIP_SCHIZO) ? PCI_SCHIZO : \
532 	((cmn_p->pci_chip_id >> 16) == PCI_CHIP_TOMATILLO) ? PCI_TOMATILLO : \
533 	((cmn_p->pci_chip_id >> 16) == PCI_CHIP_XMITS) ? PCI_XMITS : "")
534 /*
535  * Tomatillo only
536  */
537 #define	NBIGN(ib_p)			((ib_p)->ib_ign ^ 1)
538 #define	IB_INO_TO_NBMONDO(ib_p, ino)	IB_IGN_TO_MONDO(NBIGN(ib_p), ino)
539 
540 /*
541  * Mask to tell which PCI Side we are on
542  */
543 #define	PCI_SIDE_ADDR_MASK			0x100000ull
544 
545 /*
546  * Offset from Schizo Base of Schizo CSR Base
547  */
548 #define	PBM_CTRL_OFFSET				0x410000ull
549 
550 #ifdef	__cplusplus
551 }
552 #endif
553 
554 #endif	/* _SYS_PCISCH_H */
555