mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
crypto: qat - add pm_status debugfs file
QAT devices implement a mechanism that allows them to go autonomously to a low power state depending on the load. Expose power management info by providing the "pm_status" file under debugfs. This includes PM state, PM event log, PM event counters, PM HW CSRs, per-resource type constrain counters and per-domain power gating status specific to the QAT device. This information is retrieved from (1) the FW by means of ICP_QAT_FW_PM_INFO command, (2) CSRs and (3) counters collected by the device driver. In addition, add logic to keep track and report power management event interrupts and acks/nacks sent to FW to allow/prevent state transitions. Signed-off-by: Lucas Segarra Fernandez <lucas.segarra.fernandez@intel.com> Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
committed by
Herbert Xu
parent
756762decc
commit
e079231676
@@ -379,6 +379,33 @@ int adf_init_admin_pm(struct adf_accel_dev *accel_dev, u32 idle_delay)
|
||||
return adf_send_admin(accel_dev, &req, &resp, ae_mask);
|
||||
}
|
||||
|
||||
int adf_get_pm_info(struct adf_accel_dev *accel_dev, dma_addr_t p_state_addr,
|
||||
size_t buff_size)
|
||||
{
|
||||
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
|
||||
struct icp_qat_fw_init_admin_req req = { };
|
||||
struct icp_qat_fw_init_admin_resp resp;
|
||||
u32 ae_mask = hw_data->admin_ae_mask;
|
||||
int ret;
|
||||
|
||||
/* Query pm info via init/admin cmd */
|
||||
if (!accel_dev->admin) {
|
||||
dev_err(&GET_DEV(accel_dev), "adf_admin is not available\n");
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
req.cmd_id = ICP_QAT_FW_PM_INFO;
|
||||
req.init_cfg_sz = buff_size;
|
||||
req.init_cfg_ptr = p_state_addr;
|
||||
|
||||
ret = adf_send_admin(accel_dev, &req, &resp, ae_mask);
|
||||
if (ret)
|
||||
dev_err(&GET_DEV(accel_dev),
|
||||
"Failed to query power-management info\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int adf_init_admin_comms(struct adf_accel_dev *accel_dev)
|
||||
{
|
||||
struct adf_admin_comms *admin;
|
||||
|
||||
Reference in New Issue
Block a user