ARM: tegra: Ignore PmQos when disabled
Sai Charan Gurrappadi [Fri, 10 Aug 2012 22:13:00 +0000 (15:13 -0700)]
The cpu hotplug drivers should only bother updating state or switching
to the G cluster if the driver is not disabled

Bug 1032096

Change-Id: Ice938b094bbf48fef47afa3915b1a48362fb256d
Signed-off-by: Sai Charan Gurrappadi <sgurrappadi@nvidia.com>
Reviewed-on: http://git-master/r/122859
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Aleksandr Frid <afrid@nvidia.com>
Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com>

arch/arm/mach-tegra/cpu-tegra3.c
arch/arm/mach-tegra/cpuquiet.c

index ec63622..c0d21bf 100644 (file)
@@ -360,7 +360,7 @@ static int min_cpus_notify(struct notifier_block *nb, unsigned long n, void *p)
 {
        mutex_lock(tegra3_cpu_lock);
 
-       if ((n >= 1) && is_lp_cluster()) {
+       if ((n >= 1) && is_lp_cluster() && !no_lp) {
                /* make sure cpu rate is within g-mode range before switching */
                unsigned int speed = max((unsigned long)tegra_getspeed(0),
                        clk_get_min_rate(cpu_g_clk) / 1000);
index ed197b1..87aebfe 100644 (file)
@@ -188,6 +188,9 @@ static void min_max_constraints_workfunc(struct work_struct *work)
        int max_cpus = pm_qos_request(PM_QOS_MAX_ONLINE_CPUS) ? : 4;
        int min_cpus = pm_qos_request(PM_QOS_MIN_ONLINE_CPUS);
 
+       if (cpq_state == TEGRA_CPQ_DISABLED)
+               return;
+
        if (is_lp_cluster())
                return;
 
@@ -219,10 +222,14 @@ static int min_cpus_notify(struct notifier_block *nb, unsigned long n, void *p)
 {
        bool g_cluster = false;
 
+       if (cpq_state == TEGRA_CPQ_DISABLED)
+               return NOTIFY_OK;
+
        mutex_lock(tegra3_cpu_lock);
 
        if ((n >= 1) && is_lp_cluster()) {
-               /* make sure cpu rate is within g-mode range before switching */
+               /* make sure cpu rate is within g-mode
+                * range before switching */
                unsigned long speed = max((unsigned long)tegra_getspeed(0),
                                        clk_get_min_rate(cpu_g_clk) / 1000);
                tegra_update_cpu_speed(speed);
@@ -244,6 +251,9 @@ static int min_cpus_notify(struct notifier_block *nb, unsigned long n, void *p)
 
 static int max_cpus_notify(struct notifier_block *nb, unsigned long n, void *p)
 {
+       if (cpq_state == TEGRA_CPQ_DISABLED)
+               return NOTIFY_OK;
+
        if (n < num_online_cpus())
                schedule_work(&minmax_work);