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-
4516static 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-
15083static_assert (sizeof (struct icp_qat_fw_init_admin_pm_info ) < PAGE_SIZE );
15184
15285static 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 ,
0 commit comments