diff options
author | Alex Frid <afrid@nvidia.com> | 2011-04-19 23:38:46 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:42:32 -0800 |
commit | ab3a31fc1c2fdea90c0be47f40b603675103bc96 (patch) | |
tree | 5e5b052a67866a460dd303f14e5b27ede7649b29 /arch/arm/mach-tegra/cpu-tegra3.c | |
parent | df2009abf96414d23278f5342296d645b43a9fde (diff) |
ARM: tegra: power: Update Tegra3 CPU auto-hotplug
- taking CPU core off-line: selected CPU with minimum load
- switching from ULP to G CPU mode: set CPU clock to cpufreq
target rate after the mode switch is completed
Original-Change-Id: I9bf4d0f4b48c262cf678c603aac02043dd602674
Reviewed-on: http://git-master/r/28420
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
Original-Change-Id: I5a19be79dd8f8fe788637870a22cd34dcfea150e
Rebase-Id: Re264ec676c5c2103f7738c9eab5f4e11a4344975
Diffstat (limited to 'arch/arm/mach-tegra/cpu-tegra3.c')
-rw-r--r-- | arch/arm/mach-tegra/cpu-tegra3.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/cpu-tegra3.c b/arch/arm/mach-tegra/cpu-tegra3.c index 16b3d0b2fd65..88adea4fd792 100644 --- a/arch/arm/mach-tegra/cpu-tegra3.c +++ b/arch/arm/mach-tegra/cpu-tegra3.c @@ -190,7 +190,7 @@ static void tegra_auto_hotplug_work_func(struct work_struct *work) case TEGRA_HP_IDLE: break; case TEGRA_HP_DOWN: - cpu = cpumask_next(0, cpu_online_mask); + cpu = tegra_get_slowest_cpu_n(); if (cpu < nr_cpu_ids) { up = false; queue_delayed_work( @@ -210,6 +210,8 @@ static void tegra_auto_hotplug_work_func(struct work_struct *work) if(!clk_set_parent(cpu_clk, cpu_g_clk)) { hp_stats_update(CONFIG_NR_CPUS, false); hp_stats_update(0, true); + /* catch-up with governor target speed */ + tegra_cpu_cap_highest_speed(NULL); } queue_delayed_work( hotplug_wq, &hotplug_work, up2gn_delay); |