xref: /freebsd/sys/dev/qat/include/common/icp_qat_hal.h (revision 71625ec9)
178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
378ee8d1cSJulian Grajkowski #ifndef __ICP_QAT_HAL_H
478ee8d1cSJulian Grajkowski #define __ICP_QAT_HAL_H
578ee8d1cSJulian Grajkowski #include "adf_accel_devices.h"
678ee8d1cSJulian Grajkowski #include "icp_qat_fw_loader_handle.h"
778ee8d1cSJulian Grajkowski 
878ee8d1cSJulian Grajkowski enum hal_global_csr {
978ee8d1cSJulian Grajkowski 	MISC_CONTROL = 0x04,
1078ee8d1cSJulian Grajkowski 	ICP_RESET = 0x0c,
1178ee8d1cSJulian Grajkowski 	ICP_GLOBAL_CLK_ENABLE = 0x50
1278ee8d1cSJulian Grajkowski };
1378ee8d1cSJulian Grajkowski 
1478ee8d1cSJulian Grajkowski enum { MISC_CONTROL_C4XXX = 0xAA0,
1578ee8d1cSJulian Grajkowski        ICP_RESET_CPP0 = 0x938,
1678ee8d1cSJulian Grajkowski        ICP_RESET_CPP1 = 0x93c,
1778ee8d1cSJulian Grajkowski        ICP_GLOBAL_CLK_ENABLE_CPP0 = 0x964,
1878ee8d1cSJulian Grajkowski        ICP_GLOBAL_CLK_ENABLE_CPP1 = 0x968 };
1978ee8d1cSJulian Grajkowski 
2078ee8d1cSJulian Grajkowski enum hal_ae_csr {
2178ee8d1cSJulian Grajkowski 	USTORE_ADDRESS = 0x000,
2278ee8d1cSJulian Grajkowski 	USTORE_DATA_LOWER = 0x004,
2378ee8d1cSJulian Grajkowski 	USTORE_DATA_UPPER = 0x008,
2478ee8d1cSJulian Grajkowski 	ALU_OUT = 0x010,
2578ee8d1cSJulian Grajkowski 	CTX_ARB_CNTL = 0x014,
2678ee8d1cSJulian Grajkowski 	CTX_ENABLES = 0x018,
2778ee8d1cSJulian Grajkowski 	CC_ENABLE = 0x01c,
2878ee8d1cSJulian Grajkowski 	CSR_CTX_POINTER = 0x020,
2978ee8d1cSJulian Grajkowski 	CTX_STS_INDIRECT = 0x040,
3078ee8d1cSJulian Grajkowski 	ACTIVE_CTX_STATUS = 0x044,
3178ee8d1cSJulian Grajkowski 	CTX_SIG_EVENTS_INDIRECT = 0x048,
3278ee8d1cSJulian Grajkowski 	CTX_SIG_EVENTS_ACTIVE = 0x04c,
3378ee8d1cSJulian Grajkowski 	CTX_WAKEUP_EVENTS_INDIRECT = 0x050,
3478ee8d1cSJulian Grajkowski 	LM_ADDR_0_INDIRECT = 0x060,
3578ee8d1cSJulian Grajkowski 	LM_ADDR_1_INDIRECT = 0x068,
3678ee8d1cSJulian Grajkowski 	LM_ADDR_2_INDIRECT = 0x0cc,
3778ee8d1cSJulian Grajkowski 	LM_ADDR_3_INDIRECT = 0x0d4,
3878ee8d1cSJulian Grajkowski 	INDIRECT_LM_ADDR_0_BYTE_INDEX = 0x0e0,
3978ee8d1cSJulian Grajkowski 	INDIRECT_LM_ADDR_1_BYTE_INDEX = 0x0e8,
4078ee8d1cSJulian Grajkowski 	INDIRECT_LM_ADDR_2_BYTE_INDEX = 0x10c,
4178ee8d1cSJulian Grajkowski 	INDIRECT_LM_ADDR_3_BYTE_INDEX = 0x114,
4278ee8d1cSJulian Grajkowski 	INDIRECT_T_INDEX = 0x0f8,
4378ee8d1cSJulian Grajkowski 	INDIRECT_T_INDEX_BYTE_INDEX = 0x0fc,
4478ee8d1cSJulian Grajkowski 	FUTURE_COUNT_SIGNAL_INDIRECT = 0x078,
4578ee8d1cSJulian Grajkowski 	TIMESTAMP_LOW = 0x0c0,
4678ee8d1cSJulian Grajkowski 	TIMESTAMP_HIGH = 0x0c4,
4778ee8d1cSJulian Grajkowski 	PROFILE_COUNT = 0x144,
4878ee8d1cSJulian Grajkowski 	SIGNATURE_ENABLE = 0x150,
4978ee8d1cSJulian Grajkowski 	AE_MISC_CONTROL = 0x160,
5078ee8d1cSJulian Grajkowski 	LOCAL_CSR_STATUS = 0x180,
5178ee8d1cSJulian Grajkowski };
5278ee8d1cSJulian Grajkowski 
5378ee8d1cSJulian Grajkowski enum fcu_csr {
54a977168cSMichal Gulbicki 	FCU_CONTROL = 0x00,
55a977168cSMichal Gulbicki 	FCU_STATUS = 0x04,
56a977168cSMichal Gulbicki 	FCU_DRAM_ADDR_LO = 0x0c,
5778ee8d1cSJulian Grajkowski 	FCU_DRAM_ADDR_HI = 0x10,
5878ee8d1cSJulian Grajkowski 	FCU_RAMBASE_ADDR_HI = 0x14,
5978ee8d1cSJulian Grajkowski 	FCU_RAMBASE_ADDR_LO = 0x18
6078ee8d1cSJulian Grajkowski };
6178ee8d1cSJulian Grajkowski 
6278ee8d1cSJulian Grajkowski enum fcu_csr_c4xxx {
63a977168cSMichal Gulbicki 	FCU_CONTROL_C4XXX = 0x00,
64a977168cSMichal Gulbicki 	FCU_STATUS_C4XXX = 0x04,
65a977168cSMichal Gulbicki 	FCU_STATUS1_C4XXX = 0x0c,
6678ee8d1cSJulian Grajkowski 	FCU_AE_LOADED_C4XXX = 0x10,
6778ee8d1cSJulian Grajkowski 	FCU_DRAM_ADDR_LO_C4XXX = 0x14,
6878ee8d1cSJulian Grajkowski 	FCU_DRAM_ADDR_HI_C4XXX = 0x18,
6978ee8d1cSJulian Grajkowski };
7078ee8d1cSJulian Grajkowski 
71a977168cSMichal Gulbicki enum fcu_csr_4xxx {
72a977168cSMichal Gulbicki 	FCU_CONTROL_4XXX = 0x00,
73a977168cSMichal Gulbicki 	FCU_STATUS_4XXX = 0x04,
74a977168cSMichal Gulbicki 	FCU_ME_BROADCAST_MASK_TYPE = 0x08,
75a977168cSMichal Gulbicki 	FCU_AE_LOADED_4XXX = 0x10,
76a977168cSMichal Gulbicki 	FCU_DRAM_ADDR_LO_4XXX = 0x14,
77a977168cSMichal Gulbicki 	FCU_DRAM_ADDR_HI_4XXX = 0x18,
78a977168cSMichal Gulbicki };
79a977168cSMichal Gulbicki 
8078ee8d1cSJulian Grajkowski enum fcu_cmd {
8178ee8d1cSJulian Grajkowski 	FCU_CTRL_CMD_NOOP = 0,
8278ee8d1cSJulian Grajkowski 	FCU_CTRL_CMD_AUTH = 1,
8378ee8d1cSJulian Grajkowski 	FCU_CTRL_CMD_LOAD = 2,
8478ee8d1cSJulian Grajkowski 	FCU_CTRL_CMD_START = 3
8578ee8d1cSJulian Grajkowski };
8678ee8d1cSJulian Grajkowski 
8778ee8d1cSJulian Grajkowski enum fcu_sts {
8878ee8d1cSJulian Grajkowski 	FCU_STS_NO_STS = 0,
8978ee8d1cSJulian Grajkowski 	FCU_STS_VERI_DONE = 1,
9078ee8d1cSJulian Grajkowski 	FCU_STS_LOAD_DONE = 2,
9178ee8d1cSJulian Grajkowski 	FCU_STS_VERI_FAIL = 3,
9278ee8d1cSJulian Grajkowski 	FCU_STS_LOAD_FAIL = 4,
9378ee8d1cSJulian Grajkowski 	FCU_STS_BUSY = 5
9478ee8d1cSJulian Grajkowski };
9578ee8d1cSJulian Grajkowski #define UA_ECS (0x1 << 31)
9678ee8d1cSJulian Grajkowski #define ACS_ABO_BITPOS 31
9778ee8d1cSJulian Grajkowski #define ACS_ACNO 0x7
9878ee8d1cSJulian Grajkowski #define CE_ENABLE_BITPOS 0x8
9978ee8d1cSJulian Grajkowski #define CE_LMADDR_0_GLOBAL_BITPOS 16
10078ee8d1cSJulian Grajkowski #define CE_LMADDR_1_GLOBAL_BITPOS 17
10178ee8d1cSJulian Grajkowski #define CE_LMADDR_2_GLOBAL_BITPOS 22
10278ee8d1cSJulian Grajkowski #define CE_LMADDR_3_GLOBAL_BITPOS 23
10378ee8d1cSJulian Grajkowski #define CE_T_INDEX_GLOBAL_BITPOS 21
10478ee8d1cSJulian Grajkowski #define CE_NN_MODE_BITPOS 20
10578ee8d1cSJulian Grajkowski #define CE_REG_PAR_ERR_BITPOS 25
10678ee8d1cSJulian Grajkowski #define CE_BREAKPOINT_BITPOS 27
10778ee8d1cSJulian Grajkowski #define CE_CNTL_STORE_PARITY_ERROR_BITPOS 29
10878ee8d1cSJulian Grajkowski #define CE_INUSE_CONTEXTS_BITPOS 31
10978ee8d1cSJulian Grajkowski #define CE_NN_MODE (0x1 << CE_NN_MODE_BITPOS)
11078ee8d1cSJulian Grajkowski #define CE_INUSE_CONTEXTS (0x1 << CE_INUSE_CONTEXTS_BITPOS)
11178ee8d1cSJulian Grajkowski #define XCWE_VOLUNTARY (0x1)
11278ee8d1cSJulian Grajkowski #define LCS_STATUS (0x1)
11378ee8d1cSJulian Grajkowski #define MMC_SHARE_CS_BITPOS 2
11478ee8d1cSJulian Grajkowski #define GLOBAL_CSR 0xA00
115a977168cSMichal Gulbicki #define FCU_CTRL_BROADCAST_POS 0x4
11678ee8d1cSJulian Grajkowski #define FCU_CTRL_AE_POS 0x8
11778ee8d1cSJulian Grajkowski #define FCU_AUTH_STS_MASK 0x7
11878ee8d1cSJulian Grajkowski #define FCU_STS_DONE_POS 0x9
11978ee8d1cSJulian Grajkowski #define FCU_STS_AUTHFWLD_POS 0X8
12078ee8d1cSJulian Grajkowski #define FCU_LOADED_AE_POS 0x16
12178ee8d1cSJulian Grajkowski #define FW_AUTH_WAIT_PERIOD 10
12278ee8d1cSJulian Grajkowski #define FW_AUTH_MAX_RETRY 300
123a977168cSMichal Gulbicki #define FW_BROADCAST_MAX_RETRY 300
12478ee8d1cSJulian Grajkowski #define FCU_OFFSET 0x8c0
12578ee8d1cSJulian Grajkowski #define FCU_OFFSET_C4XXX 0x1000
126a977168cSMichal Gulbicki #define FCU_OFFSET_4XXX 0x1000
12778ee8d1cSJulian Grajkowski #define MAX_CPP_NUM 2
12878ee8d1cSJulian Grajkowski #define AE_CPP_NUM 2
12978ee8d1cSJulian Grajkowski #define AES_PER_CPP 16
13078ee8d1cSJulian Grajkowski #define SLICES_PER_CPP 6
13178ee8d1cSJulian Grajkowski #define ICP_QAT_AE_OFFSET 0x20000
13278ee8d1cSJulian Grajkowski #define ICP_QAT_AE_OFFSET_C4XXX 0x40000
133a977168cSMichal Gulbicki #define ICP_QAT_AE_OFFSET_4XXX 0x600000
13478ee8d1cSJulian Grajkowski #define ICP_QAT_CAP_OFFSET (ICP_QAT_AE_OFFSET + 0x10000)
13578ee8d1cSJulian Grajkowski #define ICP_QAT_CAP_OFFSET_C4XXX 0x70000
136a977168cSMichal Gulbicki #define ICP_QAT_CAP_OFFSET_4XXX 0x640000
13778ee8d1cSJulian Grajkowski #define LOCAL_TO_XFER_REG_OFFSET 0x800
13878ee8d1cSJulian Grajkowski #define ICP_QAT_EP_OFFSET 0x3a000
13978ee8d1cSJulian Grajkowski #define ICP_QAT_EP_OFFSET_C4XXX 0x60000
140a977168cSMichal Gulbicki #define ICP_QAT_EP_OFFSET_4XXX 0x200000 /* HI MMIO CSRs */
14178ee8d1cSJulian Grajkowski #define MEM_CFG_ERR_BIT 0x20
142a977168cSMichal Gulbicki #define AE_TG_NUM_CPM2X 4
14378ee8d1cSJulian Grajkowski 
14478ee8d1cSJulian Grajkowski #define CAP_CSR_ADDR(csr) (csr + handle->hal_cap_g_ctl_csr_addr_v)
14578ee8d1cSJulian Grajkowski #define SET_CAP_CSR(handle, csr, val)                                          \
14678ee8d1cSJulian Grajkowski 	ADF_CSR_WR(handle->hal_misc_addr_v, CAP_CSR_ADDR(csr), val)
14778ee8d1cSJulian Grajkowski #define GET_CAP_CSR(handle, csr)                                               \
14878ee8d1cSJulian Grajkowski 	ADF_CSR_RD(handle->hal_misc_addr_v, CAP_CSR_ADDR(csr))
14978ee8d1cSJulian Grajkowski #define SET_GLB_CSR(handle, csr, val)                                          \
15078ee8d1cSJulian Grajkowski 	({                                                                     \
151a977168cSMichal Gulbicki 		u32 dev_id = pci_get_device(GET_DEV((handle)->accel_dev));     \
152a977168cSMichal Gulbicki 		(IS_QAT_GEN3_OR_GEN4(dev_id)) ?                                \
153a977168cSMichal Gulbicki 		    SET_CAP_CSR((handle), (csr), (val)) :                      \
154a977168cSMichal Gulbicki 		    SET_CAP_CSR((handle), (csr) + GLOBAL_CSR, val);            \
15578ee8d1cSJulian Grajkowski 	})
15678ee8d1cSJulian Grajkowski #define GET_GLB_CSR(handle, csr)                                               \
15778ee8d1cSJulian Grajkowski 	({                                                                     \
158a977168cSMichal Gulbicki 		u32 dev_id = pci_get_device(GET_DEV((handle)->accel_dev));     \
159a977168cSMichal Gulbicki 		(IS_QAT_GEN3_OR_GEN4(dev_id)) ?                                \
160a977168cSMichal Gulbicki 		    GET_CAP_CSR((handle), (csr)) :                             \
161a977168cSMichal Gulbicki 		    GET_CAP_CSR((handle), (csr) + GLOBAL_CSR);                 \
16278ee8d1cSJulian Grajkowski 	})
16378ee8d1cSJulian Grajkowski #define SET_FCU_CSR(handle, csr, val)                                          \
16478ee8d1cSJulian Grajkowski 	({                                                                     \
16578ee8d1cSJulian Grajkowski 		typeof(handle) handle_ = (handle);                             \
16678ee8d1cSJulian Grajkowski 		typeof(csr) csr_ = (csr);                                      \
16778ee8d1cSJulian Grajkowski 		typeof(val) val_ = (val);                                      \
16878ee8d1cSJulian Grajkowski 		(IS_QAT_GEN3(pci_get_device(GET_DEV(handle_->accel_dev)))) ?   \
16978ee8d1cSJulian Grajkowski 		    SET_CAP_CSR(handle_,                                       \
17078ee8d1cSJulian Grajkowski 				((csr_) + FCU_OFFSET_C4XXX),                   \
17178ee8d1cSJulian Grajkowski 				(val_)) :                                      \
172a977168cSMichal Gulbicki 		    ((IS_QAT_GEN4(                                             \
173a977168cSMichal Gulbicki 			 pci_get_device(GET_DEV(handle_->accel_dev)))) ?       \
174a977168cSMichal Gulbicki 			 SET_CAP_CSR(handle_,                                  \
175a977168cSMichal Gulbicki 				     ((csr_) + FCU_OFFSET_4XXX),               \
176a977168cSMichal Gulbicki 				     (val_)) :                                 \
177a977168cSMichal Gulbicki 			 SET_CAP_CSR(handle_, ((csr_) + FCU_OFFSET), (val_))); \
17878ee8d1cSJulian Grajkowski 	})
17978ee8d1cSJulian Grajkowski #define GET_FCU_CSR(handle, csr)                                               \
18078ee8d1cSJulian Grajkowski 	({                                                                     \
18178ee8d1cSJulian Grajkowski 		typeof(handle) handle_ = (handle);                             \
18278ee8d1cSJulian Grajkowski 		typeof(csr) csr_ = (csr);                                      \
18378ee8d1cSJulian Grajkowski 		(IS_QAT_GEN3(pci_get_device(GET_DEV(handle_->accel_dev)))) ?   \
18478ee8d1cSJulian Grajkowski 		    GET_CAP_CSR(handle_, (FCU_OFFSET_C4XXX + (csr_))) :        \
185a977168cSMichal Gulbicki 		    ((IS_QAT_GEN4(                                             \
186a977168cSMichal Gulbicki 			 pci_get_device(GET_DEV(handle_->accel_dev)))) ?       \
187a977168cSMichal Gulbicki 			 GET_CAP_CSR(handle_, (FCU_OFFSET_4XXX + (csr_))) :    \
188a977168cSMichal Gulbicki 			 GET_CAP_CSR(handle_, (FCU_OFFSET + (csr_))));         \
18978ee8d1cSJulian Grajkowski 	})
19078ee8d1cSJulian Grajkowski #define AE_CSR(handle, ae)                                                     \
19178ee8d1cSJulian Grajkowski 	((handle)->hal_cap_ae_local_csr_addr_v + ((ae) << 12))
19278ee8d1cSJulian Grajkowski #define AE_CSR_ADDR(handle, ae, csr) (AE_CSR(handle, ae) + (0x3ff & (csr)))
19378ee8d1cSJulian Grajkowski #define SET_AE_CSR(handle, ae, csr, val)                                       \
19478ee8d1cSJulian Grajkowski 	ADF_CSR_WR(handle->hal_misc_addr_v, AE_CSR_ADDR(handle, ae, csr), val)
19578ee8d1cSJulian Grajkowski #define GET_AE_CSR(handle, ae, csr)                                            \
19678ee8d1cSJulian Grajkowski 	ADF_CSR_RD(handle->hal_misc_addr_v, AE_CSR_ADDR(handle, ae, csr))
19778ee8d1cSJulian Grajkowski #define AE_XFER(handle, ae)                                                    \
19878ee8d1cSJulian Grajkowski 	((handle)->hal_cap_ae_xfer_csr_addr_v + ((ae) << 12))
19978ee8d1cSJulian Grajkowski #define AE_XFER_ADDR(handle, ae, reg)                                          \
20078ee8d1cSJulian Grajkowski 	(AE_XFER(handle, ae) + (((reg)&0xff) << 2))
20178ee8d1cSJulian Grajkowski #define SET_AE_XFER(handle, ae, reg, val)                                      \
20278ee8d1cSJulian Grajkowski 	ADF_CSR_WR(handle->hal_misc_addr_v, AE_XFER_ADDR(handle, ae, reg), val)
20378ee8d1cSJulian Grajkowski #define SRAM_WRITE(handle, addr, val)                                          \
20478ee8d1cSJulian Grajkowski 	ADF_CSR_WR((handle)->hal_sram_addr_v, addr, val)
20578ee8d1cSJulian Grajkowski #define GET_CSR_OFFSET(device_id, cap_offset_, ae_offset_, ep_offset_)         \
20678ee8d1cSJulian Grajkowski 	({                                                                     \
207a977168cSMichal Gulbicki 		if (IS_QAT_GEN3(device_id)) {                                  \
208a977168cSMichal Gulbicki 			cap_offset_ = ICP_QAT_CAP_OFFSET_C4XXX;                \
209a977168cSMichal Gulbicki 			ae_offset_ = ICP_QAT_AE_OFFSET_C4XXX;                  \
210a977168cSMichal Gulbicki 			ep_offset_ = ICP_QAT_EP_OFFSET_C4XXX;                  \
211a977168cSMichal Gulbicki 		} else if (IS_QAT_GEN4(device_id)) {                           \
212a977168cSMichal Gulbicki 			cap_offset_ = ICP_QAT_CAP_OFFSET_4XXX;                 \
213a977168cSMichal Gulbicki 			ae_offset_ = ICP_QAT_AE_OFFSET_4XXX;                   \
214a977168cSMichal Gulbicki 			ep_offset_ = ICP_QAT_EP_OFFSET_4XXX;                   \
215a977168cSMichal Gulbicki 		} else {                                                       \
216a977168cSMichal Gulbicki 			cap_offset_ = ICP_QAT_CAP_OFFSET;                      \
217a977168cSMichal Gulbicki 			ae_offset_ = ICP_QAT_AE_OFFSET;                        \
218a977168cSMichal Gulbicki 			ep_offset_ = ICP_QAT_EP_OFFSET;                        \
219a977168cSMichal Gulbicki 		}                                                              \
22078ee8d1cSJulian Grajkowski 	})
22178ee8d1cSJulian Grajkowski 
22278ee8d1cSJulian Grajkowski #endif
223