Merge "mmrm: Print enabled mmrm client info"
Цей коміт міститься в:

зафіксовано
Gerrit - the friendly Code Review server

коміт
4758d42c05
@@ -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,
|
||||
};
|
||||
|
||||
|
Посилання в новій задачі
Заблокувати користувача