xref: /linux/drivers/crypto/intel/qat/qat_common/adf_gen6_tl.h (revision 8d2b0853add1d7534dc0794e3c8e0b9e8c4ec640)
1*c6b012a2SVijay Sundar Selvamani /* SPDX-License-Identifier: GPL-2.0-only */
2*c6b012a2SVijay Sundar Selvamani /* Copyright (c) 2025 Intel Corporation. */
3*c6b012a2SVijay Sundar Selvamani #ifndef ADF_GEN6_TL_H
4*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_H
5*c6b012a2SVijay Sundar Selvamani 
6*c6b012a2SVijay Sundar Selvamani #include <linux/types.h>
7*c6b012a2SVijay Sundar Selvamani 
8*c6b012a2SVijay Sundar Selvamani struct adf_tl_hw_data;
9*c6b012a2SVijay Sundar Selvamani 
10*c6b012a2SVijay Sundar Selvamani /* Computation constants. */
11*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_CPP_NS_PER_CYCLE		2
12*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_BW_HW_UNITS_TO_BYTES	64
13*c6b012a2SVijay Sundar Selvamani 
14*c6b012a2SVijay Sundar Selvamani /* Maximum aggregation time. Value is in milliseconds. */
15*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_MAX_AGGR_TIME_MS		4000
16*c6b012a2SVijay Sundar Selvamani /* Number of buffers to store historic values. */
17*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_NUM_HIST_BUFFS \
18*c6b012a2SVijay Sundar Selvamani 	(ADF_GEN6_TL_MAX_AGGR_TIME_MS / ADF_TL_DATA_WR_INTERVAL_MS)
19*c6b012a2SVijay Sundar Selvamani 
20*c6b012a2SVijay Sundar Selvamani /* Max number of HW resources of one type */
21*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_MAX_SLICES_PER_TYPE		32
22*c6b012a2SVijay Sundar Selvamani #define MAX_ATH_SL_COUNT			7
23*c6b012a2SVijay Sundar Selvamani #define MAX_CNV_SL_COUNT			2
24*c6b012a2SVijay Sundar Selvamani #define MAX_DCPRZ_SL_COUNT			2
25*c6b012a2SVijay Sundar Selvamani #define MAX_PKE_SL_COUNT			32
26*c6b012a2SVijay Sundar Selvamani #define MAX_UCS_SL_COUNT			4
27*c6b012a2SVijay Sundar Selvamani #define MAX_WAT_SL_COUNT			5
28*c6b012a2SVijay Sundar Selvamani #define MAX_WCP_SL_COUNT			5
29*c6b012a2SVijay Sundar Selvamani 
30*c6b012a2SVijay Sundar Selvamani #define MAX_ATH_CMDQ_COUNT			14
31*c6b012a2SVijay Sundar Selvamani #define MAX_CNV_CMDQ_COUNT			6
32*c6b012a2SVijay Sundar Selvamani #define MAX_DCPRZ_CMDQ_COUNT			6
33*c6b012a2SVijay Sundar Selvamani #define MAX_PKE_CMDQ_COUNT			32
34*c6b012a2SVijay Sundar Selvamani #define MAX_UCS_CMDQ_COUNT			12
35*c6b012a2SVijay Sundar Selvamani #define MAX_WAT_CMDQ_COUNT			35
36*c6b012a2SVijay Sundar Selvamani #define MAX_WCP_CMDQ_COUNT			35
37*c6b012a2SVijay Sundar Selvamani 
38*c6b012a2SVijay Sundar Selvamani /* Max number of simultaneously monitored ring pairs. */
39*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_MAX_RP_NUM			4
40*c6b012a2SVijay Sundar Selvamani 
41*c6b012a2SVijay Sundar Selvamani /**
42*c6b012a2SVijay Sundar Selvamani  * struct adf_gen6_tl_slice_data_regs - HW slice data as populated by FW.
43*c6b012a2SVijay Sundar Selvamani  * @reg_tm_slice_exec_cnt: Slice execution count.
44*c6b012a2SVijay Sundar Selvamani  * @reg_tm_slice_util: Slice utilization.
45*c6b012a2SVijay Sundar Selvamani  */
46*c6b012a2SVijay Sundar Selvamani struct adf_gen6_tl_slice_data_regs {
47*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tm_slice_exec_cnt;
48*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tm_slice_util;
49*c6b012a2SVijay Sundar Selvamani };
50*c6b012a2SVijay Sundar Selvamani 
51*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_SLICE_REG_SZ sizeof(struct adf_gen6_tl_slice_data_regs)
52*c6b012a2SVijay Sundar Selvamani 
53*c6b012a2SVijay Sundar Selvamani /**
54*c6b012a2SVijay Sundar Selvamani  * struct adf_gen6_tl_cmdq_data_regs - HW CMDQ data as populated by FW.
55*c6b012a2SVijay Sundar Selvamani  * @reg_tm_cmdq_wait_cnt: CMDQ wait count.
56*c6b012a2SVijay Sundar Selvamani  * @reg_tm_cmdq_exec_cnt: CMDQ execution count.
57*c6b012a2SVijay Sundar Selvamani  * @reg_tm_cmdq_drain_cnt: CMDQ drain count.
58*c6b012a2SVijay Sundar Selvamani  */
59*c6b012a2SVijay Sundar Selvamani struct adf_gen6_tl_cmdq_data_regs {
60*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tm_cmdq_wait_cnt;
61*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tm_cmdq_exec_cnt;
62*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tm_cmdq_drain_cnt;
63*c6b012a2SVijay Sundar Selvamani 	__u32 reserved;
64*c6b012a2SVijay Sundar Selvamani };
65*c6b012a2SVijay Sundar Selvamani 
66*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_CMDQ_REG_SZ sizeof(struct adf_gen6_tl_cmdq_data_regs)
67*c6b012a2SVijay Sundar Selvamani 
68*c6b012a2SVijay Sundar Selvamani /**
69*c6b012a2SVijay Sundar Selvamani  * struct adf_gen6_tl_device_data_regs - This structure stores device telemetry
70*c6b012a2SVijay Sundar Selvamani  * counter values as are being populated periodically by device.
71*c6b012a2SVijay Sundar Selvamani  * @reg_tl_rd_lat_acc: read latency accumulator
72*c6b012a2SVijay Sundar Selvamani  * @reg_tl_gp_lat_acc: "get to put" latency accumulator
73*c6b012a2SVijay Sundar Selvamani  * @reg_tl_at_page_req_lat_acc: AT/DevTLB page request latency accumulator
74*c6b012a2SVijay Sundar Selvamani  * @reg_tl_at_trans_lat_acc: DevTLB transaction latency accumulator
75*c6b012a2SVijay Sundar Selvamani  * @reg_tl_re_acc: accumulated ring empty time
76*c6b012a2SVijay Sundar Selvamani  * @reg_tl_prt_trans_cnt: PCIe partial transactions
77*c6b012a2SVijay Sundar Selvamani  * @reg_tl_rd_lat_max: maximum logged read latency
78*c6b012a2SVijay Sundar Selvamani  * @reg_tl_rd_cmpl_cnt: read requests completed count
79*c6b012a2SVijay Sundar Selvamani  * @reg_tl_gp_lat_max: maximum logged get to put latency
80*c6b012a2SVijay Sundar Selvamani  * @reg_tl_ae_put_cnt: Accelerator Engine put counts across all rings
81*c6b012a2SVijay Sundar Selvamani  * @reg_tl_bw_in: PCIe write bandwidth
82*c6b012a2SVijay Sundar Selvamani  * @reg_tl_bw_out: PCIe read bandwidth
83*c6b012a2SVijay Sundar Selvamani  * @reg_tl_at_page_req_cnt: DevTLB page requests count
84*c6b012a2SVijay Sundar Selvamani  * @reg_tl_at_trans_lat_cnt: DevTLB transaction latency samples count
85*c6b012a2SVijay Sundar Selvamani  * @reg_tl_at_max_utlb_used: maximum uTLB used
86*c6b012a2SVijay Sundar Selvamani  * @reg_tl_re_cnt: ring empty time samples count
87*c6b012a2SVijay Sundar Selvamani  * @reserved: reserved
88*c6b012a2SVijay Sundar Selvamani  * @ath_slices: array of Authentication slices utilization registers
89*c6b012a2SVijay Sundar Selvamani  * @cnv_slices: array of Compression slices utilization registers
90*c6b012a2SVijay Sundar Selvamani  * @dcprz_slices: array of Decompression slices utilization registers
91*c6b012a2SVijay Sundar Selvamani  * @pke_slices: array of PKE slices utilization registers
92*c6b012a2SVijay Sundar Selvamani  * @ucs_slices: array of UCS slices utilization registers
93*c6b012a2SVijay Sundar Selvamani  * @wat_slices: array of Wireless Authentication slices utilization registers
94*c6b012a2SVijay Sundar Selvamani  * @wcp_slices: array of Wireless Cipher slices utilization registers
95*c6b012a2SVijay Sundar Selvamani  * @ath_cmdq: array of Authentication cmdq telemetry registers
96*c6b012a2SVijay Sundar Selvamani  * @cnv_cmdq: array of Compression cmdq telemetry registers
97*c6b012a2SVijay Sundar Selvamani  * @dcprz_cmdq: array of Decomopression cmdq telemetry registers
98*c6b012a2SVijay Sundar Selvamani  * @pke_cmdq: array of PKE cmdq telemetry registers
99*c6b012a2SVijay Sundar Selvamani  * @ucs_cmdq: array of UCS cmdq telemetry registers
100*c6b012a2SVijay Sundar Selvamani  * @wat_cmdq: array of Wireless Authentication cmdq telemetry registers
101*c6b012a2SVijay Sundar Selvamani  * @wcp_cmdq: array of Wireless Cipher cmdq telemetry registers
102*c6b012a2SVijay Sundar Selvamani  */
103*c6b012a2SVijay Sundar Selvamani struct adf_gen6_tl_device_data_regs {
104*c6b012a2SVijay Sundar Selvamani 	__u64 reg_tl_rd_lat_acc;
105*c6b012a2SVijay Sundar Selvamani 	__u64 reg_tl_gp_lat_acc;
106*c6b012a2SVijay Sundar Selvamani 	__u64 reg_tl_at_page_req_lat_acc;
107*c6b012a2SVijay Sundar Selvamani 	__u64 reg_tl_at_trans_lat_acc;
108*c6b012a2SVijay Sundar Selvamani 	__u64 reg_tl_re_acc;
109*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_prt_trans_cnt;
110*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_rd_lat_max;
111*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_rd_cmpl_cnt;
112*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_gp_lat_max;
113*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_ae_put_cnt;
114*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_bw_in;
115*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_bw_out;
116*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_at_page_req_cnt;
117*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_at_trans_lat_cnt;
118*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_at_max_utlb_used;
119*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_re_cnt;
120*c6b012a2SVijay Sundar Selvamani 	__u32 reserved;
121*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_slice_data_regs ath_slices[MAX_ATH_SL_COUNT];
122*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_slice_data_regs cnv_slices[MAX_CNV_SL_COUNT];
123*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_slice_data_regs dcprz_slices[MAX_DCPRZ_SL_COUNT];
124*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_slice_data_regs pke_slices[MAX_PKE_SL_COUNT];
125*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_slice_data_regs ucs_slices[MAX_UCS_SL_COUNT];
126*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_slice_data_regs wat_slices[MAX_WAT_SL_COUNT];
127*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_slice_data_regs wcp_slices[MAX_WCP_SL_COUNT];
128*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_cmdq_data_regs ath_cmdq[MAX_ATH_CMDQ_COUNT];
129*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_cmdq_data_regs cnv_cmdq[MAX_CNV_CMDQ_COUNT];
130*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_cmdq_data_regs dcprz_cmdq[MAX_DCPRZ_CMDQ_COUNT];
131*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_cmdq_data_regs pke_cmdq[MAX_PKE_CMDQ_COUNT];
132*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_cmdq_data_regs ucs_cmdq[MAX_UCS_CMDQ_COUNT];
133*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_cmdq_data_regs wat_cmdq[MAX_WAT_CMDQ_COUNT];
134*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_cmdq_data_regs wcp_cmdq[MAX_WCP_CMDQ_COUNT];
135*c6b012a2SVijay Sundar Selvamani };
136*c6b012a2SVijay Sundar Selvamani 
137*c6b012a2SVijay Sundar Selvamani /**
138*c6b012a2SVijay Sundar Selvamani  * struct adf_gen6_tl_ring_pair_data_regs - This structure stores ring pair
139*c6b012a2SVijay Sundar Selvamani  * telemetry counter values as they are being populated periodically by device.
140*c6b012a2SVijay Sundar Selvamani  * @reg_tl_gp_lat_acc: get-put latency accumulator
141*c6b012a2SVijay Sundar Selvamani  * @reg_tl_re_acc: accumulated ring empty time
142*c6b012a2SVijay Sundar Selvamani  * @reg_tl_pci_trans_cnt: PCIe partial transactions
143*c6b012a2SVijay Sundar Selvamani  * @reg_tl_ae_put_cnt: Accelerator Engine put counts across all rings
144*c6b012a2SVijay Sundar Selvamani  * @reg_tl_bw_in: PCIe write bandwidth
145*c6b012a2SVijay Sundar Selvamani  * @reg_tl_bw_out: PCIe read bandwidth
146*c6b012a2SVijay Sundar Selvamani  * @reg_tl_at_glob_devtlb_hit: Message descriptor DevTLB hit rate
147*c6b012a2SVijay Sundar Selvamani  * @reg_tl_at_glob_devtlb_miss: Message descriptor DevTLB miss rate
148*c6b012a2SVijay Sundar Selvamani  * @reg_tl_at_payld_devtlb_hit: Payload DevTLB hit rate
149*c6b012a2SVijay Sundar Selvamani  * @reg_tl_at_payld_devtlb_miss: Payload DevTLB miss rate
150*c6b012a2SVijay Sundar Selvamani  * @reg_tl_re_cnt: ring empty time samples count
151*c6b012a2SVijay Sundar Selvamani  * @reserved1: reserved
152*c6b012a2SVijay Sundar Selvamani  */
153*c6b012a2SVijay Sundar Selvamani struct adf_gen6_tl_ring_pair_data_regs {
154*c6b012a2SVijay Sundar Selvamani 	__u64 reg_tl_gp_lat_acc;
155*c6b012a2SVijay Sundar Selvamani 	__u64 reg_tl_re_acc;
156*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_prt_trans_cnt;
157*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_ae_put_cnt;
158*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_bw_in;
159*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_bw_out;
160*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_at_glob_devtlb_hit;
161*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_at_glob_devtlb_miss;
162*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_at_payld_devtlb_hit;
163*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_at_payld_devtlb_miss;
164*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_re_cnt;
165*c6b012a2SVijay Sundar Selvamani 	__u32 reserved1;
166*c6b012a2SVijay Sundar Selvamani };
167*c6b012a2SVijay Sundar Selvamani 
168*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_RP_REG_SZ sizeof(struct adf_gen6_tl_ring_pair_data_regs)
169*c6b012a2SVijay Sundar Selvamani 
170*c6b012a2SVijay Sundar Selvamani /**
171*c6b012a2SVijay Sundar Selvamani  * struct adf_gen6_tl_layout - This structure represents the entire telemetry
172*c6b012a2SVijay Sundar Selvamani  * counters data: Device + 4 Ring Pairs as they are being populated periodically
173*c6b012a2SVijay Sundar Selvamani  * by device.
174*c6b012a2SVijay Sundar Selvamani  * @tl_device_data_regs: structure of device telemetry registers
175*c6b012a2SVijay Sundar Selvamani  * @tl_ring_pairs_data_regs: array of ring pairs telemetry registers
176*c6b012a2SVijay Sundar Selvamani  * @reg_tl_msg_cnt: telemetry message counter
177*c6b012a2SVijay Sundar Selvamani  * @reserved: reserved
178*c6b012a2SVijay Sundar Selvamani  */
179*c6b012a2SVijay Sundar Selvamani struct adf_gen6_tl_layout {
180*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_device_data_regs tl_device_data_regs;
181*c6b012a2SVijay Sundar Selvamani 	struct adf_gen6_tl_ring_pair_data_regs
182*c6b012a2SVijay Sundar Selvamani 		tl_ring_pairs_data_regs[ADF_GEN6_TL_MAX_RP_NUM];
183*c6b012a2SVijay Sundar Selvamani 	__u32 reg_tl_msg_cnt;
184*c6b012a2SVijay Sundar Selvamani 	__u32 reserved;
185*c6b012a2SVijay Sundar Selvamani };
186*c6b012a2SVijay Sundar Selvamani 
187*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_LAYOUT_SZ sizeof(struct adf_gen6_tl_layout)
188*c6b012a2SVijay Sundar Selvamani #define ADF_GEN6_TL_MSG_CNT_OFF \
189*c6b012a2SVijay Sundar Selvamani 	offsetof(struct adf_gen6_tl_layout, reg_tl_msg_cnt)
190*c6b012a2SVijay Sundar Selvamani 
191*c6b012a2SVijay Sundar Selvamani #ifdef CONFIG_DEBUG_FS
192*c6b012a2SVijay Sundar Selvamani void adf_gen6_init_tl_data(struct adf_tl_hw_data *tl_data);
193*c6b012a2SVijay Sundar Selvamani #else
194*c6b012a2SVijay Sundar Selvamani static inline void adf_gen6_init_tl_data(struct adf_tl_hw_data *tl_data)
195*c6b012a2SVijay Sundar Selvamani {
196*c6b012a2SVijay Sundar Selvamani }
197*c6b012a2SVijay Sundar Selvamani #endif /* CONFIG_DEBUG_FS */
198*c6b012a2SVijay Sundar Selvamani #endif /* ADF_GEN6_TL_H */
199