aboutsummaryrefslogtreecommitdiff
path: root/include/npu3-regs.h
blob: 380fb549159031f2175c2c4685999595e085ca03 (plain)
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
/* Copyright 2019 IBM Corp.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef __NPU3_REGS_H
#define __NPU3_REGS_H

#define NPU3_FIR(n)				(0x2c00 + (n) * 0x40)
#define NPU3_FIR_MASK(n)			(0x2c03 + (n) * 0x40)
#define NPU3_FIR_ACTION0(n)			(0x2c06 + (n) * 0x40)
#define NPU3_FIR_ACTION1(n)			(0x2c07 + (n) * 0x40)
#define NPU3_FIR_MAX				3

/* NPU RING: Indirect address/data port */
#define NPU3_MISC_SCOM_IND_SCOM_ADDR		0x33e
#define   NPU3_MISC_DA_ADDR			PPC_BITMASK(0, 23)
#define   NPU3_MISC_DA_LEN			PPC_BITMASK(24, 25)
#define     NPU3_MISC_DA_LEN_4B			2
#define     NPU3_MISC_DA_LEN_8B			3
#define NPU3_MISC_SCOM_IND_SCOM_DATA		0x33f

/* NPU RING: Indirect register blocks */
#define NPU3_BLOCK(nib0, nib1)			((nib0) << 20 | (nib1) << 16)
#define NPU3_REG_BLOCK(reg)			((reg) & 0xff0000)
#define NPU3_REG_OFFSET(reg)			((reg) & 0xffff)

#define NPU3_BLOCK_NDL_U(brk)			NPU3_BLOCK(0 + (brk) / 2,\
							   8 + (brk) % 2 * 2)
#define NPU3_BLOCK_NTL_U(brk)			NPU3_BLOCK(0 + (brk) / 2,\
							   9 + (brk) % 2 * 2)
#define NPU3_BLOCK_CQ_SM(n)			NPU3_BLOCK(4, (n))
#define NPU3_BLOCK_CQ_CTL			NPU3_BLOCK(4, 4)
#define NPU3_BLOCK_CQ_DAT			NPU3_BLOCK(4, 5)
#define NPU3_BLOCK_NDL(brk)			NPU3_BLOCK(4 + (brk) / 2,\
							   8 + (brk) % 2 * 2)
#define NPU3_BLOCK_NTL(brk)			NPU3_BLOCK(4 + (brk) / 2,\
							   9 + (brk) % 2 * 2)
#define NPU3_BLOCK_NPU_ATS			NPU3_BLOCK(7, 0)
#define NPU3_BLOCK_NPU_XTS			NPU3_BLOCK(7, 1)
#define NPU3_BLOCK_NPU_MISC			NPU3_BLOCK(7, 2)
#define NPU3_BLOCK_NPU_XTS_ATSD(n)		NPU3_BLOCK(8, (n))

/* NDL_U block registers */
#define NPU3_DLPL_CTL(brk)			(NPU3_BLOCK_NDL_U(brk) + 0xfff4)
#define   NPU3_DLPL_CTL_RESET_RX		PPC_BIT32(0)
#define   NPU3_DLPL_CTL_RESET_MISC		PPC_BIT32(1)
#define NPU3_DLPL_CFG(brk)			(NPU3_BLOCK_NDL_U(brk) + 0xfff8)
#define   NPU3_DLPL_CFG_PRI_BYTESWAP		PPC_BIT32(0)

/* NTL_U block registers */
#define NPU3_NTL_MISC_CFG1(brk)			(NPU3_BLOCK_NTL_U(brk) + 0x0c0)
#define   NPU3_NTL_MISC_CFG1_NTL_RESET		PPC_BITMASK(8, 9)
#define NPU3_NTL_CREQ_HDR_CRED_SND(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x400)
#define NPU3_NTL_PRB_HDR_CRED_SND(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x410)
#define NPU3_NTL_ATR_HDR_CRED_SND(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x418)
#define NPU3_NTL_RSP_HDR_CRED_SND(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x428)
#define NPU3_NTL_CREQ_DAT_CRED_SND(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x430)
#define NPU3_NTL_RSP_DAT_CRED_SND(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x438)
#define NPU3_NTL_CREQ_HDR_CRED_RCV(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x440)
#define NPU3_NTL_DGD_HDR_CRED_RCV(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x448)
#define NPU3_NTL_ATSD_HDR_CRED_RCV(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x460)
#define NPU3_NTL_RSP_HDR_CRED_RCV(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x468)
#define NPU3_NTL_CREQ_DAT_CRED_RCV(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x470)
#define NPU3_NTL_RSP_DAT_CRED_RCV(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x478)
#define NPU3_NTL_CQ_FENCE_STATUS(brk)		(NPU3_BLOCK_NTL_U(brk) + 0x500)
#define   NPU3_NTL_CQ_FENCE_STATUS_FIELD	PPC_BITMASK(0, 1)
#define     NPU3_NTL_CQ_FENCE_STATUS_FULL	3
#define     NPU3_NTL_CQ_FENCE_STATUS_HALF	2
#define     NPU3_NTL_CQ_FENCE_STATUS_NONE	0

/*
 * CQ_SM block registers
 *
 * Definitions here use NPU3_BLOCK_CQ_SM(0), but when npu3_write() is given
 * one of these, it will do corresponding writes to every CQ_SM block.
 */
#define NPU3_MCP_MISC_CFG0			(NPU3_BLOCK_CQ_SM(0) + 0x000)
#define   NPU3_MCP_MISC_CFG0_ENABLE_PBUS	PPC_BIT(26)
#define   NPU3_MCP_MISC_CFG0_ENABLE_SNARF_CPM	PPC_BIT(27)
#define   NPU3_MCP_MISC_CFG0_OCAPI_MODE		PPC_BITMASK(44, 48)
#define   NPU3_MCP_MISC_CFG0_NVLINK_MODE	PPC_BITMASK(49, 53)
#define NPU3_MCP_MISC_CFG1			(NPU3_BLOCK_CQ_SM(0) + 0x008)
#define NPU3_MCP_MISC_CFG2			(NPU3_BLOCK_CQ_SM(0) + 0x0f0)
#define NPU3_SNP_MISC_CFG0			(NPU3_BLOCK_CQ_SM(0) + 0x180)
#define   NPU3_SNP_MISC_CFG0_ENABLE_PBUS	PPC_BIT(2)
#define   NPU3_SNP_MISC_CFG0_OCAPI_MODE		PPC_BITMASK(32, 36)
#define   NPU3_SNP_MISC_CFG0_NVLINK_MODE	PPC_BITMASK(37, 41)
#define NPU3_GPU_MEM_BAR(brk)			(NPU3_BLOCK_CQ_SM(0) + 0x190 + (brk) * 8)
#define   NPU3_GPU_MEM_BAR_ENABLE		PPC_BIT(0)
#define   NPU3_GPU_MEM_BAR_ADDR_MASK		PPC_BITMASK(1, 35)
#define     NPU3_GPU_MEM_BAR_ADDR		PPC_BITMASK(1, 21)
#define     NPU3_GPU_MEM_BAR_SIZE		PPC_BITMASK(22, 35)
#define   NPU3_GPU_MEM_BAR_SL_MODE		PPC_BIT(36)
#define   NPU3_GPU_MEM_BAR_4T_LIMIT		PPC_BIT(37)
#define   NPU3_GPU_MEM_BAR_4T_SELECT		PPC_BITMASK(38, 39)
#define   NPU3_GPU_MEM_BAR_MODE			PPC_BITMASK(40, 43)
#define   NPU3_GPU_MEM_BAR_POISON		PPC_BIT(45)
#define   NPU3_GPU_MEM_BAR_CHIP_EQ_GROUP	PPC_BIT(49)
#define NPU3_NTL_BAR(brk)			(NPU3_BLOCK_CQ_SM(0) + 0x1b8 + (brk) * 8)
#define   NPU3_NTL_BAR_ENABLE			PPC_BIT(0)
#define   NPU3_NTL_BAR_ADDR			PPC_BITMASK(3, 35)
#define   NPU3_NTL_BAR_SIZE			PPC_BITMASK(39, 43)
#define     NPU3_NTL_BAR_SIZE_128K		1
#define NPU3_MMIO_BAR				(NPU3_BLOCK_CQ_SM(0) + 0x1e0)
#define   NPU3_MMIO_BAR_ENABLE			PPC_BIT(0)
#define   NPU3_MMIO_BAR_ADDR			PPC_BITMASK(3, 27)
#define NPU3_GENID_BAR				(NPU3_BLOCK_CQ_SM(0) + 0x1e8)
#define   NPU3_GENID_BAR_ENABLE			PPC_BIT(0)
#define   NPU3_GENID_BAR_ADDR			PPC_BITMASK(3, 32)
#define NPU3_RELAXED_SRC(n)			(NPU3_BLOCK_CQ_SM(0) + 0x1f0 + (n) * 8)
#define   NPU3_RELAXED_SRC_MAX			4
#define   NPU3_RELAXED_SRC_TAG			PPC_BITMASK(0, 13)
#define     NPU3_RELAXED_SRC_GRPCHP		PPC_BITMASK(0, 6)
#define     NPU3_RELAXED_SRC_PEC		PPC_BITMASK(12, 13)
#define   NPU3_RELAXED_SRC_TAGMASK		PPC_BITMASK(14, 27)
#define   NPU3_RELAXED_SRC_MASK_NPU		PPC_BIT(28)
#define   NPU3_RELAXED_SRC_MASK_PCIE		PPC_BIT(29)
#define   NPU3_RELAXED_SRC_MASK_L2L3		PPC_BIT(30)
#define   NPU3_RELAXED_SRC_RDSTART		PPC_BITMASK(32, 39)
#define   NPU3_RELAXED_SRC_RDEND		PPC_BITMASK(40, 47)
#define   NPU3_RELAXED_SRC_WRSTART		PPC_BITMASK(48, 55)
#define   NPU3_RELAXED_SRC_WREND		PPC_BITMASK(56, 63)
#define NPU3_RELAXED_CFG2(brk)			(NPU3_BLOCK_CQ_SM(0) + 0x230 + (brk) * 8)
#define   NPU3_RELAXED_CFG2_CMD_CL_DMA_W	PPC_BIT(0)
#define   NPU3_RELAXED_CFG2_CMD_CL_DMA_W_HP	PPC_BIT(1)
#define   NPU3_RELAXED_CFG2_CMD_CL_DMA_INJ	PPC_BIT(2)
#define   NPU3_RELAXED_CFG2_CMD_PR_DMA_INJ	PPC_BIT(3)
#define   NPU3_RELAXED_CFG2_CMD_DMA_PR_W	PPC_BIT(4)
#define   NPU3_RELAXED_CFG2_CMD_CL_RD_NC_F0	PPC_BIT(5)
#define   NPU3_RELAXED_CFG2_SRC_WRENA(src)	PPC_BIT(32 + (src) * 4)
#define   NPU3_RELAXED_CFG2_SRC_RDENA(src)	PPC_BIT(33 + (src) * 4)
#define   NPU3_RELAXED_CFG2_SRC_AWENA(src)	PPC_BIT(34 + (src) * 4)
#define   NPU3_RELAXED_CFG2_SRC_ARENA(src)	PPC_BIT(35 + (src) * 4)

/* CQ_CTL block registers */
#define NPU3_CTL_MISC_CFG0			(NPU3_BLOCK_CQ_CTL + 0x000)
#define NPU3_CTL_MISC_CFG1			(NPU3_BLOCK_CQ_CTL + 0x008)
#define NPU3_CTL_MISC_CFG2			(NPU3_BLOCK_CQ_CTL + 0x010)
#define   NPU3_CTL_MISC_CFG2_OCAPI_MODE		PPC_BITMASK(0, 4)
#define   NPU3_CTL_MISC_CFG2_NVLINK_MODE	PPC_BITMASK(5, 9)
#define NPU3_CTL_MISC_CFG3			(NPU3_BLOCK_CQ_CTL + 0x018)
#define NPU3_CTL_BDF2PE_CFG(n)			(NPU3_BLOCK_CQ_CTL + 0x180 + (n) * 8)
#define   NPU3_CTL_BDF2PE_CFG_ENABLE		PPC_BIT(0)
#define   NPU3_CTL_BDF2PE_CFG_PE		PPC_BITMASK(4, 7)
#define   NPU3_CTL_BDF2PE_CFG_BDF		PPC_BITMASK(8, 23)

/* CQ_DAT block registers */
#define NPU3_DAT_MISC_CFG1			(NPU3_BLOCK_CQ_DAT + 0x008)
#define   NPU3_DAT_MISC_CFG1_OCAPI_MODE		PPC_BITMASK(40, 44)
#define   NPU3_DAT_MISC_CFG1_NVLINK_MODE	PPC_BITMASK(45, 49)

/* NTL block registers */
#define NPU3_NTL_MISC_CFG2(brk)			(NPU3_BLOCK_NTL(brk) + 0x000)
#define   NPU3_NTL_MISC_CFG2_BRICK_ENABLE	PPC_BIT(0)
#define   NPU3_NTL_MISC_CFG2_NDL_RX_PARITY_ENA	PPC_BIT(16)
#define   NPU3_NTL_MISC_CFG2_NDL_TX_PARITY_ENA	PPC_BIT(17)
#define   NPU3_NTL_MISC_CFG2_NDL_PRI_PARITY_ENA	PPC_BIT(18)
#define   NPU3_NTL_MISC_CFG2_RCV_CREDIT_OVERFLOW_ENA PPC_BIT(19)
#define NPU3_NTL_PRI_CFG(brk)			(NPU3_BLOCK_NTL(brk) + 0x0b0)
#define   NPU3_NTL_PRI_CFG_NDL			PPC_BITMASK(1, 2)

/* NPU_ATS block registers */
#define NPU3_ATS_IODA_ADDR			(NPU3_BLOCK_NPU_ATS + 0x108)
#define   NPU3_ATS_IODA_ADDR_AUTO_INC		PPC_BIT(0)
#define   NPU3_ATS_IODA_ADDR_TBL_SEL		PPC_BITMASK(11, 15)
#define     NPU3_ATS_IODA_ADDR_TBL_TVT		9
#define   NPU3_ATS_IODA_ADDR_TBL_ADDR		PPC_BITMASK(54, 63)
#define NPU3_ATS_IODA_DATA			(NPU3_BLOCK_NPU_ATS + 0x110)
#define   NPU3_ATS_IODA_TVT_XLAT_ADDR		PPC_BITMASK(0, 47)
#define   NPU3_ATS_IODA_TVT_TABLE_LEVEL		PPC_BITMASK(48, 50)
#define   NPU3_ATS_IODA_TVT_TABLE_SIZE		PPC_BITMASK(51, 55)
#define   NPU3_ATS_IODA_TVT_PAGE_SIZE		PPC_BITMASK(59, 63)
#define NPU3_ATS_TCE_KILL			(NPU3_BLOCK_NPU_ATS + 0x120)
#define   NPU3_ATS_TCE_KILL_ALL			PPC_BIT(0)
#define   NPU3_ATS_TCE_KILL_ONE			PPC_BIT(2)
#define   NPU3_ATS_TCE_KILL_PE_NUMBER		PPC_BITMASK(4, 7)
#define   NPU3_ATS_TCE_KILL_ADDRESS		PPC_BITMASK(15, 51)

/* NPU_XTS block registers */
#define NPU3_XTS_CFG				(NPU3_BLOCK_NPU_XTS + 0x020)
#define   NPU3_XTS_CFG_MMIOSD			PPC_BIT(1)
#define   NPU3_XTS_CFG_TRY_ATR_RO		PPC_BIT(6)
#define   NPU3_XTS_CFG_OPENCAPI			PPC_BIT(15)
#define NPU3_XTS_CFG2				(NPU3_BLOCK_NPU_XTS + 0x028)
#define   NPU3_XTS_CFG2_NO_FLUSH_ENA		PPC_BIT(49)
#define   NPU3_XTS_CFG2_XSL2_ENA		PPC_BIT(55)
#define NPU3_XTS_CFG3				(NPU3_BLOCK_NPU_XTS + 0x068)
#define NPU3_XTS_ATSD_HYP(n)			(NPU3_BLOCK_NPU_XTS + 0x100 + (n) * 8)
#define   NPU3_XTS_ATSD_HYP_MSR_HV		PPC_BIT(51)
#define   NPU3_XTS_ATSD_HYP_LPARID		PPC_BITMASK(52, 63)
#define NPU3_XTS_BDF_MAP(n)			(NPU3_BLOCK_NPU_XTS + 0x4000 + (n) * 8)
#define   NPU3_XTS_BDF_MAP_MAX			16
#define   NPU3_XTS_BDF_MAP_VALID		PPC_BIT(0)
#define   NPU3_XTS_BDF_MAP_UNFILT		PPC_BIT(1)
#define   NPU3_XTS_BDF_MAP_STACK		PPC_BITMASK(4, 6)
#define   NPU3_XTS_BDF_MAP_BRICK		PPC_BITMASK(7, 9)
#define   NPU3_XTS_BDF_MAP_BDF			PPC_BITMASK(16, 31)
#define   NPU3_XTS_BDF_MAP_XLAT			PPC_BITMASK(39, 40)
#define   NPU3_XTS_BDF_MAP_LPCR_PS		PPC_BITMASK(41, 43)
#define   NPU3_XTS_BDF_MAP_LPCR_ISL		PPC_BIT(44)
#define   NPU3_XTS_BDF_MAP_LPCR_TC		PPC_BIT(45)
#define   NPU3_XTS_BDF_MAP_LPCR_SC		PPC_BIT(46)
#define   NPU3_XTS_BDF_MAP_LPCR_BOT		PPC_BIT(47)
#define   NPU3_XTS_BDF_MAP_LPARSHORT		PPC_BITMASK(48, 51)
#define   NPU3_XTS_BDF_MAP_LPARID		PPC_BITMASK(52, 63)
#define NPU3_XTS_PID_MAP(n)			(NPU3_BLOCK_NPU_XTS + 0x8000 + (n) * 32)
#define   NPU3_XTS_PID_MAP_VALID_ATRGPA0	PPC_BIT(0)
#define   NPU3_XTS_PID_MAP_VALID_ATRGPA1	PPC_BIT(1)
#define   NPU3_XTS_PID_MAP_VALID_ATSD		PPC_BIT(2)
#define   NPU3_XTS_PID_MAP_MSR			PPC_BITMASK(25, 31)
#define     NPU3_XTS_PID_MAP_MSR_DR		PPC_BIT(25)
#define     NPU3_XTS_PID_MAP_MSR_TA		PPC_BIT(26)
#define     NPU3_XTS_PID_MAP_MSR_HV		PPC_BIT(27)
#define     NPU3_XTS_PID_MAP_MSR_PR		PPC_BIT(28)
#define     NPU3_XTS_PID_MAP_MSR_US		PPC_BIT(29)
#define     NPU3_XTS_PID_MAP_MSR_SF		PPC_BIT(30)
#define     NPU3_XTS_PID_MAP_MSR_UV		PPC_BIT(31)
#define   NPU3_XTS_PID_MAP_LPARSHORT		PPC_BITMASK(40, 43)
#define   NPU3_XTS_PID_MAP_PID       		PPC_BITMASK(44, 63)

/* NPU_MISC block registers */
#define NPU3_MISC_CFG				(NPU3_BLOCK_NPU_MISC + 0x030)
#define   NPU3_MISC_CFG_IPI_PS			PPC_BIT(11)
#define     NPU3_MISC_CFG_IPI_PS_64K		1
#define   NPU3_MISC_CFG_IPI_OS			PPC_BIT(12)
#define     NPU3_MISC_CFG_IPI_OS_AIX		0
#define     NPU3_MISC_CFG_IPI_OS_LINUX		1
#define NPU3_MISC_INT_BAR			(NPU3_BLOCK_NPU_MISC + 0x098)
#define   NPU3_MISC_INT_BAR_ADDR		PPC_BITMASK(0, 39)
#define NPU3_MISC_BDF2PE_CFG(n)			(NPU3_BLOCK_NPU_MISC + 0x100 + (n) * 8)
#define   NPU3_MISC_BDF2PE_CFG_ENABLE		PPC_BIT(0)
#define   NPU3_MISC_BDF2PE_CFG_PE		PPC_BITMASK(4, 7)
#define   NPU3_MISC_BDF2PE_CFG_BDF		PPC_BITMASK(8, 23)
#define NPU3_MISC_PESTB_DATA(pe)		(NPU3_BLOCK_NPU_MISC + 0x200 + (pe) * 8)
#define   NPU3_MISC_PESTB_DATA_DMA_STOPPED_STATE PPC_BIT(0)

/* NPU_XTS_ATSD block registers */
#define NPU3_XTS_ATSD_LAUNCH(n)			(NPU3_BLOCK_NPU_XTS_ATSD(n) + 0x000)
#define NPU3_XTS_ATSD_MAX			16

#endif /* __NPU3_REGS_H */