diff mbox

cpufreq: arm_big_little: remove compile-time dependency on BL_SWITCHER

Message ID 1431343473-9915-1-git-send-email-sudeep.holla@arm.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Sudeep Holla May 11, 2015, 11:24 a.m. UTC
With the addition of switcher code, there's compile-time dependency on
BL_SWITCHER to get arm_big_little driver compiling on ARM64. Since ARM64
will never add support for BL_SWITCHER, it's better to remove the
dependency so that the driver can be reused on ARM64 platforms.

This patch adds stubs to remove BL_SWITCHER dependency in the driver.

Cc: Viresh Kumar <viresh.kumar@linaro.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
 drivers/cpufreq/Kconfig.arm      |  2 +-
 drivers/cpufreq/arm_big_little.c | 27 ++++++++++++++++++++++-----
 2 files changed, 23 insertions(+), 6 deletions(-)

--
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Viresh Kumar May 12, 2015, 7:27 a.m. UTC | #1
On 11-05-15, 12:24, Sudeep Holla wrote:
> With the addition of switcher code, there's compile-time dependency on
> BL_SWITCHER to get arm_big_little driver compiling on ARM64. Since ARM64

The Kconfig dependency isn't on the switcher but big.LITTLE, which
isn't defined for arm64. So, we need a bit of clarity here.

> @@ -562,8 +580,7 @@ int bL_cpufreq_register(struct cpufreq_arm_bL_ops *ops)
> 
>  	arm_bL_ops = ops;
> 
> -	ret = bL_switcher_get_enabled();
> -	set_switching_enabled(ret);
> +	set_switching_enabled(bL_switcher_get_enabled());

This change wasn't required.
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sudeep Holla May 12, 2015, 8:03 a.m. UTC | #2
On 12/05/15 08:27, Viresh Kumar wrote:
> On 11-05-15, 12:24, Sudeep Holla wrote:
>> With the addition of switcher code, there's compile-time dependency on
>> BL_SWITCHER to get arm_big_little driver compiling on ARM64. Since ARM64
>
> The Kconfig dependency isn't on the switcher but big.LITTLE, which
> isn't defined for arm64. So, we need a bit of clarity here.
>

Right, we update accordingly.

>> @@ -562,8 +580,7 @@ int bL_cpufreq_register(struct cpufreq_arm_bL_ops *ops)
>>
>>   	arm_bL_ops = ops;
>>
>> -	ret = bL_switcher_get_enabled();
>> -	set_switching_enabled(ret);
>> +	set_switching_enabled(bL_switcher_get_enabled());
>
> This change wasn't required.
>
Right, I thought ret is not used anywhere else and might produce 
warnings, which is wrong. I will revert it back.

Regards,
Sudeep
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sudeep Holla May 12, 2015, 9:36 a.m. UTC | #3
On 12/05/15 09:03, Sudeep Holla wrote:
>
>
> On 12/05/15 08:27, Viresh Kumar wrote:
>> On 11-05-15, 12:24, Sudeep Holla wrote:
>>> With the addition of switcher code, there's compile-time dependency on
>>> BL_SWITCHER to get arm_big_little driver compiling on ARM64. Since ARM64
>>
>> The Kconfig dependency isn't on the switcher but big.LITTLE, which
>> isn't defined for arm64. So, we need a bit of clarity here.
>>
>
> Right, we update accordingly.
>
>>> @@ -562,8 +580,7 @@ int bL_cpufreq_register(struct cpufreq_arm_bL_ops *ops)
>>>
>>>    	arm_bL_ops = ops;
>>>
>>> -	ret = bL_switcher_get_enabled();
>>> -	set_switching_enabled(ret);
>>> +	set_switching_enabled(bL_switcher_get_enabled());
>>
>> This change wasn't required.
>>
> Right, I thought ret is not used anywhere else and might produce
> warnings, which is wrong. I will revert it back.
>
Sorry replied too early, I have to retain it, or change it in
bL_cpufreq_unregister as the stub produces warning in one of the 2 call
sites since the return value is used in one place while discarded at
another.

Regards,
Sudeep

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm
index d38f1ce95087..39520a61ea6f 100644
--- a/drivers/cpufreq/Kconfig.arm
+++ b/drivers/cpufreq/Kconfig.arm
@@ -5,7 +5,7 @@ 
 # big LITTLE core layer and glue drivers
 config ARM_BIG_LITTLE_CPUFREQ
 	tristate "Generic ARM big LITTLE CPUfreq driver"
-	depends on ARM && BIG_LITTLE && ARM_CPU_TOPOLOGY && HAVE_CLK
+	depends on (ARM_CPU_TOPOLOGY || ARM64) && HAVE_CLK
 	select PM_OPP
 	help
 	  This enables the Generic CPUfreq driver for ARM big.LITTLE platforms.
diff --git a/drivers/cpufreq/arm_big_little.c b/drivers/cpufreq/arm_big_little.c
index e4d75ca9f3b0..f1e42f8ce0fc 100644
--- a/drivers/cpufreq/arm_big_little.c
+++ b/drivers/cpufreq/arm_big_little.c
@@ -31,7 +31,6 @@ 
 #include <linux/slab.h>
 #include <linux/topology.h>
 #include <linux/types.h>
-#include <asm/bL_switcher.h>

 #include "arm_big_little.h"

@@ -41,12 +40,16 @@ 
 #define MAX_CLUSTERS	2

 #ifdef CONFIG_BL_SWITCHER
+#include <asm/bL_switcher.h>
 static bool bL_switching_enabled;
 #define is_bL_switching_enabled()	bL_switching_enabled
 #define set_switching_enabled(x)	(bL_switching_enabled = (x))
 #else
 #define is_bL_switching_enabled()	false
 #define set_switching_enabled(x)	do { } while (0)
+#define bL_switch_request(...)		do { } while (0)
+#define bL_switcher_put_enabled()	do { } while (0)
+#define bL_switcher_get_enabled()	do { } while (0)
 #endif

 #define ACTUAL_FREQ(cluster, freq)  ((cluster == A7_CLUSTER) ? freq << 1 : freq)
@@ -513,6 +516,7 @@  static struct cpufreq_driver bL_cpufreq_driver = {
 	.attr			= cpufreq_generic_attr,
 };

+#ifdef CONFIG_BL_SWITCHER
 static int bL_cpufreq_switcher_notifier(struct notifier_block *nfb,
 					unsigned long action, void *_arg)
 {
@@ -545,6 +549,20 @@  static struct notifier_block bL_switcher_notifier = {
 	.notifier_call = bL_cpufreq_switcher_notifier,
 };

+static int __bLs_register_notifier(void)
+{
+	return bL_switcher_register_notifier(&bL_switcher_notifier);
+}
+
+static int __bLs_unregister_notifier(void)
+{
+	return bL_switcher_unregister_notifier(&bL_switcher_notifier);
+}
+#else
+static int __bLs_register_notifier(void) { return 0; }
+static int __bLs_unregister_notifier(void) { return 0; }
+#endif
+
 int bL_cpufreq_register(struct cpufreq_arm_bL_ops *ops)
 {
 	int ret, i;
@@ -562,8 +580,7 @@  int bL_cpufreq_register(struct cpufreq_arm_bL_ops *ops)

 	arm_bL_ops = ops;

-	ret = bL_switcher_get_enabled();
-	set_switching_enabled(ret);
+	set_switching_enabled(bL_switcher_get_enabled());

 	for (i = 0; i < MAX_CLUSTERS; i++)
 		mutex_init(&cluster_lock[i]);
@@ -574,7 +591,7 @@  int bL_cpufreq_register(struct cpufreq_arm_bL_ops *ops)
 				__func__, ops->name, ret);
 		arm_bL_ops = NULL;
 	} else {
-		ret = bL_switcher_register_notifier(&bL_switcher_notifier);
+		ret = __bLs_register_notifier();
 		if (ret) {
 			cpufreq_unregister_driver(&bL_cpufreq_driver);
 			arm_bL_ops = NULL;
@@ -598,7 +615,7 @@  void bL_cpufreq_unregister(struct cpufreq_arm_bL_ops *ops)
 	}

 	bL_switcher_get_enabled();
-	bL_switcher_unregister_notifier(&bL_switcher_notifier);
+	__bLs_unregister_notifier();
 	cpufreq_unregister_driver(&bL_cpufreq_driver);
 	bL_switcher_put_enabled();
 	pr_info("%s: Un-registered platform driver: %s\n", __func__,