* [PATCH 0/3] cpufreq: dt: Create platform device from generic code @ 2016-03-24 6:40 Viresh Kumar 2016-03-24 6:40 ` [PATCH 1/3] cpufreq: dt: Include types.h from cpufreq-dt.h Viresh Kumar ` (3 more replies) 0 siblings, 4 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-24 6:40 UTC (permalink / raw) To: Rafael Wysocki, arnd.bergmann Cc: linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, Viresh Kumar Multiple platforms are using the generic cpufreq-dt driver now, and all of them are required to create a platform device with name "cpufreq-dt", in order to get the cpufreq-dt probed. Many of them do it from platform code, others have special drivers just to do that. It would be more sensible to do this at a generic place, where all such platform can mark their entries. The first patch fixes an issue that becomes visible only after the second patch is applied. The second one creates a new driver to create platform-device based on current platform and the last one converts exynos platform to use this common infrastructure. I will migrate rest of the platforms after this is accepted as the right way ahead. @Arnd: Does this look sane? We can fix the arm64 (no platform code) issue with this now. Viresh Kumar (3): cpufreq: dt: Include types.h from cpufreq-dt.h cpufreq: dt: Add generic platform-device creation support cpufreq: exynos: Use generic platdev driver arch/arm/mach-exynos/exynos.c | 25 ----------------- drivers/cpufreq/Kconfig | 11 ++++++++ drivers/cpufreq/Makefile | 1 + drivers/cpufreq/cpufreq-dt-platdev.c | 53 ++++++++++++++++++++++++++++++++++++ include/linux/cpufreq-dt.h | 2 ++ 5 files changed, 67 insertions(+), 25 deletions(-) create mode 100644 drivers/cpufreq/cpufreq-dt-platdev.c -- 2.7.1.410.g6faf27b ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/3] cpufreq: dt: Include types.h from cpufreq-dt.h 2016-03-24 6:40 [PATCH 0/3] cpufreq: dt: Create platform device from generic code Viresh Kumar @ 2016-03-24 6:40 ` Viresh Kumar 2016-03-24 6:40 ` [PATCH 2/3] cpufreq: dt: Add generic platform-device creation support Viresh Kumar ` (2 subsequent siblings) 3 siblings, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-24 6:40 UTC (permalink / raw) To: Rafael Wysocki, arnd.bergmann Cc: linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, Viresh Kumar, linux-kernel cpufreq-dt.h uses 'bool' data type but doesn't include types.h. It works fine for now as the files that include cpufreq-dt.h, also include types.h directly or indirectly. But, when a file includes cpufreq-dt.h without including types.h, we get a build error. Avoid such errors by including types.h in cpufreq-dt itself. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> --- include/linux/cpufreq-dt.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/linux/cpufreq-dt.h b/include/linux/cpufreq-dt.h index 0414009e2c30..a87335a1660c 100644 --- a/include/linux/cpufreq-dt.h +++ b/include/linux/cpufreq-dt.h @@ -10,6 +10,8 @@ #ifndef __CPUFREQ_DT_H__ #define __CPUFREQ_DT_H__ +#include <linux/types.h> + struct cpufreq_dt_platform_data { /* * True when each CPU has its own clock to control its -- 2.7.1.410.g6faf27b ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 2/3] cpufreq: dt: Add generic platform-device creation support 2016-03-24 6:40 [PATCH 0/3] cpufreq: dt: Create platform device from generic code Viresh Kumar 2016-03-24 6:40 ` [PATCH 1/3] cpufreq: dt: Include types.h from cpufreq-dt.h Viresh Kumar @ 2016-03-24 6:40 ` Viresh Kumar 2016-03-29 4:03 ` Krzysztof Kozlowski 2016-03-24 6:40 ` Viresh Kumar 2016-03-24 13:36 ` [PATCH 0/3] cpufreq: dt: Create platform device from generic code Arnd Bergmann 3 siblings, 1 reply; 25+ messages in thread From: Viresh Kumar @ 2016-03-24 6:40 UTC (permalink / raw) To: Rafael Wysocki, arnd.bergmann, Viresh Kumar Cc: linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, linux-kernel Multiple platforms are using the generic cpufreq-dt driver now, and all of them are required to create a platform device with name "cpufreq-dt", in order to get the cpufreq-dt probed. Many of them do it from platform code, others have special drivers just to do that. It would be more sensible to do this at a generic place, where all such platform can mark their entries. This patch adds a separate file to get this device created. Currently the compat list of platforms that we support is empty, and will be filled in as and when we move platforms to use it. It always compiles as part of the kernel and so doesn't need a module-exit operation. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> --- drivers/cpufreq/Kconfig | 11 +++++++++ drivers/cpufreq/Makefile | 1 + drivers/cpufreq/cpufreq-dt-platdev.c | 48 ++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 drivers/cpufreq/cpufreq-dt-platdev.c diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig index a7f45853c103..08573d54105b 100644 --- a/drivers/cpufreq/Kconfig +++ b/drivers/cpufreq/Kconfig @@ -191,6 +191,7 @@ config CPUFREQ_DT depends on HAVE_CLK && OF # if CPU_THERMAL is on and THERMAL=m, CPUFREQ_DT cannot be =y: depends on !CPU_THERMAL || THERMAL + select CPUFREQ_DT_PLATDEV select PM_OPP help This adds a generic DT based cpufreq driver for frequency management. @@ -199,6 +200,16 @@ config CPUFREQ_DT If in doubt, say N. +config CPUFREQ_DT_PLATDEV + bool + depends on CPUFREQ_DT + help + This adds a generic DT based cpufreq platdev driver for frequency + management. This creates a 'cpufreq-dt' platform device, on the + supported platforms. + + If in doubt, say N. + if X86 source "drivers/cpufreq/Kconfig.x86" endif diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile index 9e63fb1b09f8..b9224fdb8322 100644 --- a/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile @@ -13,6 +13,7 @@ obj-$(CONFIG_CPU_FREQ_GOV_CONSERVATIVE) += cpufreq_conservative.o obj-$(CONFIG_CPU_FREQ_GOV_COMMON) += cpufreq_governor.o obj-$(CONFIG_CPUFREQ_DT) += cpufreq-dt.o +obj-$(CONFIG_CPUFREQ_DT_PLATDEV) += cpufreq-dt-platdev.o ################################################################################## # x86 drivers. diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c new file mode 100644 index 000000000000..18b81724ca0b --- /dev/null +++ b/drivers/cpufreq/cpufreq-dt-platdev.c @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2016 Linaro. + * Viresh Kumar <viresh.kumar@linaro.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include <linux/cpufreq-dt.h> +#include <linux/err.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/platform_device.h> + +struct cpufreq_dt_compat { + const char *compatible; + const void *data; + size_t size; +}; + +static struct cpufreq_dt_compat compat[] = { +}; + +static int __init cpufreq_dt_platdev_init(void) +{ + struct platform_device *pdev; + int i; + + for (i = 0; i < ARRAY_SIZE(compat); i++) { + if (!of_machine_is_compatible(compat[i].compatible)) + continue; + + pdev = platform_device_register_data(NULL, "cpufreq-dt", -1, + compat[i].data, + compat[i].size); + + return PTR_ERR_OR_ZERO(pdev); + } + + return -ENODEV; +} +module_init(cpufreq_dt_platdev_init); + +MODULE_ALIAS("cpufreq-dt-platdev"); +MODULE_AUTHOR("Viresh Kumar <viresh.kumar@linaro.org>"); +MODULE_DESCRIPTION("cpufreq-dt platdev driver"); +MODULE_LICENSE("GPL"); -- 2.7.1.410.g6faf27b ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 2/3] cpufreq: dt: Add generic platform-device creation support 2016-03-24 6:40 ` [PATCH 2/3] cpufreq: dt: Add generic platform-device creation support Viresh Kumar @ 2016-03-29 4:03 ` Krzysztof Kozlowski 0 siblings, 0 replies; 25+ messages in thread From: Krzysztof Kozlowski @ 2016-03-29 4:03 UTC (permalink / raw) To: Viresh Kumar, Rafael Wysocki, arnd.bergmann Cc: linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, linux-kernel On 24.03.2016 15:40, Viresh Kumar wrote: > Multiple platforms are using the generic cpufreq-dt driver now, and all > of them are required to create a platform device with name "cpufreq-dt", > in order to get the cpufreq-dt probed. > > Many of them do it from platform code, others have special drivers just > to do that. > > It would be more sensible to do this at a generic place, where all such > platform can mark their entries. > > This patch adds a separate file to get this device created. Currently > the compat list of platforms that we support is empty, and will be > filled in as and when we move platforms to use it. > > It always compiles as part of the kernel and so doesn't need a > module-exit operation. > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > drivers/cpufreq/Kconfig | 11 +++++++++ > drivers/cpufreq/Makefile | 1 + > drivers/cpufreq/cpufreq-dt-platdev.c | 48 ++++++++++++++++++++++++++++++++++++ > 3 files changed, 60 insertions(+) > create mode 100644 drivers/cpufreq/cpufreq-dt-platdev.c Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 3/3] cpufreq: exynos: Use generic platdev driver 2016-03-24 6:40 [PATCH 0/3] cpufreq: dt: Create platform device from generic code Viresh Kumar @ 2016-03-24 6:40 ` Viresh Kumar 2016-03-24 6:40 ` [PATCH 2/3] cpufreq: dt: Add generic platform-device creation support Viresh Kumar ` (2 subsequent siblings) 3 siblings, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-24 6:40 UTC (permalink / raw) To: Rafael Wysocki, arnd.bergmann, Kukjin Kim, Krzysztof Kozlowski, Viresh Kumar Cc: linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, linux-arm-kernel, linux-samsung-soc, linux-kernel The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform device now, reuse that and remove similar code from platform code. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> --- arch/arm/mach-exynos/exynos.c | 25 ------------------------- drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ 2 files changed, 5 insertions(+), 25 deletions(-) diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index 1c47aee31e9c..757c6012989c 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c @@ -224,29 +224,6 @@ static void __init exynos_init_irq(void) exynos_map_pmu(); } -static const struct of_device_id exynos_cpufreq_matches[] = { - { .compatible = "samsung,exynos3250", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4210", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4212", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4412", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos5250", .data = "cpufreq-dt" }, - { /* sentinel */ } -}; - -static void __init exynos_cpufreq_init(void) -{ - struct device_node *root = of_find_node_by_path("/"); - const struct of_device_id *match; - - match = of_match_node(exynos_cpufreq_matches, root); - if (!match) { - platform_device_register_simple("exynos-cpufreq", -1, NULL, 0); - return; - } - - platform_device_register_simple(match->data, -1, NULL, 0); -} - static void __init exynos_dt_machine_init(void) { /* @@ -269,8 +246,6 @@ static void __init exynos_dt_machine_init(void) of_machine_is_compatible("samsung,exynos5250")) platform_device_register(&exynos_cpuidle); - exynos_cpufreq_init(); - of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); } diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c index 18b81724ca0b..d7e62528ce06 100644 --- a/drivers/cpufreq/cpufreq-dt-platdev.c +++ b/drivers/cpufreq/cpufreq-dt-platdev.c @@ -20,6 +20,11 @@ struct cpufreq_dt_compat { }; static struct cpufreq_dt_compat compat[] = { + { "samsung,exynos3250", NULL, 0 }, + { "samsung,exynos4210", NULL, 0 }, + { "samsung,exynos4212", NULL, 0 }, + { "samsung,exynos4412", NULL, 0 }, + { "samsung,exynos5250", NULL, 0 }, }; static int __init cpufreq_dt_platdev_init(void) -- 2.7.1.410.g6faf27b ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 3/3] cpufreq: exynos: Use generic platdev driver @ 2016-03-24 6:40 ` Viresh Kumar 0 siblings, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-24 6:40 UTC (permalink / raw) To: linux-arm-kernel The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform device now, reuse that and remove similar code from platform code. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> --- arch/arm/mach-exynos/exynos.c | 25 ------------------------- drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ 2 files changed, 5 insertions(+), 25 deletions(-) diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index 1c47aee31e9c..757c6012989c 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c @@ -224,29 +224,6 @@ static void __init exynos_init_irq(void) exynos_map_pmu(); } -static const struct of_device_id exynos_cpufreq_matches[] = { - { .compatible = "samsung,exynos3250", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4210", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4212", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4412", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos5250", .data = "cpufreq-dt" }, - { /* sentinel */ } -}; - -static void __init exynos_cpufreq_init(void) -{ - struct device_node *root = of_find_node_by_path("/"); - const struct of_device_id *match; - - match = of_match_node(exynos_cpufreq_matches, root); - if (!match) { - platform_device_register_simple("exynos-cpufreq", -1, NULL, 0); - return; - } - - platform_device_register_simple(match->data, -1, NULL, 0); -} - static void __init exynos_dt_machine_init(void) { /* @@ -269,8 +246,6 @@ static void __init exynos_dt_machine_init(void) of_machine_is_compatible("samsung,exynos5250")) platform_device_register(&exynos_cpuidle); - exynos_cpufreq_init(); - of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); } diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c index 18b81724ca0b..d7e62528ce06 100644 --- a/drivers/cpufreq/cpufreq-dt-platdev.c +++ b/drivers/cpufreq/cpufreq-dt-platdev.c @@ -20,6 +20,11 @@ struct cpufreq_dt_compat { }; static struct cpufreq_dt_compat compat[] = { + { "samsung,exynos3250", NULL, 0 }, + { "samsung,exynos4210", NULL, 0 }, + { "samsung,exynos4212", NULL, 0 }, + { "samsung,exynos4412", NULL, 0 }, + { "samsung,exynos5250", NULL, 0 }, }; static int __init cpufreq_dt_platdev_init(void) -- 2.7.1.410.g6faf27b ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 3/3] cpufreq: exynos: Use generic platdev driver 2016-03-24 6:40 ` Viresh Kumar @ 2016-03-29 2:35 ` Krzysztof Kozlowski -1 siblings, 0 replies; 25+ messages in thread From: Krzysztof Kozlowski @ 2016-03-29 2:35 UTC (permalink / raw) To: Viresh Kumar, Rafael Wysocki, arnd.bergmann, Kukjin Kim Cc: linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, linux-arm-kernel, linux-samsung-soc, linux-kernel On 24.03.2016 15:40, Viresh Kumar wrote: > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > device now, reuse that and remove similar code from platform code. > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > arch/arm/mach-exynos/exynos.c | 25 ------------------------- > drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ > 2 files changed, 5 insertions(+), 25 deletions(-) Hi, I got only 3rd patch (and no cover letter). I don't know what is the background or what is your plan for this. I suppose you want to merge it through cupfreq tree? Anyway could you cc-me on everything (or at least cover letter)? Best regards, Krzysztof ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 3/3] cpufreq: exynos: Use generic platdev driver @ 2016-03-29 2:35 ` Krzysztof Kozlowski 0 siblings, 0 replies; 25+ messages in thread From: Krzysztof Kozlowski @ 2016-03-29 2:35 UTC (permalink / raw) To: linux-arm-kernel On 24.03.2016 15:40, Viresh Kumar wrote: > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > device now, reuse that and remove similar code from platform code. > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > arch/arm/mach-exynos/exynos.c | 25 ------------------------- > drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ > 2 files changed, 5 insertions(+), 25 deletions(-) Hi, I got only 3rd patch (and no cover letter). I don't know what is the background or what is your plan for this. I suppose you want to merge it through cupfreq tree? Anyway could you cc-me on everything (or at least cover letter)? Best regards, Krzysztof ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/3] cpufreq: exynos: Use generic platdev driver 2016-03-29 2:35 ` Krzysztof Kozlowski @ 2016-03-29 2:38 ` Viresh Kumar -1 siblings, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-29 2:38 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Rafael Wysocki, arnd.bergmann, Kukjin Kim, linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, linux-arm-kernel, linux-samsung-soc, linux-kernel On 29-03-16, 11:35, Krzysztof Kozlowski wrote: > On 24.03.2016 15:40, Viresh Kumar wrote: > > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > > device now, reuse that and remove similar code from platform code. > > > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > > --- > > arch/arm/mach-exynos/exynos.c | 25 ------------------------- > > drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ > > 2 files changed, 5 insertions(+), 25 deletions(-) > > Hi, > > I got only 3rd patch (and no cover letter). I don't know what is the > background or what is your plan for this. I suppose you want to merge it > through cupfreq tree? Anyway could you cc-me on everything (or at least > cover letter)? I bounced (mutt is great) all the other mails to you just now. -- viresh ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 3/3] cpufreq: exynos: Use generic platdev driver @ 2016-03-29 2:38 ` Viresh Kumar 0 siblings, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-29 2:38 UTC (permalink / raw) To: linux-arm-kernel On 29-03-16, 11:35, Krzysztof Kozlowski wrote: > On 24.03.2016 15:40, Viresh Kumar wrote: > > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > > device now, reuse that and remove similar code from platform code. > > > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > > --- > > arch/arm/mach-exynos/exynos.c | 25 ------------------------- > > drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ > > 2 files changed, 5 insertions(+), 25 deletions(-) > > Hi, > > I got only 3rd patch (and no cover letter). I don't know what is the > background or what is your plan for this. I suppose you want to merge it > through cupfreq tree? Anyway could you cc-me on everything (or at least > cover letter)? I bounced (mutt is great) all the other mails to you just now. -- viresh ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/3] cpufreq: exynos: Use generic platdev driver 2016-03-24 6:40 ` Viresh Kumar @ 2016-03-29 4:10 ` Krzysztof Kozlowski -1 siblings, 0 replies; 25+ messages in thread From: Krzysztof Kozlowski @ 2016-03-29 4:10 UTC (permalink / raw) To: Viresh Kumar, Rafael Wysocki, arnd.bergmann, Kukjin Kim Cc: linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, linux-arm-kernel, linux-samsung-soc, linux-kernel On 24.03.2016 15:40, Viresh Kumar wrote: > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > device now, reuse that and remove similar code from platform code. > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > arch/arm/mach-exynos/exynos.c | 25 ------------------------- > drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ > 2 files changed, 5 insertions(+), 25 deletions(-) Looks fine to me... except that it is a little bit outdated. Please rebase on v4.6-rc1 because Bartlomiej added support for cpufreq @Exynos542x. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 3/3] cpufreq: exynos: Use generic platdev driver @ 2016-03-29 4:10 ` Krzysztof Kozlowski 0 siblings, 0 replies; 25+ messages in thread From: Krzysztof Kozlowski @ 2016-03-29 4:10 UTC (permalink / raw) To: linux-arm-kernel On 24.03.2016 15:40, Viresh Kumar wrote: > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > device now, reuse that and remove similar code from platform code. > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > arch/arm/mach-exynos/exynos.c | 25 ------------------------- > drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ > 2 files changed, 5 insertions(+), 25 deletions(-) Looks fine to me... except that it is a little bit outdated. Please rebase on v4.6-rc1 because Bartlomiej added support for cpufreq @Exynos542x. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/3] cpufreq: exynos: Use generic platdev driver 2016-03-29 4:10 ` Krzysztof Kozlowski @ 2016-03-29 4:18 ` Viresh Kumar -1 siblings, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-29 4:18 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Rafael Wysocki, arnd.bergmann, Kukjin Kim, linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, linux-arm-kernel, linux-samsung-soc, linux-kernel On 29-03-16, 13:10, Krzysztof Kozlowski wrote: > On 24.03.2016 15:40, Viresh Kumar wrote: > > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > > device now, reuse that and remove similar code from platform code. > > > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > > --- > > arch/arm/mach-exynos/exynos.c | 25 ------------------------- > > drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ > > 2 files changed, 5 insertions(+), 25 deletions(-) > > Looks fine to me... except that it is a little bit outdated. Please > rebase on v4.6-rc1 because Bartlomiej added support for cpufreq @Exynos542x. Yeah, I know. I already have the updated version. -- viresh ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 3/3] cpufreq: exynos: Use generic platdev driver @ 2016-03-29 4:18 ` Viresh Kumar 0 siblings, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-29 4:18 UTC (permalink / raw) To: linux-arm-kernel On 29-03-16, 13:10, Krzysztof Kozlowski wrote: > On 24.03.2016 15:40, Viresh Kumar wrote: > > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > > device now, reuse that and remove similar code from platform code. > > > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > > --- > > arch/arm/mach-exynos/exynos.c | 25 ------------------------- > > drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ > > 2 files changed, 5 insertions(+), 25 deletions(-) > > Looks fine to me... except that it is a little bit outdated. Please > rebase on v4.6-rc1 because Bartlomiej added support for cpufreq @Exynos542x. Yeah, I know. I already have the updated version. -- viresh ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/3] cpufreq: exynos: Use generic platdev driver 2016-03-29 4:18 ` Viresh Kumar @ 2016-03-29 4:19 ` Viresh Kumar -1 siblings, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-29 4:19 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Rafael Wysocki, arnd.bergmann, Kukjin Kim, linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, linux-arm-kernel, linux-samsung-soc, linux-kernel On 29-03-16, 09:48, Viresh Kumar wrote: > On 29-03-16, 13:10, Krzysztof Kozlowski wrote: > > On 24.03.2016 15:40, Viresh Kumar wrote: > > > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > > > device now, reuse that and remove similar code from platform code. > > > > > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > > > --- > > > arch/arm/mach-exynos/exynos.c | 25 ------------------------- > > > drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ > > > 2 files changed, 5 insertions(+), 25 deletions(-) > > > > Looks fine to me... except that it is a little bit outdated. Please > > rebase on v4.6-rc1 because Bartlomiej added support for cpufreq @Exynos542x. > > Yeah, I know. I already have the updated version. Here it is: From: Viresh Kumar <viresh.kumar@linaro.org> Date: Thu, 24 Mar 2016 12:04:10 +0530 Subject: [PATCH] cpufreq: exynos: Use generic platdev driver The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform device now, reuse that and remove similar code from platform code. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> --- arch/arm/mach-exynos/exynos.c | 29 ----------------------------- drivers/cpufreq/cpufreq-dt-platdev.c | 9 +++++++++ 2 files changed, 9 insertions(+), 29 deletions(-) diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index bbf51a46f772..4d3b056fd786 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c @@ -213,33 +213,6 @@ static void __init exynos_init_irq(void) exynos_map_pmu(); } -static const struct of_device_id exynos_cpufreq_matches[] = { - { .compatible = "samsung,exynos3250", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4210", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4212", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4412", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos5250", .data = "cpufreq-dt" }, -#ifndef CONFIG_BL_SWITCHER - { .compatible = "samsung,exynos5420", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos5800", .data = "cpufreq-dt" }, -#endif - { /* sentinel */ } -}; - -static void __init exynos_cpufreq_init(void) -{ - struct device_node *root = of_find_node_by_path("/"); - const struct of_device_id *match; - - match = of_match_node(exynos_cpufreq_matches, root); - if (!match) { - platform_device_register_simple("exynos-cpufreq", -1, NULL, 0); - return; - } - - platform_device_register_simple(match->data, -1, NULL, 0); -} - static void __init exynos_dt_machine_init(void) { /* @@ -262,8 +235,6 @@ static void __init exynos_dt_machine_init(void) of_machine_is_compatible("samsung,exynos5250")) platform_device_register(&exynos_cpuidle); - exynos_cpufreq_init(); - of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); } diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c index 18b81724ca0b..f85d1ab5d621 100644 --- a/drivers/cpufreq/cpufreq-dt-platdev.c +++ b/drivers/cpufreq/cpufreq-dt-platdev.c @@ -20,6 +20,15 @@ struct cpufreq_dt_compat { }; static struct cpufreq_dt_compat compat[] = { + { "samsung,exynos3250", NULL, 0 }, + { "samsung,exynos4210", NULL, 0 }, + { "samsung,exynos4212", NULL, 0 }, + { "samsung,exynos4412", NULL, 0 }, + { "samsung,exynos5250", NULL, 0 }, +#ifndef CONFIG_BL_SWITCHER + { "samsung,exynos5420", NULL, 0 }, + { "samsung,exynos5800", NULL, 0 }, +#endif }; static int __init cpufreq_dt_platdev_init(void) -- viresh ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 3/3] cpufreq: exynos: Use generic platdev driver @ 2016-03-29 4:19 ` Viresh Kumar 0 siblings, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-29 4:19 UTC (permalink / raw) To: linux-arm-kernel On 29-03-16, 09:48, Viresh Kumar wrote: > On 29-03-16, 13:10, Krzysztof Kozlowski wrote: > > On 24.03.2016 15:40, Viresh Kumar wrote: > > > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > > > device now, reuse that and remove similar code from platform code. > > > > > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > > > --- > > > arch/arm/mach-exynos/exynos.c | 25 ------------------------- > > > drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ > > > 2 files changed, 5 insertions(+), 25 deletions(-) > > > > Looks fine to me... except that it is a little bit outdated. Please > > rebase on v4.6-rc1 because Bartlomiej added support for cpufreq @Exynos542x. > > Yeah, I know. I already have the updated version. Here it is: From: Viresh Kumar <viresh.kumar@linaro.org> Date: Thu, 24 Mar 2016 12:04:10 +0530 Subject: [PATCH] cpufreq: exynos: Use generic platdev driver The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform device now, reuse that and remove similar code from platform code. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> --- arch/arm/mach-exynos/exynos.c | 29 ----------------------------- drivers/cpufreq/cpufreq-dt-platdev.c | 9 +++++++++ 2 files changed, 9 insertions(+), 29 deletions(-) diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index bbf51a46f772..4d3b056fd786 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c @@ -213,33 +213,6 @@ static void __init exynos_init_irq(void) exynos_map_pmu(); } -static const struct of_device_id exynos_cpufreq_matches[] = { - { .compatible = "samsung,exynos3250", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4210", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4212", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos4412", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos5250", .data = "cpufreq-dt" }, -#ifndef CONFIG_BL_SWITCHER - { .compatible = "samsung,exynos5420", .data = "cpufreq-dt" }, - { .compatible = "samsung,exynos5800", .data = "cpufreq-dt" }, -#endif - { /* sentinel */ } -}; - -static void __init exynos_cpufreq_init(void) -{ - struct device_node *root = of_find_node_by_path("/"); - const struct of_device_id *match; - - match = of_match_node(exynos_cpufreq_matches, root); - if (!match) { - platform_device_register_simple("exynos-cpufreq", -1, NULL, 0); - return; - } - - platform_device_register_simple(match->data, -1, NULL, 0); -} - static void __init exynos_dt_machine_init(void) { /* @@ -262,8 +235,6 @@ static void __init exynos_dt_machine_init(void) of_machine_is_compatible("samsung,exynos5250")) platform_device_register(&exynos_cpuidle); - exynos_cpufreq_init(); - of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); } diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c index 18b81724ca0b..f85d1ab5d621 100644 --- a/drivers/cpufreq/cpufreq-dt-platdev.c +++ b/drivers/cpufreq/cpufreq-dt-platdev.c @@ -20,6 +20,15 @@ struct cpufreq_dt_compat { }; static struct cpufreq_dt_compat compat[] = { + { "samsung,exynos3250", NULL, 0 }, + { "samsung,exynos4210", NULL, 0 }, + { "samsung,exynos4212", NULL, 0 }, + { "samsung,exynos4412", NULL, 0 }, + { "samsung,exynos5250", NULL, 0 }, +#ifndef CONFIG_BL_SWITCHER + { "samsung,exynos5420", NULL, 0 }, + { "samsung,exynos5800", NULL, 0 }, +#endif }; static int __init cpufreq_dt_platdev_init(void) -- viresh ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 3/3] cpufreq: exynos: Use generic platdev driver 2016-03-29 4:19 ` Viresh Kumar @ 2016-03-29 4:39 ` Krzysztof Kozlowski -1 siblings, 0 replies; 25+ messages in thread From: Krzysztof Kozlowski @ 2016-03-29 4:39 UTC (permalink / raw) To: Viresh Kumar Cc: Rafael Wysocki, arnd.bergmann, Kukjin Kim, linaro-kernel, linux-pm, kgene.kim, xf, heiko, mmcclint, linux-arm-kernel, linux-samsung-soc, linux-kernel On 29.03.2016 13:19, Viresh Kumar wrote: > On 29-03-16, 09:48, Viresh Kumar wrote: >> On 29-03-16, 13:10, Krzysztof Kozlowski wrote: >>> On 24.03.2016 15:40, Viresh Kumar wrote: >>>> The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform >>>> device now, reuse that and remove similar code from platform code. >>>> >>>> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> >>>> --- >>>> arch/arm/mach-exynos/exynos.c | 25 ------------------------- >>>> drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ >>>> 2 files changed, 5 insertions(+), 25 deletions(-) >>> >>> Looks fine to me... except that it is a little bit outdated. Please >>> rebase on v4.6-rc1 because Bartlomiej added support for cpufreq @Exynos542x. >> >> Yeah, I know. I already have the updated version. > > Here it is: > > From: Viresh Kumar <viresh.kumar@linaro.org> > Date: Thu, 24 Mar 2016 12:04:10 +0530 > Subject: [PATCH] cpufreq: exynos: Use generic platdev driver > > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > device now, reuse that and remove similar code from platform code. > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > arch/arm/mach-exynos/exynos.c | 29 ----------------------------- > drivers/cpufreq/cpufreq-dt-platdev.c | 9 +++++++++ > 2 files changed, 9 insertions(+), 29 deletions(-) Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 3/3] cpufreq: exynos: Use generic platdev driver @ 2016-03-29 4:39 ` Krzysztof Kozlowski 0 siblings, 0 replies; 25+ messages in thread From: Krzysztof Kozlowski @ 2016-03-29 4:39 UTC (permalink / raw) To: linux-arm-kernel On 29.03.2016 13:19, Viresh Kumar wrote: > On 29-03-16, 09:48, Viresh Kumar wrote: >> On 29-03-16, 13:10, Krzysztof Kozlowski wrote: >>> On 24.03.2016 15:40, Viresh Kumar wrote: >>>> The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform >>>> device now, reuse that and remove similar code from platform code. >>>> >>>> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> >>>> --- >>>> arch/arm/mach-exynos/exynos.c | 25 ------------------------- >>>> drivers/cpufreq/cpufreq-dt-platdev.c | 5 +++++ >>>> 2 files changed, 5 insertions(+), 25 deletions(-) >>> >>> Looks fine to me... except that it is a little bit outdated. Please >>> rebase on v4.6-rc1 because Bartlomiej added support for cpufreq @Exynos542x. >> >> Yeah, I know. I already have the updated version. > > Here it is: > > From: Viresh Kumar <viresh.kumar@linaro.org> > Date: Thu, 24 Mar 2016 12:04:10 +0530 > Subject: [PATCH] cpufreq: exynos: Use generic platdev driver > > The cpufreq-dt-platdev driver supports creation of cpufreq-dt platform > device now, reuse that and remove similar code from platform code. > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > arch/arm/mach-exynos/exynos.c | 29 ----------------------------- > drivers/cpufreq/cpufreq-dt-platdev.c | 9 +++++++++ > 2 files changed, 9 insertions(+), 29 deletions(-) Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/3] cpufreq: dt: Create platform device from generic code 2016-03-24 6:40 [PATCH 0/3] cpufreq: dt: Create platform device from generic code Viresh Kumar ` (2 preceding siblings ...) 2016-03-24 6:40 ` Viresh Kumar @ 2016-03-24 13:36 ` Arnd Bergmann 2016-03-24 14:06 ` Viresh Kumar 3 siblings, 1 reply; 25+ messages in thread From: Arnd Bergmann @ 2016-03-24 13:36 UTC (permalink / raw) To: linaro-kernel Cc: Viresh Kumar, Rafael Wysocki, arnd.bergmann, kgene.kim, heiko, xf, mmcclint, linux-pm On Thursday 24 March 2016 12:10:27 Viresh Kumar wrote: > Multiple platforms are using the generic cpufreq-dt driver now, and all > of them are required to create a platform device with name "cpufreq-dt", > in order to get the cpufreq-dt probed. > > Many of them do it from platform code, others have special drivers just > to do that. > > It would be more sensible to do this at a generic place, where all such > platform can mark their entries. > > The first patch fixes an issue that becomes visible only after the > second patch is applied. The second one creates a new driver to create > platform-device based on current platform and the last one converts > exynos platform to use this common infrastructure. > > I will migrate rest of the platforms after this is accepted as the right > way ahead. > > @Arnd: Does this look sane? We can fix the arm64 (no platform code) > issue with this now. > > Viresh Kumar (3): > cpufreq: dt: Include types.h from cpufreq-dt.h > cpufreq: dt: Add generic platform-device creation support > cpufreq: exynos: Use generic platdev driver > Hi Viresh, Thanks for picking this up again! I've tried implementing something similar when we last discussed it, but didn't get far enough to test it our properly, and I had trouble integrating some of the more complex platforms (omap, imx, sunxi) that have lots of root compatible strings to fit in nicely. I think having a lookup table as in your patch 2 makes sense here, but I still would prefer not having a device at all. See the patch below for how I think that can be avoided. Do you see any problems with that? Another idea I had was to make dt_cpufreq_init() a global function that can simply be called by platforms that pass non-NULL platform data today, avoiding the need for the pdata in a global location. Arnd commit 63a47a8ac1568bb4331a624f3267f8ee8532d211 Author: Arnd Bergmann <arnd@arndb.de> Date: Mon Feb 8 16:51:54 2016 +0100 cpufreq/berlin: move berlin platform device into cpufreq-dt.c It's completely senseless to create a platform device for cpufreq-dt, so this removes the platform and instead adds a minimal check into the cpufreq-dt.c code as the start of a platform whitelist. Signed-off-by: Arnd Bergmann <arnd@arndb.de> diff --git a/arch/arm/mach-berlin/berlin.c b/arch/arm/mach-berlin/berlin.c index 25d73870ccca..ac181c6797ee 100644 --- a/arch/arm/mach-berlin/berlin.c +++ b/arch/arm/mach-berlin/berlin.c @@ -18,11 +18,6 @@ #include <asm/hardware/cache-l2x0.h> #include <asm/mach/arch.h> -static void __init berlin_init_late(void) -{ - platform_device_register_simple("cpufreq-dt", -1, NULL, 0); -} - static const char * const berlin_dt_compat[] = { "marvell,berlin", NULL, @@ -30,7 +25,6 @@ static const char * const berlin_dt_compat[] = { DT_MACHINE_START(BERLIN_DT, "Marvell Berlin") .dt_compat = berlin_dt_compat, - .init_late = berlin_init_late, /* * with DT probing for L2CCs, berlin_init_machine can be removed. * Note: 88DE3005 (Armada 1500-mini) uses pl310 l2cc diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c index f951f911786e..b3817cc86597 100644 --- a/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c @@ -356,7 +356,7 @@ static struct cpufreq_driver dt_cpufreq_driver = { .suspend = cpufreq_generic_suspend, }; -static int dt_cpufreq_probe(struct platform_device *pdev) +static int (void *data) { int ret; @@ -371,15 +371,22 @@ static int dt_cpufreq_probe(struct platform_device *pdev) if (ret) return ret; - dt_cpufreq_driver.driver_data = dev_get_platdata(&pdev->dev); + dt_cpufreq_driver.driver_data = data; ret = cpufreq_register_driver(&dt_cpufreq_driver); if (ret) - dev_err(&pdev->dev, "failed register driver: %d\n", ret); + pr_err("failed register driver: %d\n", ret); return ret; } +/* a minimal fake platform device for platforms that still call + * platform_device_create(). Don't use */ +static int dt_cpufreq_probe(struct platform_device *pdev) +{ + return dt_cpufreq_init(dev_get_platdata(&pdev->dev)); +} + static int dt_cpufreq_remove(struct platform_device *pdev) { cpufreq_unregister_driver(&dt_cpufreq_driver); @@ -393,7 +400,24 @@ static struct platform_driver dt_cpufreq_platdrv = { .probe = dt_cpufreq_probe, .remove = dt_cpufreq_remove, }; -module_platform_driver(dt_cpufreq_platdrv); + +static int __init cpufreq_dt_init(void) +{ + if (of_machine_is_compatible("marvell,berlin")) + return dt_cpufreq_init(NULL); + + return platform_driver_register(&dt_cpufreq_platdrv); +} +module_init(cpufreq_dt_init); + +static void cpufreq_dt_exit(void) +{ + if (dt_cpufreq_platdrv.driver.bus) + platform_driver_unregister(&dt_cpufreq_platdrv); + else + cpufreq_unregister_driver(&dt_cpufreq_driver); +} +module_exit(cpufreq_dt_exit); MODULE_ALIAS("platform:cpufreq-dt"); MODULE_AUTHOR("Viresh Kumar <viresh.kumar@linaro.org>"); ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 0/3] cpufreq: dt: Create platform device from generic code 2016-03-24 13:36 ` [PATCH 0/3] cpufreq: dt: Create platform device from generic code Arnd Bergmann @ 2016-03-24 14:06 ` Viresh Kumar 2016-03-24 14:16 ` Arnd Bergmann 0 siblings, 1 reply; 25+ messages in thread From: Viresh Kumar @ 2016-03-24 14:06 UTC (permalink / raw) To: Arnd Bergmann Cc: linaro-kernel, Rafael Wysocki, arnd.bergmann, kgene.kim, heiko, xf, mmcclint, linux-pm On 24-03-16, 14:36, Arnd Bergmann wrote: > I've tried implementing something similar when we last discussed it, > but didn't get far enough to test it our properly, and I had trouble > integrating some of the more complex platforms (omap, imx, sunxi) > that have lots of root compatible strings to fit in nicely. > > I think having a lookup table as in your patch 2 makes sense here, > but I still would prefer not having a device at all. See the patch We don't have any other option really. The platform-device logic was added to make -EPROBE-DEFER work :) > Another idea I had was to make dt_cpufreq_init() a global function > that can simply be called by platforms that pass non-NULL platform > data today, avoiding the need for the pdata in a global location. I think its high time that we kill platform data if we don't care about old DT compatibility with new kernel for mvebu platform, if it hasn't gone into product already. We can do everything with opp-v2 now, and pdata doesn't do anything special. > diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c > index f951f911786e..b3817cc86597 100644 > --- a/drivers/cpufreq/cpufreq-dt.c > +++ b/drivers/cpufreq/cpufreq-dt.c > @@ -356,7 +356,7 @@ static struct cpufreq_driver dt_cpufreq_driver = { > .suspend = cpufreq_generic_suspend, > }; > > -static int dt_cpufreq_probe(struct platform_device *pdev) > +static int (void *data) dt_cpufreq_init ? :) > { > int ret; > > @@ -371,15 +371,22 @@ static int dt_cpufreq_probe(struct platform_device *pdev) > if (ret) > return ret; > > - dt_cpufreq_driver.driver_data = dev_get_platdata(&pdev->dev); > + dt_cpufreq_driver.driver_data = data; > > ret = cpufreq_register_driver(&dt_cpufreq_driver); > if (ret) > - dev_err(&pdev->dev, "failed register driver: %d\n", ret); > + pr_err("failed register driver: %d\n", ret); > > return ret; > } > > +/* a minimal fake platform device for platforms that still call > + * platform_device_create(). Don't use */ > +static int dt_cpufreq_probe(struct platform_device *pdev) > +{ > + return dt_cpufreq_init(dev_get_platdata(&pdev->dev)); > +} > + > static int dt_cpufreq_remove(struct platform_device *pdev) > { > cpufreq_unregister_driver(&dt_cpufreq_driver); > @@ -393,7 +400,24 @@ static struct platform_driver dt_cpufreq_platdrv = { > .probe = dt_cpufreq_probe, > .remove = dt_cpufreq_remove, > }; > -module_platform_driver(dt_cpufreq_platdrv); > + > +static int __init cpufreq_dt_init(void) > +{ > + if (of_machine_is_compatible("marvell,berlin")) > + return dt_cpufreq_init(NULL); > + > + return platform_driver_register(&dt_cpufreq_platdrv); > +} > +module_init(cpufreq_dt_init); > + > +static void cpufreq_dt_exit(void) > +{ > + if (dt_cpufreq_platdrv.driver.bus) I didn't like this as well :( -- viresh ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/3] cpufreq: dt: Create platform device from generic code 2016-03-24 14:06 ` Viresh Kumar @ 2016-03-24 14:16 ` Arnd Bergmann 2016-03-25 4:41 ` Viresh Kumar 0 siblings, 1 reply; 25+ messages in thread From: Arnd Bergmann @ 2016-03-24 14:16 UTC (permalink / raw) To: Viresh Kumar Cc: linaro-kernel, Rafael Wysocki, arnd.bergmann, kgene.kim, heiko, xf, mmcclint, linux-pm On Thursday 24 March 2016 19:36:00 Viresh Kumar wrote: > On 24-03-16, 14:36, Arnd Bergmann wrote: > > I've tried implementing something similar when we last discussed it, > > but didn't get far enough to test it our properly, and I had trouble > > integrating some of the more complex platforms (omap, imx, sunxi) > > that have lots of root compatible strings to fit in nicely. > > > > I think having a lookup table as in your patch 2 makes sense here, > > but I still would prefer not having a device at all. See the patch > > We don't have any other option really. The platform-device logic was > added to make -EPROBE-DEFER work :) Hmm, can you give an example where this is needed? I assume you are thinking of some clock controller or regulator that gets initialized after the cpufreq driver, right? Are there any that are in loadable modules, rather than just later in the init sequence for built-in drivers? > > Another idea I had was to make dt_cpufreq_init() a global function > > that can simply be called by platforms that pass non-NULL platform > > data today, avoiding the need for the pdata in a global location. > > I think its high time that we kill platform data if we don't care > about old DT compatibility with new kernel for mvebu platform, if it > hasn't gone into product already. We can do everything with opp-v2 > now, and pdata doesn't do anything special. I think we do care about compatibility there, but there are clearly other ways to handle the special case for opp-v1 if we want to. > > diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c > > index f951f911786e..b3817cc86597 100644 > > --- a/drivers/cpufreq/cpufreq-dt.c > > +++ b/drivers/cpufreq/cpufreq-dt.c > > @@ -356,7 +356,7 @@ static struct cpufreq_driver dt_cpufreq_driver = { > > .suspend = cpufreq_generic_suspend, > > }; > > > > -static int dt_cpufreq_probe(struct platform_device *pdev) > > +static int (void *data) > > dt_cpufreq_init ? :) Yes, I must have removed the string from my email when copying the text above. Arnd ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/3] cpufreq: dt: Create platform device from generic code 2016-03-24 14:16 ` Arnd Bergmann @ 2016-03-25 4:41 ` Viresh Kumar 2016-03-28 15:05 ` Viresh Kumar 2016-03-29 13:22 ` Arnd Bergmann 0 siblings, 2 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-25 4:41 UTC (permalink / raw) To: Arnd Bergmann Cc: linaro-kernel, Rafael Wysocki, arnd.bergmann, kgene.kim, heiko, xf, mmcclint, linux-pm On 24-03-16, 15:16, Arnd Bergmann wrote: > Hmm, can you give an example where this is needed? I don't remember them, but I am quite sure that I have seen people asking for that support again and again. > I assume you are > thinking of some clock controller or regulator that gets initialized > after the cpufreq driver, right? Yeah. > Are there any that are in loadable modules, rather than just later > in the init sequence for built-in drivers? Maybe both, don't remember. Sorry. Over that, independent of what the users are doing today, I think its important to support defer probing for anyone that wants to use it. > I think we do care about compatibility there, but there are clearly > other ways to handle the special case for opp-v1 if we want to. Okay, and what are those ? There is only one platform which has used the pdata, mvebu. -- viresh ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/3] cpufreq: dt: Create platform device from generic code 2016-03-25 4:41 ` Viresh Kumar @ 2016-03-28 15:05 ` Viresh Kumar 2016-03-29 13:22 ` Arnd Bergmann 1 sibling, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-28 15:05 UTC (permalink / raw) To: Arnd Bergmann Cc: linaro-kernel, Rafael Wysocki, arnd.bergmann, kgene.kim, heiko, xf, mmcclint, linux-pm Ping !! On 25-03-16, 10:11, Viresh Kumar wrote: > On 24-03-16, 15:16, Arnd Bergmann wrote: > > Hmm, can you give an example where this is needed? > > I don't remember them, but I am quite sure that I have seen people > asking for that support again and again. > > > I assume you are > > thinking of some clock controller or regulator that gets initialized > > after the cpufreq driver, right? > > Yeah. > > > Are there any that are in loadable modules, rather than just later > > in the init sequence for built-in drivers? > > Maybe both, don't remember. Sorry. > > Over that, independent of what the users are doing today, I think its > important to support defer probing for anyone that wants to use it. > > > I think we do care about compatibility there, but there are clearly > > other ways to handle the special case for opp-v1 if we want to. > > Okay, and what are those ? There is only one platform which has used > the pdata, mvebu. -- viresh ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/3] cpufreq: dt: Create platform device from generic code 2016-03-25 4:41 ` Viresh Kumar 2016-03-28 15:05 ` Viresh Kumar @ 2016-03-29 13:22 ` Arnd Bergmann 2016-03-29 14:02 ` Viresh Kumar 1 sibling, 1 reply; 25+ messages in thread From: Arnd Bergmann @ 2016-03-29 13:22 UTC (permalink / raw) To: Viresh Kumar Cc: linaro-kernel, Rafael Wysocki, arnd.bergmann, kgene.kim, heiko, xf, mmcclint, linux-pm On Friday 25 March 2016 10:11:24 Viresh Kumar wrote: > On 24-03-16, 15:16, Arnd Bergmann wrote: > > Hmm, can you give an example where this is needed? > > I don't remember them, but I am quite sure that I have seen people > asking for that support again and again. > > > I assume you are > > thinking of some clock controller or regulator that gets initialized > > after the cpufreq driver, right? > > Yeah. > > > Are there any that are in loadable modules, rather than just later > > in the init sequence for built-in drivers? > > Maybe both, don't remember. Sorry. > > Over that, independent of what the users are doing today, I think its > important to support defer probing for anyone that wants to use it. Ok. > > I think we do care about compatibility there, but there are clearly > > other ways to handle the special case for opp-v1 if we want to. > > Okay, and what are those ? There is only one platform which has used > the pdata, mvebu. The platform already calls dev_pm_opp_add(), so it directly interacts with the cpufreq infrastructure. One way to do it would be to add another function call to set the independent_clocks flag in a static variable owned by that. Another way would be to have a separate function call for doing dev_pm_opp_add() with independent clocks. As far as I can tell, the two (dev_pm_opp_add and independent_clocks) are already tightly coupled interfaces, so it makes sense to combine them. Arnd ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/3] cpufreq: dt: Create platform device from generic code 2016-03-29 13:22 ` Arnd Bergmann @ 2016-03-29 14:02 ` Viresh Kumar 0 siblings, 0 replies; 25+ messages in thread From: Viresh Kumar @ 2016-03-29 14:02 UTC (permalink / raw) To: Arnd Bergmann Cc: linaro-kernel, Rafael Wysocki, arnd.bergmann, kgene.kim, heiko, xf, mmcclint, linux-pm On 29-03-16, 15:22, Arnd Bergmann wrote: > The platform already calls dev_pm_opp_add(), so it directly interacts > with the cpufreq infrastructure. One way to do it would be to add > another function call to set the independent_clocks flag in a static > variable owned by that. Another way would be to have a separate > function call for doing dev_pm_opp_add() with independent clocks. > As far as I can tell, the two (dev_pm_opp_add and independent_clocks) > are already tightly coupled interfaces, so it makes sense to > combine them. That looks like a good idea. Apart from that I hope you don't have any issues with rest of the V2 series. -- viresh ^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2016-03-29 14:02 UTC | newest] Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-03-24 6:40 [PATCH 0/3] cpufreq: dt: Create platform device from generic code Viresh Kumar 2016-03-24 6:40 ` [PATCH 1/3] cpufreq: dt: Include types.h from cpufreq-dt.h Viresh Kumar 2016-03-24 6:40 ` [PATCH 2/3] cpufreq: dt: Add generic platform-device creation support Viresh Kumar 2016-03-29 4:03 ` Krzysztof Kozlowski 2016-03-24 6:40 ` [PATCH 3/3] cpufreq: exynos: Use generic platdev driver Viresh Kumar 2016-03-24 6:40 ` Viresh Kumar 2016-03-29 2:35 ` Krzysztof Kozlowski 2016-03-29 2:35 ` Krzysztof Kozlowski 2016-03-29 2:38 ` Viresh Kumar 2016-03-29 2:38 ` Viresh Kumar 2016-03-29 4:10 ` Krzysztof Kozlowski 2016-03-29 4:10 ` Krzysztof Kozlowski 2016-03-29 4:18 ` Viresh Kumar 2016-03-29 4:18 ` Viresh Kumar 2016-03-29 4:19 ` Viresh Kumar 2016-03-29 4:19 ` Viresh Kumar 2016-03-29 4:39 ` Krzysztof Kozlowski 2016-03-29 4:39 ` Krzysztof Kozlowski 2016-03-24 13:36 ` [PATCH 0/3] cpufreq: dt: Create platform device from generic code Arnd Bergmann 2016-03-24 14:06 ` Viresh Kumar 2016-03-24 14:16 ` Arnd Bergmann 2016-03-25 4:41 ` Viresh Kumar 2016-03-28 15:05 ` Viresh Kumar 2016-03-29 13:22 ` Arnd Bergmann 2016-03-29 14:02 ` Viresh Kumar
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.