Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1712692

[PATCH 1/2] cpufreq: dt-platdev: Automatically create cpufreq device with OPP v2

From Viresh Kumar <viresh.kumar@linaro.org>
Newsgroups linux.kernel
Subject [PATCH 1/2] cpufreq: dt-platdev: Automatically create cpufreq device with OPP v2
Date 2017-08-16 07:40 +0200
Message-ID <ueZdD-30Q-7@gated-at.bofh.it> (permalink)
Organization linux.* mail to news gateway

Show all headers | View raw


The initial idea of creating the cpufreq-dt-platdev.c file was to keep a
list of platforms that use the "operating-points" (V1) bindings and
create cpufreq device for them only, as we weren't sure which platforms
would want the device to get created automatically as some had their own
cpufreq drivers as well, or wanted to initialize cpufreq after doing
some stuff from platform code.

But that wasn't the case with platforms using "operating-points-v2"
property. We wanted the device to get created automatically without the
need of adding them to the whitelist. Though, we will still have some
exceptions where we don't want to create the device automatically.

Rename the earlier platform list as *whitelist* and create a new
*blacklist* as well.

The cpufreq-dt device will get created if:
- The platform is there in the whitelist OR
- The platform has "operating-points-v2" property in CPU0's DT node and
  isn't part of the blacklist .

Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/cpufreq/cpufreq-dt-platdev.c | 45 ++++++++++++++++++++++++++++++++----
 1 file changed, 40 insertions(+), 5 deletions(-)

diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c
index bcee384b3251..061b468512a2 100644
--- a/drivers/cpufreq/cpufreq-dt-platdev.c
+++ b/drivers/cpufreq/cpufreq-dt-platdev.c
@@ -9,11 +9,16 @@
 
 #include <linux/err.h>
 #include <linux/of.h>
+#include <linux/of_device.h>
 #include <linux/platform_device.h>
 
 #include "cpufreq-dt.h"
 
-static const struct of_device_id machines[] __initconst = {
+/*
+ * Machines for which the cpufreq device is *always* created, mostly used for
+ * platforms using "operating-points" (V1) property.
+ */
+static const struct of_device_id whitelist[] __initconst = {
 	{ .compatible = "allwinner,sun4i-a10", },
 	{ .compatible = "allwinner,sun5i-a10s", },
 	{ .compatible = "allwinner,sun5i-a13", },
@@ -101,21 +106,51 @@ static const struct of_device_id machines[] __initconst = {
 	{ }
 };
 
+/*
+ * Machines for which the cpufreq device is *not* created, mostly used for
+ * platforms using "operating-points-v2" property.
+ */
+static const struct of_device_id blacklist[] __initconst = {
+	{ }
+};
+
+static bool __init cpu0_node_has_opp_v2_prop(void)
+{
+	struct device_node *np = of_cpu_device_node_get(0);
+	bool ret = false;
+
+	if (of_get_property(np, "operating-points-v2", NULL))
+		ret = true;
+
+	of_node_put(np);
+	return ret;
+}
+
 static int __init cpufreq_dt_platdev_init(void)
 {
 	struct device_node *np = of_find_node_by_path("/");
 	const struct of_device_id *match;
+	const void *data = NULL;
 
 	if (!np)
 		return -ENODEV;
 
-	match = of_match_node(machines, np);
+	match = of_match_node(whitelist, np);
+	if (match) {
+		data = match->data;
+		goto create_pdev;
+	}
+
+	if (cpu0_node_has_opp_v2_prop() && !of_match_node(blacklist, np))
+		goto create_pdev;
+
 	of_node_put(np);
-	if (!match)
-		return -ENODEV;
+	return -ENODEV;
 
+create_pdev:
+	of_node_put(np);
 	return PTR_ERR_OR_ZERO(platform_device_register_data(NULL, "cpufreq-dt",
-			       -1, match->data,
+			       -1, data,
 			       sizeof(struct cpufreq_dt_platform_data)));
 }
 device_initcall(cpufreq_dt_platdev_init);
-- 
2.7.4

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCH 1/2] cpufreq: dt-platdev: Automatically create cpufreq device with OPP v2 Viresh Kumar <viresh.kumar@linaro.org> - 2017-08-16 07:40 +0200
  [PATCH 2/2] cpufreq: dt-platdev: Drop few entries from whitelist Viresh Kumar <viresh.kumar@linaro.org> - 2017-08-16 07:40 +0200
    Re: [PATCH 2/2] cpufreq: dt-platdev: Drop few entries from whitelist Geert Uytterhoeven <geert@linux-m68k.org> - 2017-08-16 09:00 +0200
      Re: [PATCH 2/2] cpufreq: dt-platdev: Drop few entries from whitelist Simon Horman <horms@verge.net.au> - 2017-08-17 10:00 +0200
        Re: [PATCH 2/2] cpufreq: dt-platdev: Drop few entries from whitelist Viresh Kumar <viresh.kumar@linaro.org> - 2017-08-17 10:50 +0200
        Re: [PATCH 2/2] cpufreq: dt-platdev: Drop few entries from whitelist Simon Horman <horms@verge.net.au> - 2017-08-21 15:30 +0200
    Re: [PATCH 2/2] cpufreq: dt-platdev: Drop few entries from whitelist Chen-Yu Tsai <wens@csie.org> - 2017-08-16 11:00 +0200
      Re: [PATCH 2/2] cpufreq: dt-platdev: Drop few entries from whitelist Viresh Kumar <viresh.kumar@linaro.org> - 2017-08-16 13:30 +0200
        Re: [PATCH 2/2] cpufreq: dt-platdev: Drop few entries from whitelist Chen-Yu Tsai <wens@csie.org> - 2017-08-17 19:10 +0200
    Re: [PATCH 2/2] cpufreq: dt-platdev: Drop few entries from whitelist Masahiro Yamada <yamada.masahiro@socionext.com> - 2017-08-23 05:40 +0200
  Re: [PATCH 1/2] cpufreq: dt-platdev: Automatically create cpufreq  device with OPP v2 Chen-Yu Tsai <wens@csie.org> - 2017-08-16 10:50 +0200
    Re: [PATCH 1/2] cpufreq: dt-platdev: Automatically create cpufreq  device with OPP v2 Viresh Kumar <viresh.kumar@linaro.org> - 2017-08-16 13:30 +0200
  Re: [1/2] cpufreq: dt-platdev: Automatically create cpufreq device  with OPP v2 Simon Horman <horms@verge.net.au> - 2017-08-21 15:20 +0200
    Re: [1/2] cpufreq: dt-platdev: Automatically create cpufreq device  with OPP v2 Masahiro Yamada <yamada.masahiro@socionext.com> - 2017-08-23 05:50 +0200

csiph-web