diff options
author | Diwakar Tundlam <dtundlam@nvidia.com> | 2012-11-06 13:19:25 -0800 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-11-19 17:27:00 -0800 |
commit | b15119fcc3a0258541ac2f40ad87da438d031f55 (patch) | |
tree | da5268c7a4af37010021f4ab6f70af12f8375474 /arch/arm/mach-tegra/edp.c | |
parent | 82c2aaff2c19475a2a5095924e37027e03f04e93 (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.c | 22 |
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; |