Re: [PATCH] cpufreq: dbx500: Manage cooling device from cpufreq driver

2017-03-15 Thread Linus Walleij
On Tue, Mar 14, 2017 at 6:18 AM, Viresh Kumar  wrote:

> The best place to register the CPU cooling device is from the cpufreq
> driver as we would know if all the resources are already available or
> not. That's what is done for the cpufreq-dt.c driver as well.
>
> The cpu-cooling driver for dbx500 platform was just (un)registering
> with the thermal framework and that can be handled easily by the cpufreq
> driver as well and in proper sequence as well.
>
> Get rid of the cooling driver and its its users and manage everything
> from the cpufreq driver instead.
>
> Signed-off-by: Viresh Kumar 
> ---
> Only compile tested.

Works fine. Nice cleanup, thanks!
Tested-by: Linus Walleij 

Yours,
Linus Walleij


Re: [PATCH] cpufreq: dbx500: Manage cooling device from cpufreq driver

2017-03-15 Thread Linus Walleij
On Tue, Mar 14, 2017 at 6:18 AM, Viresh Kumar  wrote:

> The best place to register the CPU cooling device is from the cpufreq
> driver as we would know if all the resources are already available or
> not. That's what is done for the cpufreq-dt.c driver as well.
>
> The cpu-cooling driver for dbx500 platform was just (un)registering
> with the thermal framework and that can be handled easily by the cpufreq
> driver as well and in proper sequence as well.
>
> Get rid of the cooling driver and its its users and manage everything
> from the cpufreq driver instead.
>
> Signed-off-by: Viresh Kumar 
> ---
> Only compile tested.

Works fine. Nice cleanup, thanks!
Tested-by: Linus Walleij 

Yours,
Linus Walleij


[PATCH] cpufreq: dbx500: Manage cooling device from cpufreq driver

2017-03-13 Thread Viresh Kumar
The best place to register the CPU cooling device is from the cpufreq
driver as we would know if all the resources are already available or
not. That's what is done for the cpufreq-dt.c driver as well.

The cpu-cooling driver for dbx500 platform was just (un)registering
with the thermal framework and that can be handled easily by the cpufreq
driver as well and in proper sequence as well.

Get rid of the cooling driver and its its users and manage everything
from the cpufreq driver instead.

Signed-off-by: Viresh Kumar 
---
Only compile tested.

 arch/arm/boot/dts/ste-dbx5x0.dtsi|   5 --
 drivers/cpufreq/dbx500-cpufreq.c |  20 ++
 drivers/thermal/Kconfig  |  12 
 drivers/thermal/Makefile |   1 -
 drivers/thermal/db8500_cpufreq_cooling.c | 105 ---
 5 files changed, 20 insertions(+), 123 deletions(-)
 delete mode 100644 drivers/thermal/db8500_cpufreq_cooling.c

diff --git a/arch/arm/boot/dts/ste-dbx5x0.dtsi 
b/arch/arm/boot/dts/ste-dbx5x0.dtsi
index 82d8c4771293..9eea52013914 100644
--- a/arch/arm/boot/dts/ste-dbx5x0.dtsi
+++ b/arch/arm/boot/dts/ste-dbx5x0.dtsi
@@ -1170,11 +1170,6 @@
status = "disabled";
};
 
-   cpufreq-cooling {
-   compatible = "stericsson,db8500-cpufreq-cooling";
-   status = "disabled";
-   };
-
mcde@a035 {
compatible = "stericsson,mcde";
reg = <0xa035 0x1000>, /* MCDE */
diff --git a/drivers/cpufreq/dbx500-cpufreq.c b/drivers/cpufreq/dbx500-cpufreq.c
index 5c3ec1dd4921..3575b82210ba 100644
--- a/drivers/cpufreq/dbx500-cpufreq.c
+++ b/drivers/cpufreq/dbx500-cpufreq.c
@@ -11,6 +11,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -18,6 +19,7 @@
 
 static struct cpufreq_frequency_table *freq_table;
 static struct clk *armss_clk;
+static struct thermal_cooling_device *cdev;
 
 static int dbx500_cpufreq_target(struct cpufreq_policy *policy,
unsigned int index)
@@ -32,6 +34,22 @@ static int dbx500_cpufreq_init(struct cpufreq_policy *policy)
return cpufreq_generic_init(policy, freq_table, 20 * 1000);
 }
 
+static int dbx500_cpufreq_exit(struct cpufreq_policy *policy)
+{
+   if (!IS_ERR(cdev))
+   cpufreq_cooling_unregister(cdev);
+   return 0;
+}
+
+static void dbx500_cpufreq_ready(struct cpufreq_policy *policy)
+{
+   cdev = cpufreq_cooling_register(policy->cpus);
+   if (IS_ERR(cdev))
+   pr_err("Failed to register cooling device %ld\n", 
PTR_ERR(cdev));
+   else
+   pr_info("Cooling device registered: %s\n", cdev->type);
+}
+
 static struct cpufreq_driver dbx500_cpufreq_driver = {
.flags  = CPUFREQ_STICKY | CPUFREQ_CONST_LOOPS |
CPUFREQ_NEED_INITIAL_FREQ_CHECK,
@@ -39,6 +57,8 @@ static struct cpufreq_driver dbx500_cpufreq_driver = {
.target_index = dbx500_cpufreq_target,
.get= cpufreq_generic_get,
.init   = dbx500_cpufreq_init,
+   .exit  = dbx500_cpufreq_exit,
+   .ready  = dbx500_cpufreq_ready,
.name   = "DBX500",
.attr   = cpufreq_generic_attr,
 };
diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index 776b34396144..0a16cf4bed39 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -291,18 +291,6 @@ config ARMADA_THERMAL
  Enable this option if you want to have support for thermal management
  controller present in Armada 370 and Armada XP SoC.
 
-config DB8500_CPUFREQ_COOLING
-   tristate "DB8500 cpufreq cooling"
-   depends on ARCH_U8500 || COMPILE_TEST
-   depends on HAS_IOMEM
-   depends on CPU_THERMAL
-   default y
-   help
- Adds DB8500 cpufreq cooling devices, and these cooling devices can be
- bound to thermal zone trip points. When a trip point reached, the
- bound cpufreq cooling device turns active to set CPU frequency low to
- cool down the CPU.
-
 config INTEL_POWERCLAMP
tristate "Intel PowerClamp idle injection driver"
depends on THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index 7adae2029355..c2372f10dae5 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -41,7 +41,6 @@ obj-$(CONFIG_TANGO_THERMAL)   += tango_thermal.o
 obj-$(CONFIG_IMX_THERMAL)  += imx_thermal.o
 obj-$(CONFIG_MAX77620_THERMAL) += max77620_thermal.o
 obj-$(CONFIG_QORIQ_THERMAL)+= qoriq_thermal.o
-obj-$(CONFIG_DB8500_CPUFREQ_COOLING)   += db8500_cpufreq_cooling.o
 obj-$(CONFIG_INTEL_POWERCLAMP) += intel_powerclamp.o
 obj-$(CONFIG_X86_PKG_TEMP_THERMAL) += x86_pkg_temp_thermal.o
 obj-$(CONFIG_INTEL_SOC_DTS_IOSF_CORE)  += intel_soc_dts_iosf.o
diff --git a/drivers/thermal/db8500_cpufreq_cooling.c 
b/drivers/thermal/db8500_cpufreq_cooling.c

[PATCH] cpufreq: dbx500: Manage cooling device from cpufreq driver

2017-03-13 Thread Viresh Kumar
The best place to register the CPU cooling device is from the cpufreq
driver as we would know if all the resources are already available or
not. That's what is done for the cpufreq-dt.c driver as well.

The cpu-cooling driver for dbx500 platform was just (un)registering
with the thermal framework and that can be handled easily by the cpufreq
driver as well and in proper sequence as well.

Get rid of the cooling driver and its its users and manage everything
from the cpufreq driver instead.

Signed-off-by: Viresh Kumar 
---
Only compile tested.

 arch/arm/boot/dts/ste-dbx5x0.dtsi|   5 --
 drivers/cpufreq/dbx500-cpufreq.c |  20 ++
 drivers/thermal/Kconfig  |  12 
 drivers/thermal/Makefile |   1 -
 drivers/thermal/db8500_cpufreq_cooling.c | 105 ---
 5 files changed, 20 insertions(+), 123 deletions(-)
 delete mode 100644 drivers/thermal/db8500_cpufreq_cooling.c

diff --git a/arch/arm/boot/dts/ste-dbx5x0.dtsi 
b/arch/arm/boot/dts/ste-dbx5x0.dtsi
index 82d8c4771293..9eea52013914 100644
--- a/arch/arm/boot/dts/ste-dbx5x0.dtsi
+++ b/arch/arm/boot/dts/ste-dbx5x0.dtsi
@@ -1170,11 +1170,6 @@
status = "disabled";
};
 
-   cpufreq-cooling {
-   compatible = "stericsson,db8500-cpufreq-cooling";
-   status = "disabled";
-   };
-
mcde@a035 {
compatible = "stericsson,mcde";
reg = <0xa035 0x1000>, /* MCDE */
diff --git a/drivers/cpufreq/dbx500-cpufreq.c b/drivers/cpufreq/dbx500-cpufreq.c
index 5c3ec1dd4921..3575b82210ba 100644
--- a/drivers/cpufreq/dbx500-cpufreq.c
+++ b/drivers/cpufreq/dbx500-cpufreq.c
@@ -11,6 +11,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -18,6 +19,7 @@
 
 static struct cpufreq_frequency_table *freq_table;
 static struct clk *armss_clk;
+static struct thermal_cooling_device *cdev;
 
 static int dbx500_cpufreq_target(struct cpufreq_policy *policy,
unsigned int index)
@@ -32,6 +34,22 @@ static int dbx500_cpufreq_init(struct cpufreq_policy *policy)
return cpufreq_generic_init(policy, freq_table, 20 * 1000);
 }
 
+static int dbx500_cpufreq_exit(struct cpufreq_policy *policy)
+{
+   if (!IS_ERR(cdev))
+   cpufreq_cooling_unregister(cdev);
+   return 0;
+}
+
+static void dbx500_cpufreq_ready(struct cpufreq_policy *policy)
+{
+   cdev = cpufreq_cooling_register(policy->cpus);
+   if (IS_ERR(cdev))
+   pr_err("Failed to register cooling device %ld\n", 
PTR_ERR(cdev));
+   else
+   pr_info("Cooling device registered: %s\n", cdev->type);
+}
+
 static struct cpufreq_driver dbx500_cpufreq_driver = {
.flags  = CPUFREQ_STICKY | CPUFREQ_CONST_LOOPS |
CPUFREQ_NEED_INITIAL_FREQ_CHECK,
@@ -39,6 +57,8 @@ static struct cpufreq_driver dbx500_cpufreq_driver = {
.target_index = dbx500_cpufreq_target,
.get= cpufreq_generic_get,
.init   = dbx500_cpufreq_init,
+   .exit  = dbx500_cpufreq_exit,
+   .ready  = dbx500_cpufreq_ready,
.name   = "DBX500",
.attr   = cpufreq_generic_attr,
 };
diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index 776b34396144..0a16cf4bed39 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -291,18 +291,6 @@ config ARMADA_THERMAL
  Enable this option if you want to have support for thermal management
  controller present in Armada 370 and Armada XP SoC.
 
-config DB8500_CPUFREQ_COOLING
-   tristate "DB8500 cpufreq cooling"
-   depends on ARCH_U8500 || COMPILE_TEST
-   depends on HAS_IOMEM
-   depends on CPU_THERMAL
-   default y
-   help
- Adds DB8500 cpufreq cooling devices, and these cooling devices can be
- bound to thermal zone trip points. When a trip point reached, the
- bound cpufreq cooling device turns active to set CPU frequency low to
- cool down the CPU.
-
 config INTEL_POWERCLAMP
tristate "Intel PowerClamp idle injection driver"
depends on THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index 7adae2029355..c2372f10dae5 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -41,7 +41,6 @@ obj-$(CONFIG_TANGO_THERMAL)   += tango_thermal.o
 obj-$(CONFIG_IMX_THERMAL)  += imx_thermal.o
 obj-$(CONFIG_MAX77620_THERMAL) += max77620_thermal.o
 obj-$(CONFIG_QORIQ_THERMAL)+= qoriq_thermal.o
-obj-$(CONFIG_DB8500_CPUFREQ_COOLING)   += db8500_cpufreq_cooling.o
 obj-$(CONFIG_INTEL_POWERCLAMP) += intel_powerclamp.o
 obj-$(CONFIG_X86_PKG_TEMP_THERMAL) += x86_pkg_temp_thermal.o
 obj-$(CONFIG_INTEL_SOC_DTS_IOSF_CORE)  += intel_soc_dts_iosf.o
diff --git a/drivers/thermal/db8500_cpufreq_cooling.c 
b/drivers/thermal/db8500_cpufreq_cooling.c
deleted file mode 100644
index