]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
crypto: qat - relocate power management debugfs helper APIs
authorGeorge Abraham P <george.abraham.p@intel.com>
Mon, 7 Jul 2025 12:28:45 +0000 (13:28 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 18 Jul 2025 10:51:59 +0000 (20:51 +1000)
Relocate the power management debugfs helper APIs in a common file
adf_pm_dbgfs_utils.h and adf_pm_dbgfs_utils.c so that it can be shared
between device generations.

When moving logic from adf_gen4_pm_debugfs.c to adf_pm_dbgfs_utils.c, the
include kernel.h has been replaced with the required include.

This does not introduce any functional change.

Signed-off-by: George Abraham P <george.abraham.p@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>
drivers/crypto/intel/qat/qat_common/Makefile
drivers/crypto/intel/qat/qat_common/adf_gen4_pm_debugfs.c
drivers/crypto/intel/qat/qat_common/adf_pm_dbgfs_utils.c [new file with mode: 0644]
drivers/crypto/intel/qat/qat_common/adf_pm_dbgfs_utils.h [new file with mode: 0644]

index e426cc3c49c3d3f96cf8a7358792fefdcffd40a8..5826180c2051524bbaf4497036e7949dec9eaa10 100644 (file)
@@ -52,6 +52,7 @@ intel_qat-$(CONFIG_DEBUG_FS) += adf_cnv_dbgfs.o \
                                adf_heartbeat_dbgfs.o \
                                adf_heartbeat.o \
                                adf_pm_dbgfs.o \
+                               adf_pm_dbgfs_utils.o \
                                adf_telemetry.o \
                                adf_tl_debugfs.o \
                                adf_transport_debug.o
index 2e4095c4c12c94f91af40668f240cb30c567f05a..b7e38842a46dc8b87c86fb9d17869f2238fa08f3 100644 (file)
@@ -1,47 +1,18 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /* Copyright(c) 2023 Intel Corporation */
 #include <linux/dma-mapping.h>
-#include <linux/kernel.h>
 #include <linux/string_helpers.h>
-#include <linux/stringify.h>
 
 #include "adf_accel_devices.h"
 #include "adf_admin.h"
 #include "adf_common_drv.h"
 #include "adf_gen4_pm.h"
+#include "adf_pm_dbgfs_utils.h"
 #include "icp_qat_fw_init_admin.h"
 
-/*
- * This is needed because a variable is used to index the mask at
- * pm_scnprint_table(), making it not compile time constant, so the compile
- * asserts from FIELD_GET() or u32_get_bits() won't be fulfilled.
- */
-#define field_get(_mask, _reg) (((_reg) & (_mask)) >> (ffs(_mask) - 1))
-
-#define PM_INFO_MEMBER_OFF(member)     \
-       (offsetof(struct icp_qat_fw_init_admin_pm_info, member) / sizeof(u32))
-
-#define PM_INFO_REGSET_ENTRY_MASK(_reg_, _field_, _mask_)      \
-{                                                              \
-       .reg_offset = PM_INFO_MEMBER_OFF(_reg_),                \
-       .key = __stringify(_field_),                            \
-       .field_mask = _mask_,                                   \
-}
-
-#define PM_INFO_REGSET_ENTRY32(_reg_, _field_) \
-       PM_INFO_REGSET_ENTRY_MASK(_reg_, _field_, GENMASK(31, 0))
-
 #define PM_INFO_REGSET_ENTRY(_reg_, _field_)   \
        PM_INFO_REGSET_ENTRY_MASK(_reg_, _field_, ADF_GEN4_PM_##_field_##_MASK)
 
-#define PM_INFO_MAX_KEY_LEN    21
-
-struct pm_status_row {
-       int reg_offset;
-       u32 field_mask;
-       const char *key;
-};
-
 static const struct pm_status_row pm_fuse_rows[] = {
        PM_INFO_REGSET_ENTRY(fusectl0, ENABLE_PM),
        PM_INFO_REGSET_ENTRY(fusectl0, ENABLE_PM_IDLE),
@@ -109,44 +80,6 @@ static const struct pm_status_row pm_csrs_rows[] = {
        PM_INFO_REGSET_ENTRY32(pm.pwrreq, CPM_PM_PWRREQ),
 };
 
-static int pm_scnprint_table(char *buff, const struct pm_status_row *table,
-                            u32 *pm_info_regs, size_t buff_size, int table_len,
-                            bool lowercase)
-{
-       char key[PM_INFO_MAX_KEY_LEN];
-       int wr = 0;
-       int i;
-
-       for (i = 0; i < table_len; i++) {
-               if (lowercase)
-                       string_lower(key, table[i].key);
-               else
-                       string_upper(key, table[i].key);
-
-               wr += scnprintf(&buff[wr], buff_size - wr, "%s: %#x\n", key,
-                               field_get(table[i].field_mask,
-                                         pm_info_regs[table[i].reg_offset]));
-       }
-
-       return wr;
-}
-
-static int pm_scnprint_table_upper_keys(char *buff, const struct pm_status_row *table,
-                                       u32 *pm_info_regs, size_t buff_size,
-                                       int table_len)
-{
-       return pm_scnprint_table(buff, table, pm_info_regs, buff_size,
-                                table_len, false);
-}
-
-static int pm_scnprint_table_lower_keys(char *buff, const struct pm_status_row *table,
-                                       u32 *pm_info_regs, size_t buff_size,
-                                       int table_len)
-{
-       return pm_scnprint_table(buff, table, pm_info_regs, buff_size,
-                                table_len, true);
-}
-
 static_assert(sizeof(struct icp_qat_fw_init_admin_pm_info) < PAGE_SIZE);
 
 static ssize_t adf_gen4_print_pm_status(struct adf_accel_dev *accel_dev,
@@ -191,9 +124,9 @@ static ssize_t adf_gen4_print_pm_status(struct adf_accel_dev *accel_dev,
        /* Fusectl related */
        len += scnprintf(&pm_kv[len], PAGE_SIZE - len,
                         "----------- PM Fuse info ---------\n");
-       len += pm_scnprint_table_lower_keys(&pm_kv[len], pm_fuse_rows,
-                                           pm_info_regs, PAGE_SIZE - len,
-                                           ARRAY_SIZE(pm_fuse_rows));
+       len += adf_pm_scnprint_table_lower_keys(&pm_kv[len], pm_fuse_rows,
+                                               pm_info_regs, PAGE_SIZE - len,
+                                               ARRAY_SIZE(pm_fuse_rows));
        len += scnprintf(&pm_kv[len], PAGE_SIZE - len, "max_pwrreq: %#x\n",
                         pm_info->max_pwrreq);
        len += scnprintf(&pm_kv[len], PAGE_SIZE - len, "min_pwrreq: %#x\n",
@@ -204,28 +137,28 @@ static ssize_t adf_gen4_print_pm_status(struct adf_accel_dev *accel_dev,
                         "------------  PM Info ------------\n");
        len += scnprintf(&pm_kv[len], PAGE_SIZE - len, "power_level: %s\n",
                         pm_info->pwr_state == PM_SET_MIN ? "min" : "max");
-       len += pm_scnprint_table_lower_keys(&pm_kv[len], pm_info_rows,
-                                           pm_info_regs, PAGE_SIZE - len,
-                                           ARRAY_SIZE(pm_info_rows));
+       len += adf_pm_scnprint_table_lower_keys(&pm_kv[len], pm_info_rows,
+                                               pm_info_regs, PAGE_SIZE - len,
+                                               ARRAY_SIZE(pm_info_rows));
        len += scnprintf(&pm_kv[len], PAGE_SIZE - len, "pm_mode: STATIC\n");
 
        /* SSM related */
        len += scnprintf(&pm_kv[len], PAGE_SIZE - len,
                         "----------- SSM_PM Info ----------\n");
-       len += pm_scnprint_table_lower_keys(&pm_kv[len], pm_ssm_rows,
-                                           pm_info_regs, PAGE_SIZE - len,
-                                           ARRAY_SIZE(pm_ssm_rows));
+       len += adf_pm_scnprint_table_lower_keys(&pm_kv[len], pm_ssm_rows,
+                                               pm_info_regs, PAGE_SIZE - len,
+                                               ARRAY_SIZE(pm_ssm_rows));
 
        /* Log related */
        len += scnprintf(&pm_kv[len], PAGE_SIZE - len,
                         "------------- PM Log -------------\n");
-       len += pm_scnprint_table_lower_keys(&pm_kv[len], pm_log_rows,
-                                           pm_info_regs, PAGE_SIZE - len,
-                                           ARRAY_SIZE(pm_log_rows));
+       len += adf_pm_scnprint_table_lower_keys(&pm_kv[len], pm_log_rows,
+                                               pm_info_regs, PAGE_SIZE - len,
+                                               ARRAY_SIZE(pm_log_rows));
 
-       len += pm_scnprint_table_lower_keys(&pm_kv[len], pm_event_rows,
-                                           pm_info_regs, PAGE_SIZE - len,
-                                           ARRAY_SIZE(pm_event_rows));
+       len += adf_pm_scnprint_table_lower_keys(&pm_kv[len], pm_event_rows,
+                                               pm_info_regs, PAGE_SIZE - len,
+                                               ARRAY_SIZE(pm_event_rows));
 
        len += scnprintf(&pm_kv[len], PAGE_SIZE - len, "idle_irq_count: %#x\n",
                         pm->idle_irq_counters);
@@ -241,9 +174,9 @@ static ssize_t adf_gen4_print_pm_status(struct adf_accel_dev *accel_dev,
        /* CSRs content */
        len += scnprintf(&pm_kv[len], PAGE_SIZE - len,
                         "----------- HW PM CSRs -----------\n");
-       len += pm_scnprint_table_upper_keys(&pm_kv[len], pm_csrs_rows,
-                                           pm_info_regs, PAGE_SIZE - len,
-                                           ARRAY_SIZE(pm_csrs_rows));
+       len += adf_pm_scnprint_table_upper_keys(&pm_kv[len], pm_csrs_rows,
+                                               pm_info_regs, PAGE_SIZE - len,
+                                               ARRAY_SIZE(pm_csrs_rows));
 
        val = ADF_CSR_RD(pmisc, ADF_GEN4_PM_HOST_MSG);
        len += scnprintf(&pm_kv[len], PAGE_SIZE - len,
diff --git a/drivers/crypto/intel/qat/qat_common/adf_pm_dbgfs_utils.c b/drivers/crypto/intel/qat/qat_common/adf_pm_dbgfs_utils.c
new file mode 100644 (file)
index 0000000..69295a9
--- /dev/null
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright(c) 2025 Intel Corporation */
+#include <linux/bitops.h>
+#include <linux/sprintf.h>
+#include <linux/string_helpers.h>
+
+#include "adf_pm_dbgfs_utils.h"
+
+/*
+ * This is needed because a variable is used to index the mask at
+ * pm_scnprint_table(), making it not compile time constant, so the compile
+ * asserts from FIELD_GET() or u32_get_bits() won't be fulfilled.
+ */
+#define field_get(_mask, _reg) (((_reg) & (_mask)) >> (ffs(_mask) - 1))
+
+#define PM_INFO_MAX_KEY_LEN    21
+
+static int pm_scnprint_table(char *buff, const struct pm_status_row *table,
+                            u32 *pm_info_regs, size_t buff_size, int table_len,
+                            bool lowercase)
+{
+       char key[PM_INFO_MAX_KEY_LEN];
+       int wr = 0;
+       int i;
+
+       for (i = 0; i < table_len; i++) {
+               if (lowercase)
+                       string_lower(key, table[i].key);
+               else
+                       string_upper(key, table[i].key);
+
+               wr += scnprintf(&buff[wr], buff_size - wr, "%s: %#x\n", key,
+                               field_get(table[i].field_mask,
+                                         pm_info_regs[table[i].reg_offset]));
+       }
+
+       return wr;
+}
+
+int adf_pm_scnprint_table_upper_keys(char *buff, const struct pm_status_row *table,
+                                    u32 *pm_info_regs, size_t buff_size, int table_len)
+{
+       return pm_scnprint_table(buff, table, pm_info_regs, buff_size,
+                                table_len, false);
+}
+
+int adf_pm_scnprint_table_lower_keys(char *buff, const struct pm_status_row *table,
+                                    u32 *pm_info_regs, size_t buff_size, int table_len)
+{
+       return pm_scnprint_table(buff, table, pm_info_regs, buff_size,
+                                table_len, true);
+}
diff --git a/drivers/crypto/intel/qat/qat_common/adf_pm_dbgfs_utils.h b/drivers/crypto/intel/qat/qat_common/adf_pm_dbgfs_utils.h
new file mode 100644 (file)
index 0000000..854f058
--- /dev/null
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/* Copyright(c) 2025 Intel Corporation */
+#ifndef ADF_PM_DBGFS_UTILS_H_
+#define ADF_PM_DBGFS_UTILS_H_
+
+#include <linux/stddef.h>
+#include <linux/stringify.h>
+#include <linux/types.h>
+#include "icp_qat_fw_init_admin.h"
+
+#define PM_INFO_MEMBER_OFF(member)     \
+       (offsetof(struct icp_qat_fw_init_admin_pm_info, member) / sizeof(u32))
+
+#define PM_INFO_REGSET_ENTRY_MASK(_reg_, _field_, _mask_)      \
+{                                                              \
+       .reg_offset = PM_INFO_MEMBER_OFF(_reg_),                \
+       .key = __stringify(_field_),                            \
+       .field_mask = _mask_,                                   \
+}
+
+#define PM_INFO_REGSET_ENTRY32(_reg_, _field_) \
+       PM_INFO_REGSET_ENTRY_MASK(_reg_, _field_, GENMASK(31, 0))
+
+struct pm_status_row {
+       int reg_offset;
+       u32 field_mask;
+       const char *key;
+};
+
+int adf_pm_scnprint_table_upper_keys(char *buff, const struct pm_status_row *table,
+                                    u32 *pm_info_regs, size_t buff_size, int table_len);
+
+int adf_pm_scnprint_table_lower_keys(char *buff, const struct pm_status_row *table,
+                                    u32 *pm_info_regs, size_t buff_size, int table_len);
+
+#endif /* ADF_PM_DBGFS_UTILS_H_ */