1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright(c) 2019 Intel Corporation. All rights rsvd. */
3 #ifndef _IDXD_REGISTERS_H_
4 #define _IDXD_REGISTERS_H_
7 #define PCI_DEVICE_ID_INTEL_DSA_SPR0 0x0b25
9 #define IDXD_MMIO_BAR 0
11 #define IDXD_PORTAL_SIZE 0x4000
13 /* MMIO Device BAR0 Registers */
14 #define IDXD_VER_OFFSET 0x00
15 #define IDXD_VER_MAJOR_MASK 0xf0
16 #define IDXD_VER_MINOR_MASK 0x0f
17 #define GET_IDXD_VER_MAJOR(x) (((x) & IDXD_VER_MAJOR_MASK) >> 4)
18 #define GET_IDXD_VER_MINOR(x) ((x) & IDXD_VER_MINOR_MASK)
24 u64 cache_control_mem
:1;
25 u64 cache_control_cache
:1;
32 u64 max_batch_shift
:4;
35 u64 max_descs_per_engine
:8;
40 #define IDXD_GENCAP_OFFSET 0x10
57 #define IDXD_WQCAP_OFFSET 0x20
69 #define IDXD_GRPCAP_OFFSET 0x30
71 union engine_cap_reg
{
79 #define IDXD_ENGCAP_OFFSET 0x38
81 #define IDXD_OPCAP_NOOP 0x0001
82 #define IDXD_OPCAP_BATCH 0x0002
83 #define IDXD_OPCAP_MEMMOVE 0x0008
88 #define IDXD_OPCAP_OFFSET 0x40
90 #define IDXD_TABLE_OFFSET 0x60
103 #define IDXD_GENCFG_OFFSET 0x80
114 #define IDXD_GENCTRL_OFFSET 0x88
117 u32 softerr_int_en
:1;
123 #define IDXD_GENSTATS_OFFSET 0x90
133 enum idxd_device_status_state
{
134 IDXD_DEVICE_STATE_DISABLED
= 0,
135 IDXD_DEVICE_STATE_ENABLED
,
136 IDXD_DEVICE_STATE_DRAIN
,
137 IDXD_DEVICE_STATE_HALT
,
140 enum idxd_device_reset_type
{
141 IDXD_DEVICE_RESET_SOFTWARE
= 0,
142 IDXD_DEVICE_RESET_FLR
,
143 IDXD_DEVICE_RESET_WARM
,
144 IDXD_DEVICE_RESET_COLD
,
147 #define IDXD_INTCAUSE_OFFSET 0x98
148 #define IDXD_INTC_ERR 0x01
149 #define IDXD_INTC_CMD 0x02
150 #define IDXD_INTC_OCCUPY 0x04
151 #define IDXD_INTC_PERFMON_OVFL 0x08
153 #define IDXD_CMD_OFFSET 0xa0
154 union idxd_command_reg
{
165 IDXD_CMD_ENABLE_DEVICE
= 1,
166 IDXD_CMD_DISABLE_DEVICE
,
169 IDXD_CMD_RESET_DEVICE
,
175 IDXD_CMD_DRAIN_PASID
,
176 IDXD_CMD_ABORT_PASID
,
177 IDXD_CMD_REQUEST_INT_HANDLE
,
180 #define IDXD_CMDSTS_OFFSET 0xa8
190 #define IDXD_CMDSTS_ACTIVE 0x80000000
192 enum idxd_cmdsts_err
{
193 IDXD_CMDSTS_SUCCESS
= 0,
194 IDXD_CMDSTS_INVAL_CMD
,
195 IDXD_CMDSTS_INVAL_WQIDX
,
197 /* enable device errors */
198 IDXD_CMDSTS_ERR_DEV_ENABLED
= 0x10,
199 IDXD_CMDSTS_ERR_CONFIG
,
200 IDXD_CMDSTS_ERR_BUSMASTER_EN
,
201 IDXD_CMDSTS_ERR_PASID_INVAL
,
202 IDXD_CMDSTS_ERR_WQ_SIZE_ERANGE
,
203 IDXD_CMDSTS_ERR_GRP_CONFIG
,
204 IDXD_CMDSTS_ERR_GRP_CONFIG2
,
205 IDXD_CMDSTS_ERR_GRP_CONFIG3
,
206 IDXD_CMDSTS_ERR_GRP_CONFIG4
,
207 /* enable wq errors */
208 IDXD_CMDSTS_ERR_DEV_NOTEN
= 0x20,
209 IDXD_CMDSTS_ERR_WQ_ENABLED
,
210 IDXD_CMDSTS_ERR_WQ_SIZE
,
211 IDXD_CMDSTS_ERR_WQ_PRIOR
,
212 IDXD_CMDSTS_ERR_WQ_MODE
,
213 IDXD_CMDSTS_ERR_BOF_EN
,
214 IDXD_CMDSTS_ERR_PASID_EN
,
215 IDXD_CMDSTS_ERR_MAX_BATCH_SIZE
,
216 IDXD_CMDSTS_ERR_MAX_XFER_SIZE
,
217 /* disable device errors */
218 IDXD_CMDSTS_ERR_DIS_DEV_EN
= 0x31,
219 /* disable WQ, drain WQ, abort WQ, reset WQ */
220 IDXD_CMDSTS_ERR_DEV_NOT_EN
,
221 /* request interrupt handle */
222 IDXD_CMDSTS_ERR_INVAL_INT_IDX
= 0x41,
223 IDXD_CMDSTS_ERR_NO_HANDLE
,
226 #define IDXD_SWERR_OFFSET 0xc0
227 #define IDXD_SWERR_VALID 0x00000001
228 #define IDXD_SWERR_OVERFLOW 0x00000002
229 #define IDXD_SWERR_ACK (IDXD_SWERR_VALID | IDXD_SWERR_OVERFLOW)
249 u64 invalid_flags
:32;
274 u32 use_token_limit
:1;
275 u32 tokens_reserved
:8;
277 u32 tokens_allowed
:8;
286 union group_flags flags
;
300 u32 mode
:1; /* shared or dedicated */
301 u32 bof
:1; /* block on fault */
310 u32 max_xfer_shift
:5;
311 u32 max_batch_shift
:4;
316 u16 occupancy_table_sel
:1;
321 u16 occupancy_int_en
:1;