Message ID | e93c74a19ebf6d7ee687ef8b71b3150a96527f7c.1502861444.git.viresh.kumar@linaro.org (mailing list archive) |
---|---|
State | Mainlined |
Delegated to: | Rafael Wysocki |
Headers | show |
On Wed, Aug 16, 2017 at 1:37 PM, Viresh Kumar <viresh.kumar@linaro.org> wrote: > 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> Does this mean "cpufreq: dt: Add support for some new Allwinner SoCs", or any other patch adding new SoCs to the list, isn't needed anymore? ChenYu
On 16-08-17, 16:49, Chen-Yu Tsai wrote: > On Wed, Aug 16, 2017 at 1:37 PM, Viresh Kumar <viresh.kumar@linaro.org> wrote: > > 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> > > Does this mean "cpufreq: dt: Add support for some new Allwinner SoCs", > or any other patch adding new SoCs to the list, isn't needed anymore? For SoCs using OPP-v2, yeah, we don't need any more patches in future.
On Wed, Aug 16, 2017 at 11:07:27AM +0530, Viresh Kumar wrote: > 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> I have exercised this on the r8a7795 and r8a7795 with the following reverted: * 034def597bb7 ("cpufreq: rcar: Add support for R8A7795 SoC") * bea2ebca6b91 ("cpufreq: dt: Add r8a7796 support to to use generic cpufreq driver") Tested-by: Simon Horman <horms+renesas@verge.net.au>
2017-08-21 22:17 GMT+09:00 Simon Horman <horms@verge.net.au>: > On Wed, Aug 16, 2017 at 11:07:27AM +0530, Viresh Kumar wrote: >> 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> > > I have exercised this on the r8a7795 and r8a7795 with the following > reverted: > > * 034def597bb7 ("cpufreq: rcar: Add support for R8A7795 SoC") > * bea2ebca6b91 ("cpufreq: dt: Add r8a7796 support to to use generic > cpufreq driver") > > Tested-by: Simon Horman <horms+renesas@verge.net.au> Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
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);
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(-)