diff options
author | Adeel Raza <araza@nvidia.com> | 2013-10-16 11:56:12 -0700 |
---|---|---|
committer | Tom Cherry <tcherry@nvidia.com> | 2014-01-21 20:27:38 -0800 |
commit | 6197431b4dc4eab79e8a829f047a1c3d2d62347d (patch) | |
tree | 846873f4050e3e097c13b14f6797bc2bfca6a580 /drivers/cpuidle | |
parent | 18ececa6445ca31f3ea43bf1986cb5b15f34dd03 (diff) |
cpuidle: denver: add pmstate debugfs interface
Add denver cpuidle pmstate debugfs interface. This interface can be
extended in the future with more functionality if required.
Change-Id: I0c96b6080b4ce806fd5e27dbf6f3e4bd30644451
Signed-off-by: Adeel Raza <araza@nvidia.com>
Reviewed-on: http://git-master/r/346709
Reviewed-by: Alexander Van Brunt <avanbrunt@nvidia.com>
Tested-by: Alexander Van Brunt <avanbrunt@nvidia.com>
Diffstat (limited to 'drivers/cpuidle')
-rw-r--r-- | drivers/cpuidle/cpuidle-denver.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/drivers/cpuidle/cpuidle-denver.c b/drivers/cpuidle/cpuidle-denver.c index 95adbdca46c6..9091390bb400 100644 --- a/drivers/cpuidle/cpuidle-denver.c +++ b/drivers/cpuidle/cpuidle-denver.c @@ -23,20 +23,18 @@ #include <linux/slab.h> #include <linux/module.h> #include <linux/of_platform.h> +#include <linux/debugfs.h> void tegra_pd_in_idle(bool enable) {} -static int pmstate_map[CPUIDLE_STATE_MAX] = { -1 }; +static u32 pmstate_map[CPUIDLE_STATE_MAX] = { -1 }; static int denver_enter_c_state( struct cpuidle_device *dev, struct cpuidle_driver *drv, int index) { - uintptr_t pmstate = pmstate_map[index]; - BUG_ON(pmstate < 0); - - asm volatile("msr actlr_el1, %0\n" : : "r" (pmstate)); + asm volatile("msr actlr_el1, %0\n" : : "r" (pmstate_map[index])); asm volatile("wfi\n"); local_irq_enable(); @@ -55,9 +53,19 @@ static int __init denver_power_states_init(void) struct device_node *child; struct cpuidle_state *state; const char *name; + struct dentry *cpuidle_denver_dir; + struct dentry *idle_node; u32 state_count = 0; u32 prop; + cpuidle_denver_dir = debugfs_create_dir("cpuidle_denver", NULL); + if (!cpuidle_denver_dir) { + pr_err("%s: Couldn't create the \"cpuidle_denver\" debugfs " + "node.\n", + __func__); + return -1; + } + of_states = of_find_node_by_name(NULL, "denver_power_states"); if (!of_states) return -ENODEV; @@ -85,6 +93,19 @@ static int __init denver_power_states_init(void) continue; pmstate_map[state_count] = prop; + /* Create a debugfs node for the idle state */ + idle_node = debugfs_create_dir(child->name, + cpuidle_denver_dir); + if (!idle_node) { + return -1; + } + if (!debugfs_create_x32("pmstate", S_IRUGO | S_IWUSR, idle_node, + &pmstate_map[state_count])) { + pr_err("%s: Couldn't create the pmstate debugfs node" + "for %s.\n",__func__, child->name); + return -1; + } + state_count++; } |