aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/wsp/wsp_pci.h
blob: 52e9bd95250dfcdbe26eb0f4641bced9154c8753 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
/*
 * Copyright 2010 Ben Herrenschmidt, IBM Corporation
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 */

#ifndef __WSP_PCI_H
#define __WSP_PCI_H

/* Architected registers */
#define PCIE_REG_DMA_CHAN_STATUS	0x110
#define PCIE_REG_CPU_LOADSTORE_STATUS	0x120

#define PCIE_REG_CONFIG_DATA		0x130
#define PCIE_REG_LOCK0			0x138
#define PCIE_REG_CONFIG_ADDRESS		0x140
#define   PCIE_REG_CA_ENABLE			0x8000000000000000ull
#define	  PCIE_REG_CA_BUS_MASK			0x0ff0000000000000ull
#define   PCIE_REG_CA_BUS_SHIFT			(20+32)
#define   PCIE_REG_CA_DEV_MASK			0x000f800000000000ull
#define   PCIE_REG_CA_DEV_SHIFT			(15+32)
#define   PCIE_REG_CA_FUNC_MASK			0x0000700000000000ull
#define   PCIE_REG_CA_FUNC_SHIFT		(12+32)
#define   PCIE_REG_CA_REG_MASK			0x00000fff00000000ull
#define   PCIE_REG_CA_REG_SHIFT			( 0+32)
#define   PCIE_REG_CA_BE_MASK			0x00000000f0000000ull
#define   PCIE_REG_CA_BE_SHIFT			(   28)
#define PCIE_REG_LOCK1			0x148

#define PCIE_REG_PHB_CONFIG		0x160
#define   PCIE_REG_PHBC_64B_TCE_EN		0x2000000000000000ull
#define   PCIE_REG_PHBC_MMIO_DMA_FREEZE_EN	0x1000000000000000ull
#define   PCIE_REG_PHBC_32BIT_MSI_EN		0x0080000000000000ull
#define   PCIE_REG_PHBC_M64_EN			0x0040000000000000ull
#define   PCIE_REG_PHBC_IO_EN			0x0008000000000000ull
#define   PCIE_REG_PHBC_64BIT_MSI_EN		0x0002000000000000ull
#define   PCIE_REG_PHBC_M32A_EN			0x0000800000000000ull
#define   PCIE_REG_PHBC_M32B_EN			0x0000400000000000ull
#define   PCIE_REG_PHBC_MSI_PE_VALIDATE		0x0000200000000000ull
#define   PCIE_REG_PHBC_DMA_XLATE_BYPASS	0x0000100000000000ull

#define PCIE_REG_IO_BASE_ADDR		0x170
#define PCIE_REG_IO_BASE_MASK		0x178
#define PCIE_REG_IO_START_ADDR		0x180

#define PCIE_REG_M32A_BASE_ADDR		0x190
#define PCIE_REG_M32A_BASE_MASK		0x198
#define PCIE_REG_M32A_START_ADDR	0x1a0

#define PCIE_REG_M32B_BASE_ADDR		0x1b0
#define PCIE_REG_M32B_BASE_MASK		0x1b8
#define PCIE_REG_M32B_START_ADDR	0x1c0

#define PCIE_REG_M64_BASE_ADDR		0x1e0
#define PCIE_REG_M64_BASE_MASK		0x1e8
#define PCIE_REG_M64_START_ADDR		0x1f0

#define PCIE_REG_TCE_KILL		0x210
#define   PCIE_REG_TCEKILL_SINGLE	0x8000000000000000ull
#define   PCIE_REG_TCEKILL_ADDR_MASK	0x000003fffffffff8ull
#define   PCIE_REG_TCEKILL_PS_4K	0
#define   PCIE_REG_TCEKILL_PS_64K	1
#define   PCIE_REG_TCEKILL_PS_16M	2
#define   PCIE_REG_TCEKILL_PS_16G	3

#define PCIE_REG_IODA_ADDR		0x220
#define   PCIE_REG_IODA_AD_AUTOINC	0x8000000000000000ull
#define   PCIE_REG_IODA_AD_TBL_MVT	0x0005000000000000ull
#define   PCIE_REG_IODA_AD_TBL_PELT	0x0006000000000000ull
#define   PCIE_REG_IODA_AD_TBL_PESTA	0x0007000000000000ull
#define   PCIE_REG_IODA_AD_TBL_PESTB	0x0008000000000000ull
#define   PCIE_REG_IODA_AD_TBL_TVT	0x0009000000000000ull
#define   PCIE_REG_IODA_AD_TBL_TCE	0x000a000000000000ull
#define PCIE_REG_IODA_DATA0		0x228
#define PCIE_REG_IODA_DATA1		0x230

#define PCIE_REG_LOCK2			0x240

#define PCIE_REG_PHB_GEN_CAP		0x250
#define PCIE_REG_PHB_TCE_CAP		0x258
#define PCIE_REG_PHB_IRQ_CAP		0x260
#define PCIE_REG_PHB_EEH_CAP		0x268

#define PCIE_REG_PAPR_ERR_INJ_CONTROL	0x2b0
#define PCIE_REG_PAPR_ERR_INJ_ADDR	0x2b8
#define PCIE_REG_PAPR_ERR_INJ_MASK	0x2c0


#define PCIE_REG_SYS_CFG1		0x600
#define   PCIE_REG_SYS_CFG1_CLASS_CODE	0x0000000000ffffffull

#define IODA_TVT0_TTA_MASK		0x000fffffffff0000ull
#define IODA_TVT0_TTA_SHIFT		4
#define IODA_TVT0_BUSNUM_VALID_MASK	0x000000000000e000ull
#define IODA_TVT0_TCE_TABLE_SIZE_MASK	0x0000000000001f00ull
#define IODA_TVT0_TCE_TABLE_SIZE_SHIFT	8
#define IODA_TVT0_BUSNUM_VALUE_MASK	0x00000000000000ffull
#define IODA_TVT0_BUSNUM_VALID_SHIFT	0
#define IODA_TVT1_DEVNUM_VALID		0x2000000000000000ull
#define IODA_TVT1_DEVNUM_VALUE_MASK	0x1f00000000000000ull
#define IODA_TVT1_DEVNUM_VALUE_SHIFT	56
#define IODA_TVT1_FUNCNUM_VALID		0x0008000000000000ull
#define IODA_TVT1_FUNCNUM_VALUE_MASK	0x0007000000000000ull
#define IODA_TVT1_FUNCNUM_VALUE_SHIFT	48
#define IODA_TVT1_IO_PAGE_SIZE_MASK	0x00001f0000000000ull
#define IODA_TVT1_IO_PAGE_SIZE_SHIFT	40
#define IODA_TVT1_PE_NUMBER_MASK	0x000000000000003full
#define IODA_TVT1_PE_NUMBER_SHIFT	0

#define IODA_TVT_COUNT			64

/* UTL Core registers */
#define PCIE_UTL_SYS_BUS_CONTROL	0x400
#define PCIE_UTL_STATUS			0x408
#define PCIE_UTL_SYS_BUS_AGENT_STATUS	0x410
#define PCIE_UTL_SYS_BUS_AGENT_ERR_SEV	0x418
#define PCIE_UTL_SYS_BUS_AGENT_IRQ_EN	0x420
#define PCIE_UTL_SYS_BUS_BURST_SZ_CONF	0x440
#define PCIE_UTL_REVISION_ID		0x448

#define PCIE_UTL_OUT_POST_HDR_BUF_ALLOC	0x4c0
#define PCIE_UTL_OUT_POST_DAT_BUF_ALLOC	0x4d0
#define PCIE_UTL_IN_POST_HDR_BUF_ALLOC	0x4e0
#define PCIE_UTL_IN_POST_DAT_BUF_ALLOC	0x4f0
#define PCIE_UTL_OUT_NP_BUF_ALLOC	0x500
#define PCIE_UTL_IN_NP_BUF_ALLOC	0x510
#define PCIE_UTL_PCIE_TAGS_ALLOC	0x520
#define PCIE_UTL_GBIF_READ_TAGS_ALLOC	0x530

#define PCIE_UTL_PCIE_PORT_CONTROL	0x540
#define PCIE_UTL_PCIE_PORT_STATUS	0x548
#define PCIE_UTL_PCIE_PORT_ERROR_SEV	0x550
#define PCIE_UTL_PCIE_PORT_IRQ_EN	0x558
#define PCIE_UTL_RC_STATUS		0x560
#define PCIE_UTL_RC_ERR_SEVERITY	0x568
#define PCIE_UTL_RC_IRQ_EN		0x570
#define PCIE_UTL_EP_STATUS		0x578
#define PCIE_UTL_EP_ERR_SEVERITY	0x580
#define PCIE_UTL_EP_ERR_IRQ_EN		0x588

#define PCIE_UTL_PCI_PM_CTRL1		0x590
#define PCIE_UTL_PCI_PM_CTRL2		0x598

/* PCIe stack registers */
#define PCIE_REG_SYSTEM_CONFIG1		0x600
#define PCIE_REG_SYSTEM_CONFIG2		0x608
#define PCIE_REG_EP_SYSTEM_CONFIG	0x618
#define PCIE_REG_EP_FLR			0x620
#define PCIE_REG_EP_BAR_CONFIG		0x628
#define PCIE_REG_LINK_CONFIG		0x630
#define PCIE_REG_PM_CONFIG		0x640
#define PCIE_REG_DLP_CONTROL		0x650
#define PCIE_REG_DLP_STATUS		0x658
#define PCIE_REG_ERR_REPORT_CONTROL	0x660
#define PCIE_REG_SLOT_CONTROL1		0x670
#define PCIE_REG_SLOT_CONTROL2		0x678
#define PCIE_REG_UTL_CONFIG		0x680
#define PCIE_REG_BUFFERS_CONFIG		0x690
#define PCIE_REG_ERROR_INJECT		0x698
#define PCIE_REG_SRIOV_CONFIG		0x6a0
#define PCIE_REG_PF0_SRIOV_STATUS	0x6a8
#define PCIE_REG_PF1_SRIOV_STATUS	0x6b0
#define PCIE_REG_PORT_NUMBER		0x700
#define PCIE_REG_POR_SYSTEM_CONFIG	0x708

/* PHB internal logic registers */
#define PCIE_REG_PHB_VERSION		0x800
#define PCIE_REG_RESET			0x808
#define PCIE_REG_PHB_CONTROL		0x810
#define PCIE_REG_PHB_TIMEOUT_CONTROL1	0x878
#define PCIE_REG_PHB_QUIESCE_DMA	0x888
#define PCIE_REG_PHB_DMA_READ_TAG_ACTV	0x900
#define PCIE_REG_PHB_TCE_READ_TAG_ACTV	0x908

/* FIR registers */
#define PCIE_REG_LEM_FIR_ACCUM		0xc00
#define PCIE_REG_LEM_FIR_AND_MASK	0xc08
#define PCIE_REG_LEM_FIR_OR_MASK	0xc10
#define PCIE_REG_LEM_ACTION0		0xc18
#define PCIE_REG_LEM_ACTION1		0xc20
#define PCIE_REG_LEM_ERROR_MASK		0xc30
#define PCIE_REG_LEM_ERROR_AND_MASK	0xc38
#define PCIE_REG_LEM_ERROR_OR_MASK	0xc40

/* PHB Error registers */
#define PCIE_REG_PHB_ERR_STATUS		0xc80
#define PCIE_REG_PHB_ERR1_STATUS	0xc88
#define PCIE_REG_PHB_ERR_INJECT		0xc90
#define PCIE_REG_PHB_ERR_LEM_ENABLE	0xc98
#define PCIE_REG_PHB_ERR_IRQ_ENABLE	0xca0
#define PCIE_REG_PHB_ERR_FREEZE_ENABLE	0xca8
#define PCIE_REG_PHB_ERR_SIDE_ENABLE	0xcb8
#define PCIE_REG_PHB_ERR_LOG_0		0xcc0
#define PCIE_REG_PHB_ERR_LOG_1		0xcc8
#define PCIE_REG_PHB_ERR_STATUS_MASK	0xcd0
#define PCIE_REG_PHB_ERR1_STATUS_MASK	0xcd8

#define PCIE_REG_MMIO_ERR_STATUS	0xd00
#define PCIE_REG_MMIO_ERR1_STATUS	0xd08
#define PCIE_REG_MMIO_ERR_INJECT	0xd10
#define PCIE_REG_MMIO_ERR_LEM_ENABLE	0xd18
#define PCIE_REG_MMIO_ERR_IRQ_ENABLE	0xd20
#define PCIE_REG_MMIO_ERR_FREEZE_ENABLE	0xd28
#define PCIE_REG_MMIO_ERR_SIDE_ENABLE	0xd38
#define PCIE_REG_MMIO_ERR_LOG_0		0xd40
#define PCIE_REG_MMIO_ERR_LOG_1		0xd48
#define PCIE_REG_MMIO_ERR_STATUS_MASK	0xd50
#define PCIE_REG_MMIO_ERR1_STATUS_MASK	0xd58

#define PCIE_REG_DMA_ERR_STATUS		0xd80
#define PCIE_REG_DMA_ERR1_STATUS	0xd88
#define PCIE_REG_DMA_ERR_INJECT		0xd90
#define PCIE_REG_DMA_ERR_LEM_ENABLE	0xd98
#define PCIE_REG_DMA_ERR_IRQ_ENABLE	0xda0
#define PCIE_REG_DMA_ERR_FREEZE_ENABLE	0xda8
#define PCIE_REG_DMA_ERR_SIDE_ENABLE	0xdb8
#define PCIE_REG_DMA_ERR_LOG_0		0xdc0
#define PCIE_REG_DMA_ERR_LOG_1		0xdc8
#define PCIE_REG_DMA_ERR_STATUS_MASK	0xdd0
#define PCIE_REG_DMA_ERR1_STATUS_MASK	0xdd8

/* Shortcuts for access to the above using the PHB definitions
 * with an offset
 */
#define PCIE_REG_ERR_PHB_OFFSET		0x0
#define PCIE_REG_ERR_MMIO_OFFSET	0x80
#define PCIE_REG_ERR_DMA_OFFSET		0x100

/* Debug and Trace registers */
#define PCIE_REG_PHB_DEBUG_CONTROL0	0xe00
#define PCIE_REG_PHB_DEBUG_STATUS0	0xe08
#define PCIE_REG_PHB_DEBUG_CONTROL1	0xe10
#define PCIE_REG_PHB_DEBUG_STATUS1	0xe18
#define PCIE_REG_PHB_DEBUG_CONTROL2	0xe20
#define PCIE_REG_PHB_DEBUG_STATUS2	0xe28
#define PCIE_REG_PHB_DEBUG_CONTROL3	0xe30
#define PCIE_REG_PHB_DEBUG_STATUS3	0xe38
#define PCIE_REG_PHB_DEBUG_CONTROL4	0xe40
#define PCIE_REG_PHB_DEBUG_STATUS4	0xe48
#define PCIE_REG_PHB_DEBUG_CONTROL5	0xe50
#define PCIE_REG_PHB_DEBUG_STATUS5	0xe58
#define PCIE_REG_PHB_DEBUG_CONTROL6	0xe60
#define PCIE_REG_PHB_DEBUG_STATUS6	0xe68

/* Definition for PCIe errors */
struct wsp_pcie_err_log_data {
	__u64	phb_err;
	__u64	phb_err1;
	__u64	phb_log0;
	__u64	phb_log1;
	__u64	mmio_err;
	__u64	mmio_err1;
	__u64	mmio_log0;
	__u64	mmio_log1;
	__u64	dma_err;
	__u64	dma_err1;
	__u64	dma_log0;
	__u64	dma_log1;
	__u64	utl_sys_err;
	__u64	utl_port_err;
	__u64	utl_rc_err;
	__u64	unused;
};

#endif /* __WSP_PCI_H */