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 { 54*a977168cSMichal Gulbicki FCU_CONTROL = 0x00, 55*a977168cSMichal Gulbicki FCU_STATUS = 0x04, 56*a977168cSMichal 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 { 63*a977168cSMichal Gulbicki FCU_CONTROL_C4XXX = 0x00, 64*a977168cSMichal Gulbicki FCU_STATUS_C4XXX = 0x04, 65*a977168cSMichal 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 71*a977168cSMichal Gulbicki enum fcu_csr_4xxx { 72*a977168cSMichal Gulbicki FCU_CONTROL_4XXX = 0x00, 73*a977168cSMichal Gulbicki FCU_STATUS_4XXX = 0x04, 74*a977168cSMichal Gulbicki FCU_ME_BROADCAST_MASK_TYPE = 0x08, 75*a977168cSMichal Gulbicki FCU_AE_LOADED_4XXX = 0x10, 76*a977168cSMichal Gulbicki FCU_DRAM_ADDR_LO_4XXX = 0x14, 77*a977168cSMichal Gulbicki FCU_DRAM_ADDR_HI_4XXX = 0x18, 78*a977168cSMichal Gulbicki }; 79*a977168cSMichal 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 115*a977168cSMichal 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 123*a977168cSMichal Gulbicki #define FW_BROADCAST_MAX_RETRY 300 12478ee8d1cSJulian Grajkowski #define FCU_OFFSET 0x8c0 12578ee8d1cSJulian Grajkowski #define FCU_OFFSET_C4XXX 0x1000 126*a977168cSMichal 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 133*a977168cSMichal 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 136*a977168cSMichal 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 140*a977168cSMichal Gulbicki #define ICP_QAT_EP_OFFSET_4XXX 0x200000 /* HI MMIO CSRs */ 14178ee8d1cSJulian Grajkowski #define MEM_CFG_ERR_BIT 0x20 142*a977168cSMichal 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 ({ \ 151*a977168cSMichal Gulbicki u32 dev_id = pci_get_device(GET_DEV((handle)->accel_dev)); \ 152*a977168cSMichal Gulbicki (IS_QAT_GEN3_OR_GEN4(dev_id)) ? \ 153*a977168cSMichal Gulbicki SET_CAP_CSR((handle), (csr), (val)) : \ 154*a977168cSMichal Gulbicki SET_CAP_CSR((handle), (csr) + GLOBAL_CSR, val); \ 15578ee8d1cSJulian Grajkowski }) 15678ee8d1cSJulian Grajkowski #define GET_GLB_CSR(handle, csr) \ 15778ee8d1cSJulian Grajkowski ({ \ 158*a977168cSMichal Gulbicki u32 dev_id = pci_get_device(GET_DEV((handle)->accel_dev)); \ 159*a977168cSMichal Gulbicki (IS_QAT_GEN3_OR_GEN4(dev_id)) ? \ 160*a977168cSMichal Gulbicki GET_CAP_CSR((handle), (csr)) : \ 161*a977168cSMichal 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_)) : \ 172*a977168cSMichal Gulbicki ((IS_QAT_GEN4( \ 173*a977168cSMichal Gulbicki pci_get_device(GET_DEV(handle_->accel_dev)))) ? \ 174*a977168cSMichal Gulbicki SET_CAP_CSR(handle_, \ 175*a977168cSMichal Gulbicki ((csr_) + FCU_OFFSET_4XXX), \ 176*a977168cSMichal Gulbicki (val_)) : \ 177*a977168cSMichal 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_))) : \ 185*a977168cSMichal Gulbicki ((IS_QAT_GEN4( \ 186*a977168cSMichal Gulbicki pci_get_device(GET_DEV(handle_->accel_dev)))) ? \ 187*a977168cSMichal Gulbicki GET_CAP_CSR(handle_, (FCU_OFFSET_4XXX + (csr_))) : \ 188*a977168cSMichal 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 ({ \ 207*a977168cSMichal Gulbicki if (IS_QAT_GEN3(device_id)) { \ 208*a977168cSMichal Gulbicki cap_offset_ = ICP_QAT_CAP_OFFSET_C4XXX; \ 209*a977168cSMichal Gulbicki ae_offset_ = ICP_QAT_AE_OFFSET_C4XXX; \ 210*a977168cSMichal Gulbicki ep_offset_ = ICP_QAT_EP_OFFSET_C4XXX; \ 211*a977168cSMichal Gulbicki } else if (IS_QAT_GEN4(device_id)) { \ 212*a977168cSMichal Gulbicki cap_offset_ = ICP_QAT_CAP_OFFSET_4XXX; \ 213*a977168cSMichal Gulbicki ae_offset_ = ICP_QAT_AE_OFFSET_4XXX; \ 214*a977168cSMichal Gulbicki ep_offset_ = ICP_QAT_EP_OFFSET_4XXX; \ 215*a977168cSMichal Gulbicki } else { \ 216*a977168cSMichal Gulbicki cap_offset_ = ICP_QAT_CAP_OFFSET; \ 217*a977168cSMichal Gulbicki ae_offset_ = ICP_QAT_AE_OFFSET; \ 218*a977168cSMichal Gulbicki ep_offset_ = ICP_QAT_EP_OFFSET; \ 219*a977168cSMichal Gulbicki } \ 22078ee8d1cSJulian Grajkowski }) 22178ee8d1cSJulian Grajkowski 22278ee8d1cSJulian Grajkowski #endif 223