169e7649fSLucas Segarra Fernandez /* SPDX-License-Identifier: GPL-2.0-only */ 269e7649fSLucas Segarra Fernandez /* Copyright (c) 2023 Intel Corporation. */ 369e7649fSLucas Segarra Fernandez #ifndef ADF_TL_DEBUGFS_H 469e7649fSLucas Segarra Fernandez #define ADF_TL_DEBUGFS_H 569e7649fSLucas Segarra Fernandez 669e7649fSLucas Segarra Fernandez #include <linux/types.h> 769e7649fSLucas Segarra Fernandez 869e7649fSLucas Segarra Fernandez struct adf_accel_dev; 969e7649fSLucas Segarra Fernandez 1069e7649fSLucas Segarra Fernandez #define MAX_COUNT_NAME_SIZE 32 1169e7649fSLucas Segarra Fernandez #define SNAPSHOT_CNT_MSG "sample_cnt" 1269e7649fSLucas Segarra Fernandez #define RP_NUM_INDEX "rp_num" 1369e7649fSLucas Segarra Fernandez #define PCI_TRANS_CNT_NAME "pci_trans_cnt" 1469e7649fSLucas Segarra Fernandez #define MAX_RD_LAT_NAME "max_rd_lat" 1569e7649fSLucas Segarra Fernandez #define RD_LAT_ACC_NAME "rd_lat_acc_avg" 1669e7649fSLucas Segarra Fernandez #define MAX_LAT_NAME "max_gp_lat" 1769e7649fSLucas Segarra Fernandez #define LAT_ACC_NAME "gp_lat_acc_avg" 1869e7649fSLucas Segarra Fernandez #define BW_IN_NAME "bw_in" 1969e7649fSLucas Segarra Fernandez #define BW_OUT_NAME "bw_out" 2069e7649fSLucas Segarra Fernandez #define PAGE_REQ_LAT_NAME "at_page_req_lat_avg" 2169e7649fSLucas Segarra Fernandez #define AT_TRANS_LAT_NAME "at_trans_lat_avg" 2269e7649fSLucas Segarra Fernandez #define AT_MAX_UTLB_USED_NAME "at_max_tlb_used" 2369e7649fSLucas Segarra Fernandez #define AT_GLOB_DTLB_HIT_NAME "at_glob_devtlb_hit" 2469e7649fSLucas Segarra Fernandez #define AT_GLOB_DTLB_MISS_NAME "at_glob_devtlb_miss" 2569e7649fSLucas Segarra Fernandez #define AT_PAYLD_DTLB_HIT_NAME "tl_at_payld_devtlb_hit" 2669e7649fSLucas Segarra Fernandez #define AT_PAYLD_DTLB_MISS_NAME "tl_at_payld_devtlb_miss" 27eb527077SLucas Segarra Fernandez #define RP_SERVICE_TYPE "service_type" 28eb527077SLucas Segarra Fernandez 29eb527077SLucas Segarra Fernandez #define ADF_TL_DBG_RP_ALPHA_INDEX(index) ((index) + 'A') 30eb527077SLucas Segarra Fernandez #define ADF_TL_DBG_RP_INDEX_ALPHA(alpha) ((alpha) - 'A') 31eb527077SLucas Segarra Fernandez 32eb527077SLucas Segarra Fernandez #define ADF_TL_RP_REGS_FNAME "rp_%c_data" 33eb527077SLucas Segarra Fernandez #define ADF_TL_RP_REGS_FNAME_SIZE 16 3469e7649fSLucas Segarra Fernandez 3569e7649fSLucas Segarra Fernandez #define ADF_TL_DATA_REG_OFF(reg, qat_gen) \ 3669e7649fSLucas Segarra Fernandez offsetof(struct adf_##qat_gen##_tl_layout, reg) 3769e7649fSLucas Segarra Fernandez 3869e7649fSLucas Segarra Fernandez #define ADF_TL_DEV_REG_OFF(reg, qat_gen) \ 3969e7649fSLucas Segarra Fernandez (ADF_TL_DATA_REG_OFF(tl_device_data_regs, qat_gen) + \ 4069e7649fSLucas Segarra Fernandez offsetof(struct adf_##qat_gen##_tl_device_data_regs, reg)) 4169e7649fSLucas Segarra Fernandez 4269e7649fSLucas Segarra Fernandez #define ADF_TL_SLICE_REG_OFF(slice, reg, qat_gen) \ 4369e7649fSLucas Segarra Fernandez (ADF_TL_DEV_REG_OFF(slice##_slices[0], qat_gen) + \ 4469e7649fSLucas Segarra Fernandez offsetof(struct adf_##qat_gen##_tl_slice_data_regs, reg)) 4569e7649fSLucas Segarra Fernandez 46eb527077SLucas Segarra Fernandez #define ADF_TL_RP_REG_OFF(reg, qat_gen) \ 47eb527077SLucas Segarra Fernandez (ADF_TL_DATA_REG_OFF(tl_ring_pairs_data_regs[0], qat_gen) + \ 48eb527077SLucas Segarra Fernandez offsetof(struct adf_##qat_gen##_tl_ring_pair_data_regs, reg)) 49eb527077SLucas Segarra Fernandez 5069e7649fSLucas Segarra Fernandez /** 5169e7649fSLucas Segarra Fernandez * enum adf_tl_counter_type - telemetry counter types 5269e7649fSLucas Segarra Fernandez * @ADF_TL_COUNTER_UNSUPPORTED: unsupported counter 5369e7649fSLucas Segarra Fernandez * @ADF_TL_SIMPLE_COUNT: simple counter 5469e7649fSLucas Segarra Fernandez * @ADF_TL_COUNTER_NS: latency counter, value in ns 5569e7649fSLucas Segarra Fernandez * @ADF_TL_COUNTER_NS_AVG: accumulated average latency counter, value in ns 5669e7649fSLucas Segarra Fernandez * @ADF_TL_COUNTER_MBPS: bandwidth, value in MBps 5769e7649fSLucas Segarra Fernandez */ 5869e7649fSLucas Segarra Fernandez enum adf_tl_counter_type { 5969e7649fSLucas Segarra Fernandez ADF_TL_COUNTER_UNSUPPORTED, 6069e7649fSLucas Segarra Fernandez ADF_TL_SIMPLE_COUNT, 6169e7649fSLucas Segarra Fernandez ADF_TL_COUNTER_NS, 6269e7649fSLucas Segarra Fernandez ADF_TL_COUNTER_NS_AVG, 6369e7649fSLucas Segarra Fernandez ADF_TL_COUNTER_MBPS, 6469e7649fSLucas Segarra Fernandez }; 6569e7649fSLucas Segarra Fernandez 6669e7649fSLucas Segarra Fernandez /** 6769e7649fSLucas Segarra Fernandez * struct adf_tl_dbg_counter - telemetry counter definition 6869e7649fSLucas Segarra Fernandez * @name: name of the counter as printed in the report 6969e7649fSLucas Segarra Fernandez * @adf_tl_counter_type: type of the counter 7069e7649fSLucas Segarra Fernandez * @offset1: offset of 1st register 7169e7649fSLucas Segarra Fernandez * @offset2: offset of 2nd optional register 7269e7649fSLucas Segarra Fernandez */ 7369e7649fSLucas Segarra Fernandez struct adf_tl_dbg_counter { 7469e7649fSLucas Segarra Fernandez const char *name; 7569e7649fSLucas Segarra Fernandez enum adf_tl_counter_type type; 7669e7649fSLucas Segarra Fernandez size_t offset1; 7769e7649fSLucas Segarra Fernandez size_t offset2; 7869e7649fSLucas Segarra Fernandez }; 7969e7649fSLucas Segarra Fernandez 8069e7649fSLucas Segarra Fernandez #define ADF_TL_COUNTER(_name, _type, _offset) \ 8169e7649fSLucas Segarra Fernandez { .name = _name, \ 8269e7649fSLucas Segarra Fernandez .type = _type, \ 8369e7649fSLucas Segarra Fernandez .offset1 = _offset \ 8469e7649fSLucas Segarra Fernandez } 8569e7649fSLucas Segarra Fernandez 8669e7649fSLucas Segarra Fernandez #define ADF_TL_COUNTER_LATENCY(_name, _type, _offset1, _offset2) \ 8769e7649fSLucas Segarra Fernandez { .name = _name, \ 8869e7649fSLucas Segarra Fernandez .type = _type, \ 8969e7649fSLucas Segarra Fernandez .offset1 = _offset1, \ 9069e7649fSLucas Segarra Fernandez .offset2 = _offset2 \ 9169e7649fSLucas Segarra Fernandez } 9269e7649fSLucas Segarra Fernandez 9369e7649fSLucas Segarra Fernandez /* Telemetry counter aggregated values. */ 9469e7649fSLucas Segarra Fernandez struct adf_tl_dbg_aggr_values { 9569e7649fSLucas Segarra Fernandez u64 curr; 9669e7649fSLucas Segarra Fernandez u64 min; 9769e7649fSLucas Segarra Fernandez u64 max; 9869e7649fSLucas Segarra Fernandez u64 avg; 9969e7649fSLucas Segarra Fernandez }; 10069e7649fSLucas Segarra Fernandez 10169e7649fSLucas Segarra Fernandez /** 10269e7649fSLucas Segarra Fernandez * adf_tl_dbgfs_add() - Add telemetry's debug fs entries. 10369e7649fSLucas Segarra Fernandez * @accel_dev: Pointer to acceleration device. 10469e7649fSLucas Segarra Fernandez * 10569e7649fSLucas Segarra Fernandez * Creates telemetry's debug fs folder and attributes in QAT debug fs root. 10669e7649fSLucas Segarra Fernandez */ 10769e7649fSLucas Segarra Fernandez void adf_tl_dbgfs_add(struct adf_accel_dev *accel_dev); 10869e7649fSLucas Segarra Fernandez 10969e7649fSLucas Segarra Fernandez /** 11069e7649fSLucas Segarra Fernandez * adf_tl_dbgfs_rm() - Remove telemetry's debug fs entries. 11169e7649fSLucas Segarra Fernandez * @accel_dev: Pointer to acceleration device. 11269e7649fSLucas Segarra Fernandez * 11369e7649fSLucas Segarra Fernandez * Removes telemetry's debug fs folder and attributes from QAT debug fs root. 11469e7649fSLucas Segarra Fernandez */ 11569e7649fSLucas Segarra Fernandez void adf_tl_dbgfs_rm(struct adf_accel_dev *accel_dev); 11669e7649fSLucas Segarra Fernandez 11769e7649fSLucas Segarra Fernandez #endif /* ADF_TL_DEBUGFS_H */ 118