* [PATCH v2 0/7] cpufreq: use generic cpufreq drivers for Exynos4x12 platform @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel, b.zolnierkie Hi, This patch series removes the use of Exynos4x12 specific support from cpufreq-exynos driver and enables the use of cpufreq-dt driver for this platform. In order to preserve support for Exynos4x12 'boost' mode cpufreq-dt driver is made aware of cpufreq 'boost' mode infrastructure. Once it is done (+ turbo modes handling is fixed, please see below for details) the driver starts to use turbo mode frequencies (defined using opp-v2 bindings) as 'boost' mode frequecies. Patches #1-2 are needed to fix handling of turbo modes in cpufreq core and without them cpufreq-dt treats turbo modes as normal modes (IOW they are used by default as normal modes even if they are defined in DTS file as turbo modes). Ideally these patches should be added into "[PATCH 00/10] OPP: Add code to support operating-points-v2 bindings" patch series before patch #10 ("[PATCH 10/10] cpufreq-dt: Add support for operating-points-v2 bindings"). This patch series has been tested on Exynos4412 based Odroid-U3 and Trats2 boards. Depends on: - next-20150629 branch of linux-next kernel tree - "[PATCH v3 0/4] cpufreq: use generic cpufreq drivers for Exynos5250 platform" (http://lkml.org/lkml/2015/7/1/311) - "PATCH 00/10] OPP: Add code to support operating-points-v2 bindings" (http://www.spinics.net/lists/arm-kernel/msg425517.html) Changes since v1 (http://thread.gmane.org/gmane.linux.kernel.samsung-soc/44361): - rebased on top of next-20150629 branch of linux-next kernel tree - rebased on top of Exynos5250 cpufreq-dt support patch series - fixed if-statement in exynos4_clk_init() (noticed by Tobias Jakobi) - ported over opp-v2 bindings (requested by Viresh Kumar) Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics Bartlomiej Zolnierkiewicz (7): opp: add dev_pm_opp_get_turbo_mode_setting() helper cpufreq: opp: fix handling of turbo modes cpufreq-dt: add turbo modes support clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock ARM: dts: Exynos4x12: add CPU OPP and regulator supply property ARM: Exynos: switch to using generic cpufreq driver for Exynos4x12 cpufreq: exynos: remove Exynos4x12 specific cpufreq driver support arch/arm/boot/dts/exynos4212.dtsi | 81 ++++++++ arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 + arch/arm/boot/dts/exynos4412-origen.dts | 5 + arch/arm/boot/dts/exynos4412-trats2.dts | 5 + arch/arm/boot/dts/exynos4412.dtsi | 83 +++++++++ arch/arm/mach-exynos/exynos.c | 14 ++ drivers/base/power/opp.c | 31 ++++ drivers/clk/samsung/clk-exynos4.c | 50 +++++ drivers/cpufreq/Kconfig.arm | 25 +-- drivers/cpufreq/Makefile | 2 - drivers/cpufreq/cpufreq-dt.c | 7 +- drivers/cpufreq/cpufreq_opp.c | 2 + drivers/cpufreq/exynos-cpufreq.c | 234 ----------------------- drivers/cpufreq/exynos-cpufreq.h | 72 -------- drivers/cpufreq/exynos4x12-cpufreq.c | 236 ------------------------ include/linux/cpufreq-dt.h | 1 + include/linux/pm_opp.h | 7 + 17 files changed, 290 insertions(+), 569 deletions(-) delete mode 100644 drivers/cpufreq/exynos-cpufreq.c delete mode 100644 drivers/cpufreq/exynos-cpufreq.h delete mode 100644 drivers/cpufreq/exynos4x12-cpufreq.c -- 1.9.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 0/7] cpufreq: use generic cpufreq drivers for Exynos4x12 platform @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: linux-arm-kernel Hi, This patch series removes the use of Exynos4x12 specific support from cpufreq-exynos driver and enables the use of cpufreq-dt driver for this platform. In order to preserve support for Exynos4x12 'boost' mode cpufreq-dt driver is made aware of cpufreq 'boost' mode infrastructure. Once it is done (+ turbo modes handling is fixed, please see below for details) the driver starts to use turbo mode frequencies (defined using opp-v2 bindings) as 'boost' mode frequecies. Patches #1-2 are needed to fix handling of turbo modes in cpufreq core and without them cpufreq-dt treats turbo modes as normal modes (IOW they are used by default as normal modes even if they are defined in DTS file as turbo modes). Ideally these patches should be added into "[PATCH 00/10] OPP: Add code to support operating-points-v2 bindings" patch series before patch #10 ("[PATCH 10/10] cpufreq-dt: Add support for operating-points-v2 bindings"). This patch series has been tested on Exynos4412 based Odroid-U3 and Trats2 boards. Depends on: - next-20150629 branch of linux-next kernel tree - "[PATCH v3 0/4] cpufreq: use generic cpufreq drivers for Exynos5250 platform" (http://lkml.org/lkml/2015/7/1/311) - "PATCH 00/10] OPP: Add code to support operating-points-v2 bindings" (http://www.spinics.net/lists/arm-kernel/msg425517.html) Changes since v1 (http://thread.gmane.org/gmane.linux.kernel.samsung-soc/44361): - rebased on top of next-20150629 branch of linux-next kernel tree - rebased on top of Exynos5250 cpufreq-dt support patch series - fixed if-statement in exynos4_clk_init() (noticed by Tobias Jakobi) - ported over opp-v2 bindings (requested by Viresh Kumar) Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics Bartlomiej Zolnierkiewicz (7): opp: add dev_pm_opp_get_turbo_mode_setting() helper cpufreq: opp: fix handling of turbo modes cpufreq-dt: add turbo modes support clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock ARM: dts: Exynos4x12: add CPU OPP and regulator supply property ARM: Exynos: switch to using generic cpufreq driver for Exynos4x12 cpufreq: exynos: remove Exynos4x12 specific cpufreq driver support arch/arm/boot/dts/exynos4212.dtsi | 81 ++++++++ arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 + arch/arm/boot/dts/exynos4412-origen.dts | 5 + arch/arm/boot/dts/exynos4412-trats2.dts | 5 + arch/arm/boot/dts/exynos4412.dtsi | 83 +++++++++ arch/arm/mach-exynos/exynos.c | 14 ++ drivers/base/power/opp.c | 31 ++++ drivers/clk/samsung/clk-exynos4.c | 50 +++++ drivers/cpufreq/Kconfig.arm | 25 +-- drivers/cpufreq/Makefile | 2 - drivers/cpufreq/cpufreq-dt.c | 7 +- drivers/cpufreq/cpufreq_opp.c | 2 + drivers/cpufreq/exynos-cpufreq.c | 234 ----------------------- drivers/cpufreq/exynos-cpufreq.h | 72 -------- drivers/cpufreq/exynos4x12-cpufreq.c | 236 ------------------------ include/linux/cpufreq-dt.h | 1 + include/linux/pm_opp.h | 7 + 17 files changed, 290 insertions(+), 569 deletions(-) delete mode 100644 drivers/cpufreq/exynos-cpufreq.c delete mode 100644 drivers/cpufreq/exynos-cpufreq.h delete mode 100644 drivers/cpufreq/exynos4x12-cpufreq.c -- 1.9.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 1/7] opp: add dev_pm_opp_get_turbo_mode_setting() helper 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel, b.zolnierkie Add dev_pm_opp_get_turbo_mode_setting() helper for getting turbo mode setting for a given opp. Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Michael Turquette <mturquette@baylibre.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Cc: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/base/power/opp.c | 31 +++++++++++++++++++++++++++++++ include/linux/pm_opp.h | 7 +++++++ 2 files changed, 38 insertions(+) diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c index e24502a2..6b34b2a 100644 --- a/drivers/base/power/opp.c +++ b/drivers/base/power/opp.c @@ -287,6 +287,37 @@ unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq); /** + * dev_pm_opp_get_turbo_mode_setting() - Gets the turbo setting + * @opp: opp for which turbo mode setting has to be returned for + * + * Return: turbo mode setting corresponding to the opp (true or false) + * + * Locking: This function must be called under rcu_read_lock(). opp is a rcu + * protected pointer. This means that opp which could have been fetched by + * opp_find_freq_{exact,ceil,floor} functions is valid as long as we are + * under RCU lock. The pointer returned by the opp_find_freq family must be + * used in the same section as the usage of this function with the pointer + * prior to unlocking with rcu_read_unlock() to maintain the integrity of the + * pointer. + */ +bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp) +{ + struct dev_pm_opp *tmp_opp; + bool f = false; + + opp_rcu_lockdep_assert(); + + tmp_opp = rcu_dereference(opp); + if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available) + pr_err("%s: Invalid parameters\n", __func__); + else + f = tmp_opp->turbo; + + return f; +} +EXPORT_SYMBOL_GPL(dev_pm_opp_get_turbo_mode_setting); + +/** * dev_pm_opp_get_max_clock_latency() - Get max clock latency in nanoseconds * @dev: device for which we do this operation * diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h index bb52fae..7856baf 100644 --- a/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h @@ -30,6 +30,8 @@ unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp); unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp); +bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp); + int dev_pm_opp_get_opp_count(struct device *dev); unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev); @@ -63,6 +65,11 @@ static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) return 0; } +static inline bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp) +{ + return false; +} + static inline int dev_pm_opp_get_opp_count(struct device *dev) { return 0; -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v2 1/7] opp: add dev_pm_opp_get_turbo_mode_setting() helper @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: linux-arm-kernel Add dev_pm_opp_get_turbo_mode_setting() helper for getting turbo mode setting for a given opp. Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Michael Turquette <mturquette@baylibre.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Cc: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/base/power/opp.c | 31 +++++++++++++++++++++++++++++++ include/linux/pm_opp.h | 7 +++++++ 2 files changed, 38 insertions(+) diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c index e24502a2..6b34b2a 100644 --- a/drivers/base/power/opp.c +++ b/drivers/base/power/opp.c @@ -287,6 +287,37 @@ unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq); /** + * dev_pm_opp_get_turbo_mode_setting() - Gets the turbo setting + * @opp: opp for which turbo mode setting has to be returned for + * + * Return: turbo mode setting corresponding to the opp (true or false) + * + * Locking: This function must be called under rcu_read_lock(). opp is a rcu + * protected pointer. This means that opp which could have been fetched by + * opp_find_freq_{exact,ceil,floor} functions is valid as long as we are + * under RCU lock. The pointer returned by the opp_find_freq family must be + * used in the same section as the usage of this function with the pointer + * prior to unlocking with rcu_read_unlock() to maintain the integrity of the + * pointer. + */ +bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp) +{ + struct dev_pm_opp *tmp_opp; + bool f = false; + + opp_rcu_lockdep_assert(); + + tmp_opp = rcu_dereference(opp); + if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available) + pr_err("%s: Invalid parameters\n", __func__); + else + f = tmp_opp->turbo; + + return f; +} +EXPORT_SYMBOL_GPL(dev_pm_opp_get_turbo_mode_setting); + +/** * dev_pm_opp_get_max_clock_latency() - Get max clock latency in nanoseconds * @dev: device for which we do this operation * diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h index bb52fae..7856baf 100644 --- a/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h @@ -30,6 +30,8 @@ unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp); unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp); +bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp); + int dev_pm_opp_get_opp_count(struct device *dev); unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev); @@ -63,6 +65,11 @@ static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) return 0; } +static inline bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp) +{ + return false; +} + static inline int dev_pm_opp_get_opp_count(struct device *dev) { return 0; -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* Re: [PATCH v2 1/7] opp: add dev_pm_opp_get_turbo_mode_setting() helper 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-10 2:17 ` Krzysztof Kozlowski -1 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 2:17 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > Add dev_pm_opp_get_turbo_mode_setting() helper for getting turbo > mode setting for a given opp. > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/base/power/opp.c | 31 +++++++++++++++++++++++++++++++ > include/linux/pm_opp.h | 7 +++++++ > 2 files changed, 38 insertions(+) > > diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c > index e24502a2..6b34b2a 100644 > --- a/drivers/base/power/opp.c > +++ b/drivers/base/power/opp.c > @@ -287,6 +287,37 @@ unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) > EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq); > > /** > + * dev_pm_opp_get_turbo_mode_setting() - Gets the turbo setting > + * @opp: opp for which turbo mode setting has to be returned for > + * > + * Return: turbo mode setting corresponding to the opp (true or false) > + * > + * Locking: This function must be called under rcu_read_lock(). opp is a rcu > + * protected pointer. This means that opp which could have been fetched by > + * opp_find_freq_{exact,ceil,floor} functions is valid as long as we are > + * under RCU lock. The pointer returned by the opp_find_freq family must be > + * used in the same section as the usage of this function with the pointer > + * prior to unlocking with rcu_read_unlock() to maintain the integrity of the > + * pointer. > + */ > +bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp) It is just true or false, so maybe dev_pm_opp_is_turbo_mode()? Everything else looks good to me. Best regards, Krzysztof > +{ > + struct dev_pm_opp *tmp_opp; > + bool f = false; > + > + opp_rcu_lockdep_assert(); > + > + tmp_opp = rcu_dereference(opp); > + if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available) > + pr_err("%s: Invalid parameters\n", __func__); > + else > + f = tmp_opp->turbo; > + > + return f; > +} > +EXPORT_SYMBOL_GPL(dev_pm_opp_get_turbo_mode_setting); > + > +/** > * dev_pm_opp_get_max_clock_latency() - Get max clock latency in nanoseconds > * @dev: device for which we do this operation > * > diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h > index bb52fae..7856baf 100644 > --- a/include/linux/pm_opp.h > +++ b/include/linux/pm_opp.h > @@ -30,6 +30,8 @@ unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp); > > unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp); > > +bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp); > + > int dev_pm_opp_get_opp_count(struct device *dev); > unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev); > > @@ -63,6 +65,11 @@ static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) > return 0; > } > > +static inline bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp) > +{ > + return false; > +} > + > static inline int dev_pm_opp_get_opp_count(struct device *dev) > { > return 0; > ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 1/7] opp: add dev_pm_opp_get_turbo_mode_setting() helper @ 2015-07-10 2:17 ` Krzysztof Kozlowski 0 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 2:17 UTC (permalink / raw) To: linux-arm-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > Add dev_pm_opp_get_turbo_mode_setting() helper for getting turbo > mode setting for a given opp. > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/base/power/opp.c | 31 +++++++++++++++++++++++++++++++ > include/linux/pm_opp.h | 7 +++++++ > 2 files changed, 38 insertions(+) > > diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c > index e24502a2..6b34b2a 100644 > --- a/drivers/base/power/opp.c > +++ b/drivers/base/power/opp.c > @@ -287,6 +287,37 @@ unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) > EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq); > > /** > + * dev_pm_opp_get_turbo_mode_setting() - Gets the turbo setting > + * @opp: opp for which turbo mode setting has to be returned for > + * > + * Return: turbo mode setting corresponding to the opp (true or false) > + * > + * Locking: This function must be called under rcu_read_lock(). opp is a rcu > + * protected pointer. This means that opp which could have been fetched by > + * opp_find_freq_{exact,ceil,floor} functions is valid as long as we are > + * under RCU lock. The pointer returned by the opp_find_freq family must be > + * used in the same section as the usage of this function with the pointer > + * prior to unlocking with rcu_read_unlock() to maintain the integrity of the > + * pointer. > + */ > +bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp) It is just true or false, so maybe dev_pm_opp_is_turbo_mode()? Everything else looks good to me. Best regards, Krzysztof > +{ > + struct dev_pm_opp *tmp_opp; > + bool f = false; > + > + opp_rcu_lockdep_assert(); > + > + tmp_opp = rcu_dereference(opp); > + if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available) > + pr_err("%s: Invalid parameters\n", __func__); > + else > + f = tmp_opp->turbo; > + > + return f; > +} > +EXPORT_SYMBOL_GPL(dev_pm_opp_get_turbo_mode_setting); > + > +/** > * dev_pm_opp_get_max_clock_latency() - Get max clock latency in nanoseconds > * @dev: device for which we do this operation > * > diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h > index bb52fae..7856baf 100644 > --- a/include/linux/pm_opp.h > +++ b/include/linux/pm_opp.h > @@ -30,6 +30,8 @@ unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp); > > unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp); > > +bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp); > + > int dev_pm_opp_get_opp_count(struct device *dev); > unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev); > > @@ -63,6 +65,11 @@ static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) > return 0; > } > > +static inline bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp) > +{ > + return false; > +} > + > static inline int dev_pm_opp_get_opp_count(struct device *dev) > { > return 0; > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 1/7] opp: add dev_pm_opp_get_turbo_mode_setting() helper 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-27 8:33 ` Viresh Kumar -1 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 8:33 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 09-07-15, 17:43, Bartlomiej Zolnierkiewicz wrote: > +bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp) This should be named dev_pm_opp_is_turbo(). -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 1/7] opp: add dev_pm_opp_get_turbo_mode_setting() helper @ 2015-07-27 8:33 ` Viresh Kumar 0 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 8:33 UTC (permalink / raw) To: linux-arm-kernel On 09-07-15, 17:43, Bartlomiej Zolnierkiewicz wrote: > +bool dev_pm_opp_get_turbo_mode_setting(struct dev_pm_opp *opp) This should be named dev_pm_opp_is_turbo(). -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel, b.zolnierkie Turbo modes should be marked with CPUFREQ_BOOST_FREQ flag in the frequency table entry. Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Michael Turquette <mturquette@baylibre.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Cc: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/cpufreq/cpufreq_opp.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/cpufreq/cpufreq_opp.c b/drivers/cpufreq/cpufreq_opp.c index 773bcde..f0cf502 100644 --- a/drivers/cpufreq/cpufreq_opp.c +++ b/drivers/cpufreq/cpufreq_opp.c @@ -75,6 +75,8 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev, } freq_table[i].driver_data = i; freq_table[i].frequency = rate / 1000; + if (dev_pm_opp_get_turbo_mode_setting(opp) == true) + freq_table[i].flags |= CPUFREQ_BOOST_FREQ; } freq_table[i].driver_data = i; -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: linux-arm-kernel Turbo modes should be marked with CPUFREQ_BOOST_FREQ flag in the frequency table entry. Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Michael Turquette <mturquette@baylibre.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Cc: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/cpufreq/cpufreq_opp.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/cpufreq/cpufreq_opp.c b/drivers/cpufreq/cpufreq_opp.c index 773bcde..f0cf502 100644 --- a/drivers/cpufreq/cpufreq_opp.c +++ b/drivers/cpufreq/cpufreq_opp.c @@ -75,6 +75,8 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev, } freq_table[i].driver_data = i; freq_table[i].frequency = rate / 1000; + if (dev_pm_opp_get_turbo_mode_setting(opp) == true) + freq_table[i].flags |= CPUFREQ_BOOST_FREQ; } freq_table[i].driver_data = i; -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* Re: [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-10 2:20 ` Krzysztof Kozlowski -1 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 2:20 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > Turbo modes should be marked with CPUFREQ_BOOST_FREQ flag in > the frequency table entry. > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/cpufreq/cpufreq_opp.c | 2 ++ > 1 file changed, 2 insertions(+) Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-07-10 2:20 ` Krzysztof Kozlowski 0 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 2:20 UTC (permalink / raw) To: linux-arm-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > Turbo modes should be marked with CPUFREQ_BOOST_FREQ flag in > the frequency table entry. > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/cpufreq/cpufreq_opp.c | 2 ++ > 1 file changed, 2 insertions(+) Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-27 8:35 ` Viresh Kumar -1 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 8:35 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel $subject is a bit wrong, we aren't fixing any issue here. We are supporting a new feature and so it should be like: cpufreq: Mark boost frequencies based on OPP's turbo mode On 09-07-15, 17:43, Bartlomiej Zolnierkiewicz wrote: > Turbo modes should be marked with CPUFREQ_BOOST_FREQ flag in > the frequency table entry. > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/cpufreq/cpufreq_opp.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/cpufreq/cpufreq_opp.c b/drivers/cpufreq/cpufreq_opp.c > index 773bcde..f0cf502 100644 > --- a/drivers/cpufreq/cpufreq_opp.c > +++ b/drivers/cpufreq/cpufreq_opp.c > @@ -75,6 +75,8 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev, > } > freq_table[i].driver_data = i; > freq_table[i].frequency = rate / 1000; > + if (dev_pm_opp_get_turbo_mode_setting(opp) == true) > + freq_table[i].flags |= CPUFREQ_BOOST_FREQ; > } > > freq_table[i].driver_data = i; Rest look fine. -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-07-27 8:35 ` Viresh Kumar 0 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 8:35 UTC (permalink / raw) To: linux-arm-kernel $subject is a bit wrong, we aren't fixing any issue here. We are supporting a new feature and so it should be like: cpufreq: Mark boost frequencies based on OPP's turbo mode On 09-07-15, 17:43, Bartlomiej Zolnierkiewicz wrote: > Turbo modes should be marked with CPUFREQ_BOOST_FREQ flag in > the frequency table entry. > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/cpufreq/cpufreq_opp.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/cpufreq/cpufreq_opp.c b/drivers/cpufreq/cpufreq_opp.c > index 773bcde..f0cf502 100644 > --- a/drivers/cpufreq/cpufreq_opp.c > +++ b/drivers/cpufreq/cpufreq_opp.c > @@ -75,6 +75,8 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev, > } > freq_table[i].driver_data = i; > freq_table[i].frequency = rate / 1000; > + if (dev_pm_opp_get_turbo_mode_setting(opp) == true) > + freq_table[i].flags |= CPUFREQ_BOOST_FREQ; > } > > freq_table[i].driver_data = i; Rest look fine. -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-27 8:35 ` Viresh Kumar @ 2015-07-27 10:24 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-27 10:24 UTC (permalink / raw) To: Viresh Kumar Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel Hi, On Monday, July 27, 2015 02:05:31 PM Viresh Kumar wrote: > $subject is a bit wrong, we aren't fixing any issue here. We are > supporting a new feature and so it should be like: Have you read my explanation of the issue? With your OPP-v2 patches cpufreq-dt picks turbo frequencies and uses them as normal ones. (More at: http://www.spinics.net/lists/arm-kernel/msg430397.html) Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics > cpufreq: Mark boost frequencies based on OPP's turbo mode > > On 09-07-15, 17:43, Bartlomiej Zolnierkiewicz wrote: > > Turbo modes should be marked with CPUFREQ_BOOST_FREQ flag in > > the frequency table entry. > > > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > > Cc: Michael Turquette <mturquette@baylibre.com> > > Cc: Javier Martinez Canillas <javier@dowhile0.org> > > Cc: Thomas Abraham <thomas.ab@samsung.com> > > Cc: Viresh Kumar <viresh.kumar@linaro.org> > > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > > --- > > drivers/cpufreq/cpufreq_opp.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/drivers/cpufreq/cpufreq_opp.c b/drivers/cpufreq/cpufreq_opp.c > > index 773bcde..f0cf502 100644 > > --- a/drivers/cpufreq/cpufreq_opp.c > > +++ b/drivers/cpufreq/cpufreq_opp.c > > @@ -75,6 +75,8 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev, > > } > > freq_table[i].driver_data = i; > > freq_table[i].frequency = rate / 1000; > > + if (dev_pm_opp_get_turbo_mode_setting(opp) == true) > > + freq_table[i].flags |= CPUFREQ_BOOST_FREQ; > > } > > > > freq_table[i].driver_data = i; > > Rest look fine. ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-07-27 10:24 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-27 10:24 UTC (permalink / raw) To: linux-arm-kernel Hi, On Monday, July 27, 2015 02:05:31 PM Viresh Kumar wrote: > $subject is a bit wrong, we aren't fixing any issue here. We are > supporting a new feature and so it should be like: Have you read my explanation of the issue? With your OPP-v2 patches cpufreq-dt picks turbo frequencies and uses them as normal ones. (More at: http://www.spinics.net/lists/arm-kernel/msg430397.html) Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics > cpufreq: Mark boost frequencies based on OPP's turbo mode > > On 09-07-15, 17:43, Bartlomiej Zolnierkiewicz wrote: > > Turbo modes should be marked with CPUFREQ_BOOST_FREQ flag in > > the frequency table entry. > > > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > > Cc: Michael Turquette <mturquette@baylibre.com> > > Cc: Javier Martinez Canillas <javier@dowhile0.org> > > Cc: Thomas Abraham <thomas.ab@samsung.com> > > Cc: Viresh Kumar <viresh.kumar@linaro.org> > > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > > --- > > drivers/cpufreq/cpufreq_opp.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/drivers/cpufreq/cpufreq_opp.c b/drivers/cpufreq/cpufreq_opp.c > > index 773bcde..f0cf502 100644 > > --- a/drivers/cpufreq/cpufreq_opp.c > > +++ b/drivers/cpufreq/cpufreq_opp.c > > @@ -75,6 +75,8 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev, > > } > > freq_table[i].driver_data = i; > > freq_table[i].frequency = rate / 1000; > > + if (dev_pm_opp_get_turbo_mode_setting(opp) == true) > > + freq_table[i].flags |= CPUFREQ_BOOST_FREQ; > > } > > > > freq_table[i].driver_data = i; > > Rest look fine. ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-27 10:24 ` Bartlomiej Zolnierkiewicz @ 2015-07-27 10:35 ` Viresh Kumar -1 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 10:35 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 27-07-15, 12:24, Bartlomiej Zolnierkiewicz wrote: > Have you read my explanation of the issue? > > With your OPP-v2 patches cpufreq-dt picks turbo frequencies and uses > them as normal ones. > > (More at: http://www.spinics.net/lists/arm-kernel/msg430397.html) Yes I did. I understand that the turbo frequencies are not considered as such by OPP/cpufreq core and it requires your changes to get it working. But its not an issue or bug we are fixing, the problem is that the code for opp-v2 isn't complete yet and your patches is putting things in place. So, we are still doing the bring up here and not fixing a bug really. -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-07-27 10:35 ` Viresh Kumar 0 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 10:35 UTC (permalink / raw) To: linux-arm-kernel On 27-07-15, 12:24, Bartlomiej Zolnierkiewicz wrote: > Have you read my explanation of the issue? > > With your OPP-v2 patches cpufreq-dt picks turbo frequencies and uses > them as normal ones. > > (More at: http://www.spinics.net/lists/arm-kernel/msg430397.html) Yes I did. I understand that the turbo frequencies are not considered as such by OPP/cpufreq core and it requires your changes to get it working. But its not an issue or bug we are fixing, the problem is that the code for opp-v2 isn't complete yet and your patches is putting things in place. So, we are still doing the bring up here and not fixing a bug really. -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-27 10:35 ` Viresh Kumar @ 2015-07-27 11:14 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-27 11:14 UTC (permalink / raw) To: Viresh Kumar Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel Hi, On Monday, July 27, 2015 04:05:21 PM Viresh Kumar wrote: > On 27-07-15, 12:24, Bartlomiej Zolnierkiewicz wrote: > > Have you read my explanation of the issue? > > > > With your OPP-v2 patches cpufreq-dt picks turbo frequencies and uses > > them as normal ones. > > > > (More at: http://www.spinics.net/lists/arm-kernel/msg430397.html) > > Yes I did. I understand that the turbo frequencies are not considered > as such by OPP/cpufreq core and it requires your changes to get it > working. Sorry but you don't seem to understand the issue. The problem is that without my patch and with your OPP-v2 patches turbo frequencies get picked by OPP/cpufreq core and then by cpufreq-dt. This happens without enabling any boost & thermal etc. support for turbo frequencies. > But its not an issue or bug we are fixing, the problem is that the > code for opp-v2 isn't complete yet and your patches is putting things > in place. So, we are still doing the bring up here and not fixing a > bug really. I consider the possibility to use turbo frequencies without explicitly enabling boost support to be a buggy behavior. While it is unlikely that somebody defines turbo frequencies in their dts file in the near future (except Exynos ones) it costs as nearly nothing to prevent such behavior now. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-07-27 11:14 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-27 11:14 UTC (permalink / raw) To: linux-arm-kernel Hi, On Monday, July 27, 2015 04:05:21 PM Viresh Kumar wrote: > On 27-07-15, 12:24, Bartlomiej Zolnierkiewicz wrote: > > Have you read my explanation of the issue? > > > > With your OPP-v2 patches cpufreq-dt picks turbo frequencies and uses > > them as normal ones. > > > > (More at: http://www.spinics.net/lists/arm-kernel/msg430397.html) > > Yes I did. I understand that the turbo frequencies are not considered > as such by OPP/cpufreq core and it requires your changes to get it > working. Sorry but you don't seem to understand the issue. The problem is that without my patch and with your OPP-v2 patches turbo frequencies get picked by OPP/cpufreq core and then by cpufreq-dt. This happens without enabling any boost & thermal etc. support for turbo frequencies. > But its not an issue or bug we are fixing, the problem is that the > code for opp-v2 isn't complete yet and your patches is putting things > in place. So, we are still doing the bring up here and not fixing a > bug really. I consider the possibility to use turbo frequencies without explicitly enabling boost support to be a buggy behavior. While it is unlikely that somebody defines turbo frequencies in their dts file in the near future (except Exynos ones) it costs as nearly nothing to prevent such behavior now. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-27 11:14 ` Bartlomiej Zolnierkiewicz @ 2015-07-27 11:36 ` Viresh Kumar -1 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 11:36 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 27-07-15, 13:14, Bartlomiej Zolnierkiewicz wrote: > Sorry but you don't seem to understand the issue. :) No, I did. I understand that if someone uses opp bindings today with some entries as turbo OPPs, cpufreq will use them as normal frequencies. And that may harm the board. BUT, opp-v2 code isn't ready to be used yet. And platforms should see what all is implemented before trying to use them. All I was saying is, this isn't a FIX as we haven't introduced the feature yet. Otherwise I had no issues with the patch. -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-07-27 11:36 ` Viresh Kumar 0 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 11:36 UTC (permalink / raw) To: linux-arm-kernel On 27-07-15, 13:14, Bartlomiej Zolnierkiewicz wrote: > Sorry but you don't seem to understand the issue. :) No, I did. I understand that if someone uses opp bindings today with some entries as turbo OPPs, cpufreq will use them as normal frequencies. And that may harm the board. BUT, opp-v2 code isn't ready to be used yet. And platforms should see what all is implemented before trying to use them. All I was saying is, this isn't a FIX as we haven't introduced the feature yet. Otherwise I had no issues with the patch. -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-27 11:36 ` Viresh Kumar @ 2015-07-27 11:47 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-27 11:47 UTC (permalink / raw) To: Viresh Kumar Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On Monday, July 27, 2015 05:06:41 PM Viresh Kumar wrote: > On 27-07-15, 13:14, Bartlomiej Zolnierkiewicz wrote: > > Sorry but you don't seem to understand the issue. > > :) > > No, I did. I understand that if someone uses opp bindings today with > some entries as turbo OPPs, cpufreq will use them as normal > frequencies. And that may harm the board. > > BUT, opp-v2 code isn't ready to be used yet. And platforms should see > what all is implemented before trying to use them. OK. > All I was saying is, this isn't a FIX as we haven't introduced the > feature yet. Otherwise I had no issues with the patch. I will update the description for the next patchset revision. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-07-27 11:47 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-27 11:47 UTC (permalink / raw) To: linux-arm-kernel On Monday, July 27, 2015 05:06:41 PM Viresh Kumar wrote: > On 27-07-15, 13:14, Bartlomiej Zolnierkiewicz wrote: > > Sorry but you don't seem to understand the issue. > > :) > > No, I did. I understand that if someone uses opp bindings today with > some entries as turbo OPPs, cpufreq will use them as normal > frequencies. And that may harm the board. > > BUT, opp-v2 code isn't ready to be used yet. And platforms should see > what all is implemented before trying to use them. OK. > All I was saying is, this isn't a FIX as we haven't introduced the > feature yet. Otherwise I had no issues with the patch. I will update the description for the next patchset revision. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-27 11:47 ` Bartlomiej Zolnierkiewicz @ 2015-07-30 14:37 ` Kukjin Kim -1 siblings, 0 replies; 69+ messages in thread From: Kukjin Kim @ 2015-07-30 14:37 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz Cc: Viresh Kumar, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 07/27/15 20:47, Bartlomiej Zolnierkiewicz wrote: > On Monday, July 27, 2015 05:06:41 PM Viresh Kumar wrote: >> On 27-07-15, 13:14, Bartlomiej Zolnierkiewicz wrote: >>> Sorry but you don't seem to understand the issue. >> >> :) >> >> No, I did. I understand that if someone uses opp bindings today with >> some entries as turbo OPPs, cpufreq will use them as normal >> frequencies. And that may harm the board. >> >> BUT, opp-v2 code isn't ready to be used yet. And platforms should see >> what all is implemented before trying to use them. > > OK. > >> All I was saying is, this isn't a FIX as we haven't introduced the >> feature yet. Otherwise I had no issues with the patch. > > I will update the description for the next patchset revision. > Hi Bart, When will you re-post v3? Because I have a plan to send a pull-request to arm-soc until this weekend... - Kukjin ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-07-30 14:37 ` Kukjin Kim 0 siblings, 0 replies; 69+ messages in thread From: Kukjin Kim @ 2015-07-30 14:37 UTC (permalink / raw) To: linux-arm-kernel On 07/27/15 20:47, Bartlomiej Zolnierkiewicz wrote: > On Monday, July 27, 2015 05:06:41 PM Viresh Kumar wrote: >> On 27-07-15, 13:14, Bartlomiej Zolnierkiewicz wrote: >>> Sorry but you don't seem to understand the issue. >> >> :) >> >> No, I did. I understand that if someone uses opp bindings today with >> some entries as turbo OPPs, cpufreq will use them as normal >> frequencies. And that may harm the board. >> >> BUT, opp-v2 code isn't ready to be used yet. And platforms should see >> what all is implemented before trying to use them. > > OK. > >> All I was saying is, this isn't a FIX as we haven't introduced the >> feature yet. Otherwise I had no issues with the patch. > > I will update the description for the next patchset revision. > Hi Bart, When will you re-post v3? Because I have a plan to send a pull-request to arm-soc until this weekend... - Kukjin ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-30 14:37 ` Kukjin Kim @ 2015-07-31 18:58 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-31 18:58 UTC (permalink / raw) To: Kukjin Kim Cc: Viresh Kumar, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On Thursday, July 30, 2015 11:37:27 PM Kukjin Kim wrote: > On 07/27/15 20:47, Bartlomiej Zolnierkiewicz wrote: > > On Monday, July 27, 2015 05:06:41 PM Viresh Kumar wrote: > >> On 27-07-15, 13:14, Bartlomiej Zolnierkiewicz wrote: > >>> Sorry but you don't seem to understand the issue. > >> > >> :) > >> > >> No, I did. I understand that if someone uses opp bindings today with > >> some entries as turbo OPPs, cpufreq will use them as normal > >> frequencies. And that may harm the board. > >> > >> BUT, opp-v2 code isn't ready to be used yet. And platforms should see > >> what all is implemented before trying to use them. > > > > OK. > > > >> All I was saying is, this isn't a FIX as we haven't introduced the > >> feature yet. Otherwise I had no issues with the patch. > > > > I will update the description for the next patchset revision. > > > Hi Bart, Hi, > When will you re-post v3? Because I have a plan to send a pull-request > to arm-soc until this weekend... I have just posted v3. I hope that it is not too late.. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-07-31 18:58 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-31 18:58 UTC (permalink / raw) To: linux-arm-kernel On Thursday, July 30, 2015 11:37:27 PM Kukjin Kim wrote: > On 07/27/15 20:47, Bartlomiej Zolnierkiewicz wrote: > > On Monday, July 27, 2015 05:06:41 PM Viresh Kumar wrote: > >> On 27-07-15, 13:14, Bartlomiej Zolnierkiewicz wrote: > >>> Sorry but you don't seem to understand the issue. > >> > >> :) > >> > >> No, I did. I understand that if someone uses opp bindings today with > >> some entries as turbo OPPs, cpufreq will use them as normal > >> frequencies. And that may harm the board. > >> > >> BUT, opp-v2 code isn't ready to be used yet. And platforms should see > >> what all is implemented before trying to use them. > > > > OK. > > > >> All I was saying is, this isn't a FIX as we haven't introduced the > >> feature yet. Otherwise I had no issues with the patch. > > > > I will update the description for the next patchset revision. > > > Hi Bart, Hi, > When will you re-post v3? Because I have a plan to send a pull-request > to arm-soc until this weekend... I have just posted v3. I hope that it is not too late.. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes 2015-07-30 14:37 ` Kukjin Kim @ 2015-08-04 1:31 ` Krzysztof Kozlowski -1 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-08-04 1:31 UTC (permalink / raw) To: Kukjin Kim, Bartlomiej Zolnierkiewicz Cc: Viresh Kumar, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 30.07.2015 23:37, Kukjin Kim wrote: > On 07/27/15 20:47, Bartlomiej Zolnierkiewicz wrote: >> On Monday, July 27, 2015 05:06:41 PM Viresh Kumar wrote: >>> On 27-07-15, 13:14, Bartlomiej Zolnierkiewicz wrote: >>>> Sorry but you don't seem to understand the issue. >>> >>> :) >>> >>> No, I did. I understand that if someone uses opp bindings today with >>> some entries as turbo OPPs, cpufreq will use them as normal >>> frequencies. And that may harm the board. >>> >>> BUT, opp-v2 code isn't ready to be used yet. And platforms should see >>> what all is implemented before trying to use them. >> >> OK. >> >>> All I was saying is, this isn't a FIX as we haven't introduced the >>> feature yet. Otherwise I had no issues with the patch. >> >> I will update the description for the next patchset revision. >> > Hi Bart, > > When will you re-post v3? Because I have a plan to send a pull-request > to arm-soc until this weekend... Dear Kukjin, We are already at 4.2-rc5 and you did not send the pull request before the weekend as you said. It is really late and there is no special reason for delaying the request. What happened? Best regards, Krzysztof ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes @ 2015-08-04 1:31 ` Krzysztof Kozlowski 0 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-08-04 1:31 UTC (permalink / raw) To: linux-arm-kernel On 30.07.2015 23:37, Kukjin Kim wrote: > On 07/27/15 20:47, Bartlomiej Zolnierkiewicz wrote: >> On Monday, July 27, 2015 05:06:41 PM Viresh Kumar wrote: >>> On 27-07-15, 13:14, Bartlomiej Zolnierkiewicz wrote: >>>> Sorry but you don't seem to understand the issue. >>> >>> :) >>> >>> No, I did. I understand that if someone uses opp bindings today with >>> some entries as turbo OPPs, cpufreq will use them as normal >>> frequencies. And that may harm the board. >>> >>> BUT, opp-v2 code isn't ready to be used yet. And platforms should see >>> what all is implemented before trying to use them. >> >> OK. >> >>> All I was saying is, this isn't a FIX as we haven't introduced the >>> feature yet. Otherwise I had no issues with the patch. >> >> I will update the description for the next patchset revision. >> > Hi Bart, > > When will you re-post v3? Because I have a plan to send a pull-request > to arm-soc until this weekend... Dear Kukjin, We are already at 4.2-rc5 and you did not send the pull request before the weekend as you said. It is really late and there is no special reason for delaying the request. What happened? Best regards, Krzysztof ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 3/7] cpufreq-dt: add turbo modes support 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel, b.zolnierkie Add turbo modes (from opp-v2 bindings) support using existing cpufreq 'boost' mode infrastructure: - add boost_supported field to struct cpufreq_dt_platform_data - set dt_cpufreq_driver.boost_supported in dt_cpufreq_probe() Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Michael Turquette <mturquette@baylibre.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Cc: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/cpufreq/cpufreq-dt.c | 7 ++++++- include/linux/cpufreq-dt.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c index 60d98fb..9024205 100644 --- a/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c @@ -408,6 +408,7 @@ static struct cpufreq_driver dt_cpufreq_driver = { static int dt_cpufreq_probe(struct platform_device *pdev) { + struct cpufreq_dt_platform_data *pd; struct device *cpu_dev; struct regulator *cpu_reg; struct clk *cpu_clk; @@ -428,7 +429,11 @@ static int dt_cpufreq_probe(struct platform_device *pdev) if (!IS_ERR(cpu_reg)) regulator_put(cpu_reg); - dt_cpufreq_driver.driver_data = dev_get_platdata(&pdev->dev); + pd = dev_get_platdata(&pdev->dev); + dt_cpufreq_driver.driver_data = pd; + + if (pd) + dt_cpufreq_driver.boost_supported = pd->boost_supported; ret = cpufreq_register_driver(&dt_cpufreq_driver); if (ret) diff --git a/include/linux/cpufreq-dt.h b/include/linux/cpufreq-dt.h index 0414009..483ca1b 100644 --- a/include/linux/cpufreq-dt.h +++ b/include/linux/cpufreq-dt.h @@ -17,6 +17,7 @@ struct cpufreq_dt_platform_data { * clock. */ bool independent_clocks; + bool boost_supported; }; #endif /* __CPUFREQ_DT_H__ */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v2 3/7] cpufreq-dt: add turbo modes support @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: linux-arm-kernel Add turbo modes (from opp-v2 bindings) support using existing cpufreq 'boost' mode infrastructure: - add boost_supported field to struct cpufreq_dt_platform_data - set dt_cpufreq_driver.boost_supported in dt_cpufreq_probe() Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Michael Turquette <mturquette@baylibre.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Cc: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/cpufreq/cpufreq-dt.c | 7 ++++++- include/linux/cpufreq-dt.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c index 60d98fb..9024205 100644 --- a/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c @@ -408,6 +408,7 @@ static struct cpufreq_driver dt_cpufreq_driver = { static int dt_cpufreq_probe(struct platform_device *pdev) { + struct cpufreq_dt_platform_data *pd; struct device *cpu_dev; struct regulator *cpu_reg; struct clk *cpu_clk; @@ -428,7 +429,11 @@ static int dt_cpufreq_probe(struct platform_device *pdev) if (!IS_ERR(cpu_reg)) regulator_put(cpu_reg); - dt_cpufreq_driver.driver_data = dev_get_platdata(&pdev->dev); + pd = dev_get_platdata(&pdev->dev); + dt_cpufreq_driver.driver_data = pd; + + if (pd) + dt_cpufreq_driver.boost_supported = pd->boost_supported; ret = cpufreq_register_driver(&dt_cpufreq_driver); if (ret) diff --git a/include/linux/cpufreq-dt.h b/include/linux/cpufreq-dt.h index 0414009..483ca1b 100644 --- a/include/linux/cpufreq-dt.h +++ b/include/linux/cpufreq-dt.h @@ -17,6 +17,7 @@ struct cpufreq_dt_platform_data { * clock. */ bool independent_clocks; + bool boost_supported; }; #endif /* __CPUFREQ_DT_H__ */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* Re: [PATCH v2 3/7] cpufreq-dt: add turbo modes support 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-10 8:22 ` Krzysztof Kozlowski -1 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 8:22 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > Add turbo modes (from opp-v2 bindings) support using > existing cpufreq 'boost' mode infrastructure: > - add boost_supported field to struct cpufreq_dt_platform_data > - set dt_cpufreq_driver.boost_supported in dt_cpufreq_probe() > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/cpufreq/cpufreq-dt.c | 7 ++++++- > include/linux/cpufreq-dt.h | 1 + > 2 files changed, 7 insertions(+), 1 deletion(-) Looks fine, Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 3/7] cpufreq-dt: add turbo modes support @ 2015-07-10 8:22 ` Krzysztof Kozlowski 0 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 8:22 UTC (permalink / raw) To: linux-arm-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > Add turbo modes (from opp-v2 bindings) support using > existing cpufreq 'boost' mode infrastructure: > - add boost_supported field to struct cpufreq_dt_platform_data > - set dt_cpufreq_driver.boost_supported in dt_cpufreq_probe() > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/cpufreq/cpufreq-dt.c | 7 ++++++- > include/linux/cpufreq-dt.h | 1 + > 2 files changed, 7 insertions(+), 1 deletion(-) Looks fine, Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 3/7] cpufreq-dt: add turbo modes support 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-27 8:37 ` Viresh Kumar -1 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 8:37 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 09-07-15, 17:43, Bartlomiej Zolnierkiewicz wrote: > diff --git a/include/linux/cpufreq-dt.h b/include/linux/cpufreq-dt.h > index 0414009..483ca1b 100644 > --- a/include/linux/cpufreq-dt.h > +++ b/include/linux/cpufreq-dt.h > @@ -17,6 +17,7 @@ struct cpufreq_dt_platform_data { > * clock. > */ > bool independent_clocks; > + bool boost_supported; > }; I am planning to kill this structure soon, don't add anything to it. We should be doing this based on DT. -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 3/7] cpufreq-dt: add turbo modes support @ 2015-07-27 8:37 ` Viresh Kumar 0 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 8:37 UTC (permalink / raw) To: linux-arm-kernel On 09-07-15, 17:43, Bartlomiej Zolnierkiewicz wrote: > diff --git a/include/linux/cpufreq-dt.h b/include/linux/cpufreq-dt.h > index 0414009..483ca1b 100644 > --- a/include/linux/cpufreq-dt.h > +++ b/include/linux/cpufreq-dt.h > @@ -17,6 +17,7 @@ struct cpufreq_dt_platform_data { > * clock. > */ > bool independent_clocks; > + bool boost_supported; > }; I am planning to kill this structure soon, don't add anything to it. We should be doing this based on DT. -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 3/7] cpufreq-dt: add turbo modes support 2015-07-27 8:37 ` Viresh Kumar @ 2015-07-27 11:01 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-27 11:01 UTC (permalink / raw) To: Viresh Kumar Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel Hi, On Monday, July 27, 2015 02:07:54 PM Viresh Kumar wrote: > On 09-07-15, 17:43, Bartlomiej Zolnierkiewicz wrote: > > diff --git a/include/linux/cpufreq-dt.h b/include/linux/cpufreq-dt.h > > index 0414009..483ca1b 100644 > > --- a/include/linux/cpufreq-dt.h > > +++ b/include/linux/cpufreq-dt.h > > @@ -17,6 +17,7 @@ struct cpufreq_dt_platform_data { > > * clock. > > */ > > bool independent_clocks; > > + bool boost_supported; > > }; > > I am planning to kill this structure soon, don't add anything to it. > We should be doing this based on DT. This change was in the original patch posted in April: https://lkml.org/lkml/2015/4/10/646 your review from a month ago didn't contain this request: https://lkml.org/lkml/2015/6/22/667 and now (after nearly 4 months) you are telling me that I should change this because you are planning to do some more changes in the future. Could we please keep it as it is for now and change it later (after independent_clocks configuration will get ported to use device tree)? Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 3/7] cpufreq-dt: add turbo modes support @ 2015-07-27 11:01 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-27 11:01 UTC (permalink / raw) To: linux-arm-kernel Hi, On Monday, July 27, 2015 02:07:54 PM Viresh Kumar wrote: > On 09-07-15, 17:43, Bartlomiej Zolnierkiewicz wrote: > > diff --git a/include/linux/cpufreq-dt.h b/include/linux/cpufreq-dt.h > > index 0414009..483ca1b 100644 > > --- a/include/linux/cpufreq-dt.h > > +++ b/include/linux/cpufreq-dt.h > > @@ -17,6 +17,7 @@ struct cpufreq_dt_platform_data { > > * clock. > > */ > > bool independent_clocks; > > + bool boost_supported; > > }; > > I am planning to kill this structure soon, don't add anything to it. > We should be doing this based on DT. This change was in the original patch posted in April: https://lkml.org/lkml/2015/4/10/646 your review from a month ago didn't contain this request: https://lkml.org/lkml/2015/6/22/667 and now (after nearly 4 months) you are telling me that I should change this because you are planning to do some more changes in the future. Could we please keep it as it is for now and change it later (after independent_clocks configuration will get ported to use device tree)? Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 3/7] cpufreq-dt: add turbo modes support 2015-07-27 11:01 ` Bartlomiej Zolnierkiewicz @ 2015-07-27 11:33 ` Viresh Kumar -1 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 11:33 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 27-07-15, 13:01, Bartlomiej Zolnierkiewicz wrote: First of all, please don't be angry :).. We can discuss and get things sorted out ... > This change was in the original patch posted in April: > https://lkml.org/lkml/2015/4/10/646 Yeah, and I already apologized for missing the request :) > your review from a month ago didn't contain this request: > https://lkml.org/lkml/2015/6/22/667 Your patch inserted almost 116 lines and most of the stuff was around adding new bindings to get things working with cpufreq-dt driver. And so I replied to the most important stuff, i.e. don't add new bindings, we will sort it out with opp-v2. And frankly that wasn't the time where we could have discussed how exactly we are going to use it. Ofcourse we should get it via DT, platform data is just not required. So, me not NAK ing this approach was fine as it wasn't about keeping this data in the platform data part. > and now (after nearly 4 months) you are telling me that I will say a month, as we discarded most of that patch recently :) > I should change this because you are planning to do some > more changes in the future. Its not about me doing some changes. But the whole point of doing the opp-v2 thing was to get rid of such platform data things.. Just that your work is competing with opp-v2 code :) > Could we please keep it as it is for now and change it > later (after independent_clocks configuration will get > ported to use device tree)? I thought we can get your work to a better shape, with all credit to you. But if you have some dependency on this for 4.3, then I don't mind killing this structure after you have polluted it a bit more :) -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 3/7] cpufreq-dt: add turbo modes support @ 2015-07-27 11:33 ` Viresh Kumar 0 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 11:33 UTC (permalink / raw) To: linux-arm-kernel On 27-07-15, 13:01, Bartlomiej Zolnierkiewicz wrote: First of all, please don't be angry :).. We can discuss and get things sorted out ... > This change was in the original patch posted in April: > https://lkml.org/lkml/2015/4/10/646 Yeah, and I already apologized for missing the request :) > your review from a month ago didn't contain this request: > https://lkml.org/lkml/2015/6/22/667 Your patch inserted almost 116 lines and most of the stuff was around adding new bindings to get things working with cpufreq-dt driver. And so I replied to the most important stuff, i.e. don't add new bindings, we will sort it out with opp-v2. And frankly that wasn't the time where we could have discussed how exactly we are going to use it. Ofcourse we should get it via DT, platform data is just not required. So, me not NAK ing this approach was fine as it wasn't about keeping this data in the platform data part. > and now (after nearly 4 months) you are telling me that I will say a month, as we discarded most of that patch recently :) > I should change this because you are planning to do some > more changes in the future. Its not about me doing some changes. But the whole point of doing the opp-v2 thing was to get rid of such platform data things.. Just that your work is competing with opp-v2 code :) > Could we please keep it as it is for now and change it > later (after independent_clocks configuration will get > ported to use device tree)? I thought we can get your work to a better shape, with all credit to you. But if you have some dependency on this for 4.3, then I don't mind killing this structure after you have polluted it a bit more :) -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 3/7] cpufreq-dt: add turbo modes support 2015-07-27 11:33 ` Viresh Kumar @ 2015-07-27 11:58 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-27 11:58 UTC (permalink / raw) To: Viresh Kumar Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On Monday, July 27, 2015 05:03:40 PM Viresh Kumar wrote: > On 27-07-15, 13:01, Bartlomiej Zolnierkiewicz wrote: > > First of all, please don't be angry :).. We can discuss and get things > sorted out ... OK :) > > This change was in the original patch posted in April: > > https://lkml.org/lkml/2015/4/10/646 > > Yeah, and I already apologized for missing the request :) > > > your review from a month ago didn't contain this request: > > https://lkml.org/lkml/2015/6/22/667 > > Your patch inserted almost 116 lines and most of the stuff was around > adding new bindings to get things working with cpufreq-dt driver. > > And so I replied to the most important stuff, i.e. don't add new > bindings, we will sort it out with opp-v2. > > And frankly that wasn't the time where we could have discussed how > exactly we are going to use it. Ofcourse we should get it via DT, > platform data is just not required. > > So, me not NAK ing this approach was fine as it wasn't about keeping > this data in the platform data part. > > > and now (after nearly 4 months) you are telling me that > > I will say a month, as we discarded most of that patch recently :) > > > I should change this because you are planning to do some > > more changes in the future. > > Its not about me doing some changes. But the whole point of doing the > opp-v2 thing was to get rid of such platform data things.. > > Just that your work is competing with opp-v2 code :) > > > Could we please keep it as it is for now and change it > > later (after independent_clocks configuration will get > > ported to use device tree)? > > I thought we can get your work to a better shape, with all credit to > you. But if you have some dependency on this for 4.3, then I don't > mind killing this structure after you have polluted it a bit more :) Thank you. This is exactly the case here (I would like to get Exynos4x12 conversion to use cpufreq-dt + exynos-cpufreq removal in v4.3 if possible and adding new DT bindings will most likely slow down the process considerably). Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 3/7] cpufreq-dt: add turbo modes support @ 2015-07-27 11:58 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-27 11:58 UTC (permalink / raw) To: linux-arm-kernel On Monday, July 27, 2015 05:03:40 PM Viresh Kumar wrote: > On 27-07-15, 13:01, Bartlomiej Zolnierkiewicz wrote: > > First of all, please don't be angry :).. We can discuss and get things > sorted out ... OK :) > > This change was in the original patch posted in April: > > https://lkml.org/lkml/2015/4/10/646 > > Yeah, and I already apologized for missing the request :) > > > your review from a month ago didn't contain this request: > > https://lkml.org/lkml/2015/6/22/667 > > Your patch inserted almost 116 lines and most of the stuff was around > adding new bindings to get things working with cpufreq-dt driver. > > And so I replied to the most important stuff, i.e. don't add new > bindings, we will sort it out with opp-v2. > > And frankly that wasn't the time where we could have discussed how > exactly we are going to use it. Ofcourse we should get it via DT, > platform data is just not required. > > So, me not NAK ing this approach was fine as it wasn't about keeping > this data in the platform data part. > > > and now (after nearly 4 months) you are telling me that > > I will say a month, as we discarded most of that patch recently :) > > > I should change this because you are planning to do some > > more changes in the future. > > Its not about me doing some changes. But the whole point of doing the > opp-v2 thing was to get rid of such platform data things.. > > Just that your work is competing with opp-v2 code :) > > > Could we please keep it as it is for now and change it > > later (after independent_clocks configuration will get > > ported to use device tree)? > > I thought we can get your work to a better shape, with all credit to > you. But if you have some dependency on this for 4.3, then I don't > mind killing this structure after you have polluted it a bit more :) Thank you. This is exactly the case here (I would like to get Exynos4x12 conversion to use cpufreq-dt + exynos-cpufreq removal in v4.3 if possible and adding new DT bindings will most likely slow down the process considerably). Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 3/7] cpufreq-dt: add turbo modes support 2015-07-27 11:58 ` Bartlomiej Zolnierkiewicz @ 2015-07-27 12:01 ` Viresh Kumar -1 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 12:01 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz Cc: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 27-07-15, 13:58, Bartlomiej Zolnierkiewicz wrote: > Thank you. This is exactly the case here (I would like to get > Exynos4x12 conversion to use cpufreq-dt + exynos-cpufreq removal > in v4.3 if possible and adding new DT bindings will most likely > slow down the process considerably). Heh, I never asked you to add new DT bindings, I said we can solve it with DT. We already have turbo properties in DT. -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 3/7] cpufreq-dt: add turbo modes support @ 2015-07-27 12:01 ` Viresh Kumar 0 siblings, 0 replies; 69+ messages in thread From: Viresh Kumar @ 2015-07-27 12:01 UTC (permalink / raw) To: linux-arm-kernel On 27-07-15, 13:58, Bartlomiej Zolnierkiewicz wrote: > Thank you. This is exactly the case here (I would like to get > Exynos4x12 conversion to use cpufreq-dt + exynos-cpufreq removal > in v4.3 if possible and adding new DT bindings will most likely > slow down the process considerably). Heh, I never asked you to add new DT bindings, I said we can solve it with DT. We already have turbo properties in DT. -- viresh ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel, b.zolnierkie With the addition of the new Samsung specific cpu-clock type, the arm clock can be represented as a cpu-clock type. Add the CPU clock configuration data and instantiate the CPU clock type for Exynos4x12. Based on the earlier work by Thomas Abraham. Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Michael Turquette <mturquette@baylibre.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/clk/samsung/clk-exynos4.c | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c index cae2c048..3071260 100644 --- a/drivers/clk/samsung/clk-exynos4.c +++ b/drivers/clk/samsung/clk-exynos4.c @@ -1396,6 +1396,45 @@ static const struct exynos_cpuclk_cfg_data e4210_armclk_d[] __initconst = { { 0 }, }; +static const struct exynos_cpuclk_cfg_data e4212_armclk_d[] __initconst = { + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4210_CPU_DIV1(2, 4), }, + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4210_CPU_DIV1(2, 4), }, + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4210_CPU_DIV1(2, 3), }, + { 0 }, +}; + +#define E4412_CPU_DIV1(cores, hpm, copy) \ + (((cores) << 8) | ((hpm) << 4) | ((copy) << 0)) + +static const struct exynos_cpuclk_cfg_data e4412_armclk_d[] __initconst = { + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(7, 0, 6), }, + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(6, 0, 6), }, + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(6, 0, 5), }, + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(5, 0, 5), }, + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4412_CPU_DIV1(5, 0, 4), }, + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4412_CPU_DIV1(4, 0, 4), }, + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(4, 0, 3), }, + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(3, 0, 3), }, + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(3, 0, 3), }, + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4412_CPU_DIV1(0, 0, 3), }, + { 0 }, +}; + /* register exynos4 clocks */ static void __init exynos4_clk_init(struct device_node *np, enum exynos4_soc soc) @@ -1489,6 +1528,17 @@ static void __init exynos4_clk_init(struct device_node *np, samsung_clk_register_fixed_factor(ctx, exynos4x12_fixed_factor_clks, ARRAY_SIZE(exynos4x12_fixed_factor_clks)); + if (of_machine_is_compatible("samsung,exynos4412")) { + exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk", + mout_core_p4x12[0], mout_core_p4x12[1], 0x14200, + e4412_armclk_d, ARRAY_SIZE(e4412_armclk_d), + CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1); + } else { + exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk", + mout_core_p4x12[0], mout_core_p4x12[1], 0x14200, + e4212_armclk_d, ARRAY_SIZE(e4212_armclk_d), + CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1); + } } samsung_clk_register_alias(ctx, exynos4_aliases, -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: linux-arm-kernel With the addition of the new Samsung specific cpu-clock type, the arm clock can be represented as a cpu-clock type. Add the CPU clock configuration data and instantiate the CPU clock type for Exynos4x12. Based on the earlier work by Thomas Abraham. Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Michael Turquette <mturquette@baylibre.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/clk/samsung/clk-exynos4.c | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c index cae2c048..3071260 100644 --- a/drivers/clk/samsung/clk-exynos4.c +++ b/drivers/clk/samsung/clk-exynos4.c @@ -1396,6 +1396,45 @@ static const struct exynos_cpuclk_cfg_data e4210_armclk_d[] __initconst = { { 0 }, }; +static const struct exynos_cpuclk_cfg_data e4212_armclk_d[] __initconst = { + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4210_CPU_DIV1(2, 4), }, + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4210_CPU_DIV1(2, 4), }, + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4210_CPU_DIV1(2, 3), }, + { 0 }, +}; + +#define E4412_CPU_DIV1(cores, hpm, copy) \ + (((cores) << 8) | ((hpm) << 4) | ((copy) << 0)) + +static const struct exynos_cpuclk_cfg_data e4412_armclk_d[] __initconst = { + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(7, 0, 6), }, + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(6, 0, 6), }, + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(6, 0, 5), }, + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(5, 0, 5), }, + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4412_CPU_DIV1(5, 0, 4), }, + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4412_CPU_DIV1(4, 0, 4), }, + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(4, 0, 3), }, + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(3, 0, 3), }, + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(3, 0, 3), }, + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4412_CPU_DIV1(0, 0, 3), }, + { 0 }, +}; + /* register exynos4 clocks */ static void __init exynos4_clk_init(struct device_node *np, enum exynos4_soc soc) @@ -1489,6 +1528,17 @@ static void __init exynos4_clk_init(struct device_node *np, samsung_clk_register_fixed_factor(ctx, exynos4x12_fixed_factor_clks, ARRAY_SIZE(exynos4x12_fixed_factor_clks)); + if (of_machine_is_compatible("samsung,exynos4412")) { + exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk", + mout_core_p4x12[0], mout_core_p4x12[1], 0x14200, + e4412_armclk_d, ARRAY_SIZE(e4412_armclk_d), + CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1); + } else { + exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk", + mout_core_p4x12[0], mout_core_p4x12[1], 0x14200, + e4212_armclk_d, ARRAY_SIZE(e4212_armclk_d), + CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1); + } } samsung_clk_register_alias(ctx, exynos4_aliases, -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* Re: [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-10 8:30 ` Krzysztof Kozlowski -1 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 8:30 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > With the addition of the new Samsung specific cpu-clock type, the > arm clock can be represented as a cpu-clock type. Add the CPU clock > configuration data and instantiate the CPU clock type for Exynos4x12. > > Based on the earlier work by Thomas Abraham. > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/clk/samsung/clk-exynos4.c | 50 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 50 insertions(+) > > diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c > index cae2c048..3071260 100644 > --- a/drivers/clk/samsung/clk-exynos4.c > +++ b/drivers/clk/samsung/clk-exynos4.c > @@ -1396,6 +1396,45 @@ static const struct exynos_cpuclk_cfg_data e4210_armclk_d[] __initconst = { > { 0 }, > }; > > +static const struct exynos_cpuclk_cfg_data e4212_armclk_d[] __initconst = { > + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, > + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, > + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, > + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, > + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4210_CPU_DIV1(2, 4), }, > + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4210_CPU_DIV1(2, 4), }, > + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, > + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, > + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, > + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, > + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, > + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, > + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, > + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4210_CPU_DIV1(2, 3), }, > + { 0 }, > +}; > + > +#define E4412_CPU_DIV1(cores, hpm, copy) \ > + (((cores) << 8) | ((hpm) << 4) | ((copy) << 0)) > + > +static const struct exynos_cpuclk_cfg_data e4412_armclk_d[] __initconst = { > + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(7, 0, 6), }, > + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(6, 0, 6), }, > + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(6, 0, 5), }, > + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(5, 0, 5), }, > + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4412_CPU_DIV1(5, 0, 4), }, > + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4412_CPU_DIV1(4, 0, 4), }, > + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(4, 0, 3), }, > + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(3, 0, 3), }, > + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(3, 0, 3), }, > + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, > + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, > + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, > + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, > + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4412_CPU_DIV1(0, 0, 3), }, > + { 0 }, > +}; Numbers look fine! > + > /* register exynos4 clocks */ > static void __init exynos4_clk_init(struct device_node *np, > enum exynos4_soc soc) > @@ -1489,6 +1528,17 @@ static void __init exynos4_clk_init(struct device_node *np, > samsung_clk_register_fixed_factor(ctx, > exynos4x12_fixed_factor_clks, > ARRAY_SIZE(exynos4x12_fixed_factor_clks)); > + if (of_machine_is_compatible("samsung,exynos4412")) { The driver uses here enum exynos4_soc to differentiate between SoC (unless I missed some changes). This of_machine_is_compatible() makes sense but introduces inconsistency. I would prefer sticking to one convention: always enum or switch everything (before this patch) to of_compatible. Best regards, Krzysztof > + exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk", > + mout_core_p4x12[0], mout_core_p4x12[1], 0x14200, > + e4412_armclk_d, ARRAY_SIZE(e4412_armclk_d), > + CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1); > + } else { > + exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk", > + mout_core_p4x12[0], mout_core_p4x12[1], 0x14200, > + e4212_armclk_d, ARRAY_SIZE(e4212_armclk_d), > + CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1); > + } > } > > samsung_clk_register_alias(ctx, exynos4_aliases, > ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock @ 2015-07-10 8:30 ` Krzysztof Kozlowski 0 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 8:30 UTC (permalink / raw) To: linux-arm-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > With the addition of the new Samsung specific cpu-clock type, the > arm clock can be represented as a cpu-clock type. Add the CPU clock > configuration data and instantiate the CPU clock type for Exynos4x12. > > Based on the earlier work by Thomas Abraham. > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/clk/samsung/clk-exynos4.c | 50 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 50 insertions(+) > > diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c > index cae2c048..3071260 100644 > --- a/drivers/clk/samsung/clk-exynos4.c > +++ b/drivers/clk/samsung/clk-exynos4.c > @@ -1396,6 +1396,45 @@ static const struct exynos_cpuclk_cfg_data e4210_armclk_d[] __initconst = { > { 0 }, > }; > > +static const struct exynos_cpuclk_cfg_data e4212_armclk_d[] __initconst = { > + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, > + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, > + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, > + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, > + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4210_CPU_DIV1(2, 4), }, > + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4210_CPU_DIV1(2, 4), }, > + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, > + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, > + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, > + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, > + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, > + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, > + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, > + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4210_CPU_DIV1(2, 3), }, > + { 0 }, > +}; > + > +#define E4412_CPU_DIV1(cores, hpm, copy) \ > + (((cores) << 8) | ((hpm) << 4) | ((copy) << 0)) > + > +static const struct exynos_cpuclk_cfg_data e4412_armclk_d[] __initconst = { > + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(7, 0, 6), }, > + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(6, 0, 6), }, > + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(6, 0, 5), }, > + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(5, 0, 5), }, > + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4412_CPU_DIV1(5, 0, 4), }, > + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4412_CPU_DIV1(4, 0, 4), }, > + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(4, 0, 3), }, > + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(3, 0, 3), }, > + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(3, 0, 3), }, > + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, > + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, > + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, > + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, > + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4412_CPU_DIV1(0, 0, 3), }, > + { 0 }, > +}; Numbers look fine! > + > /* register exynos4 clocks */ > static void __init exynos4_clk_init(struct device_node *np, > enum exynos4_soc soc) > @@ -1489,6 +1528,17 @@ static void __init exynos4_clk_init(struct device_node *np, > samsung_clk_register_fixed_factor(ctx, > exynos4x12_fixed_factor_clks, > ARRAY_SIZE(exynos4x12_fixed_factor_clks)); > + if (of_machine_is_compatible("samsung,exynos4412")) { The driver uses here enum exynos4_soc to differentiate between SoC (unless I missed some changes). This of_machine_is_compatible() makes sense but introduces inconsistency. I would prefer sticking to one convention: always enum or switch everything (before this patch) to of_compatible. Best regards, Krzysztof > + exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk", > + mout_core_p4x12[0], mout_core_p4x12[1], 0x14200, > + e4412_armclk_d, ARRAY_SIZE(e4412_armclk_d), > + CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1); > + } else { > + exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk", > + mout_core_p4x12[0], mout_core_p4x12[1], 0x14200, > + e4212_armclk_d, ARRAY_SIZE(e4212_armclk_d), > + CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1); > + } > } > > samsung_clk_register_alias(ctx, exynos4_aliases, > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock 2015-07-10 8:30 ` Krzysztof Kozlowski @ 2015-07-10 16:12 ` Javier Martinez Canillas -1 siblings, 0 replies; 69+ messages in thread From: Javier Martinez Canillas @ 2015-07-10 16:12 UTC (permalink / raw) To: Krzysztof Kozlowski, Bartlomiej Zolnierkiewicz, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel Hello Krzysztof, On 07/10/2015 01:30 AM, Krzysztof Kozlowski wrote: > On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: >> With the addition of the new Samsung specific cpu-clock type, the >> arm clock can be represented as a cpu-clock type. Add the CPU clock >> configuration data and instantiate the CPU clock type for Exynos4x12. >> >> Based on the earlier work by Thomas Abraham. >> >> Cc: Tomasz Figa <tomasz.figa@gmail.com> >> Cc: Michael Turquette <mturquette@baylibre.com> >> Cc: Javier Martinez Canillas <javier@dowhile0.org> >> Cc: Thomas Abraham <thomas.ab@samsung.com> >> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> >> --- >> drivers/clk/samsung/clk-exynos4.c | 50 +++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 50 insertions(+) >> >> diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c >> index cae2c048..3071260 100644 >> --- a/drivers/clk/samsung/clk-exynos4.c >> +++ b/drivers/clk/samsung/clk-exynos4.c >> @@ -1396,6 +1396,45 @@ static const struct exynos_cpuclk_cfg_data e4210_armclk_d[] __initconst = { >> { 0 }, >> }; >> >> +static const struct exynos_cpuclk_cfg_data e4212_armclk_d[] __initconst = { >> + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, >> + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, >> + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, >> + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, >> + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4210_CPU_DIV1(2, 4), }, >> + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4210_CPU_DIV1(2, 4), }, >> + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, >> + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, >> + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >> + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >> + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >> + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >> + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >> + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4210_CPU_DIV1(2, 3), }, >> + { 0 }, >> +}; >> + >> +#define E4412_CPU_DIV1(cores, hpm, copy) \ >> + (((cores) << 8) | ((hpm) << 4) | ((copy) << 0)) >> + >> +static const struct exynos_cpuclk_cfg_data e4412_armclk_d[] __initconst = { >> + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(7, 0, 6), }, >> + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(6, 0, 6), }, >> + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(6, 0, 5), }, >> + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(5, 0, 5), }, >> + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4412_CPU_DIV1(5, 0, 4), }, >> + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4412_CPU_DIV1(4, 0, 4), }, >> + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(4, 0, 3), }, >> + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(3, 0, 3), }, >> + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(3, 0, 3), }, >> + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, >> + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, >> + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, >> + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, >> + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4412_CPU_DIV1(0, 0, 3), }, >> + { 0 }, >> +}; > > Numbers look fine! > >> + >> /* register exynos4 clocks */ >> static void __init exynos4_clk_init(struct device_node *np, >> enum exynos4_soc soc) >> @@ -1489,6 +1528,17 @@ static void __init exynos4_clk_init(struct device_node *np, >> samsung_clk_register_fixed_factor(ctx, >> exynos4x12_fixed_factor_clks, >> ARRAY_SIZE(exynos4x12_fixed_factor_clks)); >> + if (of_machine_is_compatible("samsung,exynos4412")) { > > The driver uses here enum exynos4_soc to differentiate between SoC > (unless I missed some changes). This of_machine_is_compatible() makes > sense but introduces inconsistency. I would prefer sticking to one > convention: always enum or switch everything (before this patch) to > of_compatible. > When reviewing this patch I also ran into the same thing because as you said, it's not consistent. But digging a little bit I found that is not that easy since the two are not checking exactly the same. The enum is to differentiate between "samsung,exynos4412-clock" and "samsung,exynos4210-clock" while the of_machine_is_compatible() is for "samsung,exynos4412" and "samsung,exynos4212". The problem is that both exynos4412 and exynos4212 use the same "samsung,exynos4412-clock" compatible for their clock controller nodes. But there are differences so it would had been better to also have a "samsung,exynos4212-clock" to avoid the of_machine_is_compatible() but that is not possible anymore without breaking DT backward compatibility. On the other hand, if of_machine_is_compatible() is used for everything, then there is no point anymore to have both "samsung,exynos4412-clock" and "samsung,exynos4210-clock". A single "samsung,exynos4-clock" plus checking the SoC would had been enough. That's why I thought that Bart's approach was sensible although is true that the of_compatible() check can be moved to exynos4412_clk_init() and the enum be extended so at least exynos4_clk_init() is consistent. > Best regards, > Krzysztof Best regards, -- Javier Martinez Canillas Open Source Group Samsung Research America ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock @ 2015-07-10 16:12 ` Javier Martinez Canillas 0 siblings, 0 replies; 69+ messages in thread From: Javier Martinez Canillas @ 2015-07-10 16:12 UTC (permalink / raw) To: linux-arm-kernel Hello Krzysztof, On 07/10/2015 01:30 AM, Krzysztof Kozlowski wrote: > On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: >> With the addition of the new Samsung specific cpu-clock type, the >> arm clock can be represented as a cpu-clock type. Add the CPU clock >> configuration data and instantiate the CPU clock type for Exynos4x12. >> >> Based on the earlier work by Thomas Abraham. >> >> Cc: Tomasz Figa <tomasz.figa@gmail.com> >> Cc: Michael Turquette <mturquette@baylibre.com> >> Cc: Javier Martinez Canillas <javier@dowhile0.org> >> Cc: Thomas Abraham <thomas.ab@samsung.com> >> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> >> --- >> drivers/clk/samsung/clk-exynos4.c | 50 +++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 50 insertions(+) >> >> diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c >> index cae2c048..3071260 100644 >> --- a/drivers/clk/samsung/clk-exynos4.c >> +++ b/drivers/clk/samsung/clk-exynos4.c >> @@ -1396,6 +1396,45 @@ static const struct exynos_cpuclk_cfg_data e4210_armclk_d[] __initconst = { >> { 0 }, >> }; >> >> +static const struct exynos_cpuclk_cfg_data e4212_armclk_d[] __initconst = { >> + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, >> + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, >> + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, >> + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, >> + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4210_CPU_DIV1(2, 4), }, >> + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4210_CPU_DIV1(2, 4), }, >> + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, >> + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, >> + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >> + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >> + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >> + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >> + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >> + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4210_CPU_DIV1(2, 3), }, >> + { 0 }, >> +}; >> + >> +#define E4412_CPU_DIV1(cores, hpm, copy) \ >> + (((cores) << 8) | ((hpm) << 4) | ((copy) << 0)) >> + >> +static const struct exynos_cpuclk_cfg_data e4412_armclk_d[] __initconst = { >> + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(7, 0, 6), }, >> + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(6, 0, 6), }, >> + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(6, 0, 5), }, >> + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(5, 0, 5), }, >> + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4412_CPU_DIV1(5, 0, 4), }, >> + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4412_CPU_DIV1(4, 0, 4), }, >> + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(4, 0, 3), }, >> + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(3, 0, 3), }, >> + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(3, 0, 3), }, >> + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, >> + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, >> + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, >> + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, >> + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4412_CPU_DIV1(0, 0, 3), }, >> + { 0 }, >> +}; > > Numbers look fine! > >> + >> /* register exynos4 clocks */ >> static void __init exynos4_clk_init(struct device_node *np, >> enum exynos4_soc soc) >> @@ -1489,6 +1528,17 @@ static void __init exynos4_clk_init(struct device_node *np, >> samsung_clk_register_fixed_factor(ctx, >> exynos4x12_fixed_factor_clks, >> ARRAY_SIZE(exynos4x12_fixed_factor_clks)); >> + if (of_machine_is_compatible("samsung,exynos4412")) { > > The driver uses here enum exynos4_soc to differentiate between SoC > (unless I missed some changes). This of_machine_is_compatible() makes > sense but introduces inconsistency. I would prefer sticking to one > convention: always enum or switch everything (before this patch) to > of_compatible. > When reviewing this patch I also ran into the same thing because as you said, it's not consistent. But digging a little bit I found that is not that easy since the two are not checking exactly the same. The enum is to differentiate between "samsung,exynos4412-clock" and "samsung,exynos4210-clock" while the of_machine_is_compatible() is for "samsung,exynos4412" and "samsung,exynos4212". The problem is that both exynos4412 and exynos4212 use the same "samsung,exynos4412-clock" compatible for their clock controller nodes. But there are differences so it would had been better to also have a "samsung,exynos4212-clock" to avoid the of_machine_is_compatible() but that is not possible anymore without breaking DT backward compatibility. On the other hand, if of_machine_is_compatible() is used for everything, then there is no point anymore to have both "samsung,exynos4412-clock" and "samsung,exynos4210-clock". A single "samsung,exynos4-clock" plus checking the SoC would had been enough. That's why I thought that Bart's approach was sensible although is true that the of_compatible() check can be moved to exynos4412_clk_init() and the enum be extended so at least exynos4_clk_init() is consistent. > Best regards, > Krzysztof Best regards, -- Javier Martinez Canillas Open Source Group Samsung Research America ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock 2015-07-10 16:12 ` Javier Martinez Canillas @ 2015-07-11 6:36 ` Krzysztof Kozlowski -1 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-11 6:36 UTC (permalink / raw) To: Javier Martinez Canillas Cc: Krzysztof Kozlowski, Bartlomiej Zolnierkiewicz, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel 2015-07-11 1:12 GMT+09:00 Javier Martinez Canillas <javier@osg.samsung.com>: > Hello Krzysztof, > > On 07/10/2015 01:30 AM, Krzysztof Kozlowski wrote: >> On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: >>> With the addition of the new Samsung specific cpu-clock type, the >>> arm clock can be represented as a cpu-clock type. Add the CPU clock >>> configuration data and instantiate the CPU clock type for Exynos4x12. >>> >>> Based on the earlier work by Thomas Abraham. >>> >>> Cc: Tomasz Figa <tomasz.figa@gmail.com> >>> Cc: Michael Turquette <mturquette@baylibre.com> >>> Cc: Javier Martinez Canillas <javier@dowhile0.org> >>> Cc: Thomas Abraham <thomas.ab@samsung.com> >>> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> >>> --- >>> drivers/clk/samsung/clk-exynos4.c | 50 +++++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 50 insertions(+) >>> >>> diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c >>> index cae2c048..3071260 100644 >>> --- a/drivers/clk/samsung/clk-exynos4.c >>> +++ b/drivers/clk/samsung/clk-exynos4.c >>> @@ -1396,6 +1396,45 @@ static const struct exynos_cpuclk_cfg_data e4210_armclk_d[] __initconst = { >>> { 0 }, >>> }; >>> >>> +static const struct exynos_cpuclk_cfg_data e4212_armclk_d[] __initconst = { >>> + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, >>> + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, >>> + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, >>> + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, >>> + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4210_CPU_DIV1(2, 4), }, >>> + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4210_CPU_DIV1(2, 4), }, >>> + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4210_CPU_DIV1(2, 3), }, >>> + { 0 }, >>> +}; >>> + >>> +#define E4412_CPU_DIV1(cores, hpm, copy) \ >>> + (((cores) << 8) | ((hpm) << 4) | ((copy) << 0)) >>> + >>> +static const struct exynos_cpuclk_cfg_data e4412_armclk_d[] __initconst = { >>> + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(7, 0, 6), }, >>> + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(6, 0, 6), }, >>> + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(6, 0, 5), }, >>> + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(5, 0, 5), }, >>> + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4412_CPU_DIV1(5, 0, 4), }, >>> + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4412_CPU_DIV1(4, 0, 4), }, >>> + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(4, 0, 3), }, >>> + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(3, 0, 3), }, >>> + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(3, 0, 3), }, >>> + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, >>> + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, >>> + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, >>> + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, >>> + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4412_CPU_DIV1(0, 0, 3), }, >>> + { 0 }, >>> +}; >> >> Numbers look fine! >> >>> + >>> /* register exynos4 clocks */ >>> static void __init exynos4_clk_init(struct device_node *np, >>> enum exynos4_soc soc) >>> @@ -1489,6 +1528,17 @@ static void __init exynos4_clk_init(struct device_node *np, >>> samsung_clk_register_fixed_factor(ctx, >>> exynos4x12_fixed_factor_clks, >>> ARRAY_SIZE(exynos4x12_fixed_factor_clks)); >>> + if (of_machine_is_compatible("samsung,exynos4412")) { >> >> The driver uses here enum exynos4_soc to differentiate between SoC >> (unless I missed some changes). This of_machine_is_compatible() makes >> sense but introduces inconsistency. I would prefer sticking to one >> convention: always enum or switch everything (before this patch) to >> of_compatible. >> > > When reviewing this patch I also ran into the same thing because as you > said, it's not consistent. But digging a little bit I found that is not > that easy since the two are not checking exactly the same. > > The enum is to differentiate between "samsung,exynos4412-clock" and > "samsung,exynos4210-clock" while the of_machine_is_compatible() is for > "samsung,exynos4412" and "samsung,exynos4212". > > The problem is that both exynos4412 and exynos4212 use the same > "samsung,exynos4412-clock" compatible for their clock controller nodes. > But there are differences so it would had been better to also have a > "samsung,exynos4212-clock" to avoid the of_machine_is_compatible() but > that is not possible anymore without breaking DT backward compatibility. > > On the other hand, if of_machine_is_compatible() is used for everything, > then there is no point anymore to have both "samsung,exynos4412-clock" > and "samsung,exynos4210-clock". A single "samsung,exynos4-clock" plus > checking the SoC would had been enough. > > That's why I thought that Bart's approach was sensible although is true > that the of_compatible() check can be moved to exynos4412_clk_init() > and the enum be extended so at least exynos4_clk_init() is consistent. You're right, I missed that difference. Thanks for explaining, I agree now: Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock @ 2015-07-11 6:36 ` Krzysztof Kozlowski 0 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-11 6:36 UTC (permalink / raw) To: linux-arm-kernel 2015-07-11 1:12 GMT+09:00 Javier Martinez Canillas <javier@osg.samsung.com>: > Hello Krzysztof, > > On 07/10/2015 01:30 AM, Krzysztof Kozlowski wrote: >> On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: >>> With the addition of the new Samsung specific cpu-clock type, the >>> arm clock can be represented as a cpu-clock type. Add the CPU clock >>> configuration data and instantiate the CPU clock type for Exynos4x12. >>> >>> Based on the earlier work by Thomas Abraham. >>> >>> Cc: Tomasz Figa <tomasz.figa@gmail.com> >>> Cc: Michael Turquette <mturquette@baylibre.com> >>> Cc: Javier Martinez Canillas <javier@dowhile0.org> >>> Cc: Thomas Abraham <thomas.ab@samsung.com> >>> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> >>> --- >>> drivers/clk/samsung/clk-exynos4.c | 50 +++++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 50 insertions(+) >>> >>> diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c >>> index cae2c048..3071260 100644 >>> --- a/drivers/clk/samsung/clk-exynos4.c >>> +++ b/drivers/clk/samsung/clk-exynos4.c >>> @@ -1396,6 +1396,45 @@ static const struct exynos_cpuclk_cfg_data e4210_armclk_d[] __initconst = { >>> { 0 }, >>> }; >>> >>> +static const struct exynos_cpuclk_cfg_data e4212_armclk_d[] __initconst = { >>> + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, >>> + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4210_CPU_DIV1(2, 6), }, >>> + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, >>> + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4210_CPU_DIV1(2, 5), }, >>> + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4210_CPU_DIV1(2, 4), }, >>> + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4210_CPU_DIV1(2, 4), }, >>> + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4210_CPU_DIV1(2, 3), }, >>> + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4210_CPU_DIV1(2, 3), }, >>> + { 0 }, >>> +}; >>> + >>> +#define E4412_CPU_DIV1(cores, hpm, copy) \ >>> + (((cores) << 8) | ((hpm) << 4) | ((copy) << 0)) >>> + >>> +static const struct exynos_cpuclk_cfg_data e4412_armclk_d[] __initconst = { >>> + { 1500000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(7, 0, 6), }, >>> + { 1400000, E4210_CPU_DIV0(2, 1, 6, 0, 7, 3), E4412_CPU_DIV1(6, 0, 6), }, >>> + { 1300000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(6, 0, 5), }, >>> + { 1200000, E4210_CPU_DIV0(2, 1, 5, 0, 7, 3), E4412_CPU_DIV1(5, 0, 5), }, >>> + { 1100000, E4210_CPU_DIV0(2, 1, 4, 0, 6, 3), E4412_CPU_DIV1(5, 0, 4), }, >>> + { 1000000, E4210_CPU_DIV0(1, 1, 4, 0, 5, 2), E4412_CPU_DIV1(4, 0, 4), }, >>> + { 900000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(4, 0, 3), }, >>> + { 800000, E4210_CPU_DIV0(1, 1, 3, 0, 5, 2), E4412_CPU_DIV1(3, 0, 3), }, >>> + { 700000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(3, 0, 3), }, >>> + { 600000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, >>> + { 500000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(2, 0, 3), }, >>> + { 400000, E4210_CPU_DIV0(1, 1, 3, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, >>> + { 300000, E4210_CPU_DIV0(1, 1, 2, 0, 4, 2), E4412_CPU_DIV1(1, 0, 3), }, >>> + { 200000, E4210_CPU_DIV0(1, 1, 1, 0, 3, 1), E4412_CPU_DIV1(0, 0, 3), }, >>> + { 0 }, >>> +}; >> >> Numbers look fine! >> >>> + >>> /* register exynos4 clocks */ >>> static void __init exynos4_clk_init(struct device_node *np, >>> enum exynos4_soc soc) >>> @@ -1489,6 +1528,17 @@ static void __init exynos4_clk_init(struct device_node *np, >>> samsung_clk_register_fixed_factor(ctx, >>> exynos4x12_fixed_factor_clks, >>> ARRAY_SIZE(exynos4x12_fixed_factor_clks)); >>> + if (of_machine_is_compatible("samsung,exynos4412")) { >> >> The driver uses here enum exynos4_soc to differentiate between SoC >> (unless I missed some changes). This of_machine_is_compatible() makes >> sense but introduces inconsistency. I would prefer sticking to one >> convention: always enum or switch everything (before this patch) to >> of_compatible. >> > > When reviewing this patch I also ran into the same thing because as you > said, it's not consistent. But digging a little bit I found that is not > that easy since the two are not checking exactly the same. > > The enum is to differentiate between "samsung,exynos4412-clock" and > "samsung,exynos4210-clock" while the of_machine_is_compatible() is for > "samsung,exynos4412" and "samsung,exynos4212". > > The problem is that both exynos4412 and exynos4212 use the same > "samsung,exynos4412-clock" compatible for their clock controller nodes. > But there are differences so it would had been better to also have a > "samsung,exynos4212-clock" to avoid the of_machine_is_compatible() but > that is not possible anymore without breaking DT backward compatibility. > > On the other hand, if of_machine_is_compatible() is used for everything, > then there is no point anymore to have both "samsung,exynos4412-clock" > and "samsung,exynos4210-clock". A single "samsung,exynos4-clock" plus > checking the SoC would had been enough. > > That's why I thought that Bart's approach was sensible although is true > that the of_compatible() check can be moved to exynos4412_clk_init() > and the enum be extended so at least exynos4_clk_init() is consistent. You're right, I missed that difference. Thanks for explaining, I agree now: Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-15 9:58 ` Sylwester nawrocki -1 siblings, 0 replies; 69+ messages in thread From: Sylwester nawrocki @ 2015-07-15 9:58 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz, Kukjin Kim, Kukjin Kim, Krzysztof Kozlowski Cc: Thomas Abraham, Michael Turquette, Viresh Kumar, Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 07/10/2015 12:43 AM, Bartlomiej Zolnierkiewicz wrote: > With the addition of the new Samsung specific cpu-clock type, the > arm clock can be represented as a cpu-clock type. Add the CPU clock > configuration data and instantiate the CPU clock type for Exynos4x12. > > Based on the earlier work by Thomas Abraham. > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/clk/samsung/clk-exynos4.c | 50 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 50 insertions(+) I guess you prefer to have this whole series applied through one, e.g samsung-soc tree? If so, here is my ack. Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com> ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock @ 2015-07-15 9:58 ` Sylwester nawrocki 0 siblings, 0 replies; 69+ messages in thread From: Sylwester nawrocki @ 2015-07-15 9:58 UTC (permalink / raw) To: linux-arm-kernel On 07/10/2015 12:43 AM, Bartlomiej Zolnierkiewicz wrote: > With the addition of the new Samsung specific cpu-clock type, the > arm clock can be represented as a cpu-clock type. Add the CPU clock > configuration data and instantiate the CPU clock type for Exynos4x12. > > Based on the earlier work by Thomas Abraham. > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/clk/samsung/clk-exynos4.c | 50 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 50 insertions(+) I guess you prefer to have this whole series applied through one, e.g samsung-soc tree? If so, here is my ack. Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com> ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 5/7] ARM: dts: Exynos4x12: add CPU OPP and regulator supply property 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz (?) @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel, b.zolnierkie, Doug Anderson, Andreas Faerber For Exynos4x12 platforms, add CPU operating points (using opp-v2 bindings) and CPU regulator supply properties for migrating from Exynos specific cpufreq driver to using generic cpufreq driver. Based on the earlier work by Thomas Abraham. Cc: Kukjin Kim <kgene.kim@samsung.com> Cc: Doug Anderson <dianders@chromium.org> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Andreas Faerber <afaerber@suse.de> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- arch/arm/boot/dts/exynos4212.dtsi | 81 ++++++++++++++++++++++++ arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 ++ arch/arm/boot/dts/exynos4412-origen.dts | 5 ++ arch/arm/boot/dts/exynos4412-trats2.dts | 5 ++ arch/arm/boot/dts/exynos4412.dtsi | 83 +++++++++++++++++++++++++ 5 files changed, 178 insertions(+) diff --git a/arch/arm/boot/dts/exynos4212.dtsi b/arch/arm/boot/dts/exynos4212.dtsi index d9c8efee..9dc40d5 100644 --- a/arch/arm/boot/dts/exynos4212.dtsi +++ b/arch/arm/boot/dts/exynos4212.dtsi @@ -30,6 +30,9 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA00>; + clocks = <&clock CLK_ARM_CLK>; + clock-names = "cpu"; + operating-points-v2 = <&cpu0_opp_table>; cooling-min-level = <13>; cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ @@ -39,6 +42,84 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA01>; + operating-points-v2 = <&cpu0_opp_table>; + }; + }; + + cpu0_opp_table: opp_table0 { + compatible = "operating-points-v2"; + opp-shared; + + opp00 { + opp-hz = <200000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp01 { + opp-hz = <300000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp02 { + opp-hz = <400000000>; + opp-microvolt = <925000>; + clock-latency-ns = <200000>; + }; + opp03 { + opp-hz = <500000000>; + opp-microvolt = <950000>; + clock-latency-ns = <200000>; + }; + opp04 { + opp-hz = <600000000>; + opp-microvolt = <975000>; + clock-latency-ns = <200000>; + }; + opp05 { + opp-hz = <700000000>; + opp-microvolt = <987500>; + clock-latency-ns = <200000>; + }; + opp06 { + opp-hz = <800000000>; + opp-microvolt = <1000000>; + clock-latency-ns = <200000>; + }; + opp07 { + opp-hz = <900000000>; + opp-microvolt = <1037500>; + clock-latency-ns = <200000>; + }; + opp08 { + opp-hz = <1000000000>; + opp-microvolt = <1087500>; + clock-latency-ns = <200000>; + }; + opp09 { + opp-hz = <1100000000>; + opp-microvolt = <1137500>; + clock-latency-ns = <200000>; + }; + opp10 { + opp-hz = <1200000000>; + opp-microvolt = <1187500>; + clock-latency-ns = <200000>; + }; + opp11 { + opp-hz = <1300000000>; + opp-microvolt = <1250000>; + clock-latency-ns = <200000>; + }; + opp12 { + opp-hz = <1400000000>; + opp-microvolt = <1287500>; + clock-latency-ns = <200000>; + }; + opp13 { + opp-hz = <1500000000>; + opp-microvolt = <1350000>; + clock-latency-ns = <200000>; + turbo-mode; }; }; }; diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi index ca7d168..1c7811a 100644 --- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi +++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi @@ -507,3 +507,7 @@ &watchdog { status = "okay"; }; + +&cpu0 { + cpu0-supply = <&buck2_reg>; +}; diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts index 84c7631..21150b4 100644 --- a/arch/arm/boot/dts/exynos4412-origen.dts +++ b/arch/arm/boot/dts/exynos4412-origen.dts @@ -532,3 +532,8 @@ &watchdog { status = "okay"; }; + + +&cpu0 { + cpu0-supply = <&buck2_reg>; +}; diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts b/arch/arm/boot/dts/exynos4412-trats2.dts index afc199d..1ee43456 100644 --- a/arch/arm/boot/dts/exynos4412-trats2.dts +++ b/arch/arm/boot/dts/exynos4412-trats2.dts @@ -1313,3 +1313,8 @@ vtmu-supply = <&ldo10_reg>; status = "okay"; }; + + +&cpu0 { + cpu0-supply = <&buck2_reg>; +}; diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi index b78ada7..cead3a7 100644 --- a/arch/arm/boot/dts/exynos4412.dtsi +++ b/arch/arm/boot/dts/exynos4412.dtsi @@ -30,6 +30,9 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA00>; + clocks = <&clock CLK_ARM_CLK>; + clock-names = "cpu"; + operating-points-v2 = <&cpu0_opp_table>; cooling-min-level = <13>; cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ @@ -39,18 +42,98 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA01>; + operating-points-v2 = <&cpu0_opp_table>; }; cpu@A02 { device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA02>; + operating-points-v2 = <&cpu0_opp_table>; }; cpu@A03 { device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA03>; + operating-points-v2 = <&cpu0_opp_table>; + }; + }; + + cpu0_opp_table: opp_table0 { + compatible = "operating-points-v2"; + opp-shared; + + opp00 { + opp-hz = <200000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp01 { + opp-hz = <300000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp02 { + opp-hz = <400000000>; + opp-microvolt = <925000>; + clock-latency-ns = <200000>; + }; + opp03 { + opp-hz = <500000000>; + opp-microvolt = <950000>; + clock-latency-ns = <200000>; + }; + opp04 { + opp-hz = <600000000>; + opp-microvolt = <975000>; + clock-latency-ns = <200000>; + }; + opp05 { + opp-hz = <700000000>; + opp-microvolt = <987500>; + clock-latency-ns = <200000>; + }; + opp06 { + opp-hz = <800000000>; + opp-microvolt = <1000000>; + clock-latency-ns = <200000>; + }; + opp07 { + opp-hz = <900000000>; + opp-microvolt = <1037500>; + clock-latency-ns = <200000>; + }; + opp08 { + opp-hz = <1000000000>; + opp-microvolt = <1087500>; + clock-latency-ns = <200000>; + }; + opp09 { + opp-hz = <1100000000>; + opp-microvolt = <1137500>; + clock-latency-ns = <200000>; + }; + opp10 { + opp-hz = <1200000000>; + opp-microvolt = <1187500>; + clock-latency-ns = <200000>; + }; + opp11 { + opp-hz = <1300000000>; + opp-microvolt = <1250000>; + clock-latency-ns = <200000>; + }; + opp12 { + opp-hz = <1400000000>; + opp-microvolt = <1287500>; + clock-latency-ns = <200000>; + }; + opp13 { + opp-hz = <1500000000>; + opp-microvolt = <1350000>; + clock-latency-ns = <200000>; + turbo-mode; }; }; -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v2 5/7] ARM: dts: Exynos4x12: add CPU OPP and regulator supply property @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: linux-arm-kernel For Exynos4x12 platforms, add CPU operating points (using opp-v2 bindings) and CPU regulator supply properties for migrating from Exynos specific cpufreq driver to using generic cpufreq driver. Based on the earlier work by Thomas Abraham. Cc: Kukjin Kim <kgene.kim@samsung.com> Cc: Doug Anderson <dianders@chromium.org> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Andreas Faerber <afaerber@suse.de> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- arch/arm/boot/dts/exynos4212.dtsi | 81 ++++++++++++++++++++++++ arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 ++ arch/arm/boot/dts/exynos4412-origen.dts | 5 ++ arch/arm/boot/dts/exynos4412-trats2.dts | 5 ++ arch/arm/boot/dts/exynos4412.dtsi | 83 +++++++++++++++++++++++++ 5 files changed, 178 insertions(+) diff --git a/arch/arm/boot/dts/exynos4212.dtsi b/arch/arm/boot/dts/exynos4212.dtsi index d9c8efee..9dc40d5 100644 --- a/arch/arm/boot/dts/exynos4212.dtsi +++ b/arch/arm/boot/dts/exynos4212.dtsi @@ -30,6 +30,9 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA00>; + clocks = <&clock CLK_ARM_CLK>; + clock-names = "cpu"; + operating-points-v2 = <&cpu0_opp_table>; cooling-min-level = <13>; cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ @@ -39,6 +42,84 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA01>; + operating-points-v2 = <&cpu0_opp_table>; + }; + }; + + cpu0_opp_table: opp_table0 { + compatible = "operating-points-v2"; + opp-shared; + + opp00 { + opp-hz = <200000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp01 { + opp-hz = <300000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp02 { + opp-hz = <400000000>; + opp-microvolt = <925000>; + clock-latency-ns = <200000>; + }; + opp03 { + opp-hz = <500000000>; + opp-microvolt = <950000>; + clock-latency-ns = <200000>; + }; + opp04 { + opp-hz = <600000000>; + opp-microvolt = <975000>; + clock-latency-ns = <200000>; + }; + opp05 { + opp-hz = <700000000>; + opp-microvolt = <987500>; + clock-latency-ns = <200000>; + }; + opp06 { + opp-hz = <800000000>; + opp-microvolt = <1000000>; + clock-latency-ns = <200000>; + }; + opp07 { + opp-hz = <900000000>; + opp-microvolt = <1037500>; + clock-latency-ns = <200000>; + }; + opp08 { + opp-hz = <1000000000>; + opp-microvolt = <1087500>; + clock-latency-ns = <200000>; + }; + opp09 { + opp-hz = <1100000000>; + opp-microvolt = <1137500>; + clock-latency-ns = <200000>; + }; + opp10 { + opp-hz = <1200000000>; + opp-microvolt = <1187500>; + clock-latency-ns = <200000>; + }; + opp11 { + opp-hz = <1300000000>; + opp-microvolt = <1250000>; + clock-latency-ns = <200000>; + }; + opp12 { + opp-hz = <1400000000>; + opp-microvolt = <1287500>; + clock-latency-ns = <200000>; + }; + opp13 { + opp-hz = <1500000000>; + opp-microvolt = <1350000>; + clock-latency-ns = <200000>; + turbo-mode; }; }; }; diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi index ca7d168..1c7811a 100644 --- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi +++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi @@ -507,3 +507,7 @@ &watchdog { status = "okay"; }; + +&cpu0 { + cpu0-supply = <&buck2_reg>; +}; diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts index 84c7631..21150b4 100644 --- a/arch/arm/boot/dts/exynos4412-origen.dts +++ b/arch/arm/boot/dts/exynos4412-origen.dts @@ -532,3 +532,8 @@ &watchdog { status = "okay"; }; + + +&cpu0 { + cpu0-supply = <&buck2_reg>; +}; diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts b/arch/arm/boot/dts/exynos4412-trats2.dts index afc199d..1ee43456 100644 --- a/arch/arm/boot/dts/exynos4412-trats2.dts +++ b/arch/arm/boot/dts/exynos4412-trats2.dts @@ -1313,3 +1313,8 @@ vtmu-supply = <&ldo10_reg>; status = "okay"; }; + + +&cpu0 { + cpu0-supply = <&buck2_reg>; +}; diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi index b78ada7..cead3a7 100644 --- a/arch/arm/boot/dts/exynos4412.dtsi +++ b/arch/arm/boot/dts/exynos4412.dtsi @@ -30,6 +30,9 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA00>; + clocks = <&clock CLK_ARM_CLK>; + clock-names = "cpu"; + operating-points-v2 = <&cpu0_opp_table>; cooling-min-level = <13>; cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ @@ -39,18 +42,98 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA01>; + operating-points-v2 = <&cpu0_opp_table>; }; cpu at A02 { device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA02>; + operating-points-v2 = <&cpu0_opp_table>; }; cpu at A03 { device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA03>; + operating-points-v2 = <&cpu0_opp_table>; + }; + }; + + cpu0_opp_table: opp_table0 { + compatible = "operating-points-v2"; + opp-shared; + + opp00 { + opp-hz = <200000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp01 { + opp-hz = <300000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp02 { + opp-hz = <400000000>; + opp-microvolt = <925000>; + clock-latency-ns = <200000>; + }; + opp03 { + opp-hz = <500000000>; + opp-microvolt = <950000>; + clock-latency-ns = <200000>; + }; + opp04 { + opp-hz = <600000000>; + opp-microvolt = <975000>; + clock-latency-ns = <200000>; + }; + opp05 { + opp-hz = <700000000>; + opp-microvolt = <987500>; + clock-latency-ns = <200000>; + }; + opp06 { + opp-hz = <800000000>; + opp-microvolt = <1000000>; + clock-latency-ns = <200000>; + }; + opp07 { + opp-hz = <900000000>; + opp-microvolt = <1037500>; + clock-latency-ns = <200000>; + }; + opp08 { + opp-hz = <1000000000>; + opp-microvolt = <1087500>; + clock-latency-ns = <200000>; + }; + opp09 { + opp-hz = <1100000000>; + opp-microvolt = <1137500>; + clock-latency-ns = <200000>; + }; + opp10 { + opp-hz = <1200000000>; + opp-microvolt = <1187500>; + clock-latency-ns = <200000>; + }; + opp11 { + opp-hz = <1300000000>; + opp-microvolt = <1250000>; + clock-latency-ns = <200000>; + }; + opp12 { + opp-hz = <1400000000>; + opp-microvolt = <1287500>; + clock-latency-ns = <200000>; + }; + opp13 { + opp-hz = <1500000000>; + opp-microvolt = <1350000>; + clock-latency-ns = <200000>; + turbo-mode; }; }; -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v2 5/7] ARM: dts: Exynos4x12: add CPU OPP and regulator supply property @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Doug Anderson, Lukasz Majewski, Kevin Hilman, Heiko Stuebner, Tobias Jakobi, Anand Moon, linux-pm, Tomasz Figa, linux-kernel, Chanwoo Choi, b.zolnierkie, linux-samsung-soc, Andreas Faerber, Javier Martinez Canillas, linux-clk, linux-arm-kernel For Exynos4x12 platforms, add CPU operating points (using opp-v2 bindings) and CPU regulator supply properties for migrating from Exynos specific cpufreq driver to using generic cpufreq driver. Based on the earlier work by Thomas Abraham. Cc: Kukjin Kim <kgene.kim@samsung.com> Cc: Doug Anderson <dianders@chromium.org> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Andreas Faerber <afaerber@suse.de> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- arch/arm/boot/dts/exynos4212.dtsi | 81 ++++++++++++++++++++++++ arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 ++ arch/arm/boot/dts/exynos4412-origen.dts | 5 ++ arch/arm/boot/dts/exynos4412-trats2.dts | 5 ++ arch/arm/boot/dts/exynos4412.dtsi | 83 +++++++++++++++++++++++++ 5 files changed, 178 insertions(+) diff --git a/arch/arm/boot/dts/exynos4212.dtsi b/arch/arm/boot/dts/exynos4212.dtsi index d9c8efee..9dc40d5 100644 --- a/arch/arm/boot/dts/exynos4212.dtsi +++ b/arch/arm/boot/dts/exynos4212.dtsi @@ -30,6 +30,9 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA00>; + clocks = <&clock CLK_ARM_CLK>; + clock-names = "cpu"; + operating-points-v2 = <&cpu0_opp_table>; cooling-min-level = <13>; cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ @@ -39,6 +42,84 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA01>; + operating-points-v2 = <&cpu0_opp_table>; + }; + }; + + cpu0_opp_table: opp_table0 { + compatible = "operating-points-v2"; + opp-shared; + + opp00 { + opp-hz = <200000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp01 { + opp-hz = <300000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp02 { + opp-hz = <400000000>; + opp-microvolt = <925000>; + clock-latency-ns = <200000>; + }; + opp03 { + opp-hz = <500000000>; + opp-microvolt = <950000>; + clock-latency-ns = <200000>; + }; + opp04 { + opp-hz = <600000000>; + opp-microvolt = <975000>; + clock-latency-ns = <200000>; + }; + opp05 { + opp-hz = <700000000>; + opp-microvolt = <987500>; + clock-latency-ns = <200000>; + }; + opp06 { + opp-hz = <800000000>; + opp-microvolt = <1000000>; + clock-latency-ns = <200000>; + }; + opp07 { + opp-hz = <900000000>; + opp-microvolt = <1037500>; + clock-latency-ns = <200000>; + }; + opp08 { + opp-hz = <1000000000>; + opp-microvolt = <1087500>; + clock-latency-ns = <200000>; + }; + opp09 { + opp-hz = <1100000000>; + opp-microvolt = <1137500>; + clock-latency-ns = <200000>; + }; + opp10 { + opp-hz = <1200000000>; + opp-microvolt = <1187500>; + clock-latency-ns = <200000>; + }; + opp11 { + opp-hz = <1300000000>; + opp-microvolt = <1250000>; + clock-latency-ns = <200000>; + }; + opp12 { + opp-hz = <1400000000>; + opp-microvolt = <1287500>; + clock-latency-ns = <200000>; + }; + opp13 { + opp-hz = <1500000000>; + opp-microvolt = <1350000>; + clock-latency-ns = <200000>; + turbo-mode; }; }; }; diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi index ca7d168..1c7811a 100644 --- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi +++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi @@ -507,3 +507,7 @@ &watchdog { status = "okay"; }; + +&cpu0 { + cpu0-supply = <&buck2_reg>; +}; diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts index 84c7631..21150b4 100644 --- a/arch/arm/boot/dts/exynos4412-origen.dts +++ b/arch/arm/boot/dts/exynos4412-origen.dts @@ -532,3 +532,8 @@ &watchdog { status = "okay"; }; + + +&cpu0 { + cpu0-supply = <&buck2_reg>; +}; diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts b/arch/arm/boot/dts/exynos4412-trats2.dts index afc199d..1ee43456 100644 --- a/arch/arm/boot/dts/exynos4412-trats2.dts +++ b/arch/arm/boot/dts/exynos4412-trats2.dts @@ -1313,3 +1313,8 @@ vtmu-supply = <&ldo10_reg>; status = "okay"; }; + + +&cpu0 { + cpu0-supply = <&buck2_reg>; +}; diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi index b78ada7..cead3a7 100644 --- a/arch/arm/boot/dts/exynos4412.dtsi +++ b/arch/arm/boot/dts/exynos4412.dtsi @@ -30,6 +30,9 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA00>; + clocks = <&clock CLK_ARM_CLK>; + clock-names = "cpu"; + operating-points-v2 = <&cpu0_opp_table>; cooling-min-level = <13>; cooling-max-level = <7>; #cooling-cells = <2>; /* min followed by max */ @@ -39,18 +42,98 @@ device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA01>; + operating-points-v2 = <&cpu0_opp_table>; }; cpu@A02 { device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA02>; + operating-points-v2 = <&cpu0_opp_table>; }; cpu@A03 { device_type = "cpu"; compatible = "arm,cortex-a9"; reg = <0xA03>; + operating-points-v2 = <&cpu0_opp_table>; + }; + }; + + cpu0_opp_table: opp_table0 { + compatible = "operating-points-v2"; + opp-shared; + + opp00 { + opp-hz = <200000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp01 { + opp-hz = <300000000>; + opp-microvolt = <900000>; + clock-latency-ns = <200000>; + }; + opp02 { + opp-hz = <400000000>; + opp-microvolt = <925000>; + clock-latency-ns = <200000>; + }; + opp03 { + opp-hz = <500000000>; + opp-microvolt = <950000>; + clock-latency-ns = <200000>; + }; + opp04 { + opp-hz = <600000000>; + opp-microvolt = <975000>; + clock-latency-ns = <200000>; + }; + opp05 { + opp-hz = <700000000>; + opp-microvolt = <987500>; + clock-latency-ns = <200000>; + }; + opp06 { + opp-hz = <800000000>; + opp-microvolt = <1000000>; + clock-latency-ns = <200000>; + }; + opp07 { + opp-hz = <900000000>; + opp-microvolt = <1037500>; + clock-latency-ns = <200000>; + }; + opp08 { + opp-hz = <1000000000>; + opp-microvolt = <1087500>; + clock-latency-ns = <200000>; + }; + opp09 { + opp-hz = <1100000000>; + opp-microvolt = <1137500>; + clock-latency-ns = <200000>; + }; + opp10 { + opp-hz = <1200000000>; + opp-microvolt = <1187500>; + clock-latency-ns = <200000>; + }; + opp11 { + opp-hz = <1300000000>; + opp-microvolt = <1250000>; + clock-latency-ns = <200000>; + }; + opp12 { + opp-hz = <1400000000>; + opp-microvolt = <1287500>; + clock-latency-ns = <200000>; + }; + opp13 { + opp-hz = <1500000000>; + opp-microvolt = <1350000>; + clock-latency-ns = <200000>; + turbo-mode; }; }; -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* Re: [PATCH v2 5/7] ARM: dts: Exynos4x12: add CPU OPP and regulator supply property 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-10 8:35 ` Krzysztof Kozlowski -1 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 8:35 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel, Doug Anderson, Andreas Faerber On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > For Exynos4x12 platforms, add CPU operating points (using > opp-v2 bindings) and CPU regulator supply properties for > migrating from Exynos specific cpufreq driver to using > generic cpufreq driver. > > Based on the earlier work by Thomas Abraham. > > Cc: Kukjin Kim <kgene.kim@samsung.com> > Cc: Doug Anderson <dianders@chromium.org> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Andreas Faerber <afaerber@suse.de> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > arch/arm/boot/dts/exynos4212.dtsi | 81 ++++++++++++++++++++++++ > arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 ++ > arch/arm/boot/dts/exynos4412-origen.dts | 5 ++ > arch/arm/boot/dts/exynos4412-trats2.dts | 5 ++ > arch/arm/boot/dts/exynos4412.dtsi | 83 +++++++++++++++++++++++++ > 5 files changed, 178 insertions(+) > > diff --git a/arch/arm/boot/dts/exynos4212.dtsi b/arch/arm/boot/dts/exynos4212.dtsi > index d9c8efee..9dc40d5 100644 > --- a/arch/arm/boot/dts/exynos4212.dtsi > +++ b/arch/arm/boot/dts/exynos4212.dtsi > @@ -30,6 +30,9 @@ > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA00>; > + clocks = <&clock CLK_ARM_CLK>; > + clock-names = "cpu"; > + operating-points-v2 = <&cpu0_opp_table>; > cooling-min-level = <13>; > cooling-max-level = <7>; > #cooling-cells = <2>; /* min followed by max */ > @@ -39,6 +42,84 @@ > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA01>; > + operating-points-v2 = <&cpu0_opp_table>; > + }; > + }; > + > + cpu0_opp_table: opp_table0 { > + compatible = "operating-points-v2"; > + opp-shared; > + > + opp00 { > + opp-hz = <200000000>; > + opp-microvolt = <900000>; > + clock-latency-ns = <200000>; > + }; > + opp01 { > + opp-hz = <300000000>; > + opp-microvolt = <900000>; > + clock-latency-ns = <200000>; > + }; > + opp02 { > + opp-hz = <400000000>; > + opp-microvolt = <925000>; > + clock-latency-ns = <200000>; > + }; > + opp03 { > + opp-hz = <500000000>; > + opp-microvolt = <950000>; > + clock-latency-ns = <200000>; > + }; > + opp04 { > + opp-hz = <600000000>; > + opp-microvolt = <975000>; > + clock-latency-ns = <200000>; > + }; > + opp05 { > + opp-hz = <700000000>; > + opp-microvolt = <987500>; > + clock-latency-ns = <200000>; > + }; > + opp06 { > + opp-hz = <800000000>; > + opp-microvolt = <1000000>; > + clock-latency-ns = <200000>; > + }; > + opp07 { > + opp-hz = <900000000>; > + opp-microvolt = <1037500>; > + clock-latency-ns = <200000>; > + }; > + opp08 { > + opp-hz = <1000000000>; > + opp-microvolt = <1087500>; > + clock-latency-ns = <200000>; > + }; > + opp09 { > + opp-hz = <1100000000>; > + opp-microvolt = <1137500>; > + clock-latency-ns = <200000>; > + }; > + opp10 { > + opp-hz = <1200000000>; > + opp-microvolt = <1187500>; > + clock-latency-ns = <200000>; > + }; > + opp11 { > + opp-hz = <1300000000>; > + opp-microvolt = <1250000>; > + clock-latency-ns = <200000>; > + }; > + opp12 { > + opp-hz = <1400000000>; > + opp-microvolt = <1287500>; > + clock-latency-ns = <200000>; > + }; > + opp13 { > + opp-hz = <1500000000>; > + opp-microvolt = <1350000>; > + clock-latency-ns = <200000>; > + turbo-mode; > }; > }; > }; > diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi > index ca7d168..1c7811a 100644 > --- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi > +++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi > @@ -507,3 +507,7 @@ > &watchdog { > status = "okay"; > }; > + > +&cpu0 { > + cpu0-supply = <&buck2_reg>; > +}; Can you put this in alphabetical order (before ehci node)? > diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts > index 84c7631..21150b4 100644 > --- a/arch/arm/boot/dts/exynos4412-origen.dts > +++ b/arch/arm/boot/dts/exynos4412-origen.dts > @@ -532,3 +532,8 @@ > &watchdog { > status = "okay"; > }; > + > + > +&cpu0 { > + cpu0-supply = <&buck2_reg>; > +}; Ditto > diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts b/arch/arm/boot/dts/exynos4412-trats2.dts > index afc199d..1ee43456 100644 > --- a/arch/arm/boot/dts/exynos4412-trats2.dts > +++ b/arch/arm/boot/dts/exynos4412-trats2.dts > @@ -1313,3 +1313,8 @@ > vtmu-supply = <&ldo10_reg>; > status = "okay"; > }; > + > + > +&cpu0 { > + cpu0-supply = <&buck2_reg>; > +}; The same. Rest looks fine, so with the re-ordering: Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof > diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi > index b78ada7..cead3a7 100644 > --- a/arch/arm/boot/dts/exynos4412.dtsi > +++ b/arch/arm/boot/dts/exynos4412.dtsi > @@ -30,6 +30,9 @@ > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA00>; > + clocks = <&clock CLK_ARM_CLK>; > + clock-names = "cpu"; > + operating-points-v2 = <&cpu0_opp_table>; > cooling-min-level = <13>; > cooling-max-level = <7>; > #cooling-cells = <2>; /* min followed by max */ > @@ -39,18 +42,98 @@ > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA01>; > + operating-points-v2 = <&cpu0_opp_table>; > }; > > cpu@A02 { > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA02>; > + operating-points-v2 = <&cpu0_opp_table>; > }; > > cpu@A03 { > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA03>; > + operating-points-v2 = <&cpu0_opp_table>; > + }; > + }; > + > + cpu0_opp_table: opp_table0 { > + compatible = "operating-points-v2"; > + opp-shared; > + > + opp00 { > + opp-hz = <200000000>; > + opp-microvolt = <900000>; > + clock-latency-ns = <200000>; > + }; > + opp01 { > + opp-hz = <300000000>; > + opp-microvolt = <900000>; > + clock-latency-ns = <200000>; > + }; > + opp02 { > + opp-hz = <400000000>; > + opp-microvolt = <925000>; > + clock-latency-ns = <200000>; > + }; > + opp03 { > + opp-hz = <500000000>; > + opp-microvolt = <950000>; > + clock-latency-ns = <200000>; > + }; > + opp04 { > + opp-hz = <600000000>; > + opp-microvolt = <975000>; > + clock-latency-ns = <200000>; > + }; > + opp05 { > + opp-hz = <700000000>; > + opp-microvolt = <987500>; > + clock-latency-ns = <200000>; > + }; > + opp06 { > + opp-hz = <800000000>; > + opp-microvolt = <1000000>; > + clock-latency-ns = <200000>; > + }; > + opp07 { > + opp-hz = <900000000>; > + opp-microvolt = <1037500>; > + clock-latency-ns = <200000>; > + }; > + opp08 { > + opp-hz = <1000000000>; > + opp-microvolt = <1087500>; > + clock-latency-ns = <200000>; > + }; > + opp09 { > + opp-hz = <1100000000>; > + opp-microvolt = <1137500>; > + clock-latency-ns = <200000>; > + }; > + opp10 { > + opp-hz = <1200000000>; > + opp-microvolt = <1187500>; > + clock-latency-ns = <200000>; > + }; > + opp11 { > + opp-hz = <1300000000>; > + opp-microvolt = <1250000>; > + clock-latency-ns = <200000>; > + }; > + opp12 { > + opp-hz = <1400000000>; > + opp-microvolt = <1287500>; > + clock-latency-ns = <200000>; > + }; > + opp13 { > + opp-hz = <1500000000>; > + opp-microvolt = <1350000>; > + clock-latency-ns = <200000>; > + turbo-mode; > }; > }; > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 5/7] ARM: dts: Exynos4x12: add CPU OPP and regulator supply property @ 2015-07-10 8:35 ` Krzysztof Kozlowski 0 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 8:35 UTC (permalink / raw) To: linux-arm-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > For Exynos4x12 platforms, add CPU operating points (using > opp-v2 bindings) and CPU regulator supply properties for > migrating from Exynos specific cpufreq driver to using > generic cpufreq driver. > > Based on the earlier work by Thomas Abraham. > > Cc: Kukjin Kim <kgene.kim@samsung.com> > Cc: Doug Anderson <dianders@chromium.org> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Andreas Faerber <afaerber@suse.de> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > arch/arm/boot/dts/exynos4212.dtsi | 81 ++++++++++++++++++++++++ > arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 ++ > arch/arm/boot/dts/exynos4412-origen.dts | 5 ++ > arch/arm/boot/dts/exynos4412-trats2.dts | 5 ++ > arch/arm/boot/dts/exynos4412.dtsi | 83 +++++++++++++++++++++++++ > 5 files changed, 178 insertions(+) > > diff --git a/arch/arm/boot/dts/exynos4212.dtsi b/arch/arm/boot/dts/exynos4212.dtsi > index d9c8efee..9dc40d5 100644 > --- a/arch/arm/boot/dts/exynos4212.dtsi > +++ b/arch/arm/boot/dts/exynos4212.dtsi > @@ -30,6 +30,9 @@ > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA00>; > + clocks = <&clock CLK_ARM_CLK>; > + clock-names = "cpu"; > + operating-points-v2 = <&cpu0_opp_table>; > cooling-min-level = <13>; > cooling-max-level = <7>; > #cooling-cells = <2>; /* min followed by max */ > @@ -39,6 +42,84 @@ > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA01>; > + operating-points-v2 = <&cpu0_opp_table>; > + }; > + }; > + > + cpu0_opp_table: opp_table0 { > + compatible = "operating-points-v2"; > + opp-shared; > + > + opp00 { > + opp-hz = <200000000>; > + opp-microvolt = <900000>; > + clock-latency-ns = <200000>; > + }; > + opp01 { > + opp-hz = <300000000>; > + opp-microvolt = <900000>; > + clock-latency-ns = <200000>; > + }; > + opp02 { > + opp-hz = <400000000>; > + opp-microvolt = <925000>; > + clock-latency-ns = <200000>; > + }; > + opp03 { > + opp-hz = <500000000>; > + opp-microvolt = <950000>; > + clock-latency-ns = <200000>; > + }; > + opp04 { > + opp-hz = <600000000>; > + opp-microvolt = <975000>; > + clock-latency-ns = <200000>; > + }; > + opp05 { > + opp-hz = <700000000>; > + opp-microvolt = <987500>; > + clock-latency-ns = <200000>; > + }; > + opp06 { > + opp-hz = <800000000>; > + opp-microvolt = <1000000>; > + clock-latency-ns = <200000>; > + }; > + opp07 { > + opp-hz = <900000000>; > + opp-microvolt = <1037500>; > + clock-latency-ns = <200000>; > + }; > + opp08 { > + opp-hz = <1000000000>; > + opp-microvolt = <1087500>; > + clock-latency-ns = <200000>; > + }; > + opp09 { > + opp-hz = <1100000000>; > + opp-microvolt = <1137500>; > + clock-latency-ns = <200000>; > + }; > + opp10 { > + opp-hz = <1200000000>; > + opp-microvolt = <1187500>; > + clock-latency-ns = <200000>; > + }; > + opp11 { > + opp-hz = <1300000000>; > + opp-microvolt = <1250000>; > + clock-latency-ns = <200000>; > + }; > + opp12 { > + opp-hz = <1400000000>; > + opp-microvolt = <1287500>; > + clock-latency-ns = <200000>; > + }; > + opp13 { > + opp-hz = <1500000000>; > + opp-microvolt = <1350000>; > + clock-latency-ns = <200000>; > + turbo-mode; > }; > }; > }; > diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi > index ca7d168..1c7811a 100644 > --- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi > +++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi > @@ -507,3 +507,7 @@ > &watchdog { > status = "okay"; > }; > + > +&cpu0 { > + cpu0-supply = <&buck2_reg>; > +}; Can you put this in alphabetical order (before ehci node)? > diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts > index 84c7631..21150b4 100644 > --- a/arch/arm/boot/dts/exynos4412-origen.dts > +++ b/arch/arm/boot/dts/exynos4412-origen.dts > @@ -532,3 +532,8 @@ > &watchdog { > status = "okay"; > }; > + > + > +&cpu0 { > + cpu0-supply = <&buck2_reg>; > +}; Ditto > diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts b/arch/arm/boot/dts/exynos4412-trats2.dts > index afc199d..1ee43456 100644 > --- a/arch/arm/boot/dts/exynos4412-trats2.dts > +++ b/arch/arm/boot/dts/exynos4412-trats2.dts > @@ -1313,3 +1313,8 @@ > vtmu-supply = <&ldo10_reg>; > status = "okay"; > }; > + > + > +&cpu0 { > + cpu0-supply = <&buck2_reg>; > +}; The same. Rest looks fine, so with the re-ordering: Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof > diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi > index b78ada7..cead3a7 100644 > --- a/arch/arm/boot/dts/exynos4412.dtsi > +++ b/arch/arm/boot/dts/exynos4412.dtsi > @@ -30,6 +30,9 @@ > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA00>; > + clocks = <&clock CLK_ARM_CLK>; > + clock-names = "cpu"; > + operating-points-v2 = <&cpu0_opp_table>; > cooling-min-level = <13>; > cooling-max-level = <7>; > #cooling-cells = <2>; /* min followed by max */ > @@ -39,18 +42,98 @@ > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA01>; > + operating-points-v2 = <&cpu0_opp_table>; > }; > > cpu at A02 { > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA02>; > + operating-points-v2 = <&cpu0_opp_table>; > }; > > cpu at A03 { > device_type = "cpu"; > compatible = "arm,cortex-a9"; > reg = <0xA03>; > + operating-points-v2 = <&cpu0_opp_table>; > + }; > + }; > + > + cpu0_opp_table: opp_table0 { > + compatible = "operating-points-v2"; > + opp-shared; > + > + opp00 { > + opp-hz = <200000000>; > + opp-microvolt = <900000>; > + clock-latency-ns = <200000>; > + }; > + opp01 { > + opp-hz = <300000000>; > + opp-microvolt = <900000>; > + clock-latency-ns = <200000>; > + }; > + opp02 { > + opp-hz = <400000000>; > + opp-microvolt = <925000>; > + clock-latency-ns = <200000>; > + }; > + opp03 { > + opp-hz = <500000000>; > + opp-microvolt = <950000>; > + clock-latency-ns = <200000>; > + }; > + opp04 { > + opp-hz = <600000000>; > + opp-microvolt = <975000>; > + clock-latency-ns = <200000>; > + }; > + opp05 { > + opp-hz = <700000000>; > + opp-microvolt = <987500>; > + clock-latency-ns = <200000>; > + }; > + opp06 { > + opp-hz = <800000000>; > + opp-microvolt = <1000000>; > + clock-latency-ns = <200000>; > + }; > + opp07 { > + opp-hz = <900000000>; > + opp-microvolt = <1037500>; > + clock-latency-ns = <200000>; > + }; > + opp08 { > + opp-hz = <1000000000>; > + opp-microvolt = <1087500>; > + clock-latency-ns = <200000>; > + }; > + opp09 { > + opp-hz = <1100000000>; > + opp-microvolt = <1137500>; > + clock-latency-ns = <200000>; > + }; > + opp10 { > + opp-hz = <1200000000>; > + opp-microvolt = <1187500>; > + clock-latency-ns = <200000>; > + }; > + opp11 { > + opp-hz = <1300000000>; > + opp-microvolt = <1250000>; > + clock-latency-ns = <200000>; > + }; > + opp12 { > + opp-hz = <1400000000>; > + opp-microvolt = <1287500>; > + clock-latency-ns = <200000>; > + }; > + opp13 { > + opp-hz = <1500000000>; > + opp-microvolt = <1350000>; > + clock-latency-ns = <200000>; > + turbo-mode; > }; > }; > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 6/7] ARM: Exynos: switch to using generic cpufreq driver for Exynos4x12 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz (?) @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel, b.zolnierkie The new CPU clock type allows the use of generic CPUfreq driver. Switch Exynos4x12 to using generic cpufreq driver. This patch also takes care of making ARM_EXYNOS_CPU_FREQ_BOOST_SW config option depend on cpufreq-dt driver instead of exynos-cpufreq one and fixes the minor issue present with the old code (support for 'boost' mode in the exynos-cpufreq driver was enabled for all supported SoCs even though 'boost' frequency was provided only for Exynos4x12 ones). Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Kukjin Kim <kgene.kim@samsung.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- arch/arm/mach-exynos/exynos.c | 14 ++++++++++++++ drivers/cpufreq/Kconfig.arm | 2 +- drivers/cpufreq/exynos-cpufreq.c | 3 --- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index 4015ec3..0c74e90 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c @@ -20,6 +20,7 @@ #include <linux/platform_device.h> #include <linux/pm_domain.h> #include <linux/irqchip.h> +#include <linux/cpufreq-dt.h> #include <asm/cacheflush.h> #include <asm/hardware/cache-l2x0.h> @@ -224,6 +225,12 @@ static void __init exynos_init_irq(void) exynos_map_pmu(); } +struct cpufreq_dt_platform_data cpufreq_dt_pd = { +#ifdef CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW + .boost_supported = true, +#endif +}; + static const struct of_device_id exynos_cpufreq_matches[] = { { .compatible = "samsung,exynos4210", .data = "cpufreq-dt" }, { .compatible = "samsung,exynos5250", .data = "cpufreq-dt" }, @@ -235,6 +242,13 @@ static void __init exynos_cpufreq_init(void) struct device_node *root = of_find_node_by_path("/"); const struct of_device_id *match; + if (of_machine_is_compatible("samsung,exynos4212") || + of_machine_is_compatible("samsung,exynos4412")) { + platform_device_register_data(NULL, "cpufreq-dt", -1, + &cpufreq_dt_pd, sizeof(cpufreq_dt_pd)); + return; + } + match = of_match_node(exynos_cpufreq_matches, root); if (!match) { platform_device_register_simple("exynos-cpufreq", -1, NULL, 0); diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm index 9ab6388c1..5f5a15a 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm @@ -49,7 +49,7 @@ config ARM_EXYNOS4X12_CPUFREQ config ARM_EXYNOS_CPU_FREQ_BOOST_SW bool "EXYNOS Frequency Overclocking - Software" - depends on ARM_EXYNOS_CPUFREQ && THERMAL + depends on CPUFREQ_DT && THERMAL select CPU_FREQ_BOOST_SW select EXYNOS_THERMAL help diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c index 71d8891..89d252e 100644 --- a/drivers/cpufreq/exynos-cpufreq.c +++ b/drivers/cpufreq/exynos-cpufreq.c @@ -150,9 +150,6 @@ static struct cpufreq_driver exynos_driver = { .init = exynos_cpufreq_cpu_init, .name = "exynos_cpufreq", .attr = cpufreq_generic_attr, -#ifdef CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW - .boost_supported = true, -#endif #ifdef CONFIG_PM .suspend = cpufreq_generic_suspend, #endif -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v2 6/7] ARM: Exynos: switch to using generic cpufreq driver for Exynos4x12 @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: linux-arm-kernel The new CPU clock type allows the use of generic CPUfreq driver. Switch Exynos4x12 to using generic cpufreq driver. This patch also takes care of making ARM_EXYNOS_CPU_FREQ_BOOST_SW config option depend on cpufreq-dt driver instead of exynos-cpufreq one and fixes the minor issue present with the old code (support for 'boost' mode in the exynos-cpufreq driver was enabled for all supported SoCs even though 'boost' frequency was provided only for Exynos4x12 ones). Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Kukjin Kim <kgene.kim@samsung.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- arch/arm/mach-exynos/exynos.c | 14 ++++++++++++++ drivers/cpufreq/Kconfig.arm | 2 +- drivers/cpufreq/exynos-cpufreq.c | 3 --- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index 4015ec3..0c74e90 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c @@ -20,6 +20,7 @@ #include <linux/platform_device.h> #include <linux/pm_domain.h> #include <linux/irqchip.h> +#include <linux/cpufreq-dt.h> #include <asm/cacheflush.h> #include <asm/hardware/cache-l2x0.h> @@ -224,6 +225,12 @@ static void __init exynos_init_irq(void) exynos_map_pmu(); } +struct cpufreq_dt_platform_data cpufreq_dt_pd = { +#ifdef CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW + .boost_supported = true, +#endif +}; + static const struct of_device_id exynos_cpufreq_matches[] = { { .compatible = "samsung,exynos4210", .data = "cpufreq-dt" }, { .compatible = "samsung,exynos5250", .data = "cpufreq-dt" }, @@ -235,6 +242,13 @@ static void __init exynos_cpufreq_init(void) struct device_node *root = of_find_node_by_path("/"); const struct of_device_id *match; + if (of_machine_is_compatible("samsung,exynos4212") || + of_machine_is_compatible("samsung,exynos4412")) { + platform_device_register_data(NULL, "cpufreq-dt", -1, + &cpufreq_dt_pd, sizeof(cpufreq_dt_pd)); + return; + } + match = of_match_node(exynos_cpufreq_matches, root); if (!match) { platform_device_register_simple("exynos-cpufreq", -1, NULL, 0); diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm index 9ab6388c1..5f5a15a 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm @@ -49,7 +49,7 @@ config ARM_EXYNOS4X12_CPUFREQ config ARM_EXYNOS_CPU_FREQ_BOOST_SW bool "EXYNOS Frequency Overclocking - Software" - depends on ARM_EXYNOS_CPUFREQ && THERMAL + depends on CPUFREQ_DT && THERMAL select CPU_FREQ_BOOST_SW select EXYNOS_THERMAL help diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c index 71d8891..89d252e 100644 --- a/drivers/cpufreq/exynos-cpufreq.c +++ b/drivers/cpufreq/exynos-cpufreq.c @@ -150,9 +150,6 @@ static struct cpufreq_driver exynos_driver = { .init = exynos_cpufreq_cpu_init, .name = "exynos_cpufreq", .attr = cpufreq_generic_attr, -#ifdef CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW - .boost_supported = true, -#endif #ifdef CONFIG_PM .suspend = cpufreq_generic_suspend, #endif -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v2 6/7] ARM: Exynos: switch to using generic cpufreq driver for Exynos4x12 @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Lukasz Majewski, Kevin Hilman, Heiko Stuebner, Tobias Jakobi, Anand Moon, linux-pm, Tomasz Figa, linux-kernel, Chanwoo Choi, b.zolnierkie, linux-samsung-soc, Javier Martinez Canillas, linux-clk, linux-arm-kernel The new CPU clock type allows the use of generic CPUfreq driver. Switch Exynos4x12 to using generic cpufreq driver. This patch also takes care of making ARM_EXYNOS_CPU_FREQ_BOOST_SW config option depend on cpufreq-dt driver instead of exynos-cpufreq one and fixes the minor issue present with the old code (support for 'boost' mode in the exynos-cpufreq driver was enabled for all supported SoCs even though 'boost' frequency was provided only for Exynos4x12 ones). Cc: Tomasz Figa <tomasz.figa@gmail.com> Cc: Kukjin Kim <kgene.kim@samsung.com> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- arch/arm/mach-exynos/exynos.c | 14 ++++++++++++++ drivers/cpufreq/Kconfig.arm | 2 +- drivers/cpufreq/exynos-cpufreq.c | 3 --- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index 4015ec3..0c74e90 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c @@ -20,6 +20,7 @@ #include <linux/platform_device.h> #include <linux/pm_domain.h> #include <linux/irqchip.h> +#include <linux/cpufreq-dt.h> #include <asm/cacheflush.h> #include <asm/hardware/cache-l2x0.h> @@ -224,6 +225,12 @@ static void __init exynos_init_irq(void) exynos_map_pmu(); } +struct cpufreq_dt_platform_data cpufreq_dt_pd = { +#ifdef CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW + .boost_supported = true, +#endif +}; + static const struct of_device_id exynos_cpufreq_matches[] = { { .compatible = "samsung,exynos4210", .data = "cpufreq-dt" }, { .compatible = "samsung,exynos5250", .data = "cpufreq-dt" }, @@ -235,6 +242,13 @@ static void __init exynos_cpufreq_init(void) struct device_node *root = of_find_node_by_path("/"); const struct of_device_id *match; + if (of_machine_is_compatible("samsung,exynos4212") || + of_machine_is_compatible("samsung,exynos4412")) { + platform_device_register_data(NULL, "cpufreq-dt", -1, + &cpufreq_dt_pd, sizeof(cpufreq_dt_pd)); + return; + } + match = of_match_node(exynos_cpufreq_matches, root); if (!match) { platform_device_register_simple("exynos-cpufreq", -1, NULL, 0); diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm index 9ab6388c1..5f5a15a 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm @@ -49,7 +49,7 @@ config ARM_EXYNOS4X12_CPUFREQ config ARM_EXYNOS_CPU_FREQ_BOOST_SW bool "EXYNOS Frequency Overclocking - Software" - depends on ARM_EXYNOS_CPUFREQ && THERMAL + depends on CPUFREQ_DT && THERMAL select CPU_FREQ_BOOST_SW select EXYNOS_THERMAL help diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c index 71d8891..89d252e 100644 --- a/drivers/cpufreq/exynos-cpufreq.c +++ b/drivers/cpufreq/exynos-cpufreq.c @@ -150,9 +150,6 @@ static struct cpufreq_driver exynos_driver = { .init = exynos_cpufreq_cpu_init, .name = "exynos_cpufreq", .attr = cpufreq_generic_attr, -#ifdef CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW - .boost_supported = true, -#endif #ifdef CONFIG_PM .suspend = cpufreq_generic_suspend, #endif -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* Re: [PATCH v2 6/7] ARM: Exynos: switch to using generic cpufreq driver for Exynos4x12 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-10 8:55 ` Krzysztof Kozlowski -1 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 8:55 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > The new CPU clock type allows the use of generic CPUfreq driver. > Switch Exynos4x12 to using generic cpufreq driver. > > This patch also takes care of making ARM_EXYNOS_CPU_FREQ_BOOST_SW > config option depend on cpufreq-dt driver instead of exynos-cpufreq > one and fixes the minor issue present with the old code (support > for 'boost' mode in the exynos-cpufreq driver was enabled for all > supported SoCs even though 'boost' frequency was provided only for > Exynos4x12 ones). > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Kukjin Kim <kgene.kim@samsung.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > arch/arm/mach-exynos/exynos.c | 14 ++++++++++++++ > drivers/cpufreq/Kconfig.arm | 2 +- > drivers/cpufreq/exynos-cpufreq.c | 3 --- > 3 files changed, 15 insertions(+), 4 deletions(-) > > diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c > index 4015ec3..0c74e90 100644 > --- a/arch/arm/mach-exynos/exynos.c > +++ b/arch/arm/mach-exynos/exynos.c > @@ -20,6 +20,7 @@ > #include <linux/platform_device.h> > #include <linux/pm_domain.h> > #include <linux/irqchip.h> > +#include <linux/cpufreq-dt.h> > > #include <asm/cacheflush.h> > #include <asm/hardware/cache-l2x0.h> > @@ -224,6 +225,12 @@ static void __init exynos_init_irq(void) > exynos_map_pmu(); > } > > +struct cpufreq_dt_platform_data cpufreq_dt_pd = { Shouldn't this be static? > +#ifdef CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW > + .boost_supported = true, > +#endif > +}; > + > static const struct of_device_id exynos_cpufreq_matches[] = { > { .compatible = "samsung,exynos4210", .data = "cpufreq-dt" }, > { .compatible = "samsung,exynos5250", .data = "cpufreq-dt" }, > @@ -235,6 +242,13 @@ static void __init exynos_cpufreq_init(void) > struct device_node *root = of_find_node_by_path("/"); > const struct of_device_id *match; > > + if (of_machine_is_compatible("samsung,exynos4212") || > + of_machine_is_compatible("samsung,exynos4412")) { > + platform_device_register_data(NULL, "cpufreq-dt", -1, > + &cpufreq_dt_pd, sizeof(cpufreq_dt_pd)); > + return; > + } > + > match = of_match_node(exynos_cpufreq_matches, root); > if (!match) { > platform_device_register_simple("exynos-cpufreq", -1, NULL, 0); Now we have two places with compatibles for matching cpufreq-dt driver. It is confusing especially when grepping for compatibles. Instead why not use 'data' from exynos_cpufreq_matches? Currently it stores the "cpufreq-dt" string which looks useless. Best regards, Krzysztof > diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm > index 9ab6388c1..5f5a15a 100644 > --- a/drivers/cpufreq/Kconfig.arm > +++ b/drivers/cpufreq/Kconfig.arm > @@ -49,7 +49,7 @@ config ARM_EXYNOS4X12_CPUFREQ > > config ARM_EXYNOS_CPU_FREQ_BOOST_SW > bool "EXYNOS Frequency Overclocking - Software" > - depends on ARM_EXYNOS_CPUFREQ && THERMAL > + depends on CPUFREQ_DT && THERMAL > select CPU_FREQ_BOOST_SW > select EXYNOS_THERMAL > help > diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c > index 71d8891..89d252e 100644 > --- a/drivers/cpufreq/exynos-cpufreq.c > +++ b/drivers/cpufreq/exynos-cpufreq.c > @@ -150,9 +150,6 @@ static struct cpufreq_driver exynos_driver = { > .init = exynos_cpufreq_cpu_init, > .name = "exynos_cpufreq", > .attr = cpufreq_generic_attr, > -#ifdef CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW > - .boost_supported = true, > -#endif > #ifdef CONFIG_PM > .suspend = cpufreq_generic_suspend, > #endif > ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 6/7] ARM: Exynos: switch to using generic cpufreq driver for Exynos4x12 @ 2015-07-10 8:55 ` Krzysztof Kozlowski 0 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 8:55 UTC (permalink / raw) To: linux-arm-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > The new CPU clock type allows the use of generic CPUfreq driver. > Switch Exynos4x12 to using generic cpufreq driver. > > This patch also takes care of making ARM_EXYNOS_CPU_FREQ_BOOST_SW > config option depend on cpufreq-dt driver instead of exynos-cpufreq > one and fixes the minor issue present with the old code (support > for 'boost' mode in the exynos-cpufreq driver was enabled for all > supported SoCs even though 'boost' frequency was provided only for > Exynos4x12 ones). > > Cc: Tomasz Figa <tomasz.figa@gmail.com> > Cc: Kukjin Kim <kgene.kim@samsung.com> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > arch/arm/mach-exynos/exynos.c | 14 ++++++++++++++ > drivers/cpufreq/Kconfig.arm | 2 +- > drivers/cpufreq/exynos-cpufreq.c | 3 --- > 3 files changed, 15 insertions(+), 4 deletions(-) > > diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c > index 4015ec3..0c74e90 100644 > --- a/arch/arm/mach-exynos/exynos.c > +++ b/arch/arm/mach-exynos/exynos.c > @@ -20,6 +20,7 @@ > #include <linux/platform_device.h> > #include <linux/pm_domain.h> > #include <linux/irqchip.h> > +#include <linux/cpufreq-dt.h> > > #include <asm/cacheflush.h> > #include <asm/hardware/cache-l2x0.h> > @@ -224,6 +225,12 @@ static void __init exynos_init_irq(void) > exynos_map_pmu(); > } > > +struct cpufreq_dt_platform_data cpufreq_dt_pd = { Shouldn't this be static? > +#ifdef CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW > + .boost_supported = true, > +#endif > +}; > + > static const struct of_device_id exynos_cpufreq_matches[] = { > { .compatible = "samsung,exynos4210", .data = "cpufreq-dt" }, > { .compatible = "samsung,exynos5250", .data = "cpufreq-dt" }, > @@ -235,6 +242,13 @@ static void __init exynos_cpufreq_init(void) > struct device_node *root = of_find_node_by_path("/"); > const struct of_device_id *match; > > + if (of_machine_is_compatible("samsung,exynos4212") || > + of_machine_is_compatible("samsung,exynos4412")) { > + platform_device_register_data(NULL, "cpufreq-dt", -1, > + &cpufreq_dt_pd, sizeof(cpufreq_dt_pd)); > + return; > + } > + > match = of_match_node(exynos_cpufreq_matches, root); > if (!match) { > platform_device_register_simple("exynos-cpufreq", -1, NULL, 0); Now we have two places with compatibles for matching cpufreq-dt driver. It is confusing especially when grepping for compatibles. Instead why not use 'data' from exynos_cpufreq_matches? Currently it stores the "cpufreq-dt" string which looks useless. Best regards, Krzysztof > diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm > index 9ab6388c1..5f5a15a 100644 > --- a/drivers/cpufreq/Kconfig.arm > +++ b/drivers/cpufreq/Kconfig.arm > @@ -49,7 +49,7 @@ config ARM_EXYNOS4X12_CPUFREQ > > config ARM_EXYNOS_CPU_FREQ_BOOST_SW > bool "EXYNOS Frequency Overclocking - Software" > - depends on ARM_EXYNOS_CPUFREQ && THERMAL > + depends on CPUFREQ_DT && THERMAL > select CPU_FREQ_BOOST_SW > select EXYNOS_THERMAL > help > diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c > index 71d8891..89d252e 100644 > --- a/drivers/cpufreq/exynos-cpufreq.c > +++ b/drivers/cpufreq/exynos-cpufreq.c > @@ -150,9 +150,6 @@ static struct cpufreq_driver exynos_driver = { > .init = exynos_cpufreq_cpu_init, > .name = "exynos_cpufreq", > .attr = cpufreq_generic_attr, > -#ifdef CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW > - .boost_supported = true, > -#endif > #ifdef CONFIG_PM > .suspend = cpufreq_generic_suspend, > #endif > ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 7/7] cpufreq: exynos: remove Exynos4x12 specific cpufreq driver support 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz (?) @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz -1 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel, b.zolnierkie Exynos4x12 based platforms have switched over to use generic cpufreq driver for cpufreq functionality. So the Exynos specific cpufreq support for these platforms can be removed. Also once Exynos4x12 based platforms support have been removed the shared exynos-cpufreq driver is no longer needed and can be deleted. Based on the earlier work by Thomas Abraham. Cc: Viresh Kumar <viresh.kumar@linaro.org> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/cpufreq/Kconfig.arm | 23 ---- drivers/cpufreq/Makefile | 2 - drivers/cpufreq/exynos-cpufreq.c | 231 ---------------------------------- drivers/cpufreq/exynos-cpufreq.h | 72 ----------- drivers/cpufreq/exynos4x12-cpufreq.c | 236 ----------------------------------- 5 files changed, 564 deletions(-) delete mode 100644 drivers/cpufreq/exynos-cpufreq.c delete mode 100644 drivers/cpufreq/exynos-cpufreq.h delete mode 100644 drivers/cpufreq/exynos4x12-cpufreq.c diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm index 5f5a15a..7d7a815 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm @@ -24,29 +24,6 @@ config ARM_VEXPRESS_SPC_CPUFREQ This add the CPUfreq driver support for Versatile Express big.LITTLE platforms using SPC for power management. - -config ARM_EXYNOS_CPUFREQ - tristate "SAMSUNG EXYNOS CPUfreq Driver" - depends on CPU_EXYNOS4210 || SOC_EXYNOS4212 || SOC_EXYNOS4412 || SOC_EXYNOS5250 - depends on THERMAL - help - This adds the CPUFreq driver for Samsung EXYNOS platforms. - Supported SoC versions are: - Exynos4210, Exynos4212, Exynos4412, and Exynos5250. - - If in doubt, say N. - -config ARM_EXYNOS4X12_CPUFREQ - bool "SAMSUNG EXYNOS4x12" - depends on SOC_EXYNOS4212 || SOC_EXYNOS4412 - depends on ARM_EXYNOS_CPUFREQ - default y - help - This adds the CPUFreq driver for Samsung EXYNOS4X12 - SoC (EXYNOS4212 or EXYNOS4412). - - If in doubt, say N. - config ARM_EXYNOS_CPU_FREQ_BOOST_SW bool "EXYNOS Frequency Overclocking - Software" depends on CPUFREQ_DT && THERMAL diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile index 6414958..bbc4a9f 100644 --- a/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile @@ -53,8 +53,6 @@ obj-$(CONFIG_ARM_DT_BL_CPUFREQ) += arm_big_little_dt.o obj-$(CONFIG_ARCH_DAVINCI) += davinci-cpufreq.o obj-$(CONFIG_UX500_SOC_DB8500) += dbx500-cpufreq.o obj-$(CONFIG_ARM_EXYNOS_CPUFREQ) += arm-exynos-cpufreq.o -arm-exynos-cpufreq-y := exynos-cpufreq.o -arm-exynos-cpufreq-$(CONFIG_ARM_EXYNOS4X12_CPUFREQ) += exynos4x12-cpufreq.o obj-$(CONFIG_ARM_EXYNOS5440_CPUFREQ) += exynos5440-cpufreq.o obj-$(CONFIG_ARM_HIGHBANK_CPUFREQ) += highbank-cpufreq.o obj-$(CONFIG_ARM_HISI_ACPU_CPUFREQ) += hisi-acpu-cpufreq.o diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c deleted file mode 100644 index 89d252e..0000000 --- a/drivers/cpufreq/exynos-cpufreq.c +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. - * http://www.samsung.com - * - * EXYNOS - CPU frequency scaling support for EXYNOS series - * - * 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/kernel.h> -#include <linux/module.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/slab.h> -#include <linux/regulator/consumer.h> -#include <linux/cpufreq.h> -#include <linux/platform_device.h> -#include <linux/of.h> -#include <linux/cpu_cooling.h> -#include <linux/cpu.h> - -#include "exynos-cpufreq.h" - -static struct exynos_dvfs_info *exynos_info; -static struct thermal_cooling_device *cdev; -static struct regulator *arm_regulator; -static unsigned int locking_frequency; - -static int exynos_cpufreq_get_index(unsigned int freq) -{ - struct cpufreq_frequency_table *freq_table = exynos_info->freq_table; - struct cpufreq_frequency_table *pos; - - cpufreq_for_each_entry(pos, freq_table) - if (pos->frequency == freq) - break; - - if (pos->frequency == CPUFREQ_TABLE_END) - return -EINVAL; - - return pos - freq_table; -} - -static int exynos_cpufreq_scale(unsigned int target_freq) -{ - struct cpufreq_frequency_table *freq_table = exynos_info->freq_table; - unsigned int *volt_table = exynos_info->volt_table; - struct cpufreq_policy *policy = cpufreq_cpu_get(0); - unsigned int arm_volt, safe_arm_volt = 0; - unsigned int mpll_freq_khz = exynos_info->mpll_freq_khz; - struct device *dev = exynos_info->dev; - unsigned int old_freq; - int index, old_index; - int ret = 0; - - old_freq = policy->cur; - - /* - * The policy max have been changed so that we cannot get proper - * old_index with cpufreq_frequency_table_target(). Thus, ignore - * policy and get the index from the raw frequency table. - */ - old_index = exynos_cpufreq_get_index(old_freq); - if (old_index < 0) { - ret = old_index; - goto out; - } - - index = exynos_cpufreq_get_index(target_freq); - if (index < 0) { - ret = index; - goto out; - } - - /* - * ARM clock source will be changed APLL to MPLL temporary - * To support this level, need to control regulator for - * required voltage level - */ - if (exynos_info->need_apll_change != NULL) { - if (exynos_info->need_apll_change(old_index, index) && - (freq_table[index].frequency < mpll_freq_khz) && - (freq_table[old_index].frequency < mpll_freq_khz)) - safe_arm_volt = volt_table[exynos_info->pll_safe_idx]; - } - arm_volt = volt_table[index]; - - /* When the new frequency is higher than current frequency */ - if ((target_freq > old_freq) && !safe_arm_volt) { - /* Firstly, voltage up to increase frequency */ - ret = regulator_set_voltage(arm_regulator, arm_volt, arm_volt); - if (ret) { - dev_err(dev, "failed to set cpu voltage to %d\n", - arm_volt); - return ret; - } - } - - if (safe_arm_volt) { - ret = regulator_set_voltage(arm_regulator, safe_arm_volt, - safe_arm_volt); - if (ret) { - dev_err(dev, "failed to set cpu voltage to %d\n", - safe_arm_volt); - return ret; - } - } - - exynos_info->set_freq(old_index, index); - - /* When the new frequency is lower than current frequency */ - if ((target_freq < old_freq) || - ((target_freq > old_freq) && safe_arm_volt)) { - /* down the voltage after frequency change */ - ret = regulator_set_voltage(arm_regulator, arm_volt, - arm_volt); - if (ret) { - dev_err(dev, "failed to set cpu voltage to %d\n", - arm_volt); - goto out; - } - } - -out: - cpufreq_cpu_put(policy); - - return ret; -} - -static int exynos_target(struct cpufreq_policy *policy, unsigned int index) -{ - return exynos_cpufreq_scale(exynos_info->freq_table[index].frequency); -} - -static int exynos_cpufreq_cpu_init(struct cpufreq_policy *policy) -{ - policy->clk = exynos_info->cpu_clk; - policy->suspend_freq = locking_frequency; - return cpufreq_generic_init(policy, exynos_info->freq_table, 100000); -} - -static struct cpufreq_driver exynos_driver = { - .flags = CPUFREQ_STICKY | CPUFREQ_NEED_INITIAL_FREQ_CHECK, - .verify = cpufreq_generic_frequency_table_verify, - .target_index = exynos_target, - .get = cpufreq_generic_get, - .init = exynos_cpufreq_cpu_init, - .name = "exynos_cpufreq", - .attr = cpufreq_generic_attr, -#ifdef CONFIG_PM - .suspend = cpufreq_generic_suspend, -#endif -}; - -static int exynos_cpufreq_probe(struct platform_device *pdev) -{ - struct device_node *cpu0; - int ret = -EINVAL; - - exynos_info = kzalloc(sizeof(*exynos_info), GFP_KERNEL); - if (!exynos_info) - return -ENOMEM; - - exynos_info->dev = &pdev->dev; - - if (of_machine_is_compatible("samsung,exynos4212")) { - exynos_info->type = EXYNOS_SOC_4212; - ret = exynos4x12_cpufreq_init(exynos_info); - } else if (of_machine_is_compatible("samsung,exynos4412")) { - exynos_info->type = EXYNOS_SOC_4412; - ret = exynos4x12_cpufreq_init(exynos_info); - } else { - pr_err("%s: Unknown SoC type\n", __func__); - return -ENODEV; - } - - if (ret) - goto err_vdd_arm; - - if (exynos_info->set_freq == NULL) { - dev_err(&pdev->dev, "No set_freq function (ERR)\n"); - goto err_vdd_arm; - } - - arm_regulator = regulator_get(NULL, "vdd_arm"); - if (IS_ERR(arm_regulator)) { - dev_err(&pdev->dev, "failed to get resource vdd_arm\n"); - goto err_vdd_arm; - } - - /* Done here as we want to capture boot frequency */ - locking_frequency = clk_get_rate(exynos_info->cpu_clk) / 1000; - - ret = cpufreq_register_driver(&exynos_driver); - if (ret) - goto err_cpufreq_reg; - - cpu0 = of_get_cpu_node(0, NULL); - if (!cpu0) { - pr_err("failed to find cpu0 node\n"); - return 0; - } - - if (of_find_property(cpu0, "#cooling-cells", NULL)) { - cdev = of_cpufreq_cooling_register(cpu0, - cpu_present_mask); - if (IS_ERR(cdev)) - pr_err("running cpufreq without cooling device: %ld\n", - PTR_ERR(cdev)); - } - - return 0; - -err_cpufreq_reg: - dev_err(&pdev->dev, "failed to register cpufreq driver\n"); - regulator_put(arm_regulator); -err_vdd_arm: - kfree(exynos_info); - return -EINVAL; -} - -static struct platform_driver exynos_cpufreq_platdrv = { - .driver = { - .name = "exynos-cpufreq", - }, - .probe = exynos_cpufreq_probe, -}; -module_platform_driver(exynos_cpufreq_platdrv); diff --git a/drivers/cpufreq/exynos-cpufreq.h b/drivers/cpufreq/exynos-cpufreq.h deleted file mode 100644 index a359db7..0000000 --- a/drivers/cpufreq/exynos-cpufreq.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2010 Samsung Electronics Co., Ltd. - * http://www.samsung.com - * - * EXYNOS - CPUFreq support - * - * 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. -*/ - -enum cpufreq_level_index { - L0, L1, L2, L3, L4, - L5, L6, L7, L8, L9, - L10, L11, L12, L13, L14, - L15, L16, L17, L18, L19, - L20, -}; - -enum exynos_soc_type { - EXYNOS_SOC_4212, - EXYNOS_SOC_4412, -}; - -#define APLL_FREQ(f, a0, a1, a2, a3, a4, a5, a6, a7, b0, b1, b2, m, p, s) \ - { \ - .freq = (f) * 1000, \ - .clk_div_cpu0 = ((a0) | (a1) << 4 | (a2) << 8 | (a3) << 12 | \ - (a4) << 16 | (a5) << 20 | (a6) << 24 | (a7) << 28), \ - .clk_div_cpu1 = (b0 << 0 | b1 << 4 | b2 << 8), \ - .mps = ((m) << 16 | (p) << 8 | (s)), \ - } - -struct apll_freq { - unsigned int freq; - u32 clk_div_cpu0; - u32 clk_div_cpu1; - u32 mps; -}; - -struct exynos_dvfs_info { - enum exynos_soc_type type; - struct device *dev; - unsigned long mpll_freq_khz; - unsigned int pll_safe_idx; - struct clk *cpu_clk; - unsigned int *volt_table; - struct cpufreq_frequency_table *freq_table; - void (*set_freq)(unsigned int, unsigned int); - bool (*need_apll_change)(unsigned int, unsigned int); - void __iomem *cmu_regs; -}; - -#ifdef CONFIG_ARM_EXYNOS4X12_CPUFREQ -extern int exynos4x12_cpufreq_init(struct exynos_dvfs_info *); -#else -static inline int exynos4x12_cpufreq_init(struct exynos_dvfs_info *info) -{ - return -EOPNOTSUPP; -} -#endif - -#define EXYNOS4_CLKSRC_CPU 0x14200 -#define EXYNOS4_CLKMUX_STATCPU 0x14400 - -#define EXYNOS4_CLKDIV_CPU 0x14500 -#define EXYNOS4_CLKDIV_CPU1 0x14504 -#define EXYNOS4_CLKDIV_STATCPU 0x14600 -#define EXYNOS4_CLKDIV_STATCPU1 0x14604 - -#define EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT (16) -#define EXYNOS4_CLKMUX_STATCPU_MUXCORE_MASK (0x7 << EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT) diff --git a/drivers/cpufreq/exynos4x12-cpufreq.c b/drivers/cpufreq/exynos4x12-cpufreq.c deleted file mode 100644 index 9e78a85..0000000 --- a/drivers/cpufreq/exynos4x12-cpufreq.c +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright (c) 2010-2012 Samsung Electronics Co., Ltd. - * http://www.samsung.com - * - * EXYNOS4X12 - CPU frequency scaling support - * - * 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/module.h> -#include <linux/kernel.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/slab.h> -#include <linux/cpufreq.h> -#include <linux/of.h> -#include <linux/of_address.h> - -#include "exynos-cpufreq.h" - -static struct clk *cpu_clk; -static struct clk *moutcore; -static struct clk *mout_mpll; -static struct clk *mout_apll; -static struct exynos_dvfs_info *cpufreq; - -static unsigned int exynos4x12_volt_table[] = { - 1350000, 1287500, 1250000, 1187500, 1137500, 1087500, 1037500, - 1000000, 987500, 975000, 950000, 925000, 900000, 900000 -}; - -static struct cpufreq_frequency_table exynos4x12_freq_table[] = { - {CPUFREQ_BOOST_FREQ, L0, 1500 * 1000}, - {0, L1, 1400 * 1000}, - {0, L2, 1300 * 1000}, - {0, L3, 1200 * 1000}, - {0, L4, 1100 * 1000}, - {0, L5, 1000 * 1000}, - {0, L6, 900 * 1000}, - {0, L7, 800 * 1000}, - {0, L8, 700 * 1000}, - {0, L9, 600 * 1000}, - {0, L10, 500 * 1000}, - {0, L11, 400 * 1000}, - {0, L12, 300 * 1000}, - {0, L13, 200 * 1000}, - {0, 0, CPUFREQ_TABLE_END}, -}; - -static struct apll_freq *apll_freq_4x12; - -static struct apll_freq apll_freq_4212[] = { - /* - * values: - * freq - * clock divider for CORE, COREM0, COREM1, PERIPH, ATB, PCLK_DBG, APLL, CORE2 - * clock divider for COPY, HPM, RESERVED - * PLL M, P, S - */ - APLL_FREQ(1500, 0, 3, 7, 0, 6, 1, 2, 0, 6, 2, 0, 250, 4, 0), - APLL_FREQ(1400, 0, 3, 7, 0, 6, 1, 2, 0, 6, 2, 0, 175, 3, 0), - APLL_FREQ(1300, 0, 3, 7, 0, 5, 1, 2, 0, 5, 2, 0, 325, 6, 0), - APLL_FREQ(1200, 0, 3, 7, 0, 5, 1, 2, 0, 5, 2, 0, 200, 4, 0), - APLL_FREQ(1100, 0, 3, 6, 0, 4, 1, 2, 0, 4, 2, 0, 275, 6, 0), - APLL_FREQ(1000, 0, 2, 5, 0, 4, 1, 1, 0, 4, 2, 0, 125, 3, 0), - APLL_FREQ(900, 0, 2, 5, 0, 3, 1, 1, 0, 3, 2, 0, 150, 4, 0), - APLL_FREQ(800, 0, 2, 5, 0, 3, 1, 1, 0, 3, 2, 0, 100, 3, 0), - APLL_FREQ(700, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 175, 3, 1), - APLL_FREQ(600, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 200, 4, 1), - APLL_FREQ(500, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 125, 3, 1), - APLL_FREQ(400, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 100, 3, 1), - APLL_FREQ(300, 0, 2, 4, 0, 2, 1, 1, 0, 3, 2, 0, 200, 4, 2), - APLL_FREQ(200, 0, 1, 3, 0, 1, 1, 1, 0, 3, 2, 0, 100, 3, 2), -}; - -static struct apll_freq apll_freq_4412[] = { - /* - * values: - * freq - * clock divider for CORE, COREM0, COREM1, PERIPH, ATB, PCLK_DBG, APLL, CORE2 - * clock divider for COPY, HPM, CORES - * PLL M, P, S - */ - APLL_FREQ(1500, 0, 3, 7, 0, 6, 1, 2, 0, 6, 0, 7, 250, 4, 0), - APLL_FREQ(1400, 0, 3, 7, 0, 6, 1, 2, 0, 6, 0, 6, 175, 3, 0), - APLL_FREQ(1300, 0, 3, 7, 0, 5, 1, 2, 0, 5, 0, 6, 325, 6, 0), - APLL_FREQ(1200, 0, 3, 7, 0, 5, 1, 2, 0, 5, 0, 5, 200, 4, 0), - APLL_FREQ(1100, 0, 3, 6, 0, 4, 1, 2, 0, 4, 0, 5, 275, 6, 0), - APLL_FREQ(1000, 0, 2, 5, 0, 4, 1, 1, 0, 4, 0, 4, 125, 3, 0), - APLL_FREQ(900, 0, 2, 5, 0, 3, 1, 1, 0, 3, 0, 4, 150, 4, 0), - APLL_FREQ(800, 0, 2, 5, 0, 3, 1, 1, 0, 3, 0, 3, 100, 3, 0), - APLL_FREQ(700, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 3, 175, 3, 1), - APLL_FREQ(600, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 2, 200, 4, 1), - APLL_FREQ(500, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 2, 125, 3, 1), - APLL_FREQ(400, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 1, 100, 3, 1), - APLL_FREQ(300, 0, 2, 4, 0, 2, 1, 1, 0, 3, 0, 1, 200, 4, 2), - APLL_FREQ(200, 0, 1, 3, 0, 1, 1, 1, 0, 3, 0, 0, 100, 3, 2), -}; - -static void exynos4x12_set_clkdiv(unsigned int div_index) -{ - unsigned int tmp; - - /* Change Divider - CPU0 */ - - tmp = apll_freq_4x12[div_index].clk_div_cpu0; - - __raw_writel(tmp, cpufreq->cmu_regs + EXYNOS4_CLKDIV_CPU); - - while (__raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKDIV_STATCPU) - & 0x11111111) - cpu_relax(); - - /* Change Divider - CPU1 */ - tmp = apll_freq_4x12[div_index].clk_div_cpu1; - - __raw_writel(tmp, cpufreq->cmu_regs + EXYNOS4_CLKDIV_CPU1); - - do { - cpu_relax(); - tmp = __raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKDIV_STATCPU1); - } while (tmp != 0x0); -} - -static void exynos4x12_set_apll(unsigned int index) -{ - unsigned int tmp, freq = apll_freq_4x12[index].freq; - - /* MUX_CORE_SEL = MPLL, ARMCLK uses MPLL for lock time */ - clk_set_parent(moutcore, mout_mpll); - - do { - cpu_relax(); - tmp = (__raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKMUX_STATCPU) - >> EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT); - tmp &= 0x7; - } while (tmp != 0x2); - - clk_set_rate(mout_apll, freq * 1000); - - /* MUX_CORE_SEL = APLL */ - clk_set_parent(moutcore, mout_apll); - - do { - cpu_relax(); - tmp = __raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKMUX_STATCPU); - tmp &= EXYNOS4_CLKMUX_STATCPU_MUXCORE_MASK; - } while (tmp != (0x1 << EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT)); -} - -static void exynos4x12_set_frequency(unsigned int old_index, - unsigned int new_index) -{ - if (old_index > new_index) { - exynos4x12_set_clkdiv(new_index); - exynos4x12_set_apll(new_index); - } else if (old_index < new_index) { - exynos4x12_set_apll(new_index); - exynos4x12_set_clkdiv(new_index); - } -} - -int exynos4x12_cpufreq_init(struct exynos_dvfs_info *info) -{ - struct device_node *np; - unsigned long rate; - - /* - * HACK: This is a temporary workaround to get access to clock - * controller registers directly and remove static mappings and - * dependencies on platform headers. It is necessary to enable - * Exynos multi-platform support and will be removed together with - * this whole driver as soon as Exynos gets migrated to use - * cpufreq-dt driver. - */ - np = of_find_compatible_node(NULL, NULL, "samsung,exynos4412-clock"); - if (!np) { - pr_err("%s: failed to find clock controller DT node\n", - __func__); - return -ENODEV; - } - - info->cmu_regs = of_iomap(np, 0); - if (!info->cmu_regs) { - pr_err("%s: failed to map CMU registers\n", __func__); - return -EFAULT; - } - - cpu_clk = clk_get(NULL, "armclk"); - if (IS_ERR(cpu_clk)) - return PTR_ERR(cpu_clk); - - moutcore = clk_get(NULL, "moutcore"); - if (IS_ERR(moutcore)) - goto err_moutcore; - - mout_mpll = clk_get(NULL, "mout_mpll"); - if (IS_ERR(mout_mpll)) - goto err_mout_mpll; - - rate = clk_get_rate(mout_mpll) / 1000; - - mout_apll = clk_get(NULL, "mout_apll"); - if (IS_ERR(mout_apll)) - goto err_mout_apll; - - if (info->type == EXYNOS_SOC_4212) - apll_freq_4x12 = apll_freq_4212; - else - apll_freq_4x12 = apll_freq_4412; - - info->mpll_freq_khz = rate; - /* 800Mhz */ - info->pll_safe_idx = L7; - info->cpu_clk = cpu_clk; - info->volt_table = exynos4x12_volt_table; - info->freq_table = exynos4x12_freq_table; - info->set_freq = exynos4x12_set_frequency; - - cpufreq = info; - - return 0; - -err_mout_apll: - clk_put(mout_mpll); -err_mout_mpll: - clk_put(moutcore); -err_moutcore: - clk_put(cpu_clk); - - pr_debug("%s: failed initialization\n", __func__); - return -EINVAL; -} -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v2 7/7] cpufreq: exynos: remove Exynos4x12 specific cpufreq driver support @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: linux-arm-kernel Exynos4x12 based platforms have switched over to use generic cpufreq driver for cpufreq functionality. So the Exynos specific cpufreq support for these platforms can be removed. Also once Exynos4x12 based platforms support have been removed the shared exynos-cpufreq driver is no longer needed and can be deleted. Based on the earlier work by Thomas Abraham. Cc: Viresh Kumar <viresh.kumar@linaro.org> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/cpufreq/Kconfig.arm | 23 ---- drivers/cpufreq/Makefile | 2 - drivers/cpufreq/exynos-cpufreq.c | 231 ---------------------------------- drivers/cpufreq/exynos-cpufreq.h | 72 ----------- drivers/cpufreq/exynos4x12-cpufreq.c | 236 ----------------------------------- 5 files changed, 564 deletions(-) delete mode 100644 drivers/cpufreq/exynos-cpufreq.c delete mode 100644 drivers/cpufreq/exynos-cpufreq.h delete mode 100644 drivers/cpufreq/exynos4x12-cpufreq.c diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm index 5f5a15a..7d7a815 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm @@ -24,29 +24,6 @@ config ARM_VEXPRESS_SPC_CPUFREQ This add the CPUfreq driver support for Versatile Express big.LITTLE platforms using SPC for power management. - -config ARM_EXYNOS_CPUFREQ - tristate "SAMSUNG EXYNOS CPUfreq Driver" - depends on CPU_EXYNOS4210 || SOC_EXYNOS4212 || SOC_EXYNOS4412 || SOC_EXYNOS5250 - depends on THERMAL - help - This adds the CPUFreq driver for Samsung EXYNOS platforms. - Supported SoC versions are: - Exynos4210, Exynos4212, Exynos4412, and Exynos5250. - - If in doubt, say N. - -config ARM_EXYNOS4X12_CPUFREQ - bool "SAMSUNG EXYNOS4x12" - depends on SOC_EXYNOS4212 || SOC_EXYNOS4412 - depends on ARM_EXYNOS_CPUFREQ - default y - help - This adds the CPUFreq driver for Samsung EXYNOS4X12 - SoC (EXYNOS4212 or EXYNOS4412). - - If in doubt, say N. - config ARM_EXYNOS_CPU_FREQ_BOOST_SW bool "EXYNOS Frequency Overclocking - Software" depends on CPUFREQ_DT && THERMAL diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile index 6414958..bbc4a9f 100644 --- a/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile @@ -53,8 +53,6 @@ obj-$(CONFIG_ARM_DT_BL_CPUFREQ) += arm_big_little_dt.o obj-$(CONFIG_ARCH_DAVINCI) += davinci-cpufreq.o obj-$(CONFIG_UX500_SOC_DB8500) += dbx500-cpufreq.o obj-$(CONFIG_ARM_EXYNOS_CPUFREQ) += arm-exynos-cpufreq.o -arm-exynos-cpufreq-y := exynos-cpufreq.o -arm-exynos-cpufreq-$(CONFIG_ARM_EXYNOS4X12_CPUFREQ) += exynos4x12-cpufreq.o obj-$(CONFIG_ARM_EXYNOS5440_CPUFREQ) += exynos5440-cpufreq.o obj-$(CONFIG_ARM_HIGHBANK_CPUFREQ) += highbank-cpufreq.o obj-$(CONFIG_ARM_HISI_ACPU_CPUFREQ) += hisi-acpu-cpufreq.o diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c deleted file mode 100644 index 89d252e..0000000 --- a/drivers/cpufreq/exynos-cpufreq.c +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. - * http://www.samsung.com - * - * EXYNOS - CPU frequency scaling support for EXYNOS series - * - * 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/kernel.h> -#include <linux/module.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/slab.h> -#include <linux/regulator/consumer.h> -#include <linux/cpufreq.h> -#include <linux/platform_device.h> -#include <linux/of.h> -#include <linux/cpu_cooling.h> -#include <linux/cpu.h> - -#include "exynos-cpufreq.h" - -static struct exynos_dvfs_info *exynos_info; -static struct thermal_cooling_device *cdev; -static struct regulator *arm_regulator; -static unsigned int locking_frequency; - -static int exynos_cpufreq_get_index(unsigned int freq) -{ - struct cpufreq_frequency_table *freq_table = exynos_info->freq_table; - struct cpufreq_frequency_table *pos; - - cpufreq_for_each_entry(pos, freq_table) - if (pos->frequency == freq) - break; - - if (pos->frequency == CPUFREQ_TABLE_END) - return -EINVAL; - - return pos - freq_table; -} - -static int exynos_cpufreq_scale(unsigned int target_freq) -{ - struct cpufreq_frequency_table *freq_table = exynos_info->freq_table; - unsigned int *volt_table = exynos_info->volt_table; - struct cpufreq_policy *policy = cpufreq_cpu_get(0); - unsigned int arm_volt, safe_arm_volt = 0; - unsigned int mpll_freq_khz = exynos_info->mpll_freq_khz; - struct device *dev = exynos_info->dev; - unsigned int old_freq; - int index, old_index; - int ret = 0; - - old_freq = policy->cur; - - /* - * The policy max have been changed so that we cannot get proper - * old_index with cpufreq_frequency_table_target(). Thus, ignore - * policy and get the index from the raw frequency table. - */ - old_index = exynos_cpufreq_get_index(old_freq); - if (old_index < 0) { - ret = old_index; - goto out; - } - - index = exynos_cpufreq_get_index(target_freq); - if (index < 0) { - ret = index; - goto out; - } - - /* - * ARM clock source will be changed APLL to MPLL temporary - * To support this level, need to control regulator for - * required voltage level - */ - if (exynos_info->need_apll_change != NULL) { - if (exynos_info->need_apll_change(old_index, index) && - (freq_table[index].frequency < mpll_freq_khz) && - (freq_table[old_index].frequency < mpll_freq_khz)) - safe_arm_volt = volt_table[exynos_info->pll_safe_idx]; - } - arm_volt = volt_table[index]; - - /* When the new frequency is higher than current frequency */ - if ((target_freq > old_freq) && !safe_arm_volt) { - /* Firstly, voltage up to increase frequency */ - ret = regulator_set_voltage(arm_regulator, arm_volt, arm_volt); - if (ret) { - dev_err(dev, "failed to set cpu voltage to %d\n", - arm_volt); - return ret; - } - } - - if (safe_arm_volt) { - ret = regulator_set_voltage(arm_regulator, safe_arm_volt, - safe_arm_volt); - if (ret) { - dev_err(dev, "failed to set cpu voltage to %d\n", - safe_arm_volt); - return ret; - } - } - - exynos_info->set_freq(old_index, index); - - /* When the new frequency is lower than current frequency */ - if ((target_freq < old_freq) || - ((target_freq > old_freq) && safe_arm_volt)) { - /* down the voltage after frequency change */ - ret = regulator_set_voltage(arm_regulator, arm_volt, - arm_volt); - if (ret) { - dev_err(dev, "failed to set cpu voltage to %d\n", - arm_volt); - goto out; - } - } - -out: - cpufreq_cpu_put(policy); - - return ret; -} - -static int exynos_target(struct cpufreq_policy *policy, unsigned int index) -{ - return exynos_cpufreq_scale(exynos_info->freq_table[index].frequency); -} - -static int exynos_cpufreq_cpu_init(struct cpufreq_policy *policy) -{ - policy->clk = exynos_info->cpu_clk; - policy->suspend_freq = locking_frequency; - return cpufreq_generic_init(policy, exynos_info->freq_table, 100000); -} - -static struct cpufreq_driver exynos_driver = { - .flags = CPUFREQ_STICKY | CPUFREQ_NEED_INITIAL_FREQ_CHECK, - .verify = cpufreq_generic_frequency_table_verify, - .target_index = exynos_target, - .get = cpufreq_generic_get, - .init = exynos_cpufreq_cpu_init, - .name = "exynos_cpufreq", - .attr = cpufreq_generic_attr, -#ifdef CONFIG_PM - .suspend = cpufreq_generic_suspend, -#endif -}; - -static int exynos_cpufreq_probe(struct platform_device *pdev) -{ - struct device_node *cpu0; - int ret = -EINVAL; - - exynos_info = kzalloc(sizeof(*exynos_info), GFP_KERNEL); - if (!exynos_info) - return -ENOMEM; - - exynos_info->dev = &pdev->dev; - - if (of_machine_is_compatible("samsung,exynos4212")) { - exynos_info->type = EXYNOS_SOC_4212; - ret = exynos4x12_cpufreq_init(exynos_info); - } else if (of_machine_is_compatible("samsung,exynos4412")) { - exynos_info->type = EXYNOS_SOC_4412; - ret = exynos4x12_cpufreq_init(exynos_info); - } else { - pr_err("%s: Unknown SoC type\n", __func__); - return -ENODEV; - } - - if (ret) - goto err_vdd_arm; - - if (exynos_info->set_freq == NULL) { - dev_err(&pdev->dev, "No set_freq function (ERR)\n"); - goto err_vdd_arm; - } - - arm_regulator = regulator_get(NULL, "vdd_arm"); - if (IS_ERR(arm_regulator)) { - dev_err(&pdev->dev, "failed to get resource vdd_arm\n"); - goto err_vdd_arm; - } - - /* Done here as we want to capture boot frequency */ - locking_frequency = clk_get_rate(exynos_info->cpu_clk) / 1000; - - ret = cpufreq_register_driver(&exynos_driver); - if (ret) - goto err_cpufreq_reg; - - cpu0 = of_get_cpu_node(0, NULL); - if (!cpu0) { - pr_err("failed to find cpu0 node\n"); - return 0; - } - - if (of_find_property(cpu0, "#cooling-cells", NULL)) { - cdev = of_cpufreq_cooling_register(cpu0, - cpu_present_mask); - if (IS_ERR(cdev)) - pr_err("running cpufreq without cooling device: %ld\n", - PTR_ERR(cdev)); - } - - return 0; - -err_cpufreq_reg: - dev_err(&pdev->dev, "failed to register cpufreq driver\n"); - regulator_put(arm_regulator); -err_vdd_arm: - kfree(exynos_info); - return -EINVAL; -} - -static struct platform_driver exynos_cpufreq_platdrv = { - .driver = { - .name = "exynos-cpufreq", - }, - .probe = exynos_cpufreq_probe, -}; -module_platform_driver(exynos_cpufreq_platdrv); diff --git a/drivers/cpufreq/exynos-cpufreq.h b/drivers/cpufreq/exynos-cpufreq.h deleted file mode 100644 index a359db7..0000000 --- a/drivers/cpufreq/exynos-cpufreq.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2010 Samsung Electronics Co., Ltd. - * http://www.samsung.com - * - * EXYNOS - CPUFreq support - * - * 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. -*/ - -enum cpufreq_level_index { - L0, L1, L2, L3, L4, - L5, L6, L7, L8, L9, - L10, L11, L12, L13, L14, - L15, L16, L17, L18, L19, - L20, -}; - -enum exynos_soc_type { - EXYNOS_SOC_4212, - EXYNOS_SOC_4412, -}; - -#define APLL_FREQ(f, a0, a1, a2, a3, a4, a5, a6, a7, b0, b1, b2, m, p, s) \ - { \ - .freq = (f) * 1000, \ - .clk_div_cpu0 = ((a0) | (a1) << 4 | (a2) << 8 | (a3) << 12 | \ - (a4) << 16 | (a5) << 20 | (a6) << 24 | (a7) << 28), \ - .clk_div_cpu1 = (b0 << 0 | b1 << 4 | b2 << 8), \ - .mps = ((m) << 16 | (p) << 8 | (s)), \ - } - -struct apll_freq { - unsigned int freq; - u32 clk_div_cpu0; - u32 clk_div_cpu1; - u32 mps; -}; - -struct exynos_dvfs_info { - enum exynos_soc_type type; - struct device *dev; - unsigned long mpll_freq_khz; - unsigned int pll_safe_idx; - struct clk *cpu_clk; - unsigned int *volt_table; - struct cpufreq_frequency_table *freq_table; - void (*set_freq)(unsigned int, unsigned int); - bool (*need_apll_change)(unsigned int, unsigned int); - void __iomem *cmu_regs; -}; - -#ifdef CONFIG_ARM_EXYNOS4X12_CPUFREQ -extern int exynos4x12_cpufreq_init(struct exynos_dvfs_info *); -#else -static inline int exynos4x12_cpufreq_init(struct exynos_dvfs_info *info) -{ - return -EOPNOTSUPP; -} -#endif - -#define EXYNOS4_CLKSRC_CPU 0x14200 -#define EXYNOS4_CLKMUX_STATCPU 0x14400 - -#define EXYNOS4_CLKDIV_CPU 0x14500 -#define EXYNOS4_CLKDIV_CPU1 0x14504 -#define EXYNOS4_CLKDIV_STATCPU 0x14600 -#define EXYNOS4_CLKDIV_STATCPU1 0x14604 - -#define EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT (16) -#define EXYNOS4_CLKMUX_STATCPU_MUXCORE_MASK (0x7 << EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT) diff --git a/drivers/cpufreq/exynos4x12-cpufreq.c b/drivers/cpufreq/exynos4x12-cpufreq.c deleted file mode 100644 index 9e78a85..0000000 --- a/drivers/cpufreq/exynos4x12-cpufreq.c +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright (c) 2010-2012 Samsung Electronics Co., Ltd. - * http://www.samsung.com - * - * EXYNOS4X12 - CPU frequency scaling support - * - * 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/module.h> -#include <linux/kernel.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/slab.h> -#include <linux/cpufreq.h> -#include <linux/of.h> -#include <linux/of_address.h> - -#include "exynos-cpufreq.h" - -static struct clk *cpu_clk; -static struct clk *moutcore; -static struct clk *mout_mpll; -static struct clk *mout_apll; -static struct exynos_dvfs_info *cpufreq; - -static unsigned int exynos4x12_volt_table[] = { - 1350000, 1287500, 1250000, 1187500, 1137500, 1087500, 1037500, - 1000000, 987500, 975000, 950000, 925000, 900000, 900000 -}; - -static struct cpufreq_frequency_table exynos4x12_freq_table[] = { - {CPUFREQ_BOOST_FREQ, L0, 1500 * 1000}, - {0, L1, 1400 * 1000}, - {0, L2, 1300 * 1000}, - {0, L3, 1200 * 1000}, - {0, L4, 1100 * 1000}, - {0, L5, 1000 * 1000}, - {0, L6, 900 * 1000}, - {0, L7, 800 * 1000}, - {0, L8, 700 * 1000}, - {0, L9, 600 * 1000}, - {0, L10, 500 * 1000}, - {0, L11, 400 * 1000}, - {0, L12, 300 * 1000}, - {0, L13, 200 * 1000}, - {0, 0, CPUFREQ_TABLE_END}, -}; - -static struct apll_freq *apll_freq_4x12; - -static struct apll_freq apll_freq_4212[] = { - /* - * values: - * freq - * clock divider for CORE, COREM0, COREM1, PERIPH, ATB, PCLK_DBG, APLL, CORE2 - * clock divider for COPY, HPM, RESERVED - * PLL M, P, S - */ - APLL_FREQ(1500, 0, 3, 7, 0, 6, 1, 2, 0, 6, 2, 0, 250, 4, 0), - APLL_FREQ(1400, 0, 3, 7, 0, 6, 1, 2, 0, 6, 2, 0, 175, 3, 0), - APLL_FREQ(1300, 0, 3, 7, 0, 5, 1, 2, 0, 5, 2, 0, 325, 6, 0), - APLL_FREQ(1200, 0, 3, 7, 0, 5, 1, 2, 0, 5, 2, 0, 200, 4, 0), - APLL_FREQ(1100, 0, 3, 6, 0, 4, 1, 2, 0, 4, 2, 0, 275, 6, 0), - APLL_FREQ(1000, 0, 2, 5, 0, 4, 1, 1, 0, 4, 2, 0, 125, 3, 0), - APLL_FREQ(900, 0, 2, 5, 0, 3, 1, 1, 0, 3, 2, 0, 150, 4, 0), - APLL_FREQ(800, 0, 2, 5, 0, 3, 1, 1, 0, 3, 2, 0, 100, 3, 0), - APLL_FREQ(700, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 175, 3, 1), - APLL_FREQ(600, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 200, 4, 1), - APLL_FREQ(500, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 125, 3, 1), - APLL_FREQ(400, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 100, 3, 1), - APLL_FREQ(300, 0, 2, 4, 0, 2, 1, 1, 0, 3, 2, 0, 200, 4, 2), - APLL_FREQ(200, 0, 1, 3, 0, 1, 1, 1, 0, 3, 2, 0, 100, 3, 2), -}; - -static struct apll_freq apll_freq_4412[] = { - /* - * values: - * freq - * clock divider for CORE, COREM0, COREM1, PERIPH, ATB, PCLK_DBG, APLL, CORE2 - * clock divider for COPY, HPM, CORES - * PLL M, P, S - */ - APLL_FREQ(1500, 0, 3, 7, 0, 6, 1, 2, 0, 6, 0, 7, 250, 4, 0), - APLL_FREQ(1400, 0, 3, 7, 0, 6, 1, 2, 0, 6, 0, 6, 175, 3, 0), - APLL_FREQ(1300, 0, 3, 7, 0, 5, 1, 2, 0, 5, 0, 6, 325, 6, 0), - APLL_FREQ(1200, 0, 3, 7, 0, 5, 1, 2, 0, 5, 0, 5, 200, 4, 0), - APLL_FREQ(1100, 0, 3, 6, 0, 4, 1, 2, 0, 4, 0, 5, 275, 6, 0), - APLL_FREQ(1000, 0, 2, 5, 0, 4, 1, 1, 0, 4, 0, 4, 125, 3, 0), - APLL_FREQ(900, 0, 2, 5, 0, 3, 1, 1, 0, 3, 0, 4, 150, 4, 0), - APLL_FREQ(800, 0, 2, 5, 0, 3, 1, 1, 0, 3, 0, 3, 100, 3, 0), - APLL_FREQ(700, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 3, 175, 3, 1), - APLL_FREQ(600, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 2, 200, 4, 1), - APLL_FREQ(500, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 2, 125, 3, 1), - APLL_FREQ(400, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 1, 100, 3, 1), - APLL_FREQ(300, 0, 2, 4, 0, 2, 1, 1, 0, 3, 0, 1, 200, 4, 2), - APLL_FREQ(200, 0, 1, 3, 0, 1, 1, 1, 0, 3, 0, 0, 100, 3, 2), -}; - -static void exynos4x12_set_clkdiv(unsigned int div_index) -{ - unsigned int tmp; - - /* Change Divider - CPU0 */ - - tmp = apll_freq_4x12[div_index].clk_div_cpu0; - - __raw_writel(tmp, cpufreq->cmu_regs + EXYNOS4_CLKDIV_CPU); - - while (__raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKDIV_STATCPU) - & 0x11111111) - cpu_relax(); - - /* Change Divider - CPU1 */ - tmp = apll_freq_4x12[div_index].clk_div_cpu1; - - __raw_writel(tmp, cpufreq->cmu_regs + EXYNOS4_CLKDIV_CPU1); - - do { - cpu_relax(); - tmp = __raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKDIV_STATCPU1); - } while (tmp != 0x0); -} - -static void exynos4x12_set_apll(unsigned int index) -{ - unsigned int tmp, freq = apll_freq_4x12[index].freq; - - /* MUX_CORE_SEL = MPLL, ARMCLK uses MPLL for lock time */ - clk_set_parent(moutcore, mout_mpll); - - do { - cpu_relax(); - tmp = (__raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKMUX_STATCPU) - >> EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT); - tmp &= 0x7; - } while (tmp != 0x2); - - clk_set_rate(mout_apll, freq * 1000); - - /* MUX_CORE_SEL = APLL */ - clk_set_parent(moutcore, mout_apll); - - do { - cpu_relax(); - tmp = __raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKMUX_STATCPU); - tmp &= EXYNOS4_CLKMUX_STATCPU_MUXCORE_MASK; - } while (tmp != (0x1 << EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT)); -} - -static void exynos4x12_set_frequency(unsigned int old_index, - unsigned int new_index) -{ - if (old_index > new_index) { - exynos4x12_set_clkdiv(new_index); - exynos4x12_set_apll(new_index); - } else if (old_index < new_index) { - exynos4x12_set_apll(new_index); - exynos4x12_set_clkdiv(new_index); - } -} - -int exynos4x12_cpufreq_init(struct exynos_dvfs_info *info) -{ - struct device_node *np; - unsigned long rate; - - /* - * HACK: This is a temporary workaround to get access to clock - * controller registers directly and remove static mappings and - * dependencies on platform headers. It is necessary to enable - * Exynos multi-platform support and will be removed together with - * this whole driver as soon as Exynos gets migrated to use - * cpufreq-dt driver. - */ - np = of_find_compatible_node(NULL, NULL, "samsung,exynos4412-clock"); - if (!np) { - pr_err("%s: failed to find clock controller DT node\n", - __func__); - return -ENODEV; - } - - info->cmu_regs = of_iomap(np, 0); - if (!info->cmu_regs) { - pr_err("%s: failed to map CMU registers\n", __func__); - return -EFAULT; - } - - cpu_clk = clk_get(NULL, "armclk"); - if (IS_ERR(cpu_clk)) - return PTR_ERR(cpu_clk); - - moutcore = clk_get(NULL, "moutcore"); - if (IS_ERR(moutcore)) - goto err_moutcore; - - mout_mpll = clk_get(NULL, "mout_mpll"); - if (IS_ERR(mout_mpll)) - goto err_mout_mpll; - - rate = clk_get_rate(mout_mpll) / 1000; - - mout_apll = clk_get(NULL, "mout_apll"); - if (IS_ERR(mout_apll)) - goto err_mout_apll; - - if (info->type == EXYNOS_SOC_4212) - apll_freq_4x12 = apll_freq_4212; - else - apll_freq_4x12 = apll_freq_4412; - - info->mpll_freq_khz = rate; - /* 800Mhz */ - info->pll_safe_idx = L7; - info->cpu_clk = cpu_clk; - info->volt_table = exynos4x12_volt_table; - info->freq_table = exynos4x12_freq_table; - info->set_freq = exynos4x12_set_frequency; - - cpufreq = info; - - return 0; - -err_mout_apll: - clk_put(mout_mpll); -err_mout_mpll: - clk_put(moutcore); -err_moutcore: - clk_put(cpu_clk); - - pr_debug("%s: failed initialization\n", __func__); - return -EINVAL; -} -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v2 7/7] cpufreq: exynos: remove Exynos4x12 specific cpufreq driver support @ 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 69+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2015-07-09 15:43 UTC (permalink / raw) To: Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar, Krzysztof Kozlowski Cc: Lukasz Majewski, Kevin Hilman, Heiko Stuebner, Tobias Jakobi, Anand Moon, linux-pm, Tomasz Figa, linux-kernel, Chanwoo Choi, b.zolnierkie, linux-samsung-soc, Javier Martinez Canillas, linux-clk, linux-arm-kernel Exynos4x12 based platforms have switched over to use generic cpufreq driver for cpufreq functionality. So the Exynos specific cpufreq support for these platforms can be removed. Also once Exynos4x12 based platforms support have been removed the shared exynos-cpufreq driver is no longer needed and can be deleted. Based on the earlier work by Thomas Abraham. Cc: Viresh Kumar <viresh.kumar@linaro.org> Cc: Javier Martinez Canillas <javier@dowhile0.org> Cc: Thomas Abraham <thomas.ab@samsung.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> --- drivers/cpufreq/Kconfig.arm | 23 ---- drivers/cpufreq/Makefile | 2 - drivers/cpufreq/exynos-cpufreq.c | 231 ---------------------------------- drivers/cpufreq/exynos-cpufreq.h | 72 ----------- drivers/cpufreq/exynos4x12-cpufreq.c | 236 ----------------------------------- 5 files changed, 564 deletions(-) delete mode 100644 drivers/cpufreq/exynos-cpufreq.c delete mode 100644 drivers/cpufreq/exynos-cpufreq.h delete mode 100644 drivers/cpufreq/exynos4x12-cpufreq.c diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm index 5f5a15a..7d7a815 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm @@ -24,29 +24,6 @@ config ARM_VEXPRESS_SPC_CPUFREQ This add the CPUfreq driver support for Versatile Express big.LITTLE platforms using SPC for power management. - -config ARM_EXYNOS_CPUFREQ - tristate "SAMSUNG EXYNOS CPUfreq Driver" - depends on CPU_EXYNOS4210 || SOC_EXYNOS4212 || SOC_EXYNOS4412 || SOC_EXYNOS5250 - depends on THERMAL - help - This adds the CPUFreq driver for Samsung EXYNOS platforms. - Supported SoC versions are: - Exynos4210, Exynos4212, Exynos4412, and Exynos5250. - - If in doubt, say N. - -config ARM_EXYNOS4X12_CPUFREQ - bool "SAMSUNG EXYNOS4x12" - depends on SOC_EXYNOS4212 || SOC_EXYNOS4412 - depends on ARM_EXYNOS_CPUFREQ - default y - help - This adds the CPUFreq driver for Samsung EXYNOS4X12 - SoC (EXYNOS4212 or EXYNOS4412). - - If in doubt, say N. - config ARM_EXYNOS_CPU_FREQ_BOOST_SW bool "EXYNOS Frequency Overclocking - Software" depends on CPUFREQ_DT && THERMAL diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile index 6414958..bbc4a9f 100644 --- a/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile @@ -53,8 +53,6 @@ obj-$(CONFIG_ARM_DT_BL_CPUFREQ) += arm_big_little_dt.o obj-$(CONFIG_ARCH_DAVINCI) += davinci-cpufreq.o obj-$(CONFIG_UX500_SOC_DB8500) += dbx500-cpufreq.o obj-$(CONFIG_ARM_EXYNOS_CPUFREQ) += arm-exynos-cpufreq.o -arm-exynos-cpufreq-y := exynos-cpufreq.o -arm-exynos-cpufreq-$(CONFIG_ARM_EXYNOS4X12_CPUFREQ) += exynos4x12-cpufreq.o obj-$(CONFIG_ARM_EXYNOS5440_CPUFREQ) += exynos5440-cpufreq.o obj-$(CONFIG_ARM_HIGHBANK_CPUFREQ) += highbank-cpufreq.o obj-$(CONFIG_ARM_HISI_ACPU_CPUFREQ) += hisi-acpu-cpufreq.o diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c deleted file mode 100644 index 89d252e..0000000 --- a/drivers/cpufreq/exynos-cpufreq.c +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. - * http://www.samsung.com - * - * EXYNOS - CPU frequency scaling support for EXYNOS series - * - * 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/kernel.h> -#include <linux/module.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/slab.h> -#include <linux/regulator/consumer.h> -#include <linux/cpufreq.h> -#include <linux/platform_device.h> -#include <linux/of.h> -#include <linux/cpu_cooling.h> -#include <linux/cpu.h> - -#include "exynos-cpufreq.h" - -static struct exynos_dvfs_info *exynos_info; -static struct thermal_cooling_device *cdev; -static struct regulator *arm_regulator; -static unsigned int locking_frequency; - -static int exynos_cpufreq_get_index(unsigned int freq) -{ - struct cpufreq_frequency_table *freq_table = exynos_info->freq_table; - struct cpufreq_frequency_table *pos; - - cpufreq_for_each_entry(pos, freq_table) - if (pos->frequency == freq) - break; - - if (pos->frequency == CPUFREQ_TABLE_END) - return -EINVAL; - - return pos - freq_table; -} - -static int exynos_cpufreq_scale(unsigned int target_freq) -{ - struct cpufreq_frequency_table *freq_table = exynos_info->freq_table; - unsigned int *volt_table = exynos_info->volt_table; - struct cpufreq_policy *policy = cpufreq_cpu_get(0); - unsigned int arm_volt, safe_arm_volt = 0; - unsigned int mpll_freq_khz = exynos_info->mpll_freq_khz; - struct device *dev = exynos_info->dev; - unsigned int old_freq; - int index, old_index; - int ret = 0; - - old_freq = policy->cur; - - /* - * The policy max have been changed so that we cannot get proper - * old_index with cpufreq_frequency_table_target(). Thus, ignore - * policy and get the index from the raw frequency table. - */ - old_index = exynos_cpufreq_get_index(old_freq); - if (old_index < 0) { - ret = old_index; - goto out; - } - - index = exynos_cpufreq_get_index(target_freq); - if (index < 0) { - ret = index; - goto out; - } - - /* - * ARM clock source will be changed APLL to MPLL temporary - * To support this level, need to control regulator for - * required voltage level - */ - if (exynos_info->need_apll_change != NULL) { - if (exynos_info->need_apll_change(old_index, index) && - (freq_table[index].frequency < mpll_freq_khz) && - (freq_table[old_index].frequency < mpll_freq_khz)) - safe_arm_volt = volt_table[exynos_info->pll_safe_idx]; - } - arm_volt = volt_table[index]; - - /* When the new frequency is higher than current frequency */ - if ((target_freq > old_freq) && !safe_arm_volt) { - /* Firstly, voltage up to increase frequency */ - ret = regulator_set_voltage(arm_regulator, arm_volt, arm_volt); - if (ret) { - dev_err(dev, "failed to set cpu voltage to %d\n", - arm_volt); - return ret; - } - } - - if (safe_arm_volt) { - ret = regulator_set_voltage(arm_regulator, safe_arm_volt, - safe_arm_volt); - if (ret) { - dev_err(dev, "failed to set cpu voltage to %d\n", - safe_arm_volt); - return ret; - } - } - - exynos_info->set_freq(old_index, index); - - /* When the new frequency is lower than current frequency */ - if ((target_freq < old_freq) || - ((target_freq > old_freq) && safe_arm_volt)) { - /* down the voltage after frequency change */ - ret = regulator_set_voltage(arm_regulator, arm_volt, - arm_volt); - if (ret) { - dev_err(dev, "failed to set cpu voltage to %d\n", - arm_volt); - goto out; - } - } - -out: - cpufreq_cpu_put(policy); - - return ret; -} - -static int exynos_target(struct cpufreq_policy *policy, unsigned int index) -{ - return exynos_cpufreq_scale(exynos_info->freq_table[index].frequency); -} - -static int exynos_cpufreq_cpu_init(struct cpufreq_policy *policy) -{ - policy->clk = exynos_info->cpu_clk; - policy->suspend_freq = locking_frequency; - return cpufreq_generic_init(policy, exynos_info->freq_table, 100000); -} - -static struct cpufreq_driver exynos_driver = { - .flags = CPUFREQ_STICKY | CPUFREQ_NEED_INITIAL_FREQ_CHECK, - .verify = cpufreq_generic_frequency_table_verify, - .target_index = exynos_target, - .get = cpufreq_generic_get, - .init = exynos_cpufreq_cpu_init, - .name = "exynos_cpufreq", - .attr = cpufreq_generic_attr, -#ifdef CONFIG_PM - .suspend = cpufreq_generic_suspend, -#endif -}; - -static int exynos_cpufreq_probe(struct platform_device *pdev) -{ - struct device_node *cpu0; - int ret = -EINVAL; - - exynos_info = kzalloc(sizeof(*exynos_info), GFP_KERNEL); - if (!exynos_info) - return -ENOMEM; - - exynos_info->dev = &pdev->dev; - - if (of_machine_is_compatible("samsung,exynos4212")) { - exynos_info->type = EXYNOS_SOC_4212; - ret = exynos4x12_cpufreq_init(exynos_info); - } else if (of_machine_is_compatible("samsung,exynos4412")) { - exynos_info->type = EXYNOS_SOC_4412; - ret = exynos4x12_cpufreq_init(exynos_info); - } else { - pr_err("%s: Unknown SoC type\n", __func__); - return -ENODEV; - } - - if (ret) - goto err_vdd_arm; - - if (exynos_info->set_freq == NULL) { - dev_err(&pdev->dev, "No set_freq function (ERR)\n"); - goto err_vdd_arm; - } - - arm_regulator = regulator_get(NULL, "vdd_arm"); - if (IS_ERR(arm_regulator)) { - dev_err(&pdev->dev, "failed to get resource vdd_arm\n"); - goto err_vdd_arm; - } - - /* Done here as we want to capture boot frequency */ - locking_frequency = clk_get_rate(exynos_info->cpu_clk) / 1000; - - ret = cpufreq_register_driver(&exynos_driver); - if (ret) - goto err_cpufreq_reg; - - cpu0 = of_get_cpu_node(0, NULL); - if (!cpu0) { - pr_err("failed to find cpu0 node\n"); - return 0; - } - - if (of_find_property(cpu0, "#cooling-cells", NULL)) { - cdev = of_cpufreq_cooling_register(cpu0, - cpu_present_mask); - if (IS_ERR(cdev)) - pr_err("running cpufreq without cooling device: %ld\n", - PTR_ERR(cdev)); - } - - return 0; - -err_cpufreq_reg: - dev_err(&pdev->dev, "failed to register cpufreq driver\n"); - regulator_put(arm_regulator); -err_vdd_arm: - kfree(exynos_info); - return -EINVAL; -} - -static struct platform_driver exynos_cpufreq_platdrv = { - .driver = { - .name = "exynos-cpufreq", - }, - .probe = exynos_cpufreq_probe, -}; -module_platform_driver(exynos_cpufreq_platdrv); diff --git a/drivers/cpufreq/exynos-cpufreq.h b/drivers/cpufreq/exynos-cpufreq.h deleted file mode 100644 index a359db7..0000000 --- a/drivers/cpufreq/exynos-cpufreq.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2010 Samsung Electronics Co., Ltd. - * http://www.samsung.com - * - * EXYNOS - CPUFreq support - * - * 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. -*/ - -enum cpufreq_level_index { - L0, L1, L2, L3, L4, - L5, L6, L7, L8, L9, - L10, L11, L12, L13, L14, - L15, L16, L17, L18, L19, - L20, -}; - -enum exynos_soc_type { - EXYNOS_SOC_4212, - EXYNOS_SOC_4412, -}; - -#define APLL_FREQ(f, a0, a1, a2, a3, a4, a5, a6, a7, b0, b1, b2, m, p, s) \ - { \ - .freq = (f) * 1000, \ - .clk_div_cpu0 = ((a0) | (a1) << 4 | (a2) << 8 | (a3) << 12 | \ - (a4) << 16 | (a5) << 20 | (a6) << 24 | (a7) << 28), \ - .clk_div_cpu1 = (b0 << 0 | b1 << 4 | b2 << 8), \ - .mps = ((m) << 16 | (p) << 8 | (s)), \ - } - -struct apll_freq { - unsigned int freq; - u32 clk_div_cpu0; - u32 clk_div_cpu1; - u32 mps; -}; - -struct exynos_dvfs_info { - enum exynos_soc_type type; - struct device *dev; - unsigned long mpll_freq_khz; - unsigned int pll_safe_idx; - struct clk *cpu_clk; - unsigned int *volt_table; - struct cpufreq_frequency_table *freq_table; - void (*set_freq)(unsigned int, unsigned int); - bool (*need_apll_change)(unsigned int, unsigned int); - void __iomem *cmu_regs; -}; - -#ifdef CONFIG_ARM_EXYNOS4X12_CPUFREQ -extern int exynos4x12_cpufreq_init(struct exynos_dvfs_info *); -#else -static inline int exynos4x12_cpufreq_init(struct exynos_dvfs_info *info) -{ - return -EOPNOTSUPP; -} -#endif - -#define EXYNOS4_CLKSRC_CPU 0x14200 -#define EXYNOS4_CLKMUX_STATCPU 0x14400 - -#define EXYNOS4_CLKDIV_CPU 0x14500 -#define EXYNOS4_CLKDIV_CPU1 0x14504 -#define EXYNOS4_CLKDIV_STATCPU 0x14600 -#define EXYNOS4_CLKDIV_STATCPU1 0x14604 - -#define EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT (16) -#define EXYNOS4_CLKMUX_STATCPU_MUXCORE_MASK (0x7 << EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT) diff --git a/drivers/cpufreq/exynos4x12-cpufreq.c b/drivers/cpufreq/exynos4x12-cpufreq.c deleted file mode 100644 index 9e78a85..0000000 --- a/drivers/cpufreq/exynos4x12-cpufreq.c +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright (c) 2010-2012 Samsung Electronics Co., Ltd. - * http://www.samsung.com - * - * EXYNOS4X12 - CPU frequency scaling support - * - * 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/module.h> -#include <linux/kernel.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/slab.h> -#include <linux/cpufreq.h> -#include <linux/of.h> -#include <linux/of_address.h> - -#include "exynos-cpufreq.h" - -static struct clk *cpu_clk; -static struct clk *moutcore; -static struct clk *mout_mpll; -static struct clk *mout_apll; -static struct exynos_dvfs_info *cpufreq; - -static unsigned int exynos4x12_volt_table[] = { - 1350000, 1287500, 1250000, 1187500, 1137500, 1087500, 1037500, - 1000000, 987500, 975000, 950000, 925000, 900000, 900000 -}; - -static struct cpufreq_frequency_table exynos4x12_freq_table[] = { - {CPUFREQ_BOOST_FREQ, L0, 1500 * 1000}, - {0, L1, 1400 * 1000}, - {0, L2, 1300 * 1000}, - {0, L3, 1200 * 1000}, - {0, L4, 1100 * 1000}, - {0, L5, 1000 * 1000}, - {0, L6, 900 * 1000}, - {0, L7, 800 * 1000}, - {0, L8, 700 * 1000}, - {0, L9, 600 * 1000}, - {0, L10, 500 * 1000}, - {0, L11, 400 * 1000}, - {0, L12, 300 * 1000}, - {0, L13, 200 * 1000}, - {0, 0, CPUFREQ_TABLE_END}, -}; - -static struct apll_freq *apll_freq_4x12; - -static struct apll_freq apll_freq_4212[] = { - /* - * values: - * freq - * clock divider for CORE, COREM0, COREM1, PERIPH, ATB, PCLK_DBG, APLL, CORE2 - * clock divider for COPY, HPM, RESERVED - * PLL M, P, S - */ - APLL_FREQ(1500, 0, 3, 7, 0, 6, 1, 2, 0, 6, 2, 0, 250, 4, 0), - APLL_FREQ(1400, 0, 3, 7, 0, 6, 1, 2, 0, 6, 2, 0, 175, 3, 0), - APLL_FREQ(1300, 0, 3, 7, 0, 5, 1, 2, 0, 5, 2, 0, 325, 6, 0), - APLL_FREQ(1200, 0, 3, 7, 0, 5, 1, 2, 0, 5, 2, 0, 200, 4, 0), - APLL_FREQ(1100, 0, 3, 6, 0, 4, 1, 2, 0, 4, 2, 0, 275, 6, 0), - APLL_FREQ(1000, 0, 2, 5, 0, 4, 1, 1, 0, 4, 2, 0, 125, 3, 0), - APLL_FREQ(900, 0, 2, 5, 0, 3, 1, 1, 0, 3, 2, 0, 150, 4, 0), - APLL_FREQ(800, 0, 2, 5, 0, 3, 1, 1, 0, 3, 2, 0, 100, 3, 0), - APLL_FREQ(700, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 175, 3, 1), - APLL_FREQ(600, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 200, 4, 1), - APLL_FREQ(500, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 125, 3, 1), - APLL_FREQ(400, 0, 2, 4, 0, 3, 1, 1, 0, 3, 2, 0, 100, 3, 1), - APLL_FREQ(300, 0, 2, 4, 0, 2, 1, 1, 0, 3, 2, 0, 200, 4, 2), - APLL_FREQ(200, 0, 1, 3, 0, 1, 1, 1, 0, 3, 2, 0, 100, 3, 2), -}; - -static struct apll_freq apll_freq_4412[] = { - /* - * values: - * freq - * clock divider for CORE, COREM0, COREM1, PERIPH, ATB, PCLK_DBG, APLL, CORE2 - * clock divider for COPY, HPM, CORES - * PLL M, P, S - */ - APLL_FREQ(1500, 0, 3, 7, 0, 6, 1, 2, 0, 6, 0, 7, 250, 4, 0), - APLL_FREQ(1400, 0, 3, 7, 0, 6, 1, 2, 0, 6, 0, 6, 175, 3, 0), - APLL_FREQ(1300, 0, 3, 7, 0, 5, 1, 2, 0, 5, 0, 6, 325, 6, 0), - APLL_FREQ(1200, 0, 3, 7, 0, 5, 1, 2, 0, 5, 0, 5, 200, 4, 0), - APLL_FREQ(1100, 0, 3, 6, 0, 4, 1, 2, 0, 4, 0, 5, 275, 6, 0), - APLL_FREQ(1000, 0, 2, 5, 0, 4, 1, 1, 0, 4, 0, 4, 125, 3, 0), - APLL_FREQ(900, 0, 2, 5, 0, 3, 1, 1, 0, 3, 0, 4, 150, 4, 0), - APLL_FREQ(800, 0, 2, 5, 0, 3, 1, 1, 0, 3, 0, 3, 100, 3, 0), - APLL_FREQ(700, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 3, 175, 3, 1), - APLL_FREQ(600, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 2, 200, 4, 1), - APLL_FREQ(500, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 2, 125, 3, 1), - APLL_FREQ(400, 0, 2, 4, 0, 3, 1, 1, 0, 3, 0, 1, 100, 3, 1), - APLL_FREQ(300, 0, 2, 4, 0, 2, 1, 1, 0, 3, 0, 1, 200, 4, 2), - APLL_FREQ(200, 0, 1, 3, 0, 1, 1, 1, 0, 3, 0, 0, 100, 3, 2), -}; - -static void exynos4x12_set_clkdiv(unsigned int div_index) -{ - unsigned int tmp; - - /* Change Divider - CPU0 */ - - tmp = apll_freq_4x12[div_index].clk_div_cpu0; - - __raw_writel(tmp, cpufreq->cmu_regs + EXYNOS4_CLKDIV_CPU); - - while (__raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKDIV_STATCPU) - & 0x11111111) - cpu_relax(); - - /* Change Divider - CPU1 */ - tmp = apll_freq_4x12[div_index].clk_div_cpu1; - - __raw_writel(tmp, cpufreq->cmu_regs + EXYNOS4_CLKDIV_CPU1); - - do { - cpu_relax(); - tmp = __raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKDIV_STATCPU1); - } while (tmp != 0x0); -} - -static void exynos4x12_set_apll(unsigned int index) -{ - unsigned int tmp, freq = apll_freq_4x12[index].freq; - - /* MUX_CORE_SEL = MPLL, ARMCLK uses MPLL for lock time */ - clk_set_parent(moutcore, mout_mpll); - - do { - cpu_relax(); - tmp = (__raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKMUX_STATCPU) - >> EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT); - tmp &= 0x7; - } while (tmp != 0x2); - - clk_set_rate(mout_apll, freq * 1000); - - /* MUX_CORE_SEL = APLL */ - clk_set_parent(moutcore, mout_apll); - - do { - cpu_relax(); - tmp = __raw_readl(cpufreq->cmu_regs + EXYNOS4_CLKMUX_STATCPU); - tmp &= EXYNOS4_CLKMUX_STATCPU_MUXCORE_MASK; - } while (tmp != (0x1 << EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT)); -} - -static void exynos4x12_set_frequency(unsigned int old_index, - unsigned int new_index) -{ - if (old_index > new_index) { - exynos4x12_set_clkdiv(new_index); - exynos4x12_set_apll(new_index); - } else if (old_index < new_index) { - exynos4x12_set_apll(new_index); - exynos4x12_set_clkdiv(new_index); - } -} - -int exynos4x12_cpufreq_init(struct exynos_dvfs_info *info) -{ - struct device_node *np; - unsigned long rate; - - /* - * HACK: This is a temporary workaround to get access to clock - * controller registers directly and remove static mappings and - * dependencies on platform headers. It is necessary to enable - * Exynos multi-platform support and will be removed together with - * this whole driver as soon as Exynos gets migrated to use - * cpufreq-dt driver. - */ - np = of_find_compatible_node(NULL, NULL, "samsung,exynos4412-clock"); - if (!np) { - pr_err("%s: failed to find clock controller DT node\n", - __func__); - return -ENODEV; - } - - info->cmu_regs = of_iomap(np, 0); - if (!info->cmu_regs) { - pr_err("%s: failed to map CMU registers\n", __func__); - return -EFAULT; - } - - cpu_clk = clk_get(NULL, "armclk"); - if (IS_ERR(cpu_clk)) - return PTR_ERR(cpu_clk); - - moutcore = clk_get(NULL, "moutcore"); - if (IS_ERR(moutcore)) - goto err_moutcore; - - mout_mpll = clk_get(NULL, "mout_mpll"); - if (IS_ERR(mout_mpll)) - goto err_mout_mpll; - - rate = clk_get_rate(mout_mpll) / 1000; - - mout_apll = clk_get(NULL, "mout_apll"); - if (IS_ERR(mout_apll)) - goto err_mout_apll; - - if (info->type == EXYNOS_SOC_4212) - apll_freq_4x12 = apll_freq_4212; - else - apll_freq_4x12 = apll_freq_4412; - - info->mpll_freq_khz = rate; - /* 800Mhz */ - info->pll_safe_idx = L7; - info->cpu_clk = cpu_clk; - info->volt_table = exynos4x12_volt_table; - info->freq_table = exynos4x12_freq_table; - info->set_freq = exynos4x12_set_frequency; - - cpufreq = info; - - return 0; - -err_mout_apll: - clk_put(mout_mpll); -err_mout_mpll: - clk_put(moutcore); -err_moutcore: - clk_put(cpu_clk); - - pr_debug("%s: failed initialization\n", __func__); - return -EINVAL; -} -- 1.9.1 ^ permalink raw reply related [flat|nested] 69+ messages in thread
* Re: [PATCH v2 7/7] cpufreq: exynos: remove Exynos4x12 specific cpufreq driver support 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz @ 2015-07-10 8:57 ` Krzysztof Kozlowski -1 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 8:57 UTC (permalink / raw) To: Bartlomiej Zolnierkiewicz, Thomas Abraham, Sylwester Nawrocki, Michael Turquette, Kukjin Kim, Kukjin Kim, Viresh Kumar Cc: Tomasz Figa, Lukasz Majewski, Heiko Stuebner, Chanwoo Choi, Kevin Hilman, Javier Martinez Canillas, Tobias Jakobi, Anand Moon, linux-samsung-soc, linux-clk, linux-pm, linux-arm-kernel, linux-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > Exynos4x12 based platforms have switched over to use generic > cpufreq driver for cpufreq functionality. So the Exynos > specific cpufreq support for these platforms can be removed. > > Also once Exynos4x12 based platforms support have been removed > the shared exynos-cpufreq driver is no longer needed and can > be deleted. > > Based on the earlier work by Thomas Abraham. > > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/cpufreq/Kconfig.arm | 23 ---- > drivers/cpufreq/Makefile | 2 - > drivers/cpufreq/exynos-cpufreq.c | 231 ---------------------------------- > drivers/cpufreq/exynos-cpufreq.h | 72 ----------- > drivers/cpufreq/exynos4x12-cpufreq.c | 236 ----------------------------------- > 5 files changed, 564 deletions(-) > delete mode 100644 drivers/cpufreq/exynos-cpufreq.c > delete mode 100644 drivers/cpufreq/exynos-cpufreq.h > delete mode 100644 drivers/cpufreq/exynos4x12-cpufreq.c Code removal is awesome! Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v2 7/7] cpufreq: exynos: remove Exynos4x12 specific cpufreq driver support @ 2015-07-10 8:57 ` Krzysztof Kozlowski 0 siblings, 0 replies; 69+ messages in thread From: Krzysztof Kozlowski @ 2015-07-10 8:57 UTC (permalink / raw) To: linux-arm-kernel On 10.07.2015 00:43, Bartlomiej Zolnierkiewicz wrote: > Exynos4x12 based platforms have switched over to use generic > cpufreq driver for cpufreq functionality. So the Exynos > specific cpufreq support for these platforms can be removed. > > Also once Exynos4x12 based platforms support have been removed > the shared exynos-cpufreq driver is no longer needed and can > be deleted. > > Based on the earlier work by Thomas Abraham. > > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Cc: Javier Martinez Canillas <javier@dowhile0.org> > Cc: Thomas Abraham <thomas.ab@samsung.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> > --- > drivers/cpufreq/Kconfig.arm | 23 ---- > drivers/cpufreq/Makefile | 2 - > drivers/cpufreq/exynos-cpufreq.c | 231 ---------------------------------- > drivers/cpufreq/exynos-cpufreq.h | 72 ----------- > drivers/cpufreq/exynos4x12-cpufreq.c | 236 ----------------------------------- > 5 files changed, 564 deletions(-) > delete mode 100644 drivers/cpufreq/exynos-cpufreq.c > delete mode 100644 drivers/cpufreq/exynos-cpufreq.h > delete mode 100644 drivers/cpufreq/exynos4x12-cpufreq.c Code removal is awesome! Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 69+ messages in thread
end of thread, other threads:[~2015-08-04 1:32 UTC | newest] Thread overview: 69+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-07-09 15:43 [PATCH v2 0/7] cpufreq: use generic cpufreq drivers for Exynos4x12 platform Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` [PATCH v2 1/7] opp: add dev_pm_opp_get_turbo_mode_setting() helper Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-10 2:17 ` Krzysztof Kozlowski 2015-07-10 2:17 ` Krzysztof Kozlowski 2015-07-27 8:33 ` Viresh Kumar 2015-07-27 8:33 ` Viresh Kumar 2015-07-09 15:43 ` [PATCH v2 2/7] cpufreq: opp: fix handling of turbo modes Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-10 2:20 ` Krzysztof Kozlowski 2015-07-10 2:20 ` Krzysztof Kozlowski 2015-07-27 8:35 ` Viresh Kumar 2015-07-27 8:35 ` Viresh Kumar 2015-07-27 10:24 ` Bartlomiej Zolnierkiewicz 2015-07-27 10:24 ` Bartlomiej Zolnierkiewicz 2015-07-27 10:35 ` Viresh Kumar 2015-07-27 10:35 ` Viresh Kumar 2015-07-27 11:14 ` Bartlomiej Zolnierkiewicz 2015-07-27 11:14 ` Bartlomiej Zolnierkiewicz 2015-07-27 11:36 ` Viresh Kumar 2015-07-27 11:36 ` Viresh Kumar 2015-07-27 11:47 ` Bartlomiej Zolnierkiewicz 2015-07-27 11:47 ` Bartlomiej Zolnierkiewicz 2015-07-30 14:37 ` Kukjin Kim 2015-07-30 14:37 ` Kukjin Kim 2015-07-31 18:58 ` Bartlomiej Zolnierkiewicz 2015-07-31 18:58 ` Bartlomiej Zolnierkiewicz 2015-08-04 1:31 ` Krzysztof Kozlowski 2015-08-04 1:31 ` Krzysztof Kozlowski 2015-07-09 15:43 ` [PATCH v2 3/7] cpufreq-dt: add turbo modes support Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-10 8:22 ` Krzysztof Kozlowski 2015-07-10 8:22 ` Krzysztof Kozlowski 2015-07-27 8:37 ` Viresh Kumar 2015-07-27 8:37 ` Viresh Kumar 2015-07-27 11:01 ` Bartlomiej Zolnierkiewicz 2015-07-27 11:01 ` Bartlomiej Zolnierkiewicz 2015-07-27 11:33 ` Viresh Kumar 2015-07-27 11:33 ` Viresh Kumar 2015-07-27 11:58 ` Bartlomiej Zolnierkiewicz 2015-07-27 11:58 ` Bartlomiej Zolnierkiewicz 2015-07-27 12:01 ` Viresh Kumar 2015-07-27 12:01 ` Viresh Kumar 2015-07-09 15:43 ` [PATCH v2 4/7] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-10 8:30 ` Krzysztof Kozlowski 2015-07-10 8:30 ` Krzysztof Kozlowski 2015-07-10 16:12 ` Javier Martinez Canillas 2015-07-10 16:12 ` Javier Martinez Canillas 2015-07-11 6:36 ` Krzysztof Kozlowski 2015-07-11 6:36 ` Krzysztof Kozlowski 2015-07-15 9:58 ` Sylwester nawrocki 2015-07-15 9:58 ` Sylwester nawrocki 2015-07-09 15:43 ` [PATCH v2 5/7] ARM: dts: Exynos4x12: add CPU OPP and regulator supply property Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-10 8:35 ` Krzysztof Kozlowski 2015-07-10 8:35 ` Krzysztof Kozlowski 2015-07-09 15:43 ` [PATCH v2 6/7] ARM: Exynos: switch to using generic cpufreq driver for Exynos4x12 Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-10 8:55 ` Krzysztof Kozlowski 2015-07-10 8:55 ` Krzysztof Kozlowski 2015-07-09 15:43 ` [PATCH v2 7/7] cpufreq: exynos: remove Exynos4x12 specific cpufreq driver support Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-09 15:43 ` Bartlomiej Zolnierkiewicz 2015-07-10 8:57 ` Krzysztof Kozlowski 2015-07-10 8:57 ` Krzysztof Kozlowski
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.