opp: Expose bandwidth information via debugfs
Expose the bandwidth information as well via debugfs. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
This commit is contained in:
parent
8b17f17a09
commit
0430b1d570
3 changed files with 66 additions and 0 deletions
|
@ -514,6 +514,24 @@ void icc_set_tag(struct icc_path *path, u32 tag)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(icc_set_tag);
|
EXPORT_SYMBOL_GPL(icc_set_tag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* icc_get_name() - Get name of the icc path
|
||||||
|
* @path: reference to the path returned by icc_get()
|
||||||
|
*
|
||||||
|
* This function is used by an interconnect consumer to get the name of the icc
|
||||||
|
* path.
|
||||||
|
*
|
||||||
|
* Returns a valid pointer on success, or NULL otherwise.
|
||||||
|
*/
|
||||||
|
const char *icc_get_name(struct icc_path *path)
|
||||||
|
{
|
||||||
|
if (!path)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return path->name;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(icc_get_name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* icc_set_bw() - set bandwidth constraints on an interconnect path
|
* icc_set_bw() - set bandwidth constraints on an interconnect path
|
||||||
* @path: reference to the path returned by icc_get()
|
* @path: reference to the path returned by icc_get()
|
||||||
|
|
|
@ -32,6 +32,47 @@ void opp_debug_remove_one(struct dev_pm_opp *opp)
|
||||||
debugfs_remove_recursive(opp->dentry);
|
debugfs_remove_recursive(opp->dentry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t bw_name_read(struct file *fp, char __user *userbuf,
|
||||||
|
size_t count, loff_t *ppos)
|
||||||
|
{
|
||||||
|
struct icc_path *path = fp->private_data;
|
||||||
|
char buf[64];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = scnprintf(buf, sizeof(buf), "%.62s\n", icc_get_name(path));
|
||||||
|
|
||||||
|
return simple_read_from_buffer(userbuf, count, ppos, buf, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct file_operations bw_name_fops = {
|
||||||
|
.open = simple_open,
|
||||||
|
.read = bw_name_read,
|
||||||
|
.llseek = default_llseek,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void opp_debug_create_bw(struct dev_pm_opp *opp,
|
||||||
|
struct opp_table *opp_table,
|
||||||
|
struct dentry *pdentry)
|
||||||
|
{
|
||||||
|
struct dentry *d;
|
||||||
|
char name[11];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < opp_table->path_count; i++) {
|
||||||
|
snprintf(name, sizeof(name), "icc-path-%.1d", i);
|
||||||
|
|
||||||
|
/* Create per-path directory */
|
||||||
|
d = debugfs_create_dir(name, pdentry);
|
||||||
|
|
||||||
|
debugfs_create_file("name", S_IRUGO, d, opp_table->paths[i],
|
||||||
|
&bw_name_fops);
|
||||||
|
debugfs_create_u32("peak_bw", S_IRUGO, d,
|
||||||
|
&opp->bandwidth[i].peak);
|
||||||
|
debugfs_create_u32("avg_bw", S_IRUGO, d,
|
||||||
|
&opp->bandwidth[i].avg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void opp_debug_create_supplies(struct dev_pm_opp *opp,
|
static void opp_debug_create_supplies(struct dev_pm_opp *opp,
|
||||||
struct opp_table *opp_table,
|
struct opp_table *opp_table,
|
||||||
struct dentry *pdentry)
|
struct dentry *pdentry)
|
||||||
|
@ -94,6 +135,7 @@ void opp_debug_create_one(struct dev_pm_opp *opp, struct opp_table *opp_table)
|
||||||
&opp->clock_latency_ns);
|
&opp->clock_latency_ns);
|
||||||
|
|
||||||
opp_debug_create_supplies(opp, opp_table, d);
|
opp_debug_create_supplies(opp, opp_table, d);
|
||||||
|
opp_debug_create_bw(opp, opp_table, d);
|
||||||
|
|
||||||
opp->dentry = d;
|
opp->dentry = d;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ struct icc_path *of_icc_get_by_index(struct device *dev, int idx);
|
||||||
void icc_put(struct icc_path *path);
|
void icc_put(struct icc_path *path);
|
||||||
int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw);
|
int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw);
|
||||||
void icc_set_tag(struct icc_path *path, u32 tag);
|
void icc_set_tag(struct icc_path *path, u32 tag);
|
||||||
|
const char *icc_get_name(struct icc_path *path);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -65,6 +66,11 @@ static inline void icc_set_tag(struct icc_path *path, u32 tag)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline const char *icc_get_name(struct icc_path *path)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_INTERCONNECT */
|
#endif /* CONFIG_INTERCONNECT */
|
||||||
|
|
||||||
#endif /* __LINUX_INTERCONNECT_H */
|
#endif /* __LINUX_INTERCONNECT_H */
|
||||||
|
|
Loading…
Add table
Reference in a new issue