firereg.h revision 201052
1/*-
2 * Copyright (c) 2009 Marius Strobl <marius@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/sparc64/pci/firereg.h 201052 2009-12-27 16:55:44Z marius $
27 */
28
29#ifndef _SPARC64_PCI_FIREREG_H_
30#define	_SPARC64_PCI_FIREREG_H_
31
32#define	FIRE_NINTR				3	/* 2 OFW + 1 MSIq */
33#define	FIRE_NRANGE				4
34#define	FIRE_NREG				2
35
36#define	FIRE_PCI				0
37#define	FIRE_CTRL				1
38
39/* PCI configuration and status registers */
40#define	FO_PCI_INT_MAP_BASE			0x01000
41#define	FO_PCI_INT_CLR_BASE			0x01400
42#define	FO_PCI_EQ_BASE_ADDR			0x10000
43#define	FO_PCI_EQ_CTRL_SET_BASE			0x11000
44#define	FO_PCI_EQ_CTRL_CLR_BASE			0x11200
45#define	FO_PCI_EQ_TL_BASE			0x11600
46#define	FO_PCI_EQ_HD_BASE			0x11800
47#define	FO_PCI_MSI_MAP_BASE			0x20000
48#define	FO_PCI_MSI_CLR_BASE			0x28000
49#define	FO_PCI_ERR_COR				0x30000
50#define	FO_PCI_ERR_NONFATAL			0x30008
51#define	FO_PCI_ERR_FATAL			0x30010
52#define	FO_PCI_PM_PME				0x30018
53#define	FO_PCI_PME_TO_ACK			0x30020
54#define	FO_PCI_IMU_INT_EN			0x31008
55#define	FO_PCI_IMU_INT_STAT			0x31010
56#define	FO_PCI_IMU_ERR_STAT_CLR			0x31018
57#define	FO_PCI_IMU_RDS_ERR_LOG			0x31028
58#define	FO_PCI_IMU_SCS_ERR_LOG			0x31030
59#define	FO_PCI_IMU_EQS_ERR_LOG			0x31038
60#define	FO_PCI_DMC_CORE_BLOCK_INT_EN		0x31800
61#define	FO_PCI_DMC_CORE_BLOCK_ERR_STAT		0x31808
62#define	FO_PCI_MULTI_CORE_ERR_STAT		0x31810
63#define	FO_PCI_MSI_32_BIT_ADDR			0x34000
64#define	FO_PCI_MSI_64_BIT_ADDR			0x34008
65#define	FO_PCI_MMU				0x40000
66#define	FO_PCI_MMU_INT_EN			0x41008
67#define	FO_PCI_MMU_INT_STAT			0x41010
68#define	FO_PCI_MMU_ERR_STAT_CLR			0x41018
69#define	FO_PCI_MMU_TRANS_FAULT_ADDR		0x41028
70#define	FO_PCI_MMU_TRANS_FAULT_STAT		0x41030
71#define	FO_PCI_ILU_INT_EN			0x51008
72#define	FO_PCI_ILU_INT_STAT			0x51010
73#define	FO_PCI_ILU_ERR_STAT_CLR			0x51018
74#define	FO_PCI_DMC_DBG_SEL_PORTA		0x53000
75#define	FO_PCI_DMC_DBG_SEL_PORTB		0x53008
76#define	FO_PCI_PEC_CORE_BLOCK_INT_EN		0x51800
77#define	FO_PCI_PEC_CORE_BLOCK_INT_STAT		0x51808
78#define	FO_PCI_TLU_CTRL				0x80000
79#define	FO_PCI_TLU_OEVENT_INT_EN		0x81008
80#define	FO_PCI_TLU_OEVENT_INT_STAT		0x81010
81#define	FO_PCI_TLU_OEVENT_STAT_CLR		0x81018
82#define	FO_PCI_TLU_RX_OEVENT_HDR1_LOG		0x81028
83#define	FO_PCI_TLU_RX_OEVENT_HDR2_LOG		0x81030
84#define	FO_PCI_TLU_TX_OEVENT_HDR1_LOG		0x81038
85#define	FO_PCI_TLU_TX_OEVENT_HDR2_LOG		0x81040
86#define	FO_PCI_TLU_DEV_CTRL			0x90008
87#define	FO_PCI_TLU_LNK_CTRL			0x90020
88#define	FO_PCI_TLU_LNK_STAT			0x90028
89#define	FO_PCI_TLU_UERR_INT_EN			0x91008
90#define	FO_PCI_TLU_UERR_INT_STAT		0x91010
91#define	FO_PCI_TLU_UERR_STAT_CLR		0x91018
92#define	FO_PCI_TLU_RX_UERR_HDR1_LOG		0x91028
93#define	FO_PCI_TLU_RX_UERR_HDR2_LOG		0x91030
94#define	FO_PCI_TLU_TX_UERR_HDR1_LOG		0x91038
95#define	FO_PCI_TLU_TX_UERR_HDR2_LOG		0x91040
96#define	FO_PCI_TLU_CERR_INT_EN			0xa1008
97#define	FO_PCI_TLU_CERR_INT_STAT		0xa1010
98#define	FO_PCI_TLU_CERR_STAT_CLR		0xa1018
99#define	FO_PCI_LPU_RST				0xe2008
100#define	FO_PCI_LPU_INT_STAT			0xe2040
101#define	FO_PCI_LPU_INT_MASK			0xe0248
102#define	FO_PCI_LPU_LNK_LYR_CFG			0xe2200
103#define	FO_PCI_LPU_LNK_LYR_INT_STAT		0xe2210
104#define	FO_PCI_LPU_FLW_CTRL_UPDT_CTRL		0xe2240
105#define	FO_PCI_LPU_TXLNK_FREQ_LAT_TMR_THRS	0xe2400
106#define	FO_PCI_LPU_TXLNK_RPLY_TMR_THRS		0xe2410
107#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR		0xe2430
108#define	FO_PCI_LPU_PHY_LYR_INT_STAT		0xe2610
109#define	FO_PCI_LPU_LTSSM_CFG2			0xe2788
110#define	FO_PCI_LPU_LTSSM_CFG3			0xe2790
111#define	FO_PCI_LPU_LTSSM_CFG4			0xe2798
112#define	FO_PCI_LPU_LTSSM_CFG5			0xe27a0
113
114/* PCI interrupt mapping registers */
115#define	FO_PCI_IMAP_MDO_MODE			0x8000000000000000ULL
116#define	FO_PCI_IMAP_V				0x0000000080000000ULL
117#define	FIRE_PCI_IMAP_T_JPID_MASK		0x000000007c000000ULL
118#define	FIRE_PCI_IMAP_T_JPID_SHFT		26
119#define	OBERON_PCI_IMAP_T_DESTID_MASK		0x000000007fe00000ULL
120#define	OBERON_PCI_IMAP_T_DESTID_SHFT		21
121#define	FO_PCI_IMAP_INT_CTRL_NUM_MASK		0x00000000000003c0ULL
122#define	FO_PCI_IMAP_INT_CTRL_NUM_SHFT		6
123
124/* PCI interrupt clear registers - use INTCLR_* from <machine/bus_common.h> */
125
126/* PCI event queue base address register */
127#define	FO_PCI_EQ_BASE_ADDR_BYPASS		0xfffc000000000000ULL
128#define	FO_PCI_EQ_BASE_ADDR_MASK		0xfffffffffff80000ULL
129#define	FO_PCI_EQ_BASE_ADDR_SHFT		19
130
131/* PCI event queue control set registers */
132#define	FO_PCI_EQ_CTRL_SET_ENOVERR		0x0200000000000000ULL
133#define	FO_PCI_EQ_CTRL_SET_EN			0x0000100000000000ULL
134
135/* PCI event queue control clear registers */
136#define	FO_PCI_EQ_CTRL_CLR_COVERR		0x0200000000000000ULL
137#define	FO_PCI_EQ_CTRL_CLR_E2I			0x0000800000000000ULL
138#define	FO_PCI_EQ_CTRL_CLR_DIS			0x0000100000000000ULL
139
140/* PCI event queue tail registers */
141#define	FO_PCI_EQ_TL_OVERR			0x0200000000000000ULL
142#define	FO_PCI_EQ_TL_MASK			0x000000000000007fULL
143#define	FO_PCI_EQ_TL_SHFT			0
144
145/* PCI event queue head registers */
146#define	FO_PCI_EQ_HD_MASK			0x000000000000007fULL
147#define	FO_PCI_EQ_HD_SHFT			0
148
149/* PCI MSI mapping registers */
150#define	FO_PCI_MSI_MAP_V			0x8000000000000000ULL
151#define	FO_PCI_MSI_MAP_EQWR_N			0x4000000000000000ULL
152#define	FO_PCI_MSI_MAP_EQNUM_MASK		0x000000000000003fULL
153#define	FO_PCI_MSI_MAP_EQNUM_SHFT		0
154
155/* PCI MSI clear registers */
156#define	FO_PCI_MSI_CLR_EQWR_N			0x4000000000000000ULL
157
158/*
159 * PCI IMU interrupt enable, interrupt status and error status clear
160 * registers
161 */
162#define	FO_PCI_IMU_ERR_INT_SPARE_S_MASK		0x00007c0000000000ULL
163#define	FO_PCI_IMU_ERR_INT_SPARE_S_SHFT		42
164#define	FO_PCI_IMU_ERR_INT_EQ_OVER_S		0x0000020000000000ULL
165#define	FO_PCI_IMU_ERR_INT_EQ_NOT_EN_S		0x0000010000000000ULL
166#define	FO_PCI_IMU_ERR_INT_MSI_MAL_ERR_S	0x0000008000000000ULL
167#define	FO_PCI_IMU_ERR_INT_MSI_PAR_ERR_S	0x0000004000000000ULL
168#define	FO_PCI_IMU_ERR_INT_PMEACK_MES_NOT_EN_S	0x0000002000000000ULL
169#define	FO_PCI_IMU_ERR_INT_PMPME_MES_NOT_EN_S	0x0000001000000000ULL
170#define	FO_PCI_IMU_ERR_INT_FATAL_MES_NOT_EN_S	0x0000000800000000ULL
171#define	FO_PCI_IMU_ERR_INT_NFATAL_MES_NOT_EN_S	0x0000000400000000ULL
172#define	FO_PCI_IMU_ERR_INT_COR_MES_NOT_EN_S	0x0000000200000000ULL
173#define	FO_PCI_IMU_ERR_INT_MSI_NOT_EN_S		0x0000000100000000ULL
174#define	FO_PCI_IMU_ERR_INT_SPARE_P_MASK		0x0000000000007c00ULL
175#define	FO_PCI_IMU_ERR_INT_SPARE_P_SHFT		10
176#define	FO_PCI_IMU_ERR_INT_EQ_OVER_P		0x0000000000000200ULL
177#define	FO_PCI_IMU_ERR_INT_EQ_NOT_EN_P		0x0000000000000100ULL
178#define	FO_PCI_IMU_ERR_INT_MSI_MAL_ERR_P	0x0000000000000080ULL
179#define	FO_PCI_IMU_ERR_INT_MSI_PAR_ERR_P	0x0000000000000040ULL
180#define	FO_PCI_IMU_ERR_INT_PMEACK_MES_NOT_EN_P	0x0000000000000020ULL
181#define	FO_PCI_IMU_ERR_INT_PMPME_MES_NOT_EN_P	0x0000000000000010ULL
182#define	FO_PCI_IMU_ERR_INT_FATAL_MES_NOT_EN_P	0x0000000000000008ULL
183#define	FO_PCI_IMU_ERR_INT_NFATAL_MES_NOT_EN_P	0x0000000000000004ULL
184#define	FO_PCI_IMU_ERR_INT_COR_MES_NOT_EN_P	0x0000000000000002ULL
185#define	FO_PCI_IMU_ERR_INT_MSI_NOT_EN_P		0x0000000000000001ULL
186
187/* PCI IMU RDS error log register */
188#define	FO_PCI_IMU_RDS_ERR_LOG_TYPE_MASK	0xfc00000000000000ULL
189#define	FO_PCI_IMU_RDS_ERR_LOG_TYPE_SHFT	58
190#define	FO_PCI_IMU_RDS_ERR_LOG_LENGTH_MASK	0x03ff000000000000ULL
191#define	FO_PCI_IMU_RDS_ERR_LOG_LENGTH_SHFT	48
192#define	FO_PCI_IMU_RDS_ERR_LOG_REQ_ID_MASK	0x0000ffff00000000ULL
193#define	FO_PCI_IMU_RDS_ERR_LOG_REQ_ID_SHFT	32
194#define	FO_PCI_IMU_RDS_ERR_LOG_TLP_TAG_MASK	0x00000000ff000000ULL
195#define	FO_PCI_IMU_RDS_ERR_LOG_TLP_TAG_SHFT	24
196#define	FO_PCI_IMU_RDS_ERR_LOG_BE_MCODE_MASK	0x0000000000ff0000ULL
197#define	FO_PCI_IMU_RDS_ERR_LOG_BE_MCODE_SHFT	16
198#define	FO_PCI_IMU_RDS_ERR_LOG_MSI_DATA_MASK	0x000000000000ffffULL
199#define	FO_PCI_IMU_RDS_ERR_LOG_MSI_DATA_SHFT	0
200
201/* PCI IMU SCS error log register */
202#define	FO_PCI_IMU_SCS_ERR_LOG_TYPE_MASK	0xfc00000000000000ULL
203#define	FO_PCI_IMU_SCS_ERR_LOG_TYPE_SHFT	58
204#define	FO_PCI_IMU_SCS_ERR_LOG_LENGTH_MASK	0x03ff000000000000ULL
205#define	FO_PCI_IMU_SCS_ERR_LOG_LENGTH_SHFT	48
206#define	FO_PCI_IMU_SCS_ERR_LOG_REQ_ID_MASK	0x0000ffff00000000ULL
207#define	FO_PCI_IMU_SCS_ERR_LOG_REQ_ID_SHFT	32
208#define	FO_PCI_IMU_SCS_ERR_LOG_TLP_TAG_MASK	0x00000000ff000000ULL
209#define	FO_PCI_IMU_SCS_ERR_LOG_TLP_TAG_SHFT	24
210#define	FO_PCI_IMU_SCS_ERR_LOG_BE_MODE_MASK	0x0000000000ff0000ULL
211#define	FO_PCI_IMU_SCS_ERR_LOG_BE_MCODE_SHFT	16
212#define	FO_PCI_IMU_SCS_ERR_LOG_EQ_NUM_MASK	0x000000000000003fULL
213#define	FO_PCI_IMU_SCS_ERR_LOG_EQ_NUM_SHFT	0
214
215/* PCI IMU EQS error log register */
216#define	FO_PCI_IMU_EQS_ERR_LOG_EQ_NUM_MASK	0x000000000000003fULL
217#define	FO_PCI_IMU_EQS_ERROR_LOG_EQ_NUM_SHFT	0
218
219/*
220 * PCI ERR COR, ERR NONFATAL, ERR FATAL, PM PME and PME To ACK mapping
221 * registers
222 */
223#define	FO_PCI_ERR_PME_V			0x8000000000000000ULL
224#define	FO_PCI_ERR_PME_EQNUM_MASK		0x000000000000003fULL
225#define	FO_PCI_ERR_PME_EQNUM_SHFT		0
226
227/* PCI DMC core and block interrupt enable register */
228#define	FO_PCI_DMC_CORE_BLOCK_INT_EN_DMC	0x8000000000000000ULL
229#define	FO_PCI_DMC_CORE_BLOCK_INT_EN_MMU	0x0000000000000002ULL
230#define	FO_PCI_DMC_CORE_BLOCK_INT_EN_IMU	0x0000000000000001ULL
231
232/* PCI DMC core and block error status register */
233#define	FO_PCI_DMC_CORE_BLOCK_ERR_STAT_MMU	0x0000000000000002ULL
234#define	FO_PCI_DMC_CORE_BLOCK_ERR_STAT_IMU	0x0000000000000001ULL
235
236/* PCI multi core error status register */
237#define	FO_PCI_MULTI_CORE_ERR_STAT_PEC		0x0000000000000002ULL
238#define	FO_PCI_MULTI_CORE_ERR_STAT_DMC		0x0000000000000001ULL
239
240/* PCI MSI 32-bit address register */
241#define	FO_PCI_MSI_32_BIT_ADDR_MASK		0x00000000ffff0000ULL
242#define	FO_PCI_MSI_32_BIT_ADDR_SHFT		16
243
244/* PCI MSI 64-bit address register */
245#define	FO_PCI_MSI_64_BIT_ADDR_MASK		0x0000ffffffff0000ULL
246#define	FO_PCI_MSI_64_BIT_ADDR_SHFT		16
247
248/*
249 * PCI MMU interrupt enable, interrupt status and error status clear
250 * registers
251 */
252#define	FO_PCI_MMU_ERR_INT_S_MASK		0x0000ffff00000000ULL
253#define	FO_PCI_MMU_ERR_INT_S_SHFT		32
254#define	FO_PCI_MMU_ERR_INT_TBW_DPE_S		0x0000800000000000ULL
255#define	FO_PCI_MMU_ERR_INT_TBW_ERR_S		0x0000400000000000ULL
256#define	FO_PCI_MMU_ERR_INT_TBW_UDE_S		0x0000200000000000ULL
257#define	FO_PCI_MMU_ERR_INT_TBW_DME_S		0x0000100000000000ULL
258#define	FO_PCI_MMU_ERR_INT_SPARE3_S		0x0000080000000000ULL
259#define	FO_PCI_MMU_ERR_INT_SPARE2_S		0x0000040000000000ULL
260#define	FO_PCI_MMU_ERR_INT_TTC_CAE_S		0x0000020000000000ULL
261#define	FIRE_PCI_MMU_ERR_INT_TTC_DPE_S		0x0000010000000000ULL
262#define	OBERON_PCI_MMU_ERR_INT_TTC_DUE_S	0x0000010000000000ULL
263#define	FO_PCI_MMU_ERR_INT_TTE_PRT_S		0x0000008000000000ULL
264#define	FO_PCI_MMU_ERR_INT_TTE_INV_S		0x0000004000000000ULL
265#define	FO_PCI_MMU_ERR_INT_TRN_OOR_S		0x0000002000000000ULL
266#define	FO_PCI_MMU_ERR_INT_TRN_ERR_S		0x0000001000000000ULL
267#define	FO_PCI_MMU_ERR_INT_SPARE1_S		0x0000000800000000ULL
268#define	FO_PCI_MMU_ERR_INT_SPARE0_S		0x0000000400000000ULL
269#define	FO_PCI_MMU_ERR_INT_BYP_OOR_S		0x0000000200000000ULL
270#define	FO_PCI_MMU_ERR_INT_BYP_ERR_S		0x0000000100000000ULL
271#define	FO_PCI_MMU_ERR_INT_P_MASK		0x000000000000ffffULL
272#define	FO_PCI_MMU_ERR_INT_P_SHFT		0
273#define	FO_PCI_MMU_ERR_INT_TBW_DPE_P		0x0000000000008000ULL
274#define	FO_PCI_MMU_ERR_INT_TBW_ERR_P		0x0000000000004000ULL
275#define	FO_PCI_MMU_ERR_INT_TBW_UDE_P		0x0000000000002000ULL
276#define	FO_PCI_MMU_ERR_INT_TBW_DME_P		0x0000000000001000ULL
277#define	FO_PCI_MMU_ERR_INT_SPARE3_P		0x0000000000000800ULL
278#define	FO_PCI_MMU_ERR_INT_SPARE2_P		0x0000000000000400ULL
279#define	FO_PCI_MMU_ERR_INT_TTC_CAE_P		0x0000000000000200ULL
280#define	FIRE_PCI_MMU_ERR_INT_TTC_DPE_P		0x0000000000000100ULL
281#define	OBERON_PCI_MMU_ERR_INT_TTC_DUE_P	0x0000000000000100ULL
282#define	FO_PCI_MMU_ERR_INT_TTE_PRT_P		0x0000000000000080ULL
283#define	FO_PCI_MMU_ERR_INT_TTE_INV_P		0x0000000000000040ULL
284#define	FO_PCI_MMU_ERR_INT_TRN_OOR_P		0x0000000000000020ULL
285#define	FO_PCI_MMU_ERR_INT_TRN_ERR_P		0x0000000000000010ULL
286#define	FO_PCI_MMU_ERR_INT_SPARE1_P		0x0000000000000008ULL
287#define	FO_PCI_MMU_ERR_INT_SPARE0_P		0x0000000000000004ULL
288#define	FO_PCI_MMU_ERR_INT_BYP_OOR_P		0x0000000000000002ULL
289#define	FO_PCI_MMU_ERR_INT_BYP_ERR_P		0x0000000000000001ULL
290
291/* PCI MMU translation fault address register */
292#define	FO_PCI_MMU_TRANS_FAULT_ADDR_VA_MASK	0xfffffffffffffffcULL
293#define	FO_PCI_MMU_TRANS_FAULT_ADDR_VA_SHFT	2
294
295/* PCI MMU translation fault status register */
296#define	FO_PCI_MMU_TRANS_FAULT_STAT_ENTRY_MASK	0x000001ff00000000ULL
297#define	FO_PCI_MMU_TRANS_FAULT_STAT_ENTRY_SHFT	32
298#define	FO_PCI_MMU_TRANS_FAULT_STAT_TYPE_MASK	0x00000000007f0000ULL
299#define	FO_PCI_MMU_TRANS_FAULT_STAT_TYPE_SHFT	16
300#define	FO_PCI_MMU_TRANS_FAULT_STAT_ID_MASK	0x000000000000ffffULL
301#define	FO_PCI_MMU_TRANS_FAULT_STAT_ID_SHFT	0
302
303/*
304 * PCI ILU interrupt enable, interrupt status and error status clear
305 * registers
306 */
307#define	FO_PCI_ILU_ERR_INT_SPARE3_S		0x0000008000000000ULL
308#define	FO_PCI_ILU_ERR_INT_SPARE2_S		0x0000004000000000ULL
309#define	FO_PCI_ILU_ERR_INT_SPARE1_S		0x0000002000000000ULL
310#define	FIRE_PCI_ILU_ERR_INT_IHB_PE_S		0x0000001000000000ULL
311#define	OBERON_PCI_ILU_ERR_INT_IHB_UE_S		0x0000001000000000ULL
312#define	FO_PCI_ILU_ERR_INT_SPARE3_P		0x0000000000000080ULL
313#define	FO_PCI_ILU_ERR_INT_SPARE2_P		0x0000000000000040ULL
314#define	FO_PCI_ILU_ERR_INT_SPARE1_P		0x0000000000000020ULL
315#define	FIRE_PCI_ILU_ERR_INT_IHB_PE_P		0x0000000000000010ULL
316#define	OBERON_PCI_ILU_ERR_INT_IHB_UE_P		0x0000000000000010ULL
317
318/* PCI DMC debug select registers for port a/b */
319#define	FO_PCI_DMC_DBG_SEL_PORT_BLCK_MASK	0x00000000000003c0ULL
320#define	FO_PCI_DMC_DBG_SEL_PORT_BLCK_SHFT	6
321#define	FO_PCI_DMC_DBG_SEL_PORT_SUB_MASK	0x0000000000000038ULL
322#define	FO_PCI_DMC_DBG_SEL_PORT_SUB_SHFT	3
323#define	FO_PCI_DMC_DBG_SEL_PORT_SUB_SGNL_MASK	0x0000000000000007ULL
324#define	FO_PCI_DMC_DBG_SEL_PORT_SUB_SGNL_SHFT	0
325
326/* PCI PEC core and block interrupt enable register */
327#define	FO_PCI_PEC_CORE_BLOCK_INT_EN_PEC	0x8000000000000000ULL
328#define	FO_PCI_PEC_CORE_BLOCK_INT_EN_ILU	0x0000000000000008ULL
329#define	FO_PCI_PEC_CORE_BLOCK_INT_EN_UERR	0x0000000000000004ULL
330#define	FO_PCI_PEC_CORE_BLOCK_INT_EN_CERR	0x0000000000000002ULL
331#define	FO_PCI_PEC_CORE_BLOCK_INT_EN_OEVENT	0x0000000000000001ULL
332
333/* PCI PEC core and block interrupt status register */
334#define	FO_PCI_PEC_CORE_BLOCK_INT_STAT_ILU	0x0000000000000008ULL
335#define	FO_PCI_PEC_CORE_BLOCK_INT_STAT_UERR	0x0000000000000004ULL
336#define	FO_PCI_PEC_CORE_BLOCK_INT_STAT_CERR	0x0000000000000002ULL
337#define	FO_PCI_PEC_CORE_BLOCK_INT_STAT_OEVENT	0x0000000000000001ULL
338
339/* PCI TLU control register */
340#define	FO_PCI_TLU_CTRL_L0S_TIM_MASK		0x00000000ff000000ULL
341#define	FO_PCI_TLU_CTRL_L0S_TIM_SHFT		24
342#define	FO_PCI_TLU_CTRL_NWPR_EN			0x0000000000100000ULL
343#define	FO_PCI_TLU_CTRL_CTO_SEL_MASK		0x0000000000070000ULL
344#define	FO_PCI_TLU_CTRL_CTO_SEL_SHFT		16
345#define	FO_PCI_TLU_CTRL_CFG_MASK		0x000000000000ffffULL
346#define	FO_PCI_TLU_CTRL_CFG_SHFT		0
347#define	FO_PCI_TLU_CTRL_CFG_REMAIN_DETECT_QUIET	0x0000000000000100ULL
348
349/*
350 * PCI TLU other event interrupt enable, interrupt status and status clear
351 * registers
352 */
353#define	FO_PCI_TLU_OEVENT_S_MASK		0x00ffffff00000000ULL
354#define	FO_PCI_TLU_OEVENT_S_SHFT		32
355#define	FO_PCI_TLU_OEVENT_SPARE_S		0x0080000000000000ULL
356#define	FO_PCI_TLU_OEVENT_MFC_S			0x0040000000000000ULL
357#define	FO_PCI_TLU_OEVENT_CTO_S			0x0020000000000000ULL
358#define	FO_PCI_TLU_OEVENT_NFP_S			0x0010000000000000ULL
359#define	FO_PCI_TLU_OEVENT_LWC_S			0x0008000000000000ULL
360#define	FO_PCI_TLU_OEVENT_MRC_S			0x0004000000000000ULL
361#define	FO_PCI_TLU_OEVENT_WUC_S			0x0002000000000000ULL
362#define	FO_PCI_TLU_OEVENT_RUC_S			0x0001000000000000ULL
363#define	FO_PCI_TLU_OEVENT_CRS_S			0x0000800000000000ULL
364#define	FO_PCI_TLU_OEVENT_IIP_S			0x0000400000000000ULL
365#define	FO_PCI_TLU_OEVENT_EDP_S			0x0000200000000000ULL
366#define	FIRE_PCI_TLU_OEVENT_EHP_S		0x0000100000000000ULL
367#define	OBERON_PCI_TLU_OEVENT_EHBUE_S		0x0000100000000000ULL
368#define	OBERON_PCI_TLU_OEVENT_EDBUE_S		0x0000100000000000ULL
369#define	FO_PCI_TLU_OEVENT_LIN_S			0x0000080000000000ULL
370#define	FO_PCI_TLU_OEVENT_LRS_S			0x0000040000000000ULL
371#define	FO_PCI_TLU_OEVENT_LDN_S			0x0000020000000000ULL
372#define	FO_PCI_TLU_OEVENT_LUP_S			0x0000010000000000ULL
373#define	FO_PCI_TLU_OEVENT_LPU_S_MASK		0x000000c000000000ULL
374#define	FO_PCI_TLU_OEVENT_LPU_S_SHFT		38
375#define	OBERON_PCI_TLU_OEVENT_TLUEITMO_S	0x0000008000000000ULL
376#define	FO_PCI_TLU_OEVENT_ERU_S			0x0000002000000000ULL
377#define	FO_PCI_TLU_OEVENT_ERO_S			0x0000001000000000ULL
378#define	FO_PCI_TLU_OEVENT_EMP_S			0x0000000800000000ULL
379#define	FO_PCI_TLU_OEVENT_EPE_S			0x0000000400000000ULL
380#define	FIRE_PCI_TLU_OEVENT_ERP_S		0x0000000200000000ULL
381#define	OBERON_PCI_TLU_OEVENT_ERBU_S		0x0000000200000000ULL
382#define	FIRE_PCI_TLU_OEVENT_EIP_S		0x0000000100000000ULL
383#define	OBERON_PCI_TLU_OEVENT_EIUE_S		0x0000000100000000ULL
384#define	FO_PCI_TLU_OEVENT_P_MASK		0x0000000000ffffffULL
385#define	FO_PCI_TLU_OEVENT_P_SHFT		0
386#define	FO_PCI_TLU_OEVENT_SPARE_P		0x0000000000800000ULL
387#define	FO_PCI_TLU_OEVENT_MFC_P			0x0000000000400000ULL
388#define	FO_PCI_TLU_OEVENT_CTO_P			0x0000000000200000ULL
389#define	FO_PCI_TLU_OEVENT_NFP_P			0x0000000000100000ULL
390#define	FO_PCI_TLU_OEVENT_LWC_P			0x0000000000080000ULL
391#define	FO_PCI_TLU_OEVENT_MRC_P			0x0000000000040000ULL
392#define	FO_PCI_TLU_OEVENT_WUC_P			0x0000000000020000ULL
393#define	FO_PCI_TLU_OEVENT_RUC_P			0x0000000000010000ULL
394#define	FO_PCI_TLU_OEVENT_CRS_P			0x0000000000008000ULL
395#define	FO_PCI_TLU_OEVENT_IIP_P			0x0000000000004000ULL
396#define	FO_PCI_TLU_OEVENT_EDP_P			0x0000000000002000ULL
397#define	FIRE_PCI_TLU_OEVENT_EHP_P		0x0000000000001000ULL
398#define	OBERON_PCI_TLU_OEVENT_EHBUE_P		0x0000000000001000ULL
399#define	OBERON_PCI_TLU_OEVENT_EDBUE_P		0x0000000000001000ULL
400#define	FO_PCI_TLU_OEVENT_LIN_P			0x0000000000000800ULL
401#define	FO_PCI_TLU_OEVENT_LRS_P			0x0000000000000400ULL
402#define	FO_PCI_TLU_OEVENT_LDN_P			0x0000000000000200ULL
403#define	FO_PCI_TLU_OEVENT_LUP_P			0x0000000000000100ULL
404#define	FO_PCI_TLU_OEVENT_LPU_P_MASK		0x00000000000000c0ULL
405#define	FO_PCI_TLU_OEVENT_LPU_P_SHFT		6
406#define	OBERON_PCI_TLU_OEVENT_TLUEITMO_P	0x0000000000000080ULL
407#define	FO_PCI_TLU_OEVENT_ERU_P			0x0000000000000020ULL
408#define	FO_PCI_TLU_OEVENT_ERO_P			0x0000000000000010ULL
409#define	FO_PCI_TLU_OEVENT_EMP_P			0x0000000000000008ULL
410#define	FO_PCI_TLU_OEVENT_EPE_P			0x0000000000000004ULL
411#define	FIRE_PCI_TLU_OEVENT_ERP_P		0x0000000000000002ULL
412#define	OBERON_PCI_TLU_OEVENT_ERBU_P		0x0000000000000002ULL
413#define	FIRE_PCI_TLU_OEVENT_EIP_P		0x0000000000000001ULL
414#define	OBERON_PCI_TLU_OEVENT_EIUE_P		0x0000000000000001ULL
415
416/* PCI receive/transmit DLU/TLU other event header 1/2 log registers */
417#define	FO_PCI_TLU_OEVENT_HDR_LOG_MASK		0xffffffffffffffffULL
418#define	FO_PCI_TLU_OEVENT_HDR_LOG_SHFT		0
419
420/* PCI TLU device control register */
421#define	FO_PCI_TLU_DEV_CTRL_MRRS_MASK		0x0000000000007000ULL
422#define	FO_PCI_TLU_DEV_CTRL_MRRS_SHFT		12
423#define	FO_PCI_TLU_DEV_CTRL_MPS_MASK		0x00000000000000e0ULL
424#define	FO_PCI_TLU_DEV_CTRL_MPS_SHFT		5
425
426/*
427 * PCI TLU uncorrectable error interrupt enable, interrupt status and
428 * status clear registers
429 */
430#define	FO_PCI_TLU_UERR_INT_S_MASK		0x001fffff00000000ULL
431#define	FO_PCI_TLU_UERR_INT_S_SHFT		32
432#define	FO_PCI_TLU_UERR_INT_UR_S		0x0010000000000000ULL
433#define	OBERON_PCI_TLU_UERR_INT_ECRC_S		0x0008000000000000ULL
434#define	FO_PCI_TLU_UERR_INT_MFP_S		0x0004000000000000ULL
435#define	FO_PCI_TLU_UERR_INT_ROF_S		0x0002000000000000ULL
436#define	FO_PCI_TLU_UERR_INT_UC_S		0x0001000000000000ULL
437#define	FO_PCI_TLU_UERR_INT_CA_S		0x0000800000000000ULL
438#define	FO_PCI_TLU_UERR_INT_CTO_S		0x0000400000000000ULL
439#define	FO_PCI_TLU_UERR_INT_FCP_S		0x0000200000000000ULL
440#define	FIRE_PCI_TLU_UERR_INT_PP_S		0x0000100000000000ULL
441#define	OBERON_PCI_TLU_UERR_INT_POIS_S		0x0000100000000000ULL
442#define	FO_PCI_TLU_UERR_INT_DLP_S		0x0000001000000000ULL
443#define	FO_PCI_TLU_UERR_INT_TE_S		0x0000000100000000ULL
444#define	FO_PCI_TLU_UERR_INT_P_MASK		0x00000000001fffffULL
445#define	FO_PCI_TLU_UERR_INT_P_SHFT		0
446#define	FO_PCI_TLU_UERR_INT_UR_P		0x0000000000100000ULL
447#define	OBERON_PCI_TLU_UERR_INT_ECRC_P		0x0000000000080000ULL
448#define	FO_PCI_TLU_UERR_INT_MFP_P		0x0000000000040000ULL
449#define	FO_PCI_TLU_UERR_INT_ROF_P		0x0000000000020000ULL
450#define	FO_PCI_TLU_UERR_INT_UC_P		0x0000000000010000ULL
451#define	FO_PCI_TLU_UERR_INT_CA_P		0x0000000000008000ULL
452#define	FO_PCI_TLU_UERR_INT_CTO_P		0x0000000000004000ULL
453#define	FO_PCI_TLU_UERR_INT_FCP_P		0x0000000000002000ULL
454#define	FIRE_PCI_TLU_UERR_INT_PP_P		0x0000000000001000ULL
455#define	OBERON_PCI_TLU_UERR_INT_POIS_P		0x0000000000001000ULL
456#define	FO_PCI_TLU_UERR_INT_DLP_P		0x0000000000000010ULL
457#define	FO_PCI_TLU_UERR_INT_TE_P		0x0000000000000001ULL
458
459/*
460 * PCI TLU correctable error interrupt enable, interrupt status and
461 * status clear registers
462 */
463#define	FO_PCI_TLU_CERR_INT_S_MASK		0x001fffff00000000ULL
464#define	FO_PCI_TLU_CERR_INT_S_SHFT		32
465#define	FO_PCI_TLU_CERR_INT_RTO_S		0x0000100000000000ULL
466#define	FO_PCI_TLU_CERR_INT_RNR_S		0x0000010000000000ULL
467#define	FO_PCI_TLU_CERR_INT_BDP_S		0x0000008000000000ULL
468#define	FO_PCI_TLU_CERR_INT_BTP_S		0x0000004000000000ULL
469#define	FO_PCI_TLU_CERR_INT_RE_S		0x0000000100000000ULL
470#define	FO_PCI_TLU_CERR_INT_P_MASK		0x00000000001fffffULL
471#define	FO_PCI_TLU_CERR_INT_P_SHFT		0
472#define	FO_PCI_TLU_CERR_INT_RTO_P		0x0000000000001000ULL
473#define	FO_PCI_TLU_CERR_INT_RNR_P		0x0000000000000100ULL
474#define	FO_PCI_TLU_CERR_INT_BDP_P		0x0000000000000080ULL
475#define	FO_PCI_TLU_CERR_INT_BTP_P		0x0000000000000040ULL
476#define	FO_PCI_TLU_CERR_INT_RE_P		0x0000000000000001ULL
477
478/* PCI TLU reset register */
479#define	FO_PCI_LPU_RST_WE			0x0000000080000000ULL
480#define	FO_PCI_LPU_RST_UNUSED_MASK		0x0000000000000e00ULL
481#define	FO_PCI_LPU_RST_UNUSED_SHFT		9
482#define	FO_PCI_LPU_RST_ERR			0x0000000000000100ULL
483#define	FO_PCI_LPU_RST_TXLINK			0x0000000000000080ULL
484#define	FO_PCI_LPU_RST_RXLINK			0x0000000000000040ULL
485#define	FO_PCI_LPU_RST_SMLINK			0x0000000000000020ULL
486#define	FO_PCI_LPU_RST_LTSSM			0x0000000000000010ULL
487#define	FO_PCI_LPU_RST_TXPHY			0x0000000000000008ULL
488#define	FO_PCI_LPU_RST_RXPHY			0x0000000000000004ULL
489#define	FO_PCI_LPU_RST_TXPCS			0x0000000000000002ULL
490#define	FO_PCI_LPU_RST_RXPCS			0x0000000000000001ULL
491
492/* PCI TLU link control register */
493#define	FO_PCI_TLU_LNK_CTRL_EXTSYNC		0x0000000000000080ULL
494#define	FO_PCI_TLU_LNK_CTRL_CLK			0x0000000000000040ULL
495#define	FO_PCI_TLU_LNK_CTRL_RETRAIN		0x0000000000000020ULL
496#define	FO_PCI_TLU_LNK_CTRL_DIS			0x0000000000000010ULL
497#define	FO_PCI_TLU_LNK_CTRL_RCB			0x0000000000000008ULL
498#define	FO_PCI_TLU_LNK_CTRL_ASPM_L0S_L1S	0x0000000000000003ULL
499#define	FO_PCI_TLU_LNK_CTRL_ASPM_L1S		0x0000000000000002ULL
500#define	FO_PCI_TLU_LNK_CTRL_ASPM_L0S		0x0000000000000001ULL
501#define	FO_PCI_TLU_LNK_CTRL_ASPM_DIS		0x0000000000000000ULL
502
503/* PCI TLU link status register */
504#define	FO_PCI_TLU_LNK_STAT_CLK			0x0000000000001000ULL
505#define	FO_PCI_TLU_LNK_STAT_TRAIN		0x0000000000000800ULL
506#define	FO_PCI_TLU_LNK_STAT_ERR			0x0000000000000400ULL
507#define	FO_PCI_TLU_LNK_STAT_WDTH_MASK		0x00000000000003f0ULL
508#define	FO_PCI_TLU_LNK_STAT_WDTH_SHFT		4
509#define	FO_PCI_TLU_LNK_STAT_SPEED_MASK		0x000000000000000fULL
510#define	FO_PCI_TLU_LNK_STAT_SPEED_SHFT		0
511
512/*
513 * PCI receive/transmit DLU/TLU uncorrectable error header 1/2 log
514 * registers
515 */
516#define	FO_PCI_TLU_UERR_HDR_LOG_MASK		0xffffffffffffffffULL
517#define	FO_PCI_TLU_UERR_HDR_LOG_SHFT		0
518
519/* PCI DLU/LPU interrupt status and mask registers */
520#define	FO_PCI_LPU_INT_INT			0x0000000080000000ULL
521#define	FIRE_PCI_LPU_INT_PRF_CNT2_OFLW		0x0000000000000080ULL
522#define	FIRE_PCI_LPU_INT_PRF_CNT1_OFLW		0x0000000000000040ULL
523#define	FO_PCI_LPU_INT_LNK_LYR			0x0000000000000020ULL
524#define	FO_PCI_LPU_INT_PHY_ERR			0x0000000000000010ULL
525#define	FIRE_PCI_LPU_INT_LTSSM			0x0000000000000008ULL
526#define	FIRE_PCI_LPU_INT_PHY_TX			0x0000000000000004ULL
527#define	FIRE_PCI_LPU_INT_PHY_RX			0x0000000000000002ULL
528#define	FIRE_PCI_LPU_INT_PHY_GB			0x0000000000000001ULL
529
530/* PCI DLU/LPU link layer config register */
531#define	FIRE_PCI_LPU_LNK_LYR_CFG_AUTO_UPDT_DIS	0x0000000000080000ULL
532#define	FIRE_PCI_LPU_LNK_LYR_CFG_FREQ_NAK_EN	0x0000000000040000ULL
533#define	FIRE_PCI_LPU_LNK_LYR_CFG_RPLY_AFTER_REQ	0x0000000000020000ULL
534#define	FIRE_PCI_LPU_LNK_LYR_CFG_LAT_THRS_WR_EN	0x0000000000010000ULL
535#define	FO_PCI_LPU_LNK_LYR_CFG_VC0_EN		0x0000000000000100ULL
536#define	FIRE_PCI_LPU_LNK_LYR_CFG_L0S_ADJ_FAC_EN	0x0000000000000010ULL
537#define	FIER_PCI_LPU_LNK_LYR_CFG_TLP_XMIT_FC_EN	0x0000000000000008ULL
538#define	FO_PCI_LPU_LNK_LYR_CFG_FREQ_ACK_EN	0x0000000000000004ULL
539#define	FO_PCI_LPU_LNK_LYR_CFG_RETRY_DIS	0x0000000000000002ULL
540
541/* PCI DLU/LPU link layer interrupt and status register */
542#define	FO_PCI_LPU_LNK_LYR_INT_STAT_LNK_ERR_ACT	0x0000000080000000ULL
543#define	OBERON_PCI_LPU_LNK_LYR_INT_STAT_PBUS_PE 0x0000000000800000ULL
544#define	FO_PCI_LPU_LNK_LYR_INT_STAT_USPRTD_DLLP	0x0000000000400000ULL
545#define	FO_PCI_LPU_LNK_LYR_INT_STAT_DLLP_RX_ERR	0x0000000000200000ULL
546#define	FO_PCI_LPU_LNK_LYR_INT_STAT_BAD_DLLP	0x0000000000100000ULL
547#define	FO_PCI_LPU_LNK_LYR_INT_STAT_TLP_RX_ERR	0x0000000000040000ULL
548#define	FO_PCI_LPU_LNK_LYR_INT_STAT_SRC_ERR_TLP	0x0000000000020000ULL
549#define	FO_PCI_LPU_LNK_LYR_INT_STAT_BAD_TLP	0x0000000000010000ULL
550#define	FO_PCI_LPU_LNK_LYR_INT_STAT_RBF_UDF_ERR	0x0000000000000200ULL
551#define	FO_PCI_LPU_LNK_LYR_INT_STAT_RBF_OVF_ERR	0x0000000000000100ULL
552#define	FO_PCI_LPU_LNK_LYR_INT_STAT_EG_TLPM_ERR	0x0000000000000080ULL
553#define	FO_PCI_LPU_LNK_LYR_INT_STAT_EG_TFRM_ERR	0x0000000000000040ULL
554#define	FO_PCI_LPU_LNK_LYR_INT_STAT_RBF_PE	0x0000000000000020ULL
555#define	FO_PCI_LPU_LNK_LYR_INT_STAT_EGRESS_PE	0x0000000000000010ULL
556#define	FO_PCI_LPU_LNK_LYR_INT_STAT_RPLY_TMR_TO	0x0000000000000004ULL
557#define	FO_PCI_LPU_LNK_LYR_INT_STAT_RPLY_NUM_RO	0x0000000000000002ULL
558#define	FO_PCI_LPU_LNK_LYR_INT_STAT_DLNK_PES	0x0000000000000001ULL
559
560/* PCI DLU/LPU flow control update control register */
561#define	FO_PCI_LPU_FLW_CTRL_UPDT_CTRL_FC0_C_EN	0x0000000000000004ULL
562#define	FO_PCI_LPU_FLW_CTRL_UPDT_CTRL_FC0_NP_EN	0x0000000000000002ULL
563#define	FO_PCI_LPU_FLW_CTRL_UPDT_CTRL_FC0_P_EN	0x0000000000000001ULL
564
565/* PCI DLU/LPU txlink ACKNAK latency timer threshold register */
566#define	FO_PCI_LPU_TXLNK_FREQ_LAT_TMR_THRS_MASK	0x000000000000ffffULL
567#define	FO_PCI_LPU_TXLNK_FREQ_LAT_TMR_THRS_SHFT	0
568
569/* PCI DLU/LPU txlink replay timer threshold register */
570#define	FO_PCI_LPU_TXLNK_RPLY_TMR_THRS_MASK	0x00000000000fffffULL
571#define	FO_PCI_LPU_TXLNK_RPLY_TMR_THRS_SHFT	0
572
573/* PCI DLU/LPU txlink FIFO pointer register */
574#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_TL_MASK	0x00000000ffff0000ULL
575#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_TL_SHFT	16
576#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_HD_MASK	0x000000000000ffffULL
577#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_HD_SHFT	0
578
579/* PCI DLU/LPU phy layer interrupt and status register */
580#define	FO_PCI_LPU_PHY_LYR_INT_STAT_PHY_LYR_ERR	0x0000000080000000ULL
581#define	FO_PCI_LPU_PHY_LYR_INT_STAT_KC_DLLP_ERR	0x0000000000000800ULL
582#define	FO_PCI_LPU_PHY_LYR_INT_STAT_END_POS_ERR	0x0000000000000400ULL
583#define	FO_PCI_LPU_PHY_LYR_INT_STAT_LNK_ERR	0x0000000000000200ULL
584#define	FO_PCI_LPU_PHY_LYR_INT_STAT_TRN_ERR	0x0000000000000100ULL
585#define	FO_PCI_LPU_PHY_LYR_INT_STAT_EDB_DET	0x0000000000000080ULL
586#define	FO_PCI_LPU_PHY_LYR_INT_STAT_SDP_END	0x0000000000000040ULL
587#define	FO_PCI_LPU_PHY_LYR_INT_STAT_STP_END_EDB	0x0000000000000020ULL
588#define	FO_PCI_LPU_PHY_LYR_INT_STAT_INVC_ERR	0x0000000000000010ULL
589#define	FO_PCI_LPU_PHY_LYR_INT_STAT_MULTI_SDP	0x0000000000000008ULL
590#define	FO_PCI_LPU_PHY_LYR_INT_STAT_MULTI_STP	0x0000000000000004ULL
591#define	FO_PCI_LPU_PHY_LYR_INT_STAT_ILL_SDP_POS	0x0000000000000002ULL
592#define	FO_PCI_LPU_PHY_LYR_INT_STAT_ILL_STP_POS	0x0000000000000001ULL
593
594/* PCI DLU/LPU LTSSM config2 register */
595#define	FO_PCI_LPU_LTSSM_CFG2_12_TO_MASK	0x00000000ffffffffULL
596#define	FO_PCI_LPU_LTSSM_CFG2_12_TO_SHFT	0
597
598/* PCI DLU/LPU LTSSM config3 register */
599#define	FO_PCI_LPU_LTSSM_CFG3_2_TO_MASK		0x00000000ffffffffULL
600#define	FO_PCI_LPU_LTSSM_CFG3_2_TO_SHFT		0
601
602/* PCI DLU/LPU LTSSM config4 register */
603#define	FO_PCI_LPU_LTSSM_CFG4_TRN_CTRL_MASK	0x00000000ff000000ULL
604#define	FO_PCI_LPU_LTSSM_CFG4_TRN_CTRL_SHFT	24
605#define	FO_PCI_LPU_LTSSM_CFG4_DATA_RATE_MASK	0x0000000000ff0000ULL
606#define	FO_PCI_LPU_LTSSM_CFG4_DATA_RATE_SHFT	16
607#define	FO_PCI_LPU_LTSSM_CFG4_N_FTS_MASK	0x000000000000ff00ULL
608#define	FO_PCI_LPU_LTSSM_CFG4_N_FTS_SHFT	8
609#define	FO_PCI_LPU_LTSSM_CFG4_LNK_NUM_MASK	0x00000000000000ffULL
610#define	FO_PCI_LPU_LTSSM_CFG4_LNK_NUM_SHFT	0
611
612/* PCI DLU/LPU LTSSM config5 register */
613#define	FO_PCI_LPU_LTSSM_CFG5_UNUSED0_MASK	0x00000000ffffe000ULL
614#define	FO_PCI_LPU_LTSSM_CFG5_UNUSED0_SHFT	13
615#define	FO_PCI_LPU_LTSSM_CFG5_RCV_DET_TST_MODE	0x0000000000001000ULL
616#define	FO_PCI_LPU_LTSSM_CFG5_POLL_CMPLNC_DIS	0x0000000000000800ULL
617#define	FO_PCI_LPU_LTSSM_CFG5_TX_IDLE_TX_FTS	0x0000000000000400ULL
618#define	FO_PCI_LPU_LTSSM_CFG5_RX_FTS_RVR_LK	0x0000000000000200ULL
619#define	FO_PCI_LPU_LTSSM_CFG5_UNUSED1_MASK	0x0000000000000180ULL
620#define	FO_PCI_LPU_LTSSM_CFG5_UNUSED1_SHFT	7
621#define	FO_PCI_LPU_LTSSM_CFG5_LPBK_NTRY_ACTIVE	0x0000000000000040ULL
622#define	FO_PCI_LPU_LTSSM_CFG5_LPBK_NTRY_EXIT	0x0000000000000020ULL
623#define	FO_PCI_LPU_LTSSM_CFG5_LPBK_ACTIVE_EXIT	0x0000000000000010ULL
624#define	FO_PCI_LPU_LTSSM_CFG5_L1_IDLE_RCVRY_LK	0x0000000000000008ULL
625#define	FO_PCI_LPU_LTSSM_CFG5_L0_TRN_CNTRL_RST	0x0000000000000004ULL
626#define	FO_PCI_LPU_LTSSM_CFG5_L0_LPBK		0x0000000000000002ULL
627#define	FO_PCI_LPU_LTSSM_CFG5_UNUSED2		0x0000000000000001ULL
628
629/* Controller configuration and status registers */
630#define	FIRE_JBUS_PAR_CTRL			0x60010
631#define	FO_XBC_ERR_LOG_EN			0x61000
632#define	FO_XBC_INT_EN				0x61008
633#define	FO_XBC_INT_STAT				0x61010
634#define	FO_XBC_ERR_STAT_CLR			0x61018
635#define	FIRE_JBC_FATAL_RST_EN			0x61028
636#define	FIRE_JBCINT_ITRANS_ERR_LOG		0x61040
637#define	FIRE_JBCINT_ITRANS_ERR_LOG2		0x61048
638#define	FIRE_JBCINT_OTRANS_ERR_LOG		0x61040
639#define	FIRE_JBCINT_OTRANS_ERR_LOG2		0x61048
640#define	FIRE_FATAL_ERR_LOG			0x61050
641#define	FIRE_FATAL_ERR_LOG2			0x61058
642#define	FIRE_MERGE_TRANS_ERR_LOG		0x61060
643#define	FIRE_DMCINT_ODCD_ERR_LOG		0x61068
644#define	FIRE_DMCINT_IDC_ERR_LOG			0x61070
645#define	FIRE_JBC_CSR_ERR_LOG			0x61078
646#define	FIRE_JBC_CORE_BLOCK_INT_EN		0x61800
647#define	FIRE_JBC_CORE_BLOCK_ERR_STAT		0x61808
648#define	FO_XBC_PRF_CNT_SEL			0x62000
649#define	FO_XBC_PRF_CNT0				0x62008
650#define	FO_XBC_PRF_CNT1				0x62010
651
652/* JBus parity control register */
653#define	FIRE_JBUS_PAR_CTRL_P_EN			0x8000000000000000ULL
654#define	FIRE_JBUS_PAR_CTRL_INVRTD_PAR_MASK	0x000000000000003cULL
655#define	FIRE_JBUS_PAR_CTRL_INVRTD_PAR_SHFT	2
656#define	FIRE_JBUS_PAR_CTRL_NEXT_DATA		0x0000000000000002ULL
657#define	FIRE_JBUS_PAR_CTRL_NEXT_ADDR		0x0000000000000001ULL
658
659/* JBC error log enable register - may also apply to UBC */
660#define	FIRE_JBC_ERR_LOG_EN_SPARE_MASK		0x00000000e0000000ULL
661#define	FIRE_JBC_ERR_LOG_EN_SPARE_SHFT		29
662#define	FIRE_JBC_ERR_LOG_EN_PIO_UNMAP_RD	0x0000000010000000ULL
663#define	FIRE_JBC_ERR_LOG_EN_ILL_ACC_RD		0x0000000008000000ULL
664#define	FIRE_JBC_ERR_LOG_EN_EBUS_TO		0x0000000004000000ULL
665#define	FIRE_JBC_ERR_LOG_EN_MB_PEA		0x0000000002000000ULL
666#define	FIRE_JBC_ERR_LOG_EN_MB_PER		0x0000000001000000ULL
667#define	FIRE_JBC_ERR_LOG_EN_MB_PEW		0x0000000000800000ULL
668#define	FIRE_JBC_ERR_LOG_EN_UE_ASYN		0x0000000000400000ULL
669#define	FIRE_JBC_ERR_LOG_EN_CE_ASYN		0x0000000000200000ULL
670#define	FIRE_JBC_ERR_LOG_EN_JTE			0x0000000000100000ULL
671#define	FIRE_JBC_ERR_LOG_EN_JBE			0x0000000000080000ULL
672#define	FIRE_JBC_ERR_LOG_EN_JUE			0x0000000000040000ULL
673#define	FIRE_JBC_ERR_LOG_EN_IJP			0x0000000000020000ULL
674#define	FIRE_JBC_ERR_LOG_EN_ICISE		0x0000000000010000ULL
675#define	FIRE_JBC_ERR_LOG_EN_CPE			0x0000000000008000ULL
676#define	FIRE_JBC_ERR_LOG_EN_APE			0x0000000000004000ULL
677#define	FIRE_JBC_ERR_LOG_EN_WR_DPE		0x0000000000002000ULL
678#define	FIRE_JBC_ERR_LOG_EN_RD_DPE		0x0000000000001000ULL
679#define	FIRE_JBC_ERR_LOG_EN_ILL_BMW		0x0000000000000800ULL
680#define	FIRE_JBC_ERR_LOG_EN_ILL_BMR		0x0000000000000400ULL
681#define	FIRE_JBC_ERR_LOG_EN_BJC			0x0000000000000200ULL
682#define	FIRE_JBC_ERR_LOG_EN_PIO_UNMAP		0x0000000000000100ULL
683#define	FIRE_JBC_ERR_LOG_EN_PIO_DPE		0x0000000000000080ULL
684#define	FIRE_JBC_ERR_LOG_EN_PIO_CPE		0x0000000000000040ULL
685#define	FIRE_JBC_ERR_LOG_EN_ILL_ACC		0x0000000000000020ULL
686#define	FIRE_JBC_ERR_LOG_EN_UNSOL_RD		0x0000000000000010ULL
687#define	FIRE_JBC_ERR_LOG_EN_UNSOL_INT		0x0000000000000008ULL
688#define	FIRE_JBC_ERR_LOG_EN_JTCEEW		0x0000000000000004ULL
689#define	FIRE_JBC_ERR_LOG_EN_JTCEEI		0x0000000000000002ULL
690#define	FIRE_JBC_ERR_LOG_EN_JTCEER		0x0000000000000001ULL
691
692/* JBC interrupt enable, interrupt status and error status clear registers */
693#define	FIRE_JBC_ERR_INT_SPARE_S_MASK		0xe000000000000000ULL
694#define	FIRE_JBC_ERR_INT_SPARE_S_SHFT		61
695#define	FIRE_JBC_ERR_INT_PIO_UNMAP_RD_S		0x1000000000000000ULL
696#define	FIRE_JBC_ERR_INT_ILL_ACC_RD_S		0x0800000000000000ULL
697#define	FIRE_JBC_ERR_INT_EBUS_TO_S		0x0400000000000000ULL
698#define	FIRE_JBC_ERR_INT_MB_PEA_S		0x0200000000000000ULL
699#define	FIRE_JBC_ERR_INT_MB_PER_S		0x0100000000000000ULL
700#define	FIRE_JBC_ERR_INT_MB_PEW_S		0x0080000000000000ULL
701#define	FIRE_JBC_ERR_INT_UE_ASYN_S		0x0040000000000000ULL
702#define	FIRE_JBC_ERR_INT_CE_ASYN_S		0x0020000000000000ULL
703#define	FIRE_JBC_ERR_INT_JTE_S			0x0010000000000000ULL
704#define	FIRE_JBC_ERR_INT_JBE_S			0x0008000000000000ULL
705#define	FIRE_JBC_ERR_INT_JUE_S			0x0004000000000000ULL
706#define	FIRE_JBC_ERR_INT_IJP_S			0x0002000000000000ULL
707#define	FIRE_JBC_ERR_INT_ICISE_S		0x0001000000000000ULL
708#define	FIRE_JBC_ERR_INT_CPE_S			0x0000800000000000ULL
709#define	FIRE_JBC_ERR_INT_APE_S			0x0000400000000000ULL
710#define	FIRE_JBC_ERR_INT_WR_DPE_S		0x0000200000000000ULL
711#define	FIRE_JBC_ERR_INT_RD_DPE_S		0x0000100000000000ULL
712#define	FIRE_JBC_ERR_INT_ILL_BMW_S		0x0000080000000000ULL
713#define	FIRE_JBC_ERR_INT_ILL_BMR_S		0x0000040000000000ULL
714#define	FIRE_JBC_ERR_INT_BJC_S			0x0000020000000000ULL
715#define	FIRE_JBC_ERR_INT_PIO_UNMAP_S		0x0000010000000000ULL
716#define	FIRE_JBC_ERR_INT_PIO_DPE_S		0x0000008000000000ULL
717#define	FIRE_JBC_ERR_INT_PIO_CPE_S		0x0000004000000000ULL
718#define	FIRE_JBC_ERR_INT_ILL_ACC_S		0x0000002000000000ULL
719#define	FIRE_JBC_ERR_INT_UNSOL_RD_S		0x0000001000000000ULL
720#define	FIRE_JBC_ERR_INT_UNSOL_INT_S		0x0000000800000000ULL
721#define	FIRE_JBC_ERR_INT_JTCEEW_S		0x0000000400000000ULL
722#define	FIRE_JBC_ERR_INT_JTCEEI_S		0x0000000200000000ULL
723#define	FIRE_JBC_ERR_INT_JTCEER_S		0x0000000100000000ULL
724#define	FIRE_JBC_ERR_INT_SPARE_P_MASK		0x00000000e0000000ULL
725#define	FIRE_JBC_ERR_INT_SPARE_P_SHFT		29
726#define	FIRE_JBC_ERR_INT_PIO_UNMAP_RD_P		0x0000000010000000ULL
727#define	FIRE_JBC_ERR_INT_ILL_ACC_RD_P		0x0000000008000000ULL
728#define	FIRE_JBC_ERR_INT_EBUS_TO_P		0x0000000004000000ULL
729#define	FIRE_JBC_ERR_INT_MB_PEA_P		0x0000000002000000ULL
730#define	FIRE_JBC_ERR_INT_MB_PER_P		0x0000000001000000ULL
731#define	FIRE_JBC_ERR_INT_MB_PEW_P		0x0000000000800000ULL
732#define	FIRE_JBC_ERR_INT_UE_ASYN_P		0x0000000000400000ULL
733#define	FIRE_JBC_ERR_INT_CE_ASYN_P		0x0000000000200000ULL
734#define	FIRE_JBC_ERR_INT_JTE_P			0x0000000000100000ULL
735#define	FIRE_JBC_ERR_INT_JBE_P			0x0000000000080000ULL
736#define	FIRE_JBC_ERR_INT_JUE_P			0x0000000000040000ULL
737#define	FIRE_JBC_ERR_INT_IJP_P			0x0000000000020000ULL
738#define	FIRE_JBC_ERR_INT_ICISE_P		0x0000000000010000ULL
739#define	FIRE_JBC_ERR_INT_CPE_P			0x0000000000008000ULL
740#define	FIRE_JBC_ERR_INT_APE_P			0x0000000000004000ULL
741#define	FIRE_JBC_ERR_INT_WR_DPE_P		0x0000000000002000ULL
742#define	FIRE_JBC_ERR_INT_RD_DPE_P		0x0000000000001000ULL
743#define	FIRE_JBC_ERR_INT_ILL_BMW_P		0x0000000000000800ULL
744#define	FIRE_JBC_ERR_INT_ILL_BMR_P		0x0000000000000400ULL
745#define	FIRE_JBC_ERR_INT_BJC_P			0x0000000000000200ULL
746#define	FIRE_JBC_ERR_INT_PIO_UNMAP_P		0x0000000000000100ULL
747#define	FIRE_JBC_ERR_INT_PIO_DPE_P		0x0000000000000080ULL
748#define	FIRE_JBC_ERR_INT_PIO_CPE_P		0x0000000000000040ULL
749#define	FIRE_JBC_ERR_INT_ILL_ACC_P		0x0000000000000020ULL
750#define	FIRE_JBC_ERR_INT_UNSOL_RD_P		0x0000000000000010ULL
751#define	FIRE_JBC_ERR_INT_UNSOL_INT_P		0x0000000000000008ULL
752#define	FIRE_JBC_ERR_INT_JTCEEW_P		0x0000000000000004ULL
753#define	FIRE_JBC_ERR_INT_JTCEEI_P		0x0000000000000002ULL
754#define	FIRE_JBC_ERR_INT_JTCEER_P		0x0000000000000001ULL
755
756/* UBC interrupt enable, error status and error status clear registers */
757#define	OBERON_UBC_ERR_INT_PIORBEUE_S		0x0004000000000000ULL
758#define	OBERON_UBC_ERR_INT_PIOWBEUE_S		0x0002000000000000ULL
759#define	OBERON_UBC_ERR_INT_PIOWTUE_S		0x0001000000000000ULL
760#define	OBERON_UBC_ERR_INT_MEMWTAXB_S		0x0000080000000000ULL
761#define	OBERON_UBC_ERR_INT_MEMRDAXB_S		0x0000040000000000ULL
762#define	OBERON_UBC_ERR_INT_DMAWTUEB_S		0x0000020000000000ULL
763#define	OBERON_UBC_ERR_INT_DMARDUEB_S		0x0000010000000000ULL
764#define	OBERON_UBC_ERR_INT_MEMWTAXA_S		0x0000000800000000ULL
765#define	OBERON_UBC_ERR_INT_MEMRDAXA_S		0x0000000400000000ULL
766#define	OBERON_UBC_ERR_INT_DMAWTUEA_S		0x0000000200000000ULL
767#define	OBERON_UBC_ERR_INT_DMARDUEA_S		0x0000000100000000ULL
768#define	OBERON_UBC_ERR_INT_PIORBEUE_P		0x0000000000040000ULL
769#define	OBERON_UBC_ERR_INT_PIOWBEUE_P		0x0000000000020000ULL
770#define	OBERON_UBC_ERR_INT_PIOWTUE_P		0x0000000000010000ULL
771#define	OBERON_UBC_ERR_INT_MEMWTAXB_P		0x0000000000000800ULL
772#define	OBERON_UBC_ERR_INT_MEMRDAXB_P		0x0000000000000400ULL
773#define	OBERON_UBC_ERR_INT_DMARDUEB_P		0x0000000000000200ULL
774#define	OBERON_UBC_ERR_INT_DMAWTUEB_P		0x0000000000000100ULL
775#define	OBERON_UBC_ERR_INT_MEMWTAXA_P		0x0000000000000008ULL
776#define	OBERON_UBC_ERR_INT_MEMRDAXA_P		0x0000000000000004ULL
777#define	OBERON_UBC_ERR_INT_DMAWTUEA_P		0x0000000000000002ULL
778#define	OBERON_UBC_ERR_INT_DMARDUEA_P		0x0000000000000001ULL
779
780/* JBC fatal reset enable register */
781#define	FIRE_JBC_FATAL_RST_EN_SPARE_P_INT_MASK	0x000000000c000000ULL
782#define	FIRE_JBC_FATAL_RST_EN_SPARE_P_INT_SHFT	26
783#define	FIRE_JBC_FATAL_RST_EN_MB_PEA_P_INT	0x0000000002000000ULL
784#define	FIRE_JBC_FATAL_RST_EN_CPE_P_INT		0x0000000000008000ULL
785#define	FIRE_JBC_FATAL_RST_EN_APE_P_INT		0x0000000000004000ULL
786#define	FIRE_JBC_FATAL_RST_EN_PIO_CPE_INT	0x0000000000000040ULL
787#define	FIRE_JBC_FATAL_RST_EN_JTCEEW_P_INT	0x0000000000000004ULL
788#define	FIRE_JBC_FATAL_RST_EN_JTCEEI_P_INT	0x0000000000000002ULL
789#define	FIRE_JBC_FATAL_RST_EN_JTCEER_P_INT	0x0000000000000001ULL
790
791/* JBC JBCINT in transaction error log register */
792#define	FIRE_JBCINT_ITRANS_ERR_LOG_Q_WORD_MASK	0x00c0000000000000ULL
793#define	FIRE_JBCINT_ITRANS_ERR_LOG_Q_WORD_SHFT	54
794#define	FIRE_JBCINT_ITRANS_ERR_LOG_TRANSID_MASK	0x0003000000000000ULL
795#define	FIRE_JBCINT_ITRANS_ERR_LOG_TRANSID_SHFT	48
796#define	FIRE_JBCINT_ITRANS_ERR_LOG_ADDR_MASK	0x000007ffffffffffULL
797#define	FIRE_JBCINT_ITRANS_ERR_LOG_ADDR_SHFT	0
798
799/* JBC JBCINT in transaction error log register 2 */
800#define	FIRE_JBCINT_ITRANS_ERR_LOG2_ARB_WN_MASK	0x000ffffff0000000ULL
801#define	FIRE_JBCINT_ITRANS_ERR_LOG2_ARB_WN_SHFT	28
802#define	FIRE_JBCINT_ITRANS_ERR_LOG2_J_REQ_MASK	0x000000000fe00000ULL
803#define	FIRE_JBCINT_ITRANS_ERR_LOG2_J_REQ_SHFT	21
804#define	FIRE_JBCINT_ITRANS_ERR_LOG2_J_PACK_MASK	0x00000000001fffffULL
805#define	FIRE_JBCINT_ITRANS_ERR_LOG2_J_PACK_SHFT	0
806
807/* JBC JBCINT out transaction error log register */
808#define	FIRE_JBCINT_OTRANS_ERR_LOG_TRANSID_MASK	0x003f000000000000ULL
809#define	FIRE_JBCINT_OTRANS_ERR_LOG_TRANSID_SHFT	48
810#define	FIRE_JBCINT_OTRANS_ERR_LOG_ADDR_MASK	0x000007ffffffffffULL
811#define	FIRE_JBCINT_OTRANS_ERR_LOG_ADDR_SHFT	0
812
813/* JBC JBCINT out transaction error log register 2 */
814#define	FIRE_JBCINT_OTRANS_ERR_LOG2_ARB_WN_MASK	0x000ffffff0000000ULL
815#define	FIRE_JBCINT_OTRANS_ERR_LOG2_ARB_WN_SHFT	28
816#define	FIRE_JBCINT_OTRANS_ERR_LOG2_J_REQ_MASK	0x000000000fe00000ULL
817#define	FIRE_JBCINT_OTRANS_ERR_LOG2_J_REQ_SHFT	21
818#define	FIRE_JBCINT_OTRANS_ERR_LOG2_J_PACK_MASK	0x00000000001fffffULL
819#define	FIRE_JBCINT_OTRANS_ERR_LOG2_J_PACK_SHFT	0
820
821/* JBC merge transaction error log register */
822#define	FIRE_FATAL_ERR_LOG_DATA_MASK		0xffffffffffffffffULL
823#define	FIRE_FATAL_ERR_LOG_DATA_SHFT		0
824
825/* JBC merge transaction error log register 2 */
826#define	FIRE_FATAL_ERR_LOG2_ARB_WN_MASK		0x000ffffff0000000ULL
827#define	FIRE_FATAL_ERR_LOG2_ARB_WN_SHFT		28
828#define	FIRE_FATAL_ERR_LOG2_J_REQ_MASK		0x000000000fe00000ULL
829#define	FIRE_FATAL_ERR_LOG2_J_REQ_SHFT		21
830#define	FIRE_FATAL_ERR_LOG2_J_PACK_MASK		0x00000000001fffffULL
831#define	FIRE_FATAL_ERR_LOG2_J_PACK_SHFT		0
832
833/* JBC merge transaction error log register */
834#define	FIRE_MERGE_TRANS_ERR_LOG_Q_WORD_MASK	0x00c0000000000000ULL
835#define	FIRE_MERGE_TRANS_ERR_LOG_Q_WORD_SHFT	54
836#define	FIRE_MERGE_TRANS_ERR_LOG_TRANSID_MASK	0x0003000000000000ULL
837#define	FIRE_MERGE_TRANS_ERR_LOG_TRANSID_SHFT	48
838#define	FIRE_MERGE_TRANS_ERR_LOG_JBC_TAG_MASK	0x0000f80000000000ULL
839#define	FIRE_MERGE_TRANS_ERR_LOG_JBC_TAG_SHFT	43
840#define	FIRE_MERGE_TRANS_ERR_LOG_ADDR_MASK	0x000007ffffffffffULL
841#define	FIRE_MERGE_TRANS_ERR_LOG_ADDR_SHFT	0
842
843/* JBC DMCINT ODCD error log register */
844#define	FIRE_DMCINT_ODCD_ERR_LOG_TRANS_ID_MASK	0x0030000000000000ULL
845#define	FIRE_DMCINT_ODCD_ERR_LOG_TRANS_ID_SHFT	52
846#define	FIRE_DMCINT_ODCD_ERR_LOG_AID_MASK	0x000f000000000000ULL
847#define	FIRE_DMCINT_ODCD_ERR_LOG_AID_SHFT	48
848#define	FIRE_DMCINT_ODCD_ERR_LOG_TTYPE_MASK	0x0000f80000000000ULL
849#define	FIRE_DMCINT_ODCD_ERR_LOG_TTYPE_SHFT	43
850#define	FIRE_DMCINT_ODCD_ERR_LOG_ADDR_MASK	0x000007ffffffffffULL
851#define	FIRE_DMCINT_ODCD_ERR_LOG_ADDR_SHFT	0
852
853/* JBC DMCINT IDC error log register */
854#define	FIRE_DMCINT_IDC_ERR_DMC_CTAG_MASK	0x000000000fff0000ULL
855#define	FIRE_DMCINT_IDC_ERR_DMC_CTAG_SHFT	16
856#define	FIRE_DMCINT_IDC_ERR_TRANSID_MASK	0x000000000000c000ULL
857#define	FIRE_DMCINT_IDC_ERR_AGNTID_MASK		0x0000000000003c00ULL
858#define	FIRE_DMCINT_IDC_ERR_AGNTID_SHFT		10
859#define	FIRE_DMCINT_IDC_ERR_SRCID_MASK		0x00000000000003e0ULL
860#define	FIRE_DMCINT_IDC_ERR_SRCID_SHFT		5
861#define	FIRE_DMCINT_IDC_ERR_TARGID_MASK		0x000000000000001fULL
862#define	FIRE_DMCINT_IDC_ERRO_TARGID_SHFT	0
863
864/* JBC CSR error log register */
865#define	FIRE_JBC_CSR_ERR_LOG_WR			0x0000040000000000ULL
866#define	FIRE_JBC_CSR_ERR_LOG_BMASK_MASK		0x000003fffc000000ULL
867#define	FIRE_JBC_CSR_ERR_LOG_BMASK_SHFT		26
868#define	FIRE_JBC_CSR_ERR_LOG_ADDR_MASK		0x0000000003ffffffULL
869#define	FIRE_JBC_CSR_ERR_LOG_ADDR_SHFT		0
870
871/* JBC core and block interrupt enable register */
872#define	FIRE_JBC_CORE_BLOCK_INT_EN_JBC		0x8000000000000000ULL
873#define	FIRE_JBC_CORE_BLOCK_INT_EN_CSR		0x0000000000000008ULL
874#define	FIRE_JBC_CORE_BLOCK_INT_EN_MERGE	0x0000000000000004ULL
875#define	FIRE_JBC_CORE_BLOCK_INT_EN_JBCINT	0x0000000000000002ULL
876#define	FIRE_JBC_CORE_BLOCK_INT_EN_DMCINT	0x0000000000000001ULL
877
878/* JBC core and block error status register */
879#define	FIRE_JBC_CORE_BLOCK_ERR_STAT_CSR	0x0000000000000008ULL
880#define	FIRE_JBC_CORE_BLOCK_ERR_STAT_MERGE	0x0000000000000004ULL
881#define	FIRE_JBC_CORE_BLOCK_ERR_STAT_JBCINT	0x0000000000000002ULL
882#define	FIRE_JBC_CORE_BLOCK_ERR_STAT_DMCINT	0x0000000000000001ULL
883
884/* JBC performance counter select register - may also apply to UBC */
885#define	FO_XBC_PRF_CNT_PIO_RD_PCIEB		0x0000000000000018ULL
886#define	FO_XBC_PRF_CNT_PIO_WR_PCIEB		0x0000000000000017ULL
887#define	FO_XBC_PRF_CNT_PIO_RD_PCIEA		0x0000000000000016ULL
888#define	FO_XBC_PRF_CNT_PIO_WR_PCIEA		0x0000000000000015ULL
889#define	FO_XBC_PRF_CNT_WB			0x0000000000000014ULL
890#define	FO_XBC_PRF_CNT_PIO_FRGN			0x0000000000000013ULL
891#define	FO_XBC_PRF_CNT_XB_NCHRNT		0x0000000000000012ULL
892#define	FO_XBC_PRF_CNT_FO_CHRNT			0x0000000000000011ULL
893#define	FO_XBC_PRF_CNT_XB_CHRNT			0x0000000000000010ULL
894#define	FO_XBC_PRF_CNT_AOKOFF_DOKOFF		0x000000000000000fULL
895#define	FO_XBC_PRF_CNT_DOKOFF			0x000000000000000eULL
896#define	FO_XBC_PRF_CNT_AOKOFF			0x000000000000000dULL
897#define	FO_XBC_PRF_CNT_RD_TOTAL			0x000000000000000cULL
898#define	FO_XBC_PRF_CNT_WR_TOTAL			0x000000000000000bULL
899#define	FO_XBC_PRF_CNT_WR_PARTIAL		0x000000000000000aULL
900#define	FO_XBC_PRF_CNT_PIOS_CSR_RINGB		0x0000000000000009ULL
901#define	FO_XBC_PRF_CNT_PIOS_CSR_RINGA		0x0000000000000008ULL
902#define	FO_XBC_PRF_CNT_PIOS_EBUS		0x0000000000000007ULL
903#define	FO_XBC_PRF_CNT_PIOS_I2C			0x0000000000000006ULL
904#define	FO_XBC_PRF_CNT_RD_LAT_SMPLS		0x0000000000000005ULL
905#define	FO_XBC_PRF_CNT_RD_LAT			0x0000000000000004ULL
906#define	FO_XBC_PRF_CNT_ON_XB			0x0000000000000003ULL
907#define	FO_XBC_PRF_CNT_XB_IDL			0x0000000000000002ULL
908#define	FO_XBC_PRF_CNT_XB_CLK			0x0000000000000001ULL
909#define	FO_XBC_PRF_CNT_NONE			0x0000000000000000ULL
910#define	FO_XBC_PRF_CNT_CNT1_SHFT		8
911#define	FO_XBC_PRF_CNT_CNT0_SHFT		0
912
913/* JBC performance counter 0/1 registers - may also apply to UBC */
914#define	FO_XBC_PRF_CNT_MASK			0xffffffffffffffffULL
915#define	FO_XBC_PRF_CNT_SHFT			0
916
917/* Lookup tables */
918const uint16_t const fire_freq_nak_tmr_thrs[6][4] = {
919	{ 0x00ed, 0x049, 0x043, 0x030 },
920	{ 0x01a0, 0x076, 0x06b, 0x048 },
921	{ 0x022f, 0x09a, 0x056, 0x056 },
922	{ 0x042f, 0x11a, 0x096, 0x096 },
923	{ 0x082f, 0x21a, 0x116, 0x116 },
924	{ 0x102f, 0x41a, 0x216, 0x216 }
925};
926
927const uint16_t const fire_rply_tmr_thrs[6][4] = {
928	{ 0x0379, 0x112, 0x0fc, 0x0b4 },
929	{ 0x0618, 0x1BA, 0x192, 0x10e },
930	{ 0x0831, 0x242, 0x143, 0x143 },
931	{ 0x0fb1, 0x422, 0x233, 0x233 },
932	{ 0x1eb0, 0x7e1, 0x412, 0x412 },
933	{ 0x3cb0, 0xf61, 0x7d2, 0x7d2 }
934};
935
936/* Register default values */
937#define	FO_PCI_TLU_CTRL_L0S_TIM_DFLT		0xda
938#define	FO_PCI_TLU_CTRL_CFG_DFLT		0x1
939#define	FO_PCI_LPU_LTSSM_CFG2_12_TO_DFLT	0x2dc6c0
940#define	FO_PCI_LPU_LTSSM_CFG3_2_TO_DFLT		0x7a120
941#define	FO_PCI_LPU_LTSSM_CFG4_DATA_RATE_DFLT	0x2
942#define	FO_PCI_LPU_LTSSM_CFG4_N_FTS_DFLT	0x8c
943#define	OBERON_PCI_LPU_TXLNK_RPLY_TMR_THRS_DFLT	0xc9
944#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_HD_DFLT	0x0
945#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_TL_DFLT	0xffff
946
947/* INO macros */
948#define	FO_EQ_FIRST_INO				0x18
949#define	FO_EQ_LAST_INO				0x3b
950#define	FO_DMC_PEC_INO				0x3e
951#define	FO_XCB_INO				0x3f
952#define	FO_MAX_INO				FO_XCB_INO
953
954/* Device space macros */
955#define	FO_CONF_BUS_SHFT			20
956#define	FO_CONF_DEV_SHFT			15
957#define	FO_CONF_FUNC_SHFT			12
958#define	FO_CONF_REG_SHFT			0
959#define	FO_IO_SIZE				0x10000000
960#define	FO_MEM_SIZE				0x1ffff0000
961
962#define	FO_CONF_OFF(bus, slot, func, reg)				\
963	(((bus) << FO_CONF_BUS_SHFT) |					\
964	((slot) << FO_CONF_DEV_SHFT) |					\
965	((func) << FO_CONF_FUNC_SHFT) |					\
966	((reg) << FO_CONF_REG_SHFT))
967
968/* Width of the physical addresses the IOMMU translates to */
969#define	FIRE_IOMMU_BITS				43
970#define	OBERON_IOMMU_BITS			47
971
972/* Event queue macros */
973#define	FO_EQ_ALIGNMENT				(512 * 1024)
974#define	FO_EQ_NRECORDS				128
975#define	FO_EQ_RECORD_SIZE			64
976
977/* Event queue record format */
978struct fo_msiq_record {
979	uint64_t	fomqr_word0;
980	uint64_t	fomqr_word1;
981	uint64_t	fomqr_reserved[6];
982};
983
984#define	FO_MQR_WORD0_FMT_TYPE_MASK		0x7f00000000000000ULL
985#define	FO_MQR_WORD0_FMT_TYPE_SHFT		56
986#define	FO_MQR_WORD0_FMT_TYPE_MSI64		0x7800000000000000ULL
987#define	FO_MQR_WORD0_FMT_TYPE_MSI32		0x5800000000000000ULL
988#define	FO_MQR_WORD0_FMT_TYPE_MSG		0x3000000000000000ULL
989#define	FO_MQR_WORD0_FMT_TYPE_MSG_ROUTE_MASK	0x0700000000000000ULL
990#define	FO_MQR_WORD0_FMT_TYPE_MSG_ROUTE_SHFT	56
991#define	FO_MQR_WORD0_LENGTH_MASK		0x00ffc00000000000ULL
992#define	FO_MQR_WORD0_LENGTH_SHFT		46
993#define	FO_MQR_WORD0_ADDR0_MASK			0x00003fff00000000ULL
994#define	FO_MQR_WORD0_ADDR0_SHFT			32
995#define	FO_MQR_WORD0_RID_MASK			0x00000000ffff0000ULL
996#define	FO_MQR_WORD0_RID_SHFT			16
997#define	FO_MQR_WORD0_DATA0_MASK			0x000000000000ffffULL
998#define	FO_MQR_WORD0_DATA0_SHFT			0
999#define	FO_MQR_WORD1_ADDR1_MASK			0xffffffffffff0000ULL
1000#define	FO_MQR_WORD1_ADDR1_SHFT			16
1001#define	FO_MQR_WORD1_DATA1_MASK			0x000000000000ffffULL
1002#define	FO_MQR_WORD1_DATA1_SHFT			0
1003
1004#endif /* !_SPARC64_PCI_FIREREG_H_ */
1005