Skip to content

Commit c6b012a

Browse files
vijaysundarsherbertx
authored andcommitted
crypto: qat - enable telemetry for GEN6 devices
Enable telemetry for QAT GEN6 devices by defining the firmware data structures layouts, implementing the counters parsing logic and setting the required properties on the adf_tl_hw_data data structure. As for QAT GEN4, telemetry counters are exposed via debugfs using the interface described in Documentation/ABI/testing/debugfs-driver-qat_telemetry. Co-developed-by: George Abraham P <george.abraham.p@intel.com> Signed-off-by: George Abraham P <george.abraham.p@intel.com> Signed-off-by: Vijay Sundar Selvamani <vijay.sundar.selvamani@intel.com> Signed-off-by: Suman Kumar Chakraborty <suman.kumar.chakraborty@intel.com> Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent e853346 commit c6b012a

4 files changed

Lines changed: 348 additions & 0 deletions

File tree

drivers/crypto/intel/qat/qat_6xxx/adf_6xxx_hw_data.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <adf_gen6_pm.h>
2020
#include <adf_gen6_ras.h>
2121
#include <adf_gen6_shared.h>
22+
#include <adf_gen6_tl.h>
2223
#include <adf_timer.h>
2324
#include "adf_6xxx_hw_data.h"
2425
#include "icp_qat_fw_comp.h"
@@ -861,12 +862,14 @@ void adf_init_hw_data_6xxx(struct adf_hw_device_data *hw_data)
861862
hw_data->init_device = adf_init_device;
862863
hw_data->enable_pm = enable_pm;
863864
hw_data->services_supported = services_supported;
865+
hw_data->num_rps = ADF_GEN6_ETR_MAX_BANKS;
864866

865867
adf_gen6_init_hw_csr_ops(&hw_data->csr_ops);
866868
adf_gen6_init_pf_pfvf_ops(&hw_data->pfvf_ops);
867869
adf_gen6_init_dc_ops(&hw_data->dc_ops);
868870
adf_gen6_init_vf_mig_ops(&hw_data->vfmig_ops);
869871
adf_gen6_init_ras_ops(&hw_data->ras_ops);
872+
adf_gen6_init_tl_data(&hw_data->tl_data);
870873
}
871874

872875
void adf_clean_hw_data_6xxx(struct adf_hw_device_data *hw_data)

drivers/crypto/intel/qat/qat_common/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ intel_qat-$(CONFIG_DEBUG_FS) += adf_cnv_dbgfs.o \
5050
adf_gen4_pm_debugfs.o \
5151
adf_gen4_tl.o \
5252
adf_gen6_pm_dbgfs.o \
53+
adf_gen6_tl.o \
5354
adf_heartbeat_dbgfs.o \
5455
adf_heartbeat.o \
5556
adf_pm_dbgfs.o \
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
// SPDX-License-Identifier: GPL-2.0-only
2+
/* Copyright (c) 2025 Intel Corporation. */
3+
#include <linux/export.h>
4+
5+
#include "adf_gen6_tl.h"
6+
#include "adf_telemetry.h"
7+
#include "adf_tl_debugfs.h"
8+
#include "icp_qat_fw_init_admin.h"
9+
10+
#define ADF_GEN6_TL_DEV_REG_OFF(reg) ADF_TL_DEV_REG_OFF(reg, gen6)
11+
12+
#define ADF_GEN6_TL_RP_REG_OFF(reg) ADF_TL_RP_REG_OFF(reg, gen6)
13+
14+
#define ADF_GEN6_TL_SL_UTIL_COUNTER(_name) \
15+
ADF_TL_COUNTER("util_" #_name, ADF_TL_SIMPLE_COUNT, \
16+
ADF_TL_SLICE_REG_OFF(_name, reg_tm_slice_util, gen6))
17+
18+
#define ADF_GEN6_TL_SL_EXEC_COUNTER(_name) \
19+
ADF_TL_COUNTER("exec_" #_name, ADF_TL_SIMPLE_COUNT, \
20+
ADF_TL_SLICE_REG_OFF(_name, reg_tm_slice_exec_cnt, gen6))
21+
22+
#define SLICE_IDX(sl) offsetof(struct icp_qat_fw_init_admin_slice_cnt, sl##_cnt)
23+
24+
/* Device level counters. */
25+
static const struct adf_tl_dbg_counter dev_counters[] = {
26+
/* PCIe partial transactions. */
27+
ADF_TL_COUNTER(PCI_TRANS_CNT_NAME, ADF_TL_SIMPLE_COUNT,
28+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_prt_trans_cnt)),
29+
/* Max read latency[ns]. */
30+
ADF_TL_COUNTER(MAX_RD_LAT_NAME, ADF_TL_COUNTER_NS,
31+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_rd_lat_max)),
32+
/* Read latency average[ns]. */
33+
ADF_TL_COUNTER_LATENCY(RD_LAT_ACC_NAME, ADF_TL_COUNTER_NS_AVG,
34+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_rd_lat_acc),
35+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_rd_cmpl_cnt)),
36+
/* Max "get to put" latency[ns]. */
37+
ADF_TL_COUNTER(MAX_LAT_NAME, ADF_TL_COUNTER_NS,
38+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_gp_lat_max)),
39+
/* "Get to put" latency average[ns]. */
40+
ADF_TL_COUNTER_LATENCY(LAT_ACC_NAME, ADF_TL_COUNTER_NS_AVG,
41+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_gp_lat_acc),
42+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_ae_put_cnt)),
43+
/* PCIe write bandwidth[Mbps]. */
44+
ADF_TL_COUNTER(BW_IN_NAME, ADF_TL_COUNTER_MBPS,
45+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_bw_in)),
46+
/* PCIe read bandwidth[Mbps]. */
47+
ADF_TL_COUNTER(BW_OUT_NAME, ADF_TL_COUNTER_MBPS,
48+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_bw_out)),
49+
/* Page request latency average[ns]. */
50+
ADF_TL_COUNTER_LATENCY(PAGE_REQ_LAT_NAME, ADF_TL_COUNTER_NS_AVG,
51+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_at_page_req_lat_acc),
52+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_at_page_req_cnt)),
53+
/* Page translation latency average[ns]. */
54+
ADF_TL_COUNTER_LATENCY(AT_TRANS_LAT_NAME, ADF_TL_COUNTER_NS_AVG,
55+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_at_trans_lat_acc),
56+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_at_trans_lat_cnt)),
57+
/* Maximum uTLB used. */
58+
ADF_TL_COUNTER(AT_MAX_UTLB_USED_NAME, ADF_TL_SIMPLE_COUNT,
59+
ADF_GEN6_TL_DEV_REG_OFF(reg_tl_at_max_utlb_used)),
60+
};
61+
62+
/* Accelerator utilization counters */
63+
static const struct adf_tl_dbg_counter sl_util_counters[ADF_TL_SL_CNT_COUNT] = {
64+
/* Compression accelerator utilization. */
65+
[SLICE_IDX(cpr)] = ADF_GEN6_TL_SL_UTIL_COUNTER(cnv),
66+
/* Decompression accelerator utilization. */
67+
[SLICE_IDX(dcpr)] = ADF_GEN6_TL_SL_UTIL_COUNTER(dcprz),
68+
/* PKE accelerator utilization. */
69+
[SLICE_IDX(pke)] = ADF_GEN6_TL_SL_UTIL_COUNTER(pke),
70+
/* Wireless Authentication accelerator utilization. */
71+
[SLICE_IDX(wat)] = ADF_GEN6_TL_SL_UTIL_COUNTER(wat),
72+
/* Wireless Cipher accelerator utilization. */
73+
[SLICE_IDX(wcp)] = ADF_GEN6_TL_SL_UTIL_COUNTER(wcp),
74+
/* UCS accelerator utilization. */
75+
[SLICE_IDX(ucs)] = ADF_GEN6_TL_SL_UTIL_COUNTER(ucs),
76+
/* Authentication accelerator utilization. */
77+
[SLICE_IDX(ath)] = ADF_GEN6_TL_SL_UTIL_COUNTER(ath),
78+
};
79+
80+
/* Accelerator execution counters */
81+
static const struct adf_tl_dbg_counter sl_exec_counters[ADF_TL_SL_CNT_COUNT] = {
82+
/* Compression accelerator execution count. */
83+
[SLICE_IDX(cpr)] = ADF_GEN6_TL_SL_EXEC_COUNTER(cnv),
84+
/* Decompression accelerator execution count. */
85+
[SLICE_IDX(dcpr)] = ADF_GEN6_TL_SL_EXEC_COUNTER(dcprz),
86+
/* PKE execution count. */
87+
[SLICE_IDX(pke)] = ADF_GEN6_TL_SL_EXEC_COUNTER(pke),
88+
/* Wireless Authentication accelerator execution count. */
89+
[SLICE_IDX(wat)] = ADF_GEN6_TL_SL_EXEC_COUNTER(wat),
90+
/* Wireless Cipher accelerator execution count. */
91+
[SLICE_IDX(wcp)] = ADF_GEN6_TL_SL_EXEC_COUNTER(wcp),
92+
/* UCS accelerator execution count. */
93+
[SLICE_IDX(ucs)] = ADF_GEN6_TL_SL_EXEC_COUNTER(ucs),
94+
/* Authentication accelerator execution count. */
95+
[SLICE_IDX(ath)] = ADF_GEN6_TL_SL_EXEC_COUNTER(ath),
96+
};
97+
98+
/* Ring pair counters. */
99+
static const struct adf_tl_dbg_counter rp_counters[] = {
100+
/* PCIe partial transactions. */
101+
ADF_TL_COUNTER(PCI_TRANS_CNT_NAME, ADF_TL_SIMPLE_COUNT,
102+
ADF_GEN6_TL_RP_REG_OFF(reg_tl_prt_trans_cnt)),
103+
/* "Get to put" latency average[ns]. */
104+
ADF_TL_COUNTER_LATENCY(LAT_ACC_NAME, ADF_TL_COUNTER_NS_AVG,
105+
ADF_GEN6_TL_RP_REG_OFF(reg_tl_gp_lat_acc),
106+
ADF_GEN6_TL_RP_REG_OFF(reg_tl_ae_put_cnt)),
107+
/* PCIe write bandwidth[Mbps]. */
108+
ADF_TL_COUNTER(BW_IN_NAME, ADF_TL_COUNTER_MBPS,
109+
ADF_GEN6_TL_RP_REG_OFF(reg_tl_bw_in)),
110+
/* PCIe read bandwidth[Mbps]. */
111+
ADF_TL_COUNTER(BW_OUT_NAME, ADF_TL_COUNTER_MBPS,
112+
ADF_GEN6_TL_RP_REG_OFF(reg_tl_bw_out)),
113+
/* Message descriptor DevTLB hit rate. */
114+
ADF_TL_COUNTER(AT_GLOB_DTLB_HIT_NAME, ADF_TL_SIMPLE_COUNT,
115+
ADF_GEN6_TL_RP_REG_OFF(reg_tl_at_glob_devtlb_hit)),
116+
/* Message descriptor DevTLB miss rate. */
117+
ADF_TL_COUNTER(AT_GLOB_DTLB_MISS_NAME, ADF_TL_SIMPLE_COUNT,
118+
ADF_GEN6_TL_RP_REG_OFF(reg_tl_at_glob_devtlb_miss)),
119+
/* Payload DevTLB hit rate. */
120+
ADF_TL_COUNTER(AT_PAYLD_DTLB_HIT_NAME, ADF_TL_SIMPLE_COUNT,
121+
ADF_GEN6_TL_RP_REG_OFF(reg_tl_at_payld_devtlb_hit)),
122+
/* Payload DevTLB miss rate. */
123+
ADF_TL_COUNTER(AT_PAYLD_DTLB_MISS_NAME, ADF_TL_SIMPLE_COUNT,
124+
ADF_GEN6_TL_RP_REG_OFF(reg_tl_at_payld_devtlb_miss)),
125+
};
126+
127+
void adf_gen6_init_tl_data(struct adf_tl_hw_data *tl_data)
128+
{
129+
tl_data->layout_sz = ADF_GEN6_TL_LAYOUT_SZ;
130+
tl_data->slice_reg_sz = ADF_GEN6_TL_SLICE_REG_SZ;
131+
tl_data->rp_reg_sz = ADF_GEN6_TL_RP_REG_SZ;
132+
tl_data->num_hbuff = ADF_GEN6_TL_NUM_HIST_BUFFS;
133+
tl_data->max_rp = ADF_GEN6_TL_MAX_RP_NUM;
134+
tl_data->msg_cnt_off = ADF_GEN6_TL_MSG_CNT_OFF;
135+
tl_data->cpp_ns_per_cycle = ADF_GEN6_CPP_NS_PER_CYCLE;
136+
tl_data->bw_units_to_bytes = ADF_GEN6_TL_BW_HW_UNITS_TO_BYTES;
137+
138+
tl_data->dev_counters = dev_counters;
139+
tl_data->num_dev_counters = ARRAY_SIZE(dev_counters);
140+
tl_data->sl_util_counters = sl_util_counters;
141+
tl_data->sl_exec_counters = sl_exec_counters;
142+
tl_data->rp_counters = rp_counters;
143+
tl_data->num_rp_counters = ARRAY_SIZE(rp_counters);
144+
tl_data->max_sl_cnt = ADF_GEN6_TL_MAX_SLICES_PER_TYPE;
145+
}
146+
EXPORT_SYMBOL_GPL(adf_gen6_init_tl_data);
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
/* SPDX-License-Identifier: GPL-2.0-only */
2+
/* Copyright (c) 2025 Intel Corporation. */
3+
#ifndef ADF_GEN6_TL_H
4+
#define ADF_GEN6_TL_H
5+
6+
#include <linux/types.h>
7+
8+
struct adf_tl_hw_data;
9+
10+
/* Computation constants. */
11+
#define ADF_GEN6_CPP_NS_PER_CYCLE 2
12+
#define ADF_GEN6_TL_BW_HW_UNITS_TO_BYTES 64
13+
14+
/* Maximum aggregation time. Value is in milliseconds. */
15+
#define ADF_GEN6_TL_MAX_AGGR_TIME_MS 4000
16+
/* Number of buffers to store historic values. */
17+
#define ADF_GEN6_TL_NUM_HIST_BUFFS \
18+
(ADF_GEN6_TL_MAX_AGGR_TIME_MS / ADF_TL_DATA_WR_INTERVAL_MS)
19+
20+
/* Max number of HW resources of one type */
21+
#define ADF_GEN6_TL_MAX_SLICES_PER_TYPE 32
22+
#define MAX_ATH_SL_COUNT 7
23+
#define MAX_CNV_SL_COUNT 2
24+
#define MAX_DCPRZ_SL_COUNT 2
25+
#define MAX_PKE_SL_COUNT 32
26+
#define MAX_UCS_SL_COUNT 4
27+
#define MAX_WAT_SL_COUNT 5
28+
#define MAX_WCP_SL_COUNT 5
29+
30+
#define MAX_ATH_CMDQ_COUNT 14
31+
#define MAX_CNV_CMDQ_COUNT 6
32+
#define MAX_DCPRZ_CMDQ_COUNT 6
33+
#define MAX_PKE_CMDQ_COUNT 32
34+
#define MAX_UCS_CMDQ_COUNT 12
35+
#define MAX_WAT_CMDQ_COUNT 35
36+
#define MAX_WCP_CMDQ_COUNT 35
37+
38+
/* Max number of simultaneously monitored ring pairs. */
39+
#define ADF_GEN6_TL_MAX_RP_NUM 4
40+
41+
/**
42+
* struct adf_gen6_tl_slice_data_regs - HW slice data as populated by FW.
43+
* @reg_tm_slice_exec_cnt: Slice execution count.
44+
* @reg_tm_slice_util: Slice utilization.
45+
*/
46+
struct adf_gen6_tl_slice_data_regs {
47+
__u32 reg_tm_slice_exec_cnt;
48+
__u32 reg_tm_slice_util;
49+
};
50+
51+
#define ADF_GEN6_TL_SLICE_REG_SZ sizeof(struct adf_gen6_tl_slice_data_regs)
52+
53+
/**
54+
* struct adf_gen6_tl_cmdq_data_regs - HW CMDQ data as populated by FW.
55+
* @reg_tm_cmdq_wait_cnt: CMDQ wait count.
56+
* @reg_tm_cmdq_exec_cnt: CMDQ execution count.
57+
* @reg_tm_cmdq_drain_cnt: CMDQ drain count.
58+
*/
59+
struct adf_gen6_tl_cmdq_data_regs {
60+
__u32 reg_tm_cmdq_wait_cnt;
61+
__u32 reg_tm_cmdq_exec_cnt;
62+
__u32 reg_tm_cmdq_drain_cnt;
63+
__u32 reserved;
64+
};
65+
66+
#define ADF_GEN6_TL_CMDQ_REG_SZ sizeof(struct adf_gen6_tl_cmdq_data_regs)
67+
68+
/**
69+
* struct adf_gen6_tl_device_data_regs - This structure stores device telemetry
70+
* counter values as are being populated periodically by device.
71+
* @reg_tl_rd_lat_acc: read latency accumulator
72+
* @reg_tl_gp_lat_acc: "get to put" latency accumulator
73+
* @reg_tl_at_page_req_lat_acc: AT/DevTLB page request latency accumulator
74+
* @reg_tl_at_trans_lat_acc: DevTLB transaction latency accumulator
75+
* @reg_tl_re_acc: accumulated ring empty time
76+
* @reg_tl_prt_trans_cnt: PCIe partial transactions
77+
* @reg_tl_rd_lat_max: maximum logged read latency
78+
* @reg_tl_rd_cmpl_cnt: read requests completed count
79+
* @reg_tl_gp_lat_max: maximum logged get to put latency
80+
* @reg_tl_ae_put_cnt: Accelerator Engine put counts across all rings
81+
* @reg_tl_bw_in: PCIe write bandwidth
82+
* @reg_tl_bw_out: PCIe read bandwidth
83+
* @reg_tl_at_page_req_cnt: DevTLB page requests count
84+
* @reg_tl_at_trans_lat_cnt: DevTLB transaction latency samples count
85+
* @reg_tl_at_max_utlb_used: maximum uTLB used
86+
* @reg_tl_re_cnt: ring empty time samples count
87+
* @reserved: reserved
88+
* @ath_slices: array of Authentication slices utilization registers
89+
* @cnv_slices: array of Compression slices utilization registers
90+
* @dcprz_slices: array of Decompression slices utilization registers
91+
* @pke_slices: array of PKE slices utilization registers
92+
* @ucs_slices: array of UCS slices utilization registers
93+
* @wat_slices: array of Wireless Authentication slices utilization registers
94+
* @wcp_slices: array of Wireless Cipher slices utilization registers
95+
* @ath_cmdq: array of Authentication cmdq telemetry registers
96+
* @cnv_cmdq: array of Compression cmdq telemetry registers
97+
* @dcprz_cmdq: array of Decomopression cmdq telemetry registers
98+
* @pke_cmdq: array of PKE cmdq telemetry registers
99+
* @ucs_cmdq: array of UCS cmdq telemetry registers
100+
* @wat_cmdq: array of Wireless Authentication cmdq telemetry registers
101+
* @wcp_cmdq: array of Wireless Cipher cmdq telemetry registers
102+
*/
103+
struct adf_gen6_tl_device_data_regs {
104+
__u64 reg_tl_rd_lat_acc;
105+
__u64 reg_tl_gp_lat_acc;
106+
__u64 reg_tl_at_page_req_lat_acc;
107+
__u64 reg_tl_at_trans_lat_acc;
108+
__u64 reg_tl_re_acc;
109+
__u32 reg_tl_prt_trans_cnt;
110+
__u32 reg_tl_rd_lat_max;
111+
__u32 reg_tl_rd_cmpl_cnt;
112+
__u32 reg_tl_gp_lat_max;
113+
__u32 reg_tl_ae_put_cnt;
114+
__u32 reg_tl_bw_in;
115+
__u32 reg_tl_bw_out;
116+
__u32 reg_tl_at_page_req_cnt;
117+
__u32 reg_tl_at_trans_lat_cnt;
118+
__u32 reg_tl_at_max_utlb_used;
119+
__u32 reg_tl_re_cnt;
120+
__u32 reserved;
121+
struct adf_gen6_tl_slice_data_regs ath_slices[MAX_ATH_SL_COUNT];
122+
struct adf_gen6_tl_slice_data_regs cnv_slices[MAX_CNV_SL_COUNT];
123+
struct adf_gen6_tl_slice_data_regs dcprz_slices[MAX_DCPRZ_SL_COUNT];
124+
struct adf_gen6_tl_slice_data_regs pke_slices[MAX_PKE_SL_COUNT];
125+
struct adf_gen6_tl_slice_data_regs ucs_slices[MAX_UCS_SL_COUNT];
126+
struct adf_gen6_tl_slice_data_regs wat_slices[MAX_WAT_SL_COUNT];
127+
struct adf_gen6_tl_slice_data_regs wcp_slices[MAX_WCP_SL_COUNT];
128+
struct adf_gen6_tl_cmdq_data_regs ath_cmdq[MAX_ATH_CMDQ_COUNT];
129+
struct adf_gen6_tl_cmdq_data_regs cnv_cmdq[MAX_CNV_CMDQ_COUNT];
130+
struct adf_gen6_tl_cmdq_data_regs dcprz_cmdq[MAX_DCPRZ_CMDQ_COUNT];
131+
struct adf_gen6_tl_cmdq_data_regs pke_cmdq[MAX_PKE_CMDQ_COUNT];
132+
struct adf_gen6_tl_cmdq_data_regs ucs_cmdq[MAX_UCS_CMDQ_COUNT];
133+
struct adf_gen6_tl_cmdq_data_regs wat_cmdq[MAX_WAT_CMDQ_COUNT];
134+
struct adf_gen6_tl_cmdq_data_regs wcp_cmdq[MAX_WCP_CMDQ_COUNT];
135+
};
136+
137+
/**
138+
* struct adf_gen6_tl_ring_pair_data_regs - This structure stores ring pair
139+
* telemetry counter values as they are being populated periodically by device.
140+
* @reg_tl_gp_lat_acc: get-put latency accumulator
141+
* @reg_tl_re_acc: accumulated ring empty time
142+
* @reg_tl_pci_trans_cnt: PCIe partial transactions
143+
* @reg_tl_ae_put_cnt: Accelerator Engine put counts across all rings
144+
* @reg_tl_bw_in: PCIe write bandwidth
145+
* @reg_tl_bw_out: PCIe read bandwidth
146+
* @reg_tl_at_glob_devtlb_hit: Message descriptor DevTLB hit rate
147+
* @reg_tl_at_glob_devtlb_miss: Message descriptor DevTLB miss rate
148+
* @reg_tl_at_payld_devtlb_hit: Payload DevTLB hit rate
149+
* @reg_tl_at_payld_devtlb_miss: Payload DevTLB miss rate
150+
* @reg_tl_re_cnt: ring empty time samples count
151+
* @reserved1: reserved
152+
*/
153+
struct adf_gen6_tl_ring_pair_data_regs {
154+
__u64 reg_tl_gp_lat_acc;
155+
__u64 reg_tl_re_acc;
156+
__u32 reg_tl_prt_trans_cnt;
157+
__u32 reg_tl_ae_put_cnt;
158+
__u32 reg_tl_bw_in;
159+
__u32 reg_tl_bw_out;
160+
__u32 reg_tl_at_glob_devtlb_hit;
161+
__u32 reg_tl_at_glob_devtlb_miss;
162+
__u32 reg_tl_at_payld_devtlb_hit;
163+
__u32 reg_tl_at_payld_devtlb_miss;
164+
__u32 reg_tl_re_cnt;
165+
__u32 reserved1;
166+
};
167+
168+
#define ADF_GEN6_TL_RP_REG_SZ sizeof(struct adf_gen6_tl_ring_pair_data_regs)
169+
170+
/**
171+
* struct adf_gen6_tl_layout - This structure represents the entire telemetry
172+
* counters data: Device + 4 Ring Pairs as they are being populated periodically
173+
* by device.
174+
* @tl_device_data_regs: structure of device telemetry registers
175+
* @tl_ring_pairs_data_regs: array of ring pairs telemetry registers
176+
* @reg_tl_msg_cnt: telemetry message counter
177+
* @reserved: reserved
178+
*/
179+
struct adf_gen6_tl_layout {
180+
struct adf_gen6_tl_device_data_regs tl_device_data_regs;
181+
struct adf_gen6_tl_ring_pair_data_regs
182+
tl_ring_pairs_data_regs[ADF_GEN6_TL_MAX_RP_NUM];
183+
__u32 reg_tl_msg_cnt;
184+
__u32 reserved;
185+
};
186+
187+
#define ADF_GEN6_TL_LAYOUT_SZ sizeof(struct adf_gen6_tl_layout)
188+
#define ADF_GEN6_TL_MSG_CNT_OFF \
189+
offsetof(struct adf_gen6_tl_layout, reg_tl_msg_cnt)
190+
191+
#ifdef CONFIG_DEBUG_FS
192+
void adf_gen6_init_tl_data(struct adf_tl_hw_data *tl_data);
193+
#else
194+
static inline void adf_gen6_init_tl_data(struct adf_tl_hw_data *tl_data)
195+
{
196+
}
197+
#endif /* CONFIG_DEBUG_FS */
198+
#endif /* ADF_GEN6_TL_H */

0 commit comments

Comments
 (0)