mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
crypto: qat - add support for device telemetry
Expose through debugfs device telemetry data for QAT GEN4 devices. This allows to gather metrics about the performance and the utilization of a device. In particular, statistics on (1) the utilization of the PCIe channel, (2) address translation, when SVA is enabled and (3) the internal engines for crypto and data compression. If telemetry is supported by the firmware, the driver allocates a DMA region and a circular buffer. When telemetry is enabled, through the `control` attribute in debugfs, the driver sends to the firmware, via the admin interface, the `TL_START` command. This triggers the device to periodically gather telemetry data from hardware registers and write it into the DMA memory region. The device writes into the shared region every second. The driver, every 500ms, snapshots the DMA shared region into the circular buffer. This is then used to compute basic metric (min/max/average) on each counter, every time the `device_data` attribute is queried. Telemetry counters are exposed through debugfs in the folder /sys/kernel/debug/qat_<device>_<BDF>/telemetry. For details, refer to debugfs-driver-qat_telemetry in Documentation/ABI. This patch is based on earlier work done by Wojciech Ziemba. Signed-off-by: Lucas Segarra Fernandez <lucas.segarra.fernandez@intel.com> Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Reviewed-by: Damian Muszynski <damian.muszynski@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
committed by
Herbert Xu
parent
7f06679dd5
commit
69e7649f7c
@@ -11,6 +11,7 @@
|
||||
#include <linux/types.h>
|
||||
#include "adf_cfg_common.h"
|
||||
#include "adf_rl.h"
|
||||
#include "adf_telemetry.h"
|
||||
#include "adf_pfvf_msg.h"
|
||||
|
||||
#define ADF_DH895XCC_DEVICE_NAME "dh895xcc"
|
||||
@@ -254,6 +255,7 @@ struct adf_hw_device_data {
|
||||
struct adf_ras_ops ras_ops;
|
||||
struct adf_dev_err_mask dev_err_mask;
|
||||
struct adf_rl_hw_data rl_data;
|
||||
struct adf_tl_hw_data tl_data;
|
||||
const char *fw_name;
|
||||
const char *fw_mmp_name;
|
||||
u32 fuses;
|
||||
@@ -308,6 +310,7 @@ struct adf_hw_device_data {
|
||||
#define GET_CSR_OPS(accel_dev) (&(accel_dev)->hw_device->csr_ops)
|
||||
#define GET_PFVF_OPS(accel_dev) (&(accel_dev)->hw_device->pfvf_ops)
|
||||
#define GET_DC_OPS(accel_dev) (&(accel_dev)->hw_device->dc_ops)
|
||||
#define GET_TL_DATA(accel_dev) GET_HW_DATA(accel_dev)->tl_data
|
||||
#define accel_to_pci_dev(accel_ptr) accel_ptr->accel_pci_dev.pci_dev
|
||||
|
||||
struct adf_admin_comms;
|
||||
@@ -356,6 +359,7 @@ struct adf_accel_dev {
|
||||
struct adf_cfg_device_data *cfg;
|
||||
struct adf_fw_loader_data *fw_loader;
|
||||
struct adf_admin_comms *admin;
|
||||
struct adf_telemetry *telemetry;
|
||||
struct adf_dc_data *dc_data;
|
||||
struct adf_pm power_management;
|
||||
struct list_head crypto_list;
|
||||
|
||||
Reference in New Issue
Block a user