Merge "mmrm: Print enabled mmrm client info"

Цей коміт міститься в:
qctecmdr
2021-10-14 10:32:46 -07:00
зафіксовано Gerrit - the friendly Code Review server
джерело d5c40be33b 3ddc864248
коміт 4758d42c05
4 змінених файлів з 77 додано та 2 видалено

Переглянути файл

@@ -107,3 +107,17 @@ int mmrm_clk_client_getval(struct mmrm_clk_mgr *clk_mgr,
return clk_mgr->clk_client_ops->clk_client_getval(
clk_mgr, client, val);
}
int mmrm_clk_print_enabled_client_info(struct mmrm_clk_mgr *clk_mgr,
char *buf, int sz)
{
if (!clk_mgr || !clk_mgr->clk_client_ops ||
!clk_mgr->clk_client_ops->clk_print_enabled_client_info) {
d_mpr_e("%s: invalid clk mgr\n", __func__);
return -EINVAL;
}
return clk_mgr->clk_client_ops->clk_print_enabled_client_info(
clk_mgr, buf, sz);
}

Переглянути файл

@@ -134,6 +134,8 @@ struct mmrm_clk_mgr_client_ops {
struct mmrm_client_res_value *val);
int (*clk_client_getval)(struct mmrm_clk_mgr *clk_mgr,
struct mmrm_client *client, struct mmrm_client_res_value *val);
int (*clk_print_enabled_client_info)(struct mmrm_clk_mgr *clk_mgr,
char *buf, int sz);
};
/* clk mgr operations */
@@ -159,6 +161,9 @@ int mmrm_clk_client_setval_inrange(struct mmrm_clk_mgr *clk_mgr,
int mmrm_clk_client_getval(struct mmrm_clk_mgr *clk_mgr,
struct mmrm_client *client,
struct mmrm_client_res_value *val);
int mmrm_clk_print_enabled_client_info(struct mmrm_clk_mgr *clk_mgr,
char *buf,
int sz);
/* sw clk mgr specific */
int mmrm_init_sw_clk_mgr(void *driver_data);

Переглянути файл

@@ -1014,12 +1014,51 @@ err_invalid_client:
return rc;
}
static int mmrm_sw_clk_print_enabled_client_info(struct mmrm_clk_mgr *sw_clk_mgr,
char *buf,
int sz)
{
u32 c, len;
u32 left_spaces = (u32)sz;
struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info);
struct mmrm_sw_peak_current_data *peak_data = &sinfo->peak_cur_data;
struct mmrm_sw_clk_client_tbl_entry *tbl_entry = NULL;
len = scnprintf(buf, left_spaces, " csid clk_rate vdd_level cur_ma num_hw_blocks\n");
left_spaces -= len;
buf += len;
if (sinfo != NULL && peak_data != NULL) {
for (c = 0; (c < sinfo->tot_clk_clients) && (left_spaces > 1); c++) {
tbl_entry = &sinfo->clk_client_tbl[c];
if ((tbl_entry != NULL) && (tbl_entry->clk_rate)) {
len = scnprintf(buf, left_spaces, "0x%x %zu %zu %zu %zu\n",
tbl_entry->clk_src_id,
tbl_entry->clk_rate,
tbl_entry->vdd_level,
tbl_entry->current_ma[tbl_entry->vdd_level]
[peak_data->aggreg_level] * tbl_entry->num_hw_blocks,
tbl_entry->num_hw_blocks);
left_spaces -= len;
buf += len;
}
}
if (left_spaces > 1) {
len = scnprintf(buf, left_spaces, "aggreg_val(%zu) aggreg_level(%zu)\n",
peak_data->aggreg_val, peak_data->aggreg_level);
left_spaces -= len;
}
}
return (sz - left_spaces);
}
static struct mmrm_clk_mgr_client_ops clk_client_swops = {
.clk_client_reg = mmrm_sw_clk_client_register,
.clk_client_dereg = mmrm_sw_clk_client_deregister,
.clk_client_setval = mmrm_sw_clk_client_setval,
.clk_client_setval_inrange = mmrm_sw_clk_client_setval_inrange,
.clk_client_getval = mmrm_sw_clk_client_getval,
.clk_print_enabled_client_info = mmrm_sw_clk_print_enabled_client_info,
};
static int mmrm_sw_prepare_table(struct mmrm_clk_platform_resources *cres,

Переглянути файл

@@ -29,6 +29,8 @@
drv_data = (void *) -EPROBE_DEFER; \
}
#define MMRM_SYSFS_ENTRY_MAX_LEN PAGE_SIZE
extern int msm_mmrm_debug;
extern u8 msm_mmrm_enable_throttle_feature;
extern u8 msm_mmrm_allow_multiple_register;
@@ -230,8 +232,6 @@ err_exit:
}
EXPORT_SYMBOL(mmrm_client_get_value);
#define MMRM_SYSFS_ENTRY_MAX_LEN 64
static int sysfs_get_param(const char *buf, u32 *param)
{
int base;
@@ -320,6 +320,19 @@ static ssize_t mmrm_sysfs_allow_multiple_set(struct device *dev,
return count;
}
static ssize_t dump_enabled_client_info_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
int rc;
rc = mmrm_clk_print_enabled_client_info(drv_data->clk_mgr, buf, MMRM_SYSFS_ENTRY_MAX_LEN);
if (rc == 0)
d_mpr_e("%s: failed to dump client info\n", __func__);
return rc;
}
static DEVICE_ATTR(debug, 0644,
mmrm_sysfs_debug_get,
mmrm_sysfs_debug_set);
@@ -332,10 +345,14 @@ static DEVICE_ATTR(allow_multiple_register, 0644,
mmrm_sysfs_allow_multiple_get,
mmrm_sysfs_allow_multiple_set);
static DEVICE_ATTR_RO(dump_enabled_client_info);
static struct attribute *mmrm_fs_attrs[] = {
&dev_attr_debug.attr,
&dev_attr_enable_throttle_feature.attr,
&dev_attr_allow_multiple_register.attr,
&dev_attr_dump_enabled_client_info.attr,
NULL,
};