xref: /linux/drivers/crypto/intel/qat/qat_6xxx/adf_6xxx_hw_data.h (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
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