Skip to content

Commit 7c68005

Browse files
georgeabpherbertx
authored andcommitted
crypto: qat - relocate power management debugfs helper APIs
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>
1 parent e83cfb8 commit 7c68005

4 files changed

Lines changed: 108 additions & 86 deletions

File tree

drivers/crypto/intel/qat/qat_common/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ intel_qat-$(CONFIG_DEBUG_FS) += adf_cnv_dbgfs.o \
5252
adf_heartbeat_dbgfs.o \
5353
adf_heartbeat.o \
5454
adf_pm_dbgfs.o \
55+
adf_pm_dbgfs_utils.o \
5556
adf_telemetry.o \
5657
adf_tl_debugfs.o \
5758
adf_transport_debug.o

drivers/crypto/intel/qat/qat_common/adf_gen4_pm_debugfs.c

Lines changed: 19 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,18 @@
11
// SPDX-License-Identifier: GPL-2.0-only
22
/* Copyright(c) 2023 Intel Corporation */
33
#include <linux/dma-mapping.h>
4-
#include <linux/kernel.h>
54
#include <linux/string_helpers.h>
6-
#include <linux/stringify.h>
75

86
#include "adf_accel_devices.h"
97
#include "adf_admin.h"
108
#include "adf_common_drv.h"
119
#include "adf_gen4_pm.h"
10+
#include "adf_pm_dbgfs_utils.h"
1211
#include "icp_qat_fw_init_admin.h"
1312

14-
/*
15-
* This is needed because a variable is used to index the mask at
16-
* pm_scnprint_table(), making it not compile time constant, so the compile
17-
* asserts from FIELD_GET() or u32_get_bits() won't be fulfilled.
18-
*/
19-
#define field_get(_mask, _reg) (((_reg) & (_mask)) >> (ffs(_mask) - 1))
20-
21-
#define PM_INFO_MEMBER_OFF(member) \
22-
(offsetof(struct icp_qat_fw_init_admin_pm_info, member) / sizeof(u32))
23-
24-
#define PM_INFO_REGSET_ENTRY_MASK(_reg_, _field_, _mask_) \
25-
{ \
26-
.reg_offset = PM_INFO_MEMBER_OFF(_reg_), \
27-
.key = __stringify(_field_), \
28-
.field_mask = _mask_, \
29-
}
30-
31-
#define PM_INFO_REGSET_ENTRY32(_reg_, _field_) \
32-
PM_INFO_REGSET_ENTRY_MASK(_reg_, _field_, GENMASK(31, 0))
33-
3413
#define PM_INFO_REGSET_ENTRY(_reg_, _field_) \
3514
PM_INFO_REGSET_ENTRY_MASK(_reg_, _field_, ADF_GEN4_PM_##_field_##_MASK)
3615

37-
#define PM_INFO_MAX_KEY_LEN 21
38-
39-
struct pm_status_row {
40-
int reg_offset;
41-
u32 field_mask;
42-
const char *key;
43-
};
44-
4516
static const struct pm_status_row pm_fuse_rows[] = {
4617
PM_INFO_REGSET_ENTRY(fusectl0, ENABLE_PM),
4718
PM_INFO_REGSET_ENTRY(fusectl0, ENABLE_PM_IDLE),
@@ -109,44 +80,6 @@ static const struct pm_status_row pm_csrs_rows[] = {
10980
PM_INFO_REGSET_ENTRY32(pm.pwrreq, CPM_PM_PWRREQ),
11081
};
11182

112-
static int pm_scnprint_table(char *buff, const struct pm_status_row *table,
113-
u32 *pm_info_regs, size_t buff_size, int table_len,
114-
bool lowercase)
115-
{
116-
char key[PM_INFO_MAX_KEY_LEN];
117-
int wr = 0;
118-
int i;
119-
120-
for (i = 0; i < table_len; i++) {
121-
if (lowercase)
122-
string_lower(key, table[i].key);
123-
else
124-
string_upper(key, table[i].key);
125-
126-
wr += scnprintf(&buff[wr], buff_size - wr, "%s: %#x\n", key,
127-
field_get(table[i].field_mask,
128-
pm_info_regs[table[i].reg_offset]));
129-
}
130-
131-
return wr;
132-
}
133-
134-
static int pm_scnprint_table_upper_keys(char *buff, const struct pm_status_row *table,
135-
u32 *pm_info_regs, size_t buff_size,
136-
int table_len)
137-
{
138-
return pm_scnprint_table(buff, table, pm_info_regs, buff_size,
139-
table_len, false);
140-
}
141-
142-
static int pm_scnprint_table_lower_keys(char *buff, const struct pm_status_row *table,
143-
u32 *pm_info_regs, size_t buff_size,
144-
int table_len)
145-
{
146-
return pm_scnprint_table(buff, table, pm_info_regs, buff_size,
147-
table_len, true);
148-
}
149-
15083
static_assert(sizeof(struct icp_qat_fw_init_admin_pm_info) < PAGE_SIZE);
15184

15285
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,
191124
/* Fusectl related */
192125
len += scnprintf(&pm_kv[len], PAGE_SIZE - len,
193126
"----------- PM Fuse info ---------\n");
194-
len += pm_scnprint_table_lower_keys(&pm_kv[len], pm_fuse_rows,
195-
pm_info_regs, PAGE_SIZE - len,
196-
ARRAY_SIZE(pm_fuse_rows));
127+
len += adf_pm_scnprint_table_lower_keys(&pm_kv[len], pm_fuse_rows,
128+
pm_info_regs, PAGE_SIZE - len,
129+
ARRAY_SIZE(pm_fuse_rows));
197130
len += scnprintf(&pm_kv[len], PAGE_SIZE - len, "max_pwrreq: %#x\n",
198131
pm_info->max_pwrreq);
199132
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,
204137
"------------ PM Info ------------\n");
205138
len += scnprintf(&pm_kv[len], PAGE_SIZE - len, "power_level: %s\n",
206139
pm_info->pwr_state == PM_SET_MIN ? "min" : "max");
207-
len += pm_scnprint_table_lower_keys(&pm_kv[len], pm_info_rows,
208-
pm_info_regs, PAGE_SIZE - len,
209-
ARRAY_SIZE(pm_info_rows));
140+
len += adf_pm_scnprint_table_lower_keys(&pm_kv[len], pm_info_rows,
141+
pm_info_regs, PAGE_SIZE - len,
142+
ARRAY_SIZE(pm_info_rows));
210143
len += scnprintf(&pm_kv[len], PAGE_SIZE - len, "pm_mode: STATIC\n");
211144

212145
/* SSM related */
213146
len += scnprintf(&pm_kv[len], PAGE_SIZE - len,
214147
"----------- SSM_PM Info ----------\n");
215-
len += pm_scnprint_table_lower_keys(&pm_kv[len], pm_ssm_rows,
216-
pm_info_regs, PAGE_SIZE - len,
217-
ARRAY_SIZE(pm_ssm_rows));
148+
len += adf_pm_scnprint_table_lower_keys(&pm_kv[len], pm_ssm_rows,
149+
pm_info_regs, PAGE_SIZE - len,
150+
ARRAY_SIZE(pm_ssm_rows));
218151

219152
/* Log related */
220153
len += scnprintf(&pm_kv[len], PAGE_SIZE - len,
221154
"------------- PM Log -------------\n");
222-
len += pm_scnprint_table_lower_keys(&pm_kv[len], pm_log_rows,
223-
pm_info_regs, PAGE_SIZE - len,
224-
ARRAY_SIZE(pm_log_rows));
155+
len += adf_pm_scnprint_table_lower_keys(&pm_kv[len], pm_log_rows,
156+
pm_info_regs, PAGE_SIZE - len,
157+
ARRAY_SIZE(pm_log_rows));
225158

226-
len += pm_scnprint_table_lower_keys(&pm_kv[len], pm_event_rows,
227-
pm_info_regs, PAGE_SIZE - len,
228-
ARRAY_SIZE(pm_event_rows));
159+
len += adf_pm_scnprint_table_lower_keys(&pm_kv[len], pm_event_rows,
160+
pm_info_regs, PAGE_SIZE - len,
161+
ARRAY_SIZE(pm_event_rows));
229162

230163
len += scnprintf(&pm_kv[len], PAGE_SIZE - len, "idle_irq_count: %#x\n",
231164
pm->idle_irq_counters);
@@ -241,9 +174,9 @@ static ssize_t adf_gen4_print_pm_status(struct adf_accel_dev *accel_dev,
241174
/* CSRs content */
242175
len += scnprintf(&pm_kv[len], PAGE_SIZE - len,
243176
"----------- HW PM CSRs -----------\n");
244-
len += pm_scnprint_table_upper_keys(&pm_kv[len], pm_csrs_rows,
245-
pm_info_regs, PAGE_SIZE - len,
246-
ARRAY_SIZE(pm_csrs_rows));
177+
len += adf_pm_scnprint_table_upper_keys(&pm_kv[len], pm_csrs_rows,
178+
pm_info_regs, PAGE_SIZE - len,
179+
ARRAY_SIZE(pm_csrs_rows));
247180

248181
val = ADF_CSR_RD(pmisc, ADF_GEN4_PM_HOST_MSG);
249182
len += scnprintf(&pm_kv[len], PAGE_SIZE - len,
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// SPDX-License-Identifier: GPL-2.0-only
2+
/* Copyright(c) 2025 Intel Corporation */
3+
#include <linux/bitops.h>
4+
#include <linux/sprintf.h>
5+
#include <linux/string_helpers.h>
6+
7+
#include "adf_pm_dbgfs_utils.h"
8+
9+
/*
10+
* This is needed because a variable is used to index the mask at
11+
* pm_scnprint_table(), making it not compile time constant, so the compile
12+
* asserts from FIELD_GET() or u32_get_bits() won't be fulfilled.
13+
*/
14+
#define field_get(_mask, _reg) (((_reg) & (_mask)) >> (ffs(_mask) - 1))
15+
16+
#define PM_INFO_MAX_KEY_LEN 21
17+
18+
static int pm_scnprint_table(char *buff, const struct pm_status_row *table,
19+
u32 *pm_info_regs, size_t buff_size, int table_len,
20+
bool lowercase)
21+
{
22+
char key[PM_INFO_MAX_KEY_LEN];
23+
int wr = 0;
24+
int i;
25+
26+
for (i = 0; i < table_len; i++) {
27+
if (lowercase)
28+
string_lower(key, table[i].key);
29+
else
30+
string_upper(key, table[i].key);
31+
32+
wr += scnprintf(&buff[wr], buff_size - wr, "%s: %#x\n", key,
33+
field_get(table[i].field_mask,
34+
pm_info_regs[table[i].reg_offset]));
35+
}
36+
37+
return wr;
38+
}
39+
40+
int adf_pm_scnprint_table_upper_keys(char *buff, const struct pm_status_row *table,
41+
u32 *pm_info_regs, size_t buff_size, int table_len)
42+
{
43+
return pm_scnprint_table(buff, table, pm_info_regs, buff_size,
44+
table_len, false);
45+
}
46+
47+
int adf_pm_scnprint_table_lower_keys(char *buff, const struct pm_status_row *table,
48+
u32 *pm_info_regs, size_t buff_size, int table_len)
49+
{
50+
return pm_scnprint_table(buff, table, pm_info_regs, buff_size,
51+
table_len, true);
52+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/* SPDX-License-Identifier: GPL-2.0-only */
2+
/* Copyright(c) 2025 Intel Corporation */
3+
#ifndef ADF_PM_DBGFS_UTILS_H_
4+
#define ADF_PM_DBGFS_UTILS_H_
5+
6+
#include <linux/stddef.h>
7+
#include <linux/stringify.h>
8+
#include <linux/types.h>
9+
#include "icp_qat_fw_init_admin.h"
10+
11+
#define PM_INFO_MEMBER_OFF(member) \
12+
(offsetof(struct icp_qat_fw_init_admin_pm_info, member) / sizeof(u32))
13+
14+
#define PM_INFO_REGSET_ENTRY_MASK(_reg_, _field_, _mask_) \
15+
{ \
16+
.reg_offset = PM_INFO_MEMBER_OFF(_reg_), \
17+
.key = __stringify(_field_), \
18+
.field_mask = _mask_, \
19+
}
20+
21+
#define PM_INFO_REGSET_ENTRY32(_reg_, _field_) \
22+
PM_INFO_REGSET_ENTRY_MASK(_reg_, _field_, GENMASK(31, 0))
23+
24+
struct pm_status_row {
25+
int reg_offset;
26+
u32 field_mask;
27+
const char *key;
28+
};
29+
30+
int adf_pm_scnprint_table_upper_keys(char *buff, const struct pm_status_row *table,
31+
u32 *pm_info_regs, size_t buff_size, int table_len);
32+
33+
int adf_pm_scnprint_table_lower_keys(char *buff, const struct pm_status_row *table,
34+
u32 *pm_info_regs, size_t buff_size, int table_len);
35+
36+
#endif /* ADF_PM_DBGFS_UTILS_H_ */

0 commit comments

Comments
 (0)