summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/tegra3_dvfs.c
diff options
context:
space:
mode:
authorAlex Frid <afrid@nvidia.com>2011-10-19 21:49:40 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:49:45 -0800
commit0d68bbc3997b6ef0540c08d7098b3e3d630b6d67 (patch)
treefecb99878a5dcd9390967ac7e962d17b75ca1f1e /arch/arm/mach-tegra/tegra3_dvfs.c
parentb4af43035e87632657772288609debb7c64b98c1 (diff)
ARM: tegra: dvfs: Update cpu nominal voltage selection
Update cpu nominal voltage selection to accommodate irregular voltage steps in cpu dvfs table (instead of constant 25mV step assumed so far). (cherry picked from commit 3bdc83bebf4ef74c760d075a8ae8ffe6baf8b15a) (cherry picked from commit e2301c1d8e868d4658f768cfacc631c0f78c185b) Change-Id: Ief9298608dd524d7cc7ff4057fc1cffc180e7c82 Reviewed-on: http://git-master/r/62028 Tested-by: Aleksandr Frid <afrid@nvidia.com> Reviewed-by: Krishna Reddy <vdumpa@nvidia.com> Rebase-Id: R91e4948134b5b385dff77c6b8f610ab80cf91c6a
Diffstat (limited to 'arch/arm/mach-tegra/tegra3_dvfs.c')
-rw-r--r--arch/arm/mach-tegra/tegra3_dvfs.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/arch/arm/mach-tegra/tegra3_dvfs.c b/arch/arm/mach-tegra/tegra3_dvfs.c
index dba34003b338..d07195366bf6 100644
--- a/arch/arm/mach-tegra/tegra3_dvfs.c
+++ b/arch/arm/mach-tegra/tegra3_dvfs.c
@@ -361,18 +361,21 @@ static int __init get_cpu_nominal_mv_index(
struct clk *c;
/*
- * Start with nominal level for the chips with this speedo_id. Then,
- * make sure cpu nominal voltage is below core ("solve from cpu to
- * core at nominal").
+ * Find maximum cpu voltage that satisfies cpu_to_core dependency for
+ * nominal core voltage ("solve from cpu to core at nominal"). Clip
+ * result to the nominal cpu level for the chips with this speedo_id.
*/
BUG_ON(speedo_id >= ARRAY_SIZE(cpu_speedo_nominal_millivolts));
- mv = cpu_speedo_nominal_millivolts[speedo_id];
- if (tegra3_dvfs_rail_vdd_core.nominal_millivolts) {
- int core_mv = tegra3_dvfs_rail_vdd_core.nominal_millivolts;
- while ((mv > tegra3_dvfs_rail_vdd_cpu.min_millivolts) &&
- (tegra3_get_core_floor_mv(mv) > core_mv))
- mv -= 25;
+ mv = tegra3_dvfs_rail_vdd_core.nominal_millivolts;
+ for (i = 0; i < MAX_DVFS_FREQS; i++) {
+ if ((cpu_millivolts[i] == 0) ||
+ tegra3_get_core_floor_mv(cpu_millivolts[i]) > mv)
+ break;
}
+ BUG_ON(i == 0);
+ mv = cpu_millivolts[i - 1];
+ BUG_ON(mv < tegra3_dvfs_rail_vdd_cpu.min_millivolts);
+ mv = min(mv, cpu_speedo_nominal_millivolts[speedo_id]);
/*
* Find matching cpu dvfs entry, and use it to determine index to the