cpufreq: dt: Create platform device from generic code
Viresh Kumar
maintainerv3 cover cpufreq: dt: Create platform device from generic code
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 came up with an earlier version of patch 2/4, but its still worth fixing it. The second one creates a new driver to create platform-device based on current platform and the last two converts exynos platform to use this common infrastructure.
I will migrate rest of the platforms after this is accepted as the right way ahead.
V2->V3:
- 2/3 is very lightweight now and doesn't support cpufreq-dt platform-data and an extra depends_on from Kconfig is dropped as well.
- 3/3 is separated into two patches.
Viresh Kumar (4):
cpufreq: dt: Include types.h from cpufreq-dt.h
cpufreq: dt: Add generic platform-device creation support
ARM: exynos: exynos-cpufreq platform device isn't supported anymore
cpufreq: exynos: Use generic platdev driver
arch/arm/mach-exynos/exynos.c | 29 ------------------------- drivers/cpufreq/Kconfig | 10 +++++++++ drivers/cpufreq/Makefile | 1 + drivers/cpufreq/cpufreq-dt-platdev.c | 41 ++++++++++++++++++++++++++++++++++++ include/linux/cpufreq-dt.h | 2 ++ 5 files changed, 54 insertions(+), 29 deletions(-) create mode 100644 drivers/cpufreq/cpufreq-dt-platdev.c
Signature · 1 line
2.7.1.410.g6faf27b
Viresh Kumar
maintainerPATCH v3 1/4 cpufreq: dt: Include types.h from cpufreq-dt.h
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.
--- include/linux/cpufreq-dt.h | 2 ++ 1 file changed, 2 insertions(+)
include/linux/cpufreq-dt.h +2 -0
@@ -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
Signature · 1 line
2.7.1.410.g6faf27b
Viresh Kumar
maintainerPATCH v3 2/4 cpufreq: dt: Add generic platform-device creation support
In reply to Viresh KumarMultiple 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.
--- drivers/cpufreq/Kconfig | 10 ++++++++++ drivers/cpufreq/Makefile | 1 + drivers/cpufreq/cpufreq-dt-platdev.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 drivers/cpufreq/cpufreq-dt-platdev.c
drivers/cpufreq/Kconfig +10 -0
@@ -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,15 @@ config CPUFREQ_DT If in doubt, say N. +config CPUFREQ_DT_PLATDEV + bool + 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
drivers/cpufreq/Makefile +1 -0
@@ -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.
drivers/cpufreq/cpufreq-dt-platdev.c new file +32 -0
@@ -0,0 +1,32 @@ +/* +* Copyright (C) 2016 Linaro. +* Viresh Kumar <[email protected]> +* +* 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/err.h> +#include <linux/of.h> +#include <linux/platform_device.h> + +static const struct of_device_id machines[] = { +}; + +static int __init cpufreq_dt_platdev_init (void ) +{ +struct device_node *np =of_find_node_by_path ("/" ); + +if (!np) +return -ENODEV ; + +if (!of_match_node (machines, np)) +return -ENODEV ; + +of_node_put (of_root); + +return PTR_ERR_OR_ZERO (platform_device_register_simple ("cpufreq-dt" ,-1 , +NULL ,0 )); +} +device_initcall (cpufreq_dt_platdev_init);
Signature · 1 line
2.7.1.410.g6faf27b
Re: [PATCH V3 2/4] cpufreq: dt: Add generic platform-device creation support
Quoted 15 lines · 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.
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.
Quoted 5 lines
It always compiles as part of the kernel and so doesn't need a module-exit operation.
Signed-off-by Viresh Kumar <[email protected]>Reviewed-by Krzysztof Kozlowski <[email protected]>
Test on ipq4019.
-M
Viresh Kumar
maintainerPATCH v3 3/4 ARM: exynos: exynos-cpufreq platform device isn't supported anymore
In reply to Viresh KumarThe driver is removed long back and we don't support this device anymore. Stop adding it.
--- arch/arm/mach-exynos/exynos.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
arch/arm/mach-exynos/exynos.c +2 -6
@@ -232,12 +232,8 @@ static void __init exynos_cpufreq_init(void)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 ); +if (match) +platform_device_register_simple (match->data,-1 ,NULL ,0 ); }static void __init exynos_dt_machine_init (void )
Signature · 1 line
2.7.1.410.g6faf27b
Re: [PATCH V3 3/4] ARM: exynos: exynos-cpufreq platform device isn't supported anymore
Quoted 7 lines · Viresh Kumar
The driver is removed long back and we don't support this device anymore. Stop adding it.
Signed-off-by Viresh Kumar <[email protected]>--- arch/arm/mach-exynos/exynos.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
Best regards,
Krzysztof
Viresh Kumar
maintainerPATCH v3 4/4 cpufreq: exynos: Use generic platdev driver
In reply to Viresh KumarThe cpufreq-dt-platdev driver supports creation of cpufreq-dt platform device now, reuse that and remove similar code from platform code.
--- arch/arm/mach-exynos/exynos.c | 25 ------------------------- drivers/cpufreq/cpufreq-dt-platdev.c | 9 +++++++++ 2 files changed, 9 insertions(+), 25 deletions(-)
arch/arm/mach-exynos/exynos.c +0 -25
@@ -213,29 +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 (match->data,-1 ,NULL ,0 ); -} -static void __init exynos_dt_machine_init (void ) {/*
@@ -258,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 ); }
drivers/cpufreq/cpufreq-dt-platdev.c +9 -0
@@ -12,6 +12,15 @@#include <linux/platform_device.h> static const struct of_device_id machines[] = { + { .compatible ="samsung,exynos3250" , }, + { .compatible ="samsung,exynos4210" , }, + { .compatible ="samsung,exynos4212" , }, + { .compatible ="samsung,exynos4412" , }, + { .compatible ="samsung,exynos5250" , }, +#ifndef CONFIG_BL_SWITCHER + { .compatible ="samsung,exynos5420" , }, + { .compatible ="samsung,exynos5800" , }, +#endif };static int __init cpufreq_dt_platdev_init (void )
Signature · 1 line
2.7.1.410.g6faf27b
Viresh Kumar
maintainerQuoted 15 lines · 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 came up with an earlier version of patch 2/4, but its still worth fixing it. The second one creates a new driver to create platform-device based on current platform and the last two converts exynos platform to use this common infrastructure.
Quoted 7 lines
I will migrate rest of the platforms after this is accepted as the right way ahead.
V2->V3:
- 2/3 is very lightweight now and doesn't support cpufreq-dt platform-data and an extradepends_onfromKconfigis dropped as well.
- 3/3 is separated into two patches.
@Rafael: Can you please apply this series now, that will enable me with converting rest of the users to use this.
Signature · 1 line
viresh
Viresh Kumar
maintainerQuoted 10 lines · 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.
Quoted 7 lines
The first patch fixes an issue that came up with an earlier version of patch 2/4, but its still worth fixing it. The second one creates a new driver to create platform-device based on current platform and the last two converts exynos platform to use this common infrastructure.
I will migrate rest of the platforms after this is accepted as the right way ahead.
@Matthew and @Mason,
Now that this is present in linux-next, you guys can send patches for your platforms cpufreq support.
Signature · 1 line
viresh
Quoted 16 lines · Viresh Kumar
Quoted 15 lines · 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 came up with an earlier version of patch 2/4, but its still worth fixing it. The second one creates a new driver to create platform-device based on current platform and the last two converts exynos platform to use this common infrastructure.
Quoted 7 lines
Quoted 2 lines
I will migrate rest of the platforms after this is accepted as the right way ahead.
@Matthew and @Mason,
Now that this is present in linux-next, you guys can send patches for your platforms cpufreq support.
Present in linux-next means it will show up in 4.6-rc5?
Regards.
Rafael J. Wysocki
maintainerQuoted 20 lines · Mason
Quoted 19 lines · Viresh Kumar
Quoted 17 lines · 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 came up with an earlier version of patch 2/4, but its still worth fixing it. The second one creates a new driver to create platform-device based on current platform and the last two converts exynos platform to use this common infrastructure.
I will migrate rest of the platforms after this is accepted as the right way ahead.
Quoted 6 lines
Quoted 4 lines
@Matthew and @Mason,
Now that this is present in linux-next, you guys can send patches for your platforms cpufreq support.
Present in linux-next means it will show up in 4.6-rc5?
No, it doesn't, in general.
Bug fixes may show up in -rcX, X > 1, but the majority of new material in linux-next will show up in the next -rc1 (4.7-rc1 in this particular case).
Quoted 16 lines · Viresh Kumar
Quoted 15 lines · 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 came up with an earlier version of patch 2/4, but its still worth fixing it. The second one creates a new driver to create platform-device based on current platform and the last two converts exynos platform to use this common infrastructure.
Quoted 7 lines
Quoted 2 lines
I will migrate rest of the platforms after this is accepted as the right way ahead.
@Matthew and @Mason,
Now that this is present in linux-next, you guys can send patches for your platforms cpufreq support.
Viresh,
IIUC, all I need to do is add my platform's string to drivers/cpufreq/cpufreq-dt-platdev.c ?
Should I add it at the beginning or at the end?
(I suppose at the end.)
I should add "sigma,tango4", since that's what is used in arch/arm/mach-tango/setup.c right?
Regards.
Quoted 3 lines · Mason
Should I add it at the beginning or at the end?
(I suppose at the end.)
I was going to do alphabetical order.
-M
Viresh Kumar
maintainerQuoted 6 lines · Matthew McClintock
Quoted 3 lines · Mason
Should I add it at the beginning or at the end?
(I suppose at the end.)I was going to do alphabetical order.
That's right, you should follow the way things are present in the file itself. So, it should be in alphabetical order, + blank lines separating your platform from the rest.
Signature · 1 line
viresh