1*17fd7514SLaurent M Coquerel /* SPDX-License-Identifier: GPL-2.0-only */ 2*17fd7514SLaurent M Coquerel /* Copyright(c) 2025 Intel Corporation */ 3*17fd7514SLaurent M Coquerel #ifndef ADF_6XXX_HW_DATA_H_ 4*17fd7514SLaurent M Coquerel #define ADF_6XXX_HW_DATA_H_ 5*17fd7514SLaurent M Coquerel 6*17fd7514SLaurent M Coquerel #include <linux/bits.h> 7*17fd7514SLaurent M Coquerel #include <linux/time.h> 8*17fd7514SLaurent M Coquerel #include <linux/units.h> 9*17fd7514SLaurent M Coquerel 10*17fd7514SLaurent M Coquerel #include "adf_accel_devices.h" 11*17fd7514SLaurent M Coquerel #include "adf_cfg_common.h" 12*17fd7514SLaurent M Coquerel #include "adf_dc.h" 13*17fd7514SLaurent M Coquerel 14*17fd7514SLaurent M Coquerel /* PCIe configuration space */ 15*17fd7514SLaurent M Coquerel #define ADF_GEN6_BAR_MASK (BIT(0) | BIT(2) | BIT(4)) 16*17fd7514SLaurent M Coquerel #define ADF_GEN6_SRAM_BAR 0 17*17fd7514SLaurent M Coquerel #define ADF_GEN6_PMISC_BAR 1 18*17fd7514SLaurent M Coquerel #define ADF_GEN6_ETR_BAR 2 19*17fd7514SLaurent M Coquerel #define ADF_6XXX_MAX_ACCELENGINES 9 20*17fd7514SLaurent M Coquerel 21*17fd7514SLaurent M Coquerel /* Clocks frequency */ 22*17fd7514SLaurent M Coquerel #define ADF_GEN6_COUNTER_FREQ (100 * HZ_PER_MHZ) 23*17fd7514SLaurent M Coquerel 24*17fd7514SLaurent M Coquerel /* Physical function fuses */ 25*17fd7514SLaurent M Coquerel #define ADF_GEN6_FUSECTL0_OFFSET 0x2C8 26*17fd7514SLaurent M Coquerel #define ADF_GEN6_FUSECTL1_OFFSET 0x2CC 27*17fd7514SLaurent M Coquerel #define ADF_GEN6_FUSECTL4_OFFSET 0x2D8 28*17fd7514SLaurent M Coquerel 29*17fd7514SLaurent M Coquerel /* Accelerators */ 30*17fd7514SLaurent M Coquerel #define ADF_GEN6_ACCELERATORS_MASK 0x1 31*17fd7514SLaurent M Coquerel #define ADF_GEN6_MAX_ACCELERATORS 1 32*17fd7514SLaurent M Coquerel 33*17fd7514SLaurent M Coquerel /* MSI-X interrupt */ 34*17fd7514SLaurent M Coquerel #define ADF_GEN6_SMIAPF_RP_X0_MASK_OFFSET 0x41A040 35*17fd7514SLaurent M Coquerel #define ADF_GEN6_SMIAPF_RP_X1_MASK_OFFSET 0x41A044 36*17fd7514SLaurent M Coquerel #define ADF_GEN6_SMIAPF_MASK_OFFSET 0x41A084 37*17fd7514SLaurent M Coquerel #define ADF_GEN6_MSIX_RTTABLE_OFFSET(i) (0x409000 + ((i) * 4)) 38*17fd7514SLaurent M Coquerel 39*17fd7514SLaurent M Coquerel /* Bank and ring configuration */ 40*17fd7514SLaurent M Coquerel #define ADF_GEN6_NUM_RINGS_PER_BANK 2 41*17fd7514SLaurent M Coquerel #define ADF_GEN6_NUM_BANKS_PER_VF 4 42*17fd7514SLaurent M Coquerel #define ADF_GEN6_ETR_MAX_BANKS 64 43*17fd7514SLaurent M Coquerel #define ADF_GEN6_RX_RINGS_OFFSET 1 44*17fd7514SLaurent M Coquerel #define ADF_GEN6_TX_RINGS_MASK 0x1 45*17fd7514SLaurent M Coquerel 46*17fd7514SLaurent M Coquerel /* Arbiter configuration */ 47*17fd7514SLaurent M Coquerel #define ADF_GEN6_ARB_CONFIG (BIT(31) | BIT(6) | BIT(0)) 48*17fd7514SLaurent M Coquerel #define ADF_GEN6_ARB_OFFSET 0x000 49*17fd7514SLaurent M Coquerel #define ADF_GEN6_ARB_WRK_2_SER_MAP_OFFSET 0x400 50*17fd7514SLaurent M Coquerel 51*17fd7514SLaurent M Coquerel /* Admin interface configuration */ 52*17fd7514SLaurent M Coquerel #define ADF_GEN6_ADMINMSGUR_OFFSET 0x500574 53*17fd7514SLaurent M Coquerel #define ADF_GEN6_ADMINMSGLR_OFFSET 0x500578 54*17fd7514SLaurent M Coquerel #define ADF_GEN6_MAILBOX_BASE_OFFSET 0x600970 55*17fd7514SLaurent M Coquerel 56*17fd7514SLaurent M Coquerel /* 57*17fd7514SLaurent M Coquerel * Watchdog timers 58*17fd7514SLaurent M Coquerel * Timeout is in cycles. Clock speed may vary across products but this 59*17fd7514SLaurent M Coquerel * value should be a few milli-seconds. 60*17fd7514SLaurent M Coquerel */ 61*17fd7514SLaurent M Coquerel #define ADF_SSM_WDT_DEFAULT_VALUE 0x7000000ULL 62*17fd7514SLaurent M Coquerel #define ADF_SSM_WDT_PKE_DEFAULT_VALUE 0x8000000ULL 63*17fd7514SLaurent M Coquerel #define ADF_SSMWDTATHL_OFFSET 0x5208 64*17fd7514SLaurent M Coquerel #define ADF_SSMWDTATHH_OFFSET 0x520C 65*17fd7514SLaurent M Coquerel #define ADF_SSMWDTCNVL_OFFSET 0x5408 66*17fd7514SLaurent M Coquerel #define ADF_SSMWDTCNVH_OFFSET 0x540C 67*17fd7514SLaurent M Coquerel #define ADF_SSMWDTUCSL_OFFSET 0x5808 68*17fd7514SLaurent M Coquerel #define ADF_SSMWDTUCSH_OFFSET 0x580C 69*17fd7514SLaurent M Coquerel #define ADF_SSMWDTDCPRL_OFFSET 0x5A08 70*17fd7514SLaurent M Coquerel #define ADF_SSMWDTDCPRH_OFFSET 0x5A0C 71*17fd7514SLaurent M Coquerel #define ADF_SSMWDTPKEL_OFFSET 0x5E08 72*17fd7514SLaurent M Coquerel #define ADF_SSMWDTPKEH_OFFSET 0x5E0C 73*17fd7514SLaurent M Coquerel 74*17fd7514SLaurent M Coquerel /* Ring reset */ 75*17fd7514SLaurent M Coquerel #define ADF_RPRESET_POLL_TIMEOUT_US (5 * USEC_PER_SEC) 76*17fd7514SLaurent M Coquerel #define ADF_RPRESET_POLL_DELAY_US 20 77*17fd7514SLaurent M Coquerel #define ADF_WQM_CSR_RPRESETCTL_RESET BIT(0) 78*17fd7514SLaurent M Coquerel #define ADF_WQM_CSR_RPRESETCTL(bank) (0x6000 + (bank) * 8) 79*17fd7514SLaurent M Coquerel #define ADF_WQM_CSR_RPRESETSTS_STATUS BIT(0) 80*17fd7514SLaurent M Coquerel #define ADF_WQM_CSR_RPRESETSTS(bank) (ADF_WQM_CSR_RPRESETCTL(bank) + 4) 81*17fd7514SLaurent M Coquerel 82*17fd7514SLaurent M Coquerel /* Controls and sets up the corresponding ring mode of operation */ 83*17fd7514SLaurent M Coquerel #define ADF_GEN6_CSR_RINGMODECTL(bank) (0x9000 + (bank) * 4) 84*17fd7514SLaurent M Coquerel 85*17fd7514SLaurent M Coquerel /* Specifies the traffic class to use for the transactions to/from the ring */ 86*17fd7514SLaurent M Coquerel #define ADF_GEN6_RINGMODECTL_TC_MASK GENMASK(18, 16) 87*17fd7514SLaurent M Coquerel #define ADF_GEN6_RINGMODECTL_TC_DEFAULT 0x7 88*17fd7514SLaurent M Coquerel 89*17fd7514SLaurent M Coquerel /* Specifies usage of tc for the transactions to/from this ring */ 90*17fd7514SLaurent M Coquerel #define ADF_GEN6_RINGMODECTL_TC_EN_MASK GENMASK(20, 19) 91*17fd7514SLaurent M Coquerel 92*17fd7514SLaurent M Coquerel /* 93*17fd7514SLaurent M Coquerel * Use the value programmed in the tc field for request descriptor 94*17fd7514SLaurent M Coquerel * and metadata read transactions 95*17fd7514SLaurent M Coquerel */ 96*17fd7514SLaurent M Coquerel #define ADF_GEN6_RINGMODECTL_TC_EN_OP1 0x1 97*17fd7514SLaurent M Coquerel 98*17fd7514SLaurent M Coquerel /* VC0 Resource Control Register */ 99*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC0CTL_OFFSET 0x204 100*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC0CTL_TCVCMAP_OFFSET 1 101*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC0CTL_TCVCMAP_MASK GENMASK(7, 1) 102*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC0CTL_TCVCMAP_DEFAULT 0x3F 103*17fd7514SLaurent M Coquerel 104*17fd7514SLaurent M Coquerel /* VC1 Resource Control Register */ 105*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC1CTL_OFFSET 0x210 106*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC1CTL_TCVCMAP_OFFSET 1 107*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC1CTL_TCVCMAP_MASK GENMASK(7, 1) 108*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC1CTL_TCVCMAP_DEFAULT 0x40 109*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC1CTL_VCEN_OFFSET 31 110*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC1CTL_VCEN_MASK BIT(31) 111*17fd7514SLaurent M Coquerel /* RW bit: 0x1 - enables a Virtual Channel, 0x0 - disables */ 112*17fd7514SLaurent M Coquerel #define ADF_GEN6_PVC1CTL_VCEN_ON 0x1 113*17fd7514SLaurent M Coquerel 114*17fd7514SLaurent M Coquerel /* Error source mask registers */ 115*17fd7514SLaurent M Coquerel #define ADF_GEN6_ERRMSK0 0x41A210 116*17fd7514SLaurent M Coquerel #define ADF_GEN6_ERRMSK1 0x41A214 117*17fd7514SLaurent M Coquerel #define ADF_GEN6_ERRMSK2 0x41A218 118*17fd7514SLaurent M Coquerel #define ADF_GEN6_ERRMSK3 0x41A21C 119*17fd7514SLaurent M Coquerel 120*17fd7514SLaurent M Coquerel #define ADF_GEN6_VFLNOTIFY BIT(7) 121*17fd7514SLaurent M Coquerel 122*17fd7514SLaurent M Coquerel /* Number of heartbeat counter pairs */ 123*17fd7514SLaurent M Coquerel #define ADF_NUM_HB_CNT_PER_AE ADF_NUM_THREADS_PER_AE 124*17fd7514SLaurent M Coquerel 125*17fd7514SLaurent M Coquerel /* Rate Limiting */ 126*17fd7514SLaurent M Coquerel #define ADF_GEN6_RL_R2L_OFFSET 0x508000 127*17fd7514SLaurent M Coquerel #define ADF_GEN6_RL_L2C_OFFSET 0x509000 128*17fd7514SLaurent M Coquerel #define ADF_GEN6_RL_C2S_OFFSET 0x508818 129*17fd7514SLaurent M Coquerel #define ADF_GEN6_RL_TOKEN_PCIEIN_BUCKET_OFFSET 0x508800 130*17fd7514SLaurent M Coquerel #define ADF_GEN6_RL_TOKEN_PCIEOUT_BUCKET_OFFSET 0x508804 131*17fd7514SLaurent M Coquerel 132*17fd7514SLaurent M Coquerel /* Physical function fuses */ 133*17fd7514SLaurent M Coquerel #define ADF_6XXX_ACCELENGINES_MASK GENMASK(8, 0) 134*17fd7514SLaurent M Coquerel #define ADF_6XXX_ADMIN_AE_MASK GENMASK(8, 8) 135*17fd7514SLaurent M Coquerel 136*17fd7514SLaurent M Coquerel /* Firmware binaries */ 137*17fd7514SLaurent M Coquerel #define ADF_6XXX_FW "qat_6xxx.bin" 138*17fd7514SLaurent M Coquerel #define ADF_6XXX_MMP "qat_6xxx_mmp.bin" 139*17fd7514SLaurent M Coquerel #define ADF_6XXX_CY_OBJ "qat_6xxx_cy.bin" 140*17fd7514SLaurent M Coquerel #define ADF_6XXX_DC_OBJ "qat_6xxx_dc.bin" 141*17fd7514SLaurent M Coquerel #define ADF_6XXX_ADMIN_OBJ "qat_6xxx_admin.bin" 142*17fd7514SLaurent M Coquerel 143*17fd7514SLaurent M Coquerel /* RL constants */ 144*17fd7514SLaurent M Coquerel #define ADF_6XXX_RL_PCIE_SCALE_FACTOR_DIV 100 145*17fd7514SLaurent M Coquerel #define ADF_6XXX_RL_PCIE_SCALE_FACTOR_MUL 102 146*17fd7514SLaurent M Coquerel #define ADF_6XXX_RL_SCANS_PER_SEC 954 147*17fd7514SLaurent M Coquerel #define ADF_6XXX_RL_MAX_TP_ASYM 173750UL 148*17fd7514SLaurent M Coquerel #define ADF_6XXX_RL_MAX_TP_SYM 95000UL 149 #define ADF_6XXX_RL_MAX_TP_DC 40000UL 150 #define ADF_6XXX_RL_MAX_TP_DECOMP 40000UL 151 #define ADF_6XXX_RL_SLICE_REF 1000UL 152 153 /* Clock frequency */ 154 #define ADF_6XXX_AE_FREQ (1000 * HZ_PER_MHZ) 155 156 enum icp_qat_gen6_slice_mask { 157 ICP_ACCEL_GEN6_MASK_UCS_SLICE = BIT(0), 158 ICP_ACCEL_GEN6_MASK_AUTH_SLICE = BIT(1), 159 ICP_ACCEL_GEN6_MASK_PKE_SLICE = BIT(2), 160 ICP_ACCEL_GEN6_MASK_CPR_SLICE = BIT(3), 161 ICP_ACCEL_GEN6_MASK_DCPRZ_SLICE = BIT(4), 162 ICP_ACCEL_GEN6_MASK_WCP_WAT_SLICE = BIT(6), 163 }; 164 165 void adf_init_hw_data_6xxx(struct adf_hw_device_data *hw_data); 166 void adf_clean_hw_data_6xxx(struct adf_hw_device_data *hw_data); 167 168 #endif /* ADF_6XXX_HW_DATA_H_ */ 169