summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/edp.c
diff options
context:
space:
mode:
authorDiwakar Tundlam <dtundlam@nvidia.com>2012-11-06 13:19:25 -0800
committerSimone Willett <swillett@nvidia.com>2012-11-19 17:27:00 -0800
commitb15119fcc3a0258541ac2f40ad87da438d031f55 (patch)
treeda5268c7a4af37010021f4ab6f70af12f8375474 /arch/arm/mach-tegra/edp.c
parent82c2aaff2c19475a2a5095924e37027e03f04e93 (diff)
ARM: tegra: dvfs: Recompute EDP tables after dfll mode changes
Also recompute on clock-late-init for EDP table with correct dfll mode Bug 1167145 Change-Id: Icff6c1c4b8fb7d861951abb0b4b6edbfeec32dba Signed-off-by: Diwakar Tundlam <dtundlam@nvidia.com> Reviewed-on: http://git-master/r/161773 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/edp.c')
-rw-r--r--arch/arm/mach-tegra/edp.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/arch/arm/mach-tegra/edp.c b/arch/arm/mach-tegra/edp.c
index 95d9521c6498..8478e82f96b1 100644
--- a/arch/arm/mach-tegra/edp.c
+++ b/arch/arm/mach-tegra/edp.c
@@ -482,7 +482,7 @@ int edp_find_speedo_idx(int cpu_speedo_id, unsigned int *cpu_speedo_idx)
return -EINVAL;
}
-int init_cpu_edp_limits_calculated(int cpu_speedo_id)
+static int init_cpu_edp_limits_calculated(void)
{
unsigned int temp_idx, n_cores_idx;
unsigned int cpu_g_minf, cpu_g_maxf;
@@ -492,6 +492,7 @@ int init_cpu_edp_limits_calculated(int cpu_speedo_id)
struct tegra_edp_cpu_leakage_params *params;
int ret;
struct clk *clk_cpu_g = tegra_get_clock_by_name("cpu_g");
+ int cpu_speedo_id = tegra_cpu_speedo_id();
/* Determine all inputs to EDP formula */
iddq_mA = tegra_get_cpu_iddq_value();
@@ -553,12 +554,13 @@ int init_cpu_edp_limits_calculated(int cpu_speedo_id)
return 0;
}
-int __init init_cpu_edp_limits_lookup(int cpu_speedo_id)
+static int __init init_cpu_edp_limits_lookup(void)
{
int i, j;
struct tegra_edp_limits *e;
struct tegra_edp_vdd_cpu_entry *t;
int tsize;
+ int cpu_speedo_id = tegra_cpu_speedo_id();
t = (struct tegra_edp_vdd_cpu_entry *)tegra_edp_vdd_cpu_map;
tsize = sizeof(tegra_edp_vdd_cpu_map)
@@ -601,14 +603,18 @@ int __init init_cpu_edp_limits_lookup(int cpu_speedo_id)
return 0;
}
+void tegra_recalculate_cpu_edp_limits(void)
+{
+ if (tegra_chip_id == TEGRA11X)
+ init_cpu_edp_limits_calculated();
+}
+
/*
* Specify regulator current in mA, e.g. 5000mA
* Use 0 for default
*/
void __init tegra_init_cpu_edp_limits(unsigned int regulator_mA)
{
- int cpu_speedo_id = tegra_cpu_speedo_id();
-
if (!regulator_mA) {
edp_limits = edp_default_limits;
edp_limits_size = ARRAY_SIZE(edp_default_limits);
@@ -618,11 +624,11 @@ void __init tegra_init_cpu_edp_limits(unsigned int regulator_mA)
switch (tegra_chip_id) {
case TEGRA30:
- if (init_cpu_edp_limits_lookup(cpu_speedo_id) == 0)
+ if (init_cpu_edp_limits_lookup() == 0)
return;
break;
case TEGRA11X:
- if (init_cpu_edp_limits_calculated(cpu_speedo_id) == 0)
+ if (init_cpu_edp_limits_calculated() == 0)
return;
break;
case TEGRA20:
@@ -782,7 +788,6 @@ static int edp_reg_override_write(struct file *file,
char buf[32], *end;
unsigned int edp_reg_override_mA_temp;
unsigned int edp_reg_override_mA_prev = edp_reg_override_mA;
- int cpu_speedo_id;
if (sizeof(buf) <= count)
goto override_err;
@@ -806,8 +811,7 @@ static int edp_reg_override_write(struct file *file,
return count;
edp_reg_override_mA = edp_reg_override_mA_temp;
- cpu_speedo_id = tegra_cpu_speedo_id();
- if (init_cpu_edp_limits_calculated(cpu_speedo_id)) {
+ if (init_cpu_edp_limits_calculated()) {
/* Revert to previous override value if new value fails */
edp_reg_override_mA = edp_reg_override_mA_prev;
goto override_err;