mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-06 03:45:24 -04:00
cpufreq: qcom-cpufreq-hw: Move CPUFreq HW registers entry to sysfs
Move the logging of CPUFreq HW debug registers from debugfs to sysfs under /sys/kernel/qcom-cpufreq-hw. Change-Id: I2d23052d013125ee69de852dcec621c104f0d50a Signed-off-by: Jagadeesh Kona <jkona@codeaurora.org>
This commit is contained in:
parent
1eb2027a42
commit
f622aa8eeb
1 changed files with 30 additions and 33 deletions
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
#define pr_fmt(fmt) "cpufreq_hw_debug: %s: " fmt, __func__
|
||||
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
|
|
@ -19,6 +18,7 @@ enum debug_hw_regs_data {
|
|||
REG_PSTATE_STATUS,
|
||||
REG_EPSS_DEBUG_STATUS,
|
||||
REG_EPSS_DEBUG_SRB,
|
||||
REG_EPSS_DEBUG_LUT,
|
||||
|
||||
REG_ARRAY_SIZE,
|
||||
};
|
||||
|
|
@ -26,7 +26,6 @@ enum debug_hw_regs_data {
|
|||
struct cpufreq_hwregs {
|
||||
void __iomem *base[REG_ARRAY_SIZE];
|
||||
int domain_cnt;
|
||||
struct dentry *debugfs_base;
|
||||
};
|
||||
|
||||
struct cpufreq_register_data {
|
||||
|
|
@ -36,6 +35,8 @@ struct cpufreq_register_data {
|
|||
|
||||
static struct cpufreq_hwregs *hw_regs;
|
||||
static const u16 *offsets;
|
||||
static struct kobj_attribute cpufreq_hwregs_attr;
|
||||
static struct kobject *cpufreqhw_kobj;
|
||||
|
||||
static const u16 cpufreq_qcom_std_data[] = {
|
||||
[REG_PERF_STATE] = 0x920,
|
||||
|
|
@ -49,12 +50,14 @@ static const u16 cpufreq_qcom_std_epss_data[] = {
|
|||
[REG_PSTATE_STATUS] = 0x020,
|
||||
[REG_EPSS_DEBUG_STATUS] = 0x01c,
|
||||
[REG_EPSS_DEBUG_SRB] = 0x0bc,
|
||||
[REG_EPSS_DEBUG_LUT] = 0x100,
|
||||
};
|
||||
|
||||
static int print_cpufreq_hw_debug_regs(struct seq_file *s, void *unused)
|
||||
static ssize_t cpufreq_hwregs_show(struct kobject *kobj,
|
||||
struct kobj_attribute *attr, char *buf)
|
||||
{
|
||||
int i, j, size = ARRAY_SIZE(cpufreq_qcom_std_data);
|
||||
u32 regval;
|
||||
u32 regval, count = 0;
|
||||
|
||||
static struct cpufreq_register_data data[] = {
|
||||
{"PERF_STATE_DESIRED", REG_PERF_STATE},
|
||||
|
|
@ -62,35 +65,26 @@ static int print_cpufreq_hw_debug_regs(struct seq_file *s, void *unused)
|
|||
{"PSTATE_STATUS", REG_PSTATE_STATUS},
|
||||
{"EPSS_DEBUG_STATUS", REG_EPSS_DEBUG_STATUS},
|
||||
{"EPSS_DEBUG_SRB", REG_EPSS_DEBUG_SRB},
|
||||
{"EPSS_DEBUG_LUT", REG_EPSS_DEBUG_LUT},
|
||||
};
|
||||
|
||||
if (offsets == cpufreq_qcom_std_epss_data)
|
||||
size = ARRAY_SIZE(cpufreq_qcom_std_epss_data);
|
||||
|
||||
for (i = 0; i < hw_regs->domain_cnt; i++) {
|
||||
seq_printf(s, "FREQUENCY DOMAIN %d\n", i);
|
||||
count += scnprintf(buf + count, PAGE_SIZE,
|
||||
"FREQUENCY DOMAIN %d\n", i);
|
||||
for (j = 0; j < size; j++) {
|
||||
regval = readl_relaxed(hw_regs->base[i] +
|
||||
offsets[data[j].offset]);
|
||||
seq_printf(s, "%25s: 0x%.8x\n", data[j].name, regval);
|
||||
count += scnprintf(buf + count, PAGE_SIZE,
|
||||
"%25s: 0x%.8x\n", data[j].name, regval);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return count;
|
||||
}
|
||||
|
||||
static int print_cpufreq_hw_reg_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, print_cpufreq_hw_debug_regs, NULL);
|
||||
}
|
||||
|
||||
static const struct file_operations cpufreq_debug_register_fops = {
|
||||
.open = print_cpufreq_hw_reg_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release,
|
||||
};
|
||||
|
||||
static int cpufreq_panic_callback(struct notifier_block *nfb,
|
||||
unsigned long event, void *unused)
|
||||
{
|
||||
|
|
@ -103,6 +97,7 @@ static int cpufreq_panic_callback(struct notifier_block *nfb,
|
|||
{"PSTATE_STATUS", REG_PSTATE_STATUS},
|
||||
{"EPSS_DEBUG_STATUS", REG_EPSS_DEBUG_STATUS},
|
||||
{"EPSS_DEBUG_SRB", REG_EPSS_DEBUG_SRB},
|
||||
{"EPSS_DEBUG_LUT", REG_EPSS_DEBUG_LUT},
|
||||
};
|
||||
|
||||
if (offsets == cpufreq_qcom_std_epss_data)
|
||||
|
|
@ -181,22 +176,23 @@ static int enable_cpufreq_hw_debug(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
hw_regs->debugfs_base = debugfs_create_dir("qcom-cpufreq-hw", NULL);
|
||||
if (!hw_regs->debugfs_base) {
|
||||
dev_err(&pdev->dev, "Failed to create debugfs entry\n");
|
||||
return -ENODEV;
|
||||
cpufreqhw_kobj = kobject_create_and_add("qcom-cpufreq-hw",
|
||||
kernel_kobj);
|
||||
if (!cpufreqhw_kobj)
|
||||
return -ENOMEM;
|
||||
|
||||
sysfs_attr_init(&cpufreq_hwregs_attr.attr);
|
||||
cpufreq_hwregs_attr.attr.name = "print_cpufreq_debug_regs";
|
||||
cpufreq_hwregs_attr.show = cpufreq_hwregs_show;
|
||||
cpufreq_hwregs_attr.attr.mode = 0444;
|
||||
|
||||
ret = sysfs_create_file(cpufreqhw_kobj, &cpufreq_hwregs_attr.attr);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to create sysfs entry\n");
|
||||
kobject_put(cpufreqhw_kobj);
|
||||
}
|
||||
|
||||
if (!debugfs_create_file("print_cpufreq_debug_regs", 0444,
|
||||
hw_regs->debugfs_base, NULL, &cpufreq_debug_register_fops))
|
||||
goto debugfs_fail;
|
||||
|
||||
return 0;
|
||||
|
||||
debugfs_fail:
|
||||
dev_err(&pdev->dev, "Failed to create debugfs entry so cleaning up\n");
|
||||
debugfs_remove_recursive(hw_regs->debugfs_base);
|
||||
return -ENODEV;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int qcom_cpufreq_hw_debug_probe(struct platform_device *pdev)
|
||||
|
|
@ -206,7 +202,8 @@ static int qcom_cpufreq_hw_debug_probe(struct platform_device *pdev)
|
|||
|
||||
static int qcom_cpufreq_hw_debug_remove(struct platform_device *pdev)
|
||||
{
|
||||
debugfs_remove_recursive(hw_regs->debugfs_base);
|
||||
sysfs_remove_file(kernel_kobj, &cpufreq_hwregs_attr.attr);
|
||||
kobject_put(cpufreqhw_kobj);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue