Subject: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

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.

This patch series has been tested on Exynos4412 based Odroid-U3 and
Trats2 boards.

Depends on:
- next-20150806 branch of linux-next kernel tree
- "[PATCH V3 00/16] OPP: Add code to support operating-points-v2 bindings"
(http://www.spinics.net/lists/arm-kernel/msg435408.html)

Changes since v3
(http://thread.gmane.org/gmane.linux.power-management.general/63464):
- rebased on top of next-20150806 branch of linux-next kernel tree
- made ARCH_EXYNOS config option select thermal support
- made scaling_boost_freqs sysfs attribute available only when boost
support is enabled
- added Acked-by tag from Viresh to patches #3, #4 and #5
- added Tested-by tag from Tobias to patches #2-5
- added Reviewed-by tag from Krzysztof to patch #4

Changes since v2
(http://thread.gmane.org/gmane.linux.kernel.samsung-soc/46653):
- rebased on top of next-20150730 branch of linux-next kernel tree
- ported over V3 of opp-v2 bindings support patch series
- put cpu0 nodes in alphabetical order in dts files
- added Reviewed-by tags from Javier and Krzysztof
- added Acked-by tag from Sylwester

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 (6):
cpufreq: make scaling_boost_freqs sysfs attr available when boost is
enabled
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
cpufreq: remove no longer needed CPU_FREQ_BOOST_SW config option

arch/arm/boot/dts/exynos4212.dtsi | 81 ++++++++
arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 +
arch/arm/boot/dts/exynos4412-origen.dts | 4 +
arch/arm/boot/dts/exynos4412-trats2.dts | 4 +
arch/arm/boot/dts/exynos4412.dtsi | 83 +++++++++
arch/arm/mach-exynos/Kconfig | 2 +
arch/arm/mach-exynos/exynos.c | 2 +
drivers/clk/samsung/clk-exynos4.c | 50 +++++
drivers/cpufreq/Kconfig | 4 -
drivers/cpufreq/Kconfig.arm | 38 ----
drivers/cpufreq/Makefile | 2 -
drivers/cpufreq/cpufreq-dt.c | 3 +
drivers/cpufreq/exynos-cpufreq.c | 236 ------------------------
drivers/cpufreq/exynos-cpufreq.h | 72 --------
drivers/cpufreq/exynos4x12-cpufreq.c | 236 ------------------------
drivers/cpufreq/freq_table.c | 10 +-
include/linux/cpufreq.h | 1 +
17 files changed, 241 insertions(+), 591 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


Subject: [PATCH v4 1/6] cpufreq: make scaling_boost_freqs sysfs attr available when boost is enabled

Add cpufreq_boost_enabled_generic_attr table and use it in
cpufreq-dt driver instead of cpufreq_generic_attr one when
boost support is enabled. As a result scaling_boost_freqs
sysfs attribute is available when cpufreq-dt driver is
used and boost support is enabled.

Cc: Viresh Kumar <[email protected]>
Cc: Thomas Abraham <[email protected]>
Cc: Javier Martinez Canillas <[email protected]>
Cc: Krzysztof Kozlowski <[email protected]>
Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
---
drivers/cpufreq/cpufreq-dt.c | 3 +++
drivers/cpufreq/freq_table.c | 7 +++++++
include/linux/cpufreq.h | 1 +
3 files changed, 11 insertions(+)

diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
index b9259ab..7b091c0 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
@@ -182,6 +182,8 @@ try_again:
return ret;
}

+static struct cpufreq_driver dt_cpufreq_driver;
+
static int cpufreq_init(struct cpufreq_policy *policy)
{
struct cpufreq_frequency_table *freq_table;
@@ -336,6 +338,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
ret = cpufreq_enable_boost_support();
if (ret)
goto out_free_cpufreq_table;
+ dt_cpufreq_driver.attr = cpufreq_boost_enabled_generic_attr;
}

policy->cpuinfo.transition_latency = transition_latency;
diff --git a/drivers/cpufreq/freq_table.c b/drivers/cpufreq/freq_table.c
index a8f1daf..5a00a09 100644
--- a/drivers/cpufreq/freq_table.c
+++ b/drivers/cpufreq/freq_table.c
@@ -300,6 +300,13 @@ struct freq_attr *cpufreq_generic_attr[] = {
};
EXPORT_SYMBOL_GPL(cpufreq_generic_attr);

+struct freq_attr *cpufreq_boost_enabled_generic_attr[] = {
+ &cpufreq_freq_attr_scaling_available_freqs,
+ &cpufreq_freq_attr_scaling_boost_freqs,
+ NULL,
+};
+EXPORT_SYMBOL_GPL(cpufreq_boost_enabled_generic_attr);
+
int cpufreq_table_validate_and_show(struct cpufreq_policy *policy,
struct cpufreq_frequency_table *table)
{
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 95f0186..25937ff 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -610,6 +610,7 @@ struct cpufreq_frequency_table *cpufreq_frequency_get_table(unsigned int cpu);
/* the following are really really optional */
extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
extern struct freq_attr *cpufreq_generic_attr[];
+extern struct freq_attr *cpufreq_boost_enabled_generic_attr[];
int cpufreq_table_validate_and_show(struct cpufreq_policy *policy,
struct cpufreq_frequency_table *table);

--
1.9.1

Subject: [PATCH v4 2/6] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock

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 <[email protected]>
Cc: Michael Turquette <[email protected]>
Cc: Thomas Abraham <[email protected]>
Reviewed-by: Javier Martinez Canillas <[email protected]>
Reviewed-by: Krzysztof Kozlowski <[email protected]>
Acked-by: Sylwester Nawrocki <[email protected]>
Tested-by: Tobias Jakobi <[email protected]>
Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
---
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 251f48d..7f370d3 100644
--- a/drivers/clk/samsung/clk-exynos4.c
+++ b/drivers/clk/samsung/clk-exynos4.c
@@ -1398,6 +1398,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)
@@ -1491,6 +1530,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

Subject: [PATCH v4 3/6] ARM: dts: Exynos4x12: add CPU OPP and regulator supply property

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 <[email protected]>
Cc: Doug Anderson <[email protected]>
Cc: Andreas Faerber <[email protected]>
Cc: Thomas Abraham <[email protected]>
Reviewed-by: Javier Martinez Canillas <[email protected]>
Reviewed-by: Krzysztof Kozlowski <[email protected]>
Acked-by: Viresh Kumar <[email protected]>
Tested-by: Tobias Jakobi <[email protected]>
Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
---
arch/arm/boot/dts/exynos4212.dtsi | 81 ++++++++++++++++++++++++
arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 ++
arch/arm/boot/dts/exynos4412-origen.dts | 4 ++
arch/arm/boot/dts/exynos4412-trats2.dts | 4 ++
arch/arm/boot/dts/exynos4412.dtsi | 83 +++++++++++++++++++++++++
5 files changed, 176 insertions(+)

diff --git a/arch/arm/boot/dts/exynos4212.dtsi b/arch/arm/boot/dts/exynos4212.dtsi
index d9c8efee..5389011 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 = /bits/ 64 <200000000>;
+ opp-microvolt = <900000>;
+ clock-latency-ns = <200000>;
+ };
+ opp01 {
+ opp-hz = /bits/ 64 <300000000>;
+ opp-microvolt = <900000>;
+ clock-latency-ns = <200000>;
+ };
+ opp02 {
+ opp-hz = /bits/ 64 <400000000>;
+ opp-microvolt = <925000>;
+ clock-latency-ns = <200000>;
+ };
+ opp03 {
+ opp-hz = /bits/ 64 <500000000>;
+ opp-microvolt = <950000>;
+ clock-latency-ns = <200000>;
+ };
+ opp04 {
+ opp-hz = /bits/ 64 <600000000>;
+ opp-microvolt = <975000>;
+ clock-latency-ns = <200000>;
+ };
+ opp05 {
+ opp-hz = /bits/ 64 <700000000>;
+ opp-microvolt = <987500>;
+ clock-latency-ns = <200000>;
+ };
+ opp06 {
+ opp-hz = /bits/ 64 <800000000>;
+ opp-microvolt = <1000000>;
+ clock-latency-ns = <200000>;
+ };
+ opp07 {
+ opp-hz = /bits/ 64 <900000000>;
+ opp-microvolt = <1037500>;
+ clock-latency-ns = <200000>;
+ };
+ opp08 {
+ opp-hz = /bits/ 64 <1000000000>;
+ opp-microvolt = <1087500>;
+ clock-latency-ns = <200000>;
+ };
+ opp09 {
+ opp-hz = /bits/ 64 <1100000000>;
+ opp-microvolt = <1137500>;
+ clock-latency-ns = <200000>;
+ };
+ opp10 {
+ opp-hz = /bits/ 64 <1200000000>;
+ opp-microvolt = <1187500>;
+ clock-latency-ns = <200000>;
+ };
+ opp11 {
+ opp-hz = /bits/ 64 <1300000000>;
+ opp-microvolt = <1250000>;
+ clock-latency-ns = <200000>;
+ };
+ opp12 {
+ opp-hz = /bits/ 64 <1400000000>;
+ opp-microvolt = <1287500>;
+ clock-latency-ns = <200000>;
+ };
+ opp13 {
+ opp-hz = /bits/ 64 <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..db52841 100644
--- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
+++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
@@ -107,6 +107,10 @@
};
};

+&cpu0 {
+ cpu0-supply = <&buck2_reg>;
+};
+
/* RSTN signal for eMMC */
&sd1_cd {
samsung,pin-pud = <0>;
diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts
index 84c7631..9d528af 100644
--- a/arch/arm/boot/dts/exynos4412-origen.dts
+++ b/arch/arm/boot/dts/exynos4412-origen.dts
@@ -78,6 +78,10 @@
};
};

+&cpu0 {
+ cpu0-supply = <&buck2_reg>;
+};
+
&fimd {
pinctrl-0 = <&lcd_clk &lcd_data24 &pwm1_out>;
pinctrl-names = "default";
diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts b/arch/arm/boot/dts/exynos4412-trats2.dts
index 8848400..2a1ebb7 100644
--- a/arch/arm/boot/dts/exynos4412-trats2.dts
+++ b/arch/arm/boot/dts/exynos4412-trats2.dts
@@ -288,6 +288,10 @@
status = "okay";
};

+&cpu0 {
+ cpu0-supply = <&buck2_reg>;
+};
+
&csis_0 {
status = "okay";
vddcore-supply = <&ldo8_reg>;
diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi
index b78ada7..ca0e3c1 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 = /bits/ 64 <200000000>;
+ opp-microvolt = <900000>;
+ clock-latency-ns = <200000>;
+ };
+ opp01 {
+ opp-hz = /bits/ 64 <300000000>;
+ opp-microvolt = <900000>;
+ clock-latency-ns = <200000>;
+ };
+ opp02 {
+ opp-hz = /bits/ 64 <400000000>;
+ opp-microvolt = <925000>;
+ clock-latency-ns = <200000>;
+ };
+ opp03 {
+ opp-hz = /bits/ 64 <500000000>;
+ opp-microvolt = <950000>;
+ clock-latency-ns = <200000>;
+ };
+ opp04 {
+ opp-hz = /bits/ 64 <600000000>;
+ opp-microvolt = <975000>;
+ clock-latency-ns = <200000>;
+ };
+ opp05 {
+ opp-hz = /bits/ 64 <700000000>;
+ opp-microvolt = <987500>;
+ clock-latency-ns = <200000>;
+ };
+ opp06 {
+ opp-hz = /bits/ 64 <800000000>;
+ opp-microvolt = <1000000>;
+ clock-latency-ns = <200000>;
+ };
+ opp07 {
+ opp-hz = /bits/ 64 <900000000>;
+ opp-microvolt = <1037500>;
+ clock-latency-ns = <200000>;
+ };
+ opp08 {
+ opp-hz = /bits/ 64 <1000000000>;
+ opp-microvolt = <1087500>;
+ clock-latency-ns = <200000>;
+ };
+ opp09 {
+ opp-hz = /bits/ 64 <1100000000>;
+ opp-microvolt = <1137500>;
+ clock-latency-ns = <200000>;
+ };
+ opp10 {
+ opp-hz = /bits/ 64 <1200000000>;
+ opp-microvolt = <1187500>;
+ clock-latency-ns = <200000>;
+ };
+ opp11 {
+ opp-hz = /bits/ 64 <1300000000>;
+ opp-microvolt = <1250000>;
+ clock-latency-ns = <200000>;
+ };
+ opp12 {
+ opp-hz = /bits/ 64 <1400000000>;
+ opp-microvolt = <1287500>;
+ clock-latency-ns = <200000>;
+ };
+ opp13 {
+ opp-hz = /bits/ 64 <1500000000>;
+ opp-microvolt = <1350000>;
+ clock-latency-ns = <200000>;
+ turbo-mode;
};
};

--
1.9.1

Subject: [PATCH v4 4/6] ARM: Exynos: switch to using generic cpufreq driver for Exynos4x12

The new CPU clock type allows the use of generic CPUfreq driver.
Switch Exynos4x12 to using generic cpufreq driver.

Previously (when exynos-cpufreq driver was used with boost
functionality) ARM_EXYNOS_CPU_FREQ_BOOST_SW config option
(which enabled boost functionality) selected EXYNOS_THERMAL
one. After switching Exynos4x12 platforms to use cpufreq-dt
driver boost support is enabled in the cpufreq-dt driver
itself (because there are turbo OPPs defined in the board's
DTS file). However we still would like to allow enabling
boost support only if thermal support is also enabled for
Exynos platforms. To achieve this make ARCH_EXYNOS config
option select THERMAL and EXYNOS_THERMAL ones.

Please also note that the switch to use the generic cpufreq-dt
driver 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 <[email protected]>
Cc: Kukjin Kim <[email protected]>
Cc: Thomas Abraham <[email protected]>
Cc: Javier Martinez Canillas <[email protected]>
Reviewed-by: Krzysztof Kozlowski <[email protected]>
Acked-by: Viresh Kumar <[email protected]>
Tested-by: Tobias Jakobi <[email protected]>
Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
---
arch/arm/mach-exynos/Kconfig | 2 ++
arch/arm/mach-exynos/exynos.c | 2 ++
2 files changed, 4 insertions(+)

diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index 4c4858c..143e332 100644
--- a/arch/arm/mach-exynos/Kconfig
+++ b/arch/arm/mach-exynos/Kconfig
@@ -25,6 +25,8 @@ menuconfig ARCH_EXYNOS
select S5P_DEV_MFC
select SRAM
select MFD_SYSCON
+ select THERMAL
+ select EXYNOS_THERMAL
help
Support for SAMSUNG EXYNOS SoCs (EXYNOS4/5)

diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c
index 77ac021..1c47aee 100644
--- a/arch/arm/mach-exynos/exynos.c
+++ b/arch/arm/mach-exynos/exynos.c
@@ -227,6 +227,8 @@ static void __init exynos_init_irq(void)
static const struct of_device_id exynos_cpufreq_matches[] = {
{ .compatible = "samsung,exynos3250", .data = "cpufreq-dt" },
{ .compatible = "samsung,exynos4210", .data = "cpufreq-dt" },
+ { .compatible = "samsung,exynos4212", .data = "cpufreq-dt" },
+ { .compatible = "samsung,exynos4412", .data = "cpufreq-dt" },
{ .compatible = "samsung,exynos5250", .data = "cpufreq-dt" },
{ /* sentinel */ }
};
--
1.9.1

Subject: [PATCH v4 5/6] cpufreq: exynos: remove Exynos4x12 specific cpufreq driver support

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 <[email protected]>
Cc: Thomas Abraham <[email protected]>
Reviewed-by: Javier Martinez Canillas <[email protected]>
Reviewed-by: Krzysztof Kozlowski <[email protected]>
Acked-by: Viresh Kumar <[email protected]>
Tested-by: Tobias Jakobi <[email protected]>
Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
---
drivers/cpufreq/Kconfig.arm | 38 ------
drivers/cpufreq/Makefile | 2 -
drivers/cpufreq/exynos-cpufreq.c | 236 -----------------------------------
drivers/cpufreq/exynos-cpufreq.h | 72 -----------
drivers/cpufreq/exynos4x12-cpufreq.c | 236 -----------------------------------
5 files changed, 584 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 9ab6388c1..8a24bd8 100644
--- a/drivers/cpufreq/Kconfig.arm
+++ b/drivers/cpufreq/Kconfig.arm
@@ -24,44 +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 ARM_EXYNOS_CPUFREQ && THERMAL
- select CPU_FREQ_BOOST_SW
- select EXYNOS_THERMAL
- help
- This driver supports software managed overclocking (BOOST).
- It allows usage of special frequencies for Samsung Exynos
- processors if thermal conditions are appropriate.
-
- It requires, for safe operation, thermal framework with properly
- defined trip points.
-
- If in doubt, say N.
-
config ARM_EXYNOS5440_CPUFREQ
tristate "SAMSUNG EXYNOS5440"
depends on SOC_EXYNOS5440
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 567a6ab..0000000
--- a/drivers/cpufreq/exynos-cpufreq.c
+++ /dev/null
@@ -1,236 +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_ARM_EXYNOS_CPU_FREQ_BOOST_SW
- .boost_supported = true,
-#endif
-#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__);
- ret = -ENODEV;
- }
-
- if (ret)
- goto err_vdd_arm;
-
- if (exynos_info->set_freq == NULL) {
- dev_err(&pdev->dev, "No set_freq function (ERR)\n");
- ret = -EINVAL;
- 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");
- ret = -EINVAL;
- 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 ret;
-}
-
-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

Subject: [PATCH v4 6/6] cpufreq: remove no longer needed CPU_FREQ_BOOST_SW config option

Remove no longer needed CPU_FREQ_BOOST_SW config option.

Cc: Viresh Kumar <[email protected]>
Cc: Thomas Abraham <[email protected]>
Cc: Javier Martinez Canillas <[email protected]>
Cc: Krzysztof Kozlowski <[email protected]>
Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
---
drivers/cpufreq/Kconfig | 4 ----
drivers/cpufreq/freq_table.c | 3 ---
2 files changed, 7 deletions(-)

diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
index 659879a..aacc0ef 100644
--- a/drivers/cpufreq/Kconfig
+++ b/drivers/cpufreq/Kconfig
@@ -21,10 +21,6 @@ if CPU_FREQ
config CPU_FREQ_GOV_COMMON
bool

-config CPU_FREQ_BOOST_SW
- bool
- depends on THERMAL
-
config CPU_FREQ_STAT
tristate "CPU frequency translation statistics"
default y
diff --git a/drivers/cpufreq/freq_table.c b/drivers/cpufreq/freq_table.c
index 5a00a09..2c6a325 100644
--- a/drivers/cpufreq/freq_table.c
+++ b/drivers/cpufreq/freq_table.c
@@ -293,9 +293,6 @@ EXPORT_SYMBOL_GPL(cpufreq_freq_attr_scaling_boost_freqs);

struct freq_attr *cpufreq_generic_attr[] = {
&cpufreq_freq_attr_scaling_available_freqs,
-#ifdef CONFIG_CPU_FREQ_BOOST_SW
- &cpufreq_freq_attr_scaling_boost_freqs,
-#endif
NULL,
};
EXPORT_SYMBOL_GPL(cpufreq_generic_attr);
--
1.9.1

2015-08-06 23:53:28

by Kukjin Kim

[permalink] [raw]
Subject: RE: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

Bartlomiej Zolnierkiewicz wrote:
>
> Hi,
>
Hi Bart,

> 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.
>
Thanks for this series.

> This patch series has been tested on Exynos4412 based Odroid-U3 and
> Trats2 boards.
>
Sounds good.

> Depends on:
> - next-20150806 branch of linux-next kernel tree
> - "[PATCH V3 00/16] OPP: Add code to support operating-points-v2 bindings"
> (http://www.spinics.net/lists/arm-kernel/msg435408.html)
>
BTW, hmm...how can we see this series in v4.3?...to be honest, I don't think it
can be done in v4.3 because of dependencies with PM / OPP series and previous
exynos CPU OPP series in each cross trees...maybe that's why you created based
on linux-next...any idea?

Thanks,
Kukjin

> Changes since v3
> (http://thread.gmane.org/gmane.linux.power-management.general/63464):
> - rebased on top of next-20150806 branch of linux-next kernel tree
> - made ARCH_EXYNOS config option select thermal support
> - made scaling_boost_freqs sysfs attribute available only when boost
> support is enabled
> - added Acked-by tag from Viresh to patches #3, #4 and #5
> - added Tested-by tag from Tobias to patches #2-5
> - added Reviewed-by tag from Krzysztof to patch #4
>
> Changes since v2
> (http://thread.gmane.org/gmane.linux.kernel.samsung-soc/46653):
> - rebased on top of next-20150730 branch of linux-next kernel tree
> - ported over V3 of opp-v2 bindings support patch series
> - put cpu0 nodes in alphabetical order in dts files
> - added Reviewed-by tags from Javier and Krzysztof
> - added Acked-by tag from Sylwester
>
> 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 (6):
> cpufreq: make scaling_boost_freqs sysfs attr available when boost is
> enabled
> 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
> cpufreq: remove no longer needed CPU_FREQ_BOOST_SW config option
>
> arch/arm/boot/dts/exynos4212.dtsi | 81 ++++++++
> arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 +
> arch/arm/boot/dts/exynos4412-origen.dts | 4 +
> arch/arm/boot/dts/exynos4412-trats2.dts | 4 +
> arch/arm/boot/dts/exynos4412.dtsi | 83 +++++++++
> arch/arm/mach-exynos/Kconfig | 2 +
> arch/arm/mach-exynos/exynos.c | 2 +
> drivers/clk/samsung/clk-exynos4.c | 50 +++++
> drivers/cpufreq/Kconfig | 4 -
> drivers/cpufreq/Kconfig.arm | 38 ----
> drivers/cpufreq/Makefile | 2 -
> drivers/cpufreq/cpufreq-dt.c | 3 +
> drivers/cpufreq/exynos-cpufreq.c | 236 ------------------------
> drivers/cpufreq/exynos-cpufreq.h | 72 --------
> drivers/cpufreq/exynos4x12-cpufreq.c | 236 ------------------------
> drivers/cpufreq/freq_table.c | 10 +-
> include/linux/cpufreq.h | 1 +
> 17 files changed, 241 insertions(+), 591 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

2015-08-07 03:41:36

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 1/6] cpufreq: make scaling_boost_freqs sysfs attr available when boost is enabled

Hi,

I would suggest you sending such patches as reply to the earlier
threads only, instead of a new chain. This will save your time.

For example, you will need to resend other patches unnecessarily if I
NAK this patch :)

On 06-08-15, 15:41, Bartlomiej Zolnierkiewicz wrote:
> Add cpufreq_boost_enabled_generic_attr table and use it in
> cpufreq-dt driver instead of cpufreq_generic_attr one when
> boost support is enabled. As a result scaling_boost_freqs
> sysfs attribute is available when cpufreq-dt driver is
> used and boost support is enabled.
>
> Cc: Viresh Kumar <[email protected]>
> Cc: Thomas Abraham <[email protected]>
> Cc: Javier Martinez Canillas <[email protected]>
> Cc: Krzysztof Kozlowski <[email protected]>
> Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
> ---
> drivers/cpufreq/cpufreq-dt.c | 3 +++
> drivers/cpufreq/freq_table.c | 7 +++++++
> include/linux/cpufreq.h | 1 +
> 3 files changed, 11 insertions(+)
>
> diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
> index b9259ab..7b091c0 100644
> --- a/drivers/cpufreq/cpufreq-dt.c
> +++ b/drivers/cpufreq/cpufreq-dt.c
> @@ -182,6 +182,8 @@ try_again:
> return ret;
> }
>
> +static struct cpufreq_driver dt_cpufreq_driver;
> +
> static int cpufreq_init(struct cpufreq_policy *policy)
> {
> struct cpufreq_frequency_table *freq_table;
> @@ -336,6 +338,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
> ret = cpufreq_enable_boost_support();
> if (ret)
> goto out_free_cpufreq_table;
> + dt_cpufreq_driver.attr = cpufreq_boost_enabled_generic_attr;
> }
>
> policy->cpuinfo.transition_latency = transition_latency;
> diff --git a/drivers/cpufreq/freq_table.c b/drivers/cpufreq/freq_table.c
> index a8f1daf..5a00a09 100644
> --- a/drivers/cpufreq/freq_table.c
> +++ b/drivers/cpufreq/freq_table.c
> @@ -300,6 +300,13 @@ struct freq_attr *cpufreq_generic_attr[] = {
> };
> EXPORT_SYMBOL_GPL(cpufreq_generic_attr);
>
> +struct freq_attr *cpufreq_boost_enabled_generic_attr[] = {
> + &cpufreq_freq_attr_scaling_available_freqs,
> + &cpufreq_freq_attr_scaling_boost_freqs,
> + NULL,
> +};
> +EXPORT_SYMBOL_GPL(cpufreq_boost_enabled_generic_attr);

This isn't scalable. We can't create a new generic structure every time
a entry comes in. Rather we should leave the generic attr for
cpufreq-dt and do something like this in the cpufreq-dt driver (And
that patch should rather go via cpufreq tree and not ARM SoC)..

diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
index a5b6a854661f..e229258ad791 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
@@ -36,6 +36,12 @@ struct private_data {
unsigned int voltage_tolerance; /* in percentage */
};

+static struct freq_attr *cpufreq_dt_attr[] = {
+ &cpufreq_freq_attr_scaling_available_freqs,
+ NULL, /* Extra space for boost-attr if required */
+ NULL,
+};
+
static int set_target(struct cpufreq_policy *policy, unsigned int index)
{
struct dev_pm_opp *opp;
@@ -337,6 +343,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
ret = cpufreq_enable_boost_support();
if (ret)
goto out_free_cpufreq_table;
+ cpufreq_dt_attr[1] = &cpufreq_freq_attr_scaling_boost_freqs;
}

policy->cpuinfo.transition_latency = transition_latency;
@@ -412,7 +419,7 @@ static struct cpufreq_driver dt_cpufreq_driver = {
.exit = cpufreq_exit,
.ready = cpufreq_ready,
.name = "cpufreq-dt",
- .attr = cpufreq_generic_attr,
+ .attr = cpufreq_dt_attr,
};

static int dt_cpufreq_probe(struct platform_device *pdev)

--
viresh

2015-08-07 03:50:26

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

Cc'ing Rafael again. Guys please don't miss him for any PM related
stuff or use get_maintainers ..

Cc'ing Arnd/Olof as well to discuss the merge stuff..

On 07-08-15, 08:53, Kukjin Kim wrote:
> > Depends on:
> > - next-20150806 branch of linux-next kernel tree
> > - "[PATCH V3 00/16] OPP: Add code to support operating-points-v2 bindings"
> > (http://www.spinics.net/lists/arm-kernel/msg435408.html)
> >
> BTW, hmm...how can we see this series in v4.3?...to be honest, I don't think it
> can be done in v4.3 because of dependencies with PM / OPP series

That is merged by Rafael Yesterday. That is manageable

> and previous
> exynos CPU OPP series in each cross trees...maybe that's why you created based
> on linux-next...any idea?

So there is no build dependency with OPP patches I hope, as its all
about using the bindings defined by them. And so you don't need to
depend on that.

You might have to rebase on the ARM tree to manage your conflicts. In
this case you can rebase directly on ARM SoC branch which has your
patches (rebase directly over the last patch instead of the whole
branch) and make sure Olof knows about this and he doesn't update
(i.e. rebase) his branch, which he might not anyway.

The whole idea is to keep a single sha-id for a commit. So you can
rebase over the published material present in ARM-SoC ..

--
viresh

2015-08-07 03:52:04

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

Fixed Olof's email id..

On 07-08-15, 09:20, Viresh Kumar wrote:
> Cc'ing Rafael again. Guys please don't miss him for any PM related
> stuff or use get_maintainers ..
>
> Cc'ing Arnd/Olof as well to discuss the merge stuff..
>
> On 07-08-15, 08:53, Kukjin Kim wrote:
> > > Depends on:
> > > - next-20150806 branch of linux-next kernel tree
> > > - "[PATCH V3 00/16] OPP: Add code to support operating-points-v2 bindings"
> > > (http://www.spinics.net/lists/arm-kernel/msg435408.html)
> > >
> > BTW, hmm...how can we see this series in v4.3?...to be honest, I don't think it
> > can be done in v4.3 because of dependencies with PM / OPP series
>
> That is merged by Rafael Yesterday. That is manageable
>
> > and previous
> > exynos CPU OPP series in each cross trees...maybe that's why you created based
> > on linux-next...any idea?
>
> So there is no build dependency with OPP patches I hope, as its all
> about using the bindings defined by them. And so you don't need to
> depend on that.
>
> You might have to rebase on the ARM tree to manage your conflicts. In
> this case you can rebase directly on ARM SoC branch which has your
> patches (rebase directly over the last patch instead of the whole
> branch) and make sure Olof knows about this and he doesn't update
> (i.e. rebase) his branch, which he might not anyway.
>
> The whole idea is to keep a single sha-id for a commit. So you can
> rebase over the published material present in ARM-SoC ..
>
> --
> viresh

--
viresh

2015-08-07 04:14:05

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On 07.08.2015 12:51, Viresh Kumar wrote:
> Fixed Olof's email id..
>
> On 07-08-15, 09:20, Viresh Kumar wrote:
>> Cc'ing Rafael again. Guys please don't miss him for any PM related
>> stuff or use get_maintainers ..
>>
>> Cc'ing Arnd/Olof as well to discuss the merge stuff..
>>
>> On 07-08-15, 08:53, Kukjin Kim wrote:
>>>> Depends on:
>>>> - next-20150806 branch of linux-next kernel tree
>>>> - "[PATCH V3 00/16] OPP: Add code to support operating-points-v2 bindings"
>>>> (http://www.spinics.net/lists/arm-kernel/msg435408.html)
>>>>
>>> BTW, hmm...how can we see this series in v4.3?...to be honest, I don't think it
>>> can be done in v4.3 because of dependencies with PM / OPP series
>>
>> That is merged by Rafael Yesterday. That is manageable

Indeed, happy to hear it! So the patchset has no external dependencies.

>>
>>> and previous
>>> exynos CPU OPP series in each cross trees...maybe that's why you created based
>>> on linux-next...any idea?
>>
>> So there is no build dependency with OPP patches I hope, as its all
>> about using the bindings defined by them. And so you don't need to
>> depend on that.
>>
>> You might have to rebase on the ARM tree to manage your conflicts. In
>> this case you can rebase directly on ARM SoC branch which has your
>> patches (rebase directly over the last patch instead of the whole
>> branch) and make sure Olof knows about this and he doesn't update
>> (i.e. rebase) his branch, which he might not anyway.
>>
>> The whole idea is to keep a single sha-id for a commit. So you can
>> rebase over the published material present in ARM-SoC ..

Still patches 1/6 and 6/6 need your acks. Is the patch 1/6 a
prerequisite for others? It does not look like a prerequisite... but it
was put at the beginning of the patchset.

Best regards,
Krzysztof

2015-08-07 04:30:44

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On 07-08-15, 13:13, Krzysztof Kozlowski wrote:
> Still patches 1/6 and 6/6 need your acks. Is the patch 1/6 a
> prerequisite for others? It does not look like a prerequisite... but it
> was put at the beginning of the patchset.

Patch 1/6 is required to get boost working, that's all.. Not sure how
important is that. Anyway, that will work without 1/6 as well, all you
need to do is enable CONFIG_CPU_FREQ_BOOST_SW in you .config.

Anyway, it should go via pm tree and can be sent separately.

--
viresh

2015-08-07 04:31:23

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 6/6] cpufreq: remove no longer needed CPU_FREQ_BOOST_SW config option

On 06-08-15, 15:41, Bartlomiej Zolnierkiewicz wrote:
> Remove no longer needed CPU_FREQ_BOOST_SW config option.
>
> Cc: Viresh Kumar <[email protected]>
> Cc: Thomas Abraham <[email protected]>
> Cc: Javier Martinez Canillas <[email protected]>
> Cc: Krzysztof Kozlowski <[email protected]>
> Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
> ---
> drivers/cpufreq/Kconfig | 4 ----
> drivers/cpufreq/freq_table.c | 3 ---
> 2 files changed, 7 deletions(-)

This must be applied only after fixing 1/6.

--
viresh

2015-08-07 04:52:11

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On 07.08.2015 13:30, Viresh Kumar wrote:
> On 07-08-15, 13:13, Krzysztof Kozlowski wrote:
>> Still patches 1/6 and 6/6 need your acks. Is the patch 1/6 a
>> prerequisite for others? It does not look like a prerequisite... but it
>> was put at the beginning of the patchset.
>
> Patch 1/6 is required to get boost working, that's all.. Not sure how
> important is that. Anyway, that will work without 1/6 as well, all you
> need to do is enable CONFIG_CPU_FREQ_BOOST_SW in you .config.
>
> Anyway, it should go via pm tree and can be sent separately.

Thanks for explanation. As fair as I understand, Bartlomiej wanted to
merge this in a way which would avoid loosing the boost mode. Kukjin
prepared topic branches for previous cpu-freq/clk stuff so maybe
everything could go through PM?

Kukjin, are you fine with that?

Best regards,
Krzysztof

2015-08-07 05:19:06

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On 07-08-15, 13:52, Krzysztof Kozlowski wrote:
> Thanks for explanation. As fair as I understand, Bartlomiej wanted to
> merge this in a way which would avoid loosing the boost mode. Kukjin
> prepared topic branches for previous cpu-freq/clk stuff so maybe
> everything could go through PM?

We aren't loosing anything at all. There can be two cases here:

1. Patch 1/6 and 6/6 make it to 4.3 (with suggested changes) via PM tree:
- All will work fine in this case, no issues at all..

2. They don't make it:
- Even in this case, nothing will break. Users can just enable a
config option and that's all..

So, no need to divert things into another tree this late.

Over that, Rafael will not be around for 2 weeks now (Plumbers and
other stuff) ..

So, just target the cpufreq core changes via PM tree.. rest is just
fine.

I hope that makes sense :)

--
viresh

Subject: Re: [PATCH v4 1/6] cpufreq: make scaling_boost_freqs sysfs attr available when boost is enabled


Hi,

On Friday, August 07, 2015 09:11:28 AM Viresh Kumar wrote:
> Hi,
>
> I would suggest you sending such patches as reply to the earlier
> threads only, instead of a new chain. This will save your time.

Please explain it more. This patch needs to be first for cpufreq-dt
switch to be complete. scaling_boost_freqs is available currently
for exynos-cpufreq users when boost is enabled and ideally we would
like it to be available immediately after the switch to cpufreq-dt.

> For example, you will need to resend other patches unnecessarily if I
> NAK this patch :)
>
> On 06-08-15, 15:41, Bartlomiej Zolnierkiewicz wrote:
> > Add cpufreq_boost_enabled_generic_attr table and use it in
> > cpufreq-dt driver instead of cpufreq_generic_attr one when
> > boost support is enabled. As a result scaling_boost_freqs
> > sysfs attribute is available when cpufreq-dt driver is
> > used and boost support is enabled.
> >
> > Cc: Viresh Kumar <[email protected]>
> > Cc: Thomas Abraham <[email protected]>
> > Cc: Javier Martinez Canillas <[email protected]>
> > Cc: Krzysztof Kozlowski <[email protected]>
> > Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
> > ---
> > drivers/cpufreq/cpufreq-dt.c | 3 +++
> > drivers/cpufreq/freq_table.c | 7 +++++++
> > include/linux/cpufreq.h | 1 +
> > 3 files changed, 11 insertions(+)
> >
> > diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
> > index b9259ab..7b091c0 100644
> > --- a/drivers/cpufreq/cpufreq-dt.c
> > +++ b/drivers/cpufreq/cpufreq-dt.c
> > @@ -182,6 +182,8 @@ try_again:
> > return ret;
> > }
> >
> > +static struct cpufreq_driver dt_cpufreq_driver;
> > +
> > static int cpufreq_init(struct cpufreq_policy *policy)
> > {
> > struct cpufreq_frequency_table *freq_table;
> > @@ -336,6 +338,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
> > ret = cpufreq_enable_boost_support();
> > if (ret)
> > goto out_free_cpufreq_table;
> > + dt_cpufreq_driver.attr = cpufreq_boost_enabled_generic_attr;
> > }
> >
> > policy->cpuinfo.transition_latency = transition_latency;
> > diff --git a/drivers/cpufreq/freq_table.c b/drivers/cpufreq/freq_table.c
> > index a8f1daf..5a00a09 100644
> > --- a/drivers/cpufreq/freq_table.c
> > +++ b/drivers/cpufreq/freq_table.c
> > @@ -300,6 +300,13 @@ struct freq_attr *cpufreq_generic_attr[] = {
> > };
> > EXPORT_SYMBOL_GPL(cpufreq_generic_attr);
> >
> > +struct freq_attr *cpufreq_boost_enabled_generic_attr[] = {
> > + &cpufreq_freq_attr_scaling_available_freqs,
> > + &cpufreq_freq_attr_scaling_boost_freqs,
> > + NULL,
> > +};
> > +EXPORT_SYMBOL_GPL(cpufreq_boost_enabled_generic_attr);
>
> This isn't scalable. We can't create a new generic structure every time
> a entry comes in. Rather we should leave the generic attr for

boost entry is rather generic one so I imagine that other cpufreq
drivers that add support for boost would also like to use it.

Anyway since there are no such drivers currently I agree that
making a new generic structure may be premature and I will re-do
this patch according to your request.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

> cpufreq-dt and do something like this in the cpufreq-dt driver (And
> that patch should rather go via cpufreq tree and not ARM SoC)..
>
> diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
> index a5b6a854661f..e229258ad791 100644
> --- a/drivers/cpufreq/cpufreq-dt.c
> +++ b/drivers/cpufreq/cpufreq-dt.c
> @@ -36,6 +36,12 @@ struct private_data {
> unsigned int voltage_tolerance; /* in percentage */
> };
>
> +static struct freq_attr *cpufreq_dt_attr[] = {
> + &cpufreq_freq_attr_scaling_available_freqs,
> + NULL, /* Extra space for boost-attr if required */
> + NULL,
> +};
> +
> static int set_target(struct cpufreq_policy *policy, unsigned int index)
> {
> struct dev_pm_opp *opp;
> @@ -337,6 +343,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
> ret = cpufreq_enable_boost_support();
> if (ret)
> goto out_free_cpufreq_table;
> + cpufreq_dt_attr[1] = &cpufreq_freq_attr_scaling_boost_freqs;
> }
>
> policy->cpuinfo.transition_latency = transition_latency;
> @@ -412,7 +419,7 @@ static struct cpufreq_driver dt_cpufreq_driver = {
> .exit = cpufreq_exit,
> .ready = cpufreq_ready,
> .name = "cpufreq-dt",
> - .attr = cpufreq_generic_attr,
> + .attr = cpufreq_dt_attr,
> };
>
> static int dt_cpufreq_probe(struct platform_device *pdev)

2015-08-07 10:42:06

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 1/6] cpufreq: make scaling_boost_freqs sysfs attr available when boost is enabled

On 07-08-15, 12:34, Bartlomiej Zolnierkiewicz wrote:
> > I would suggest you sending such patches as reply to the earlier
> > threads only, instead of a new chain. This will save your time.
>
> Please explain it more. This patch needs to be first for cpufreq-dt
> switch to be complete. scaling_boost_freqs is available currently
> for exynos-cpufreq users when boost is enabled and ideally we would
> like it to be available immediately after the switch to cpufreq-dt.

I wasn't talking about the ordering of the patches here, but when to
send patches.

So, you now sent these patches again, but what you could have done
is: only send the first patch in reply to the earlier thread. And ask
if it looks fine. If yes, resend the whole series properly or keep
fixing there only..

That makes things really fast. You don't have to resend the series and
people wouldn't stay away from it. I stayed away from this series to
find enough available time to see your 6 patches. Had it been just a
reply, I would have replied immediately like now.

Look at how updated versions in the same mail chain in case of OPP
series..

--
viresh

Subject: Re: [PATCH v4 1/6] cpufreq: make scaling_boost_freqs sysfs attr available when boost is enabled

On Friday, August 07, 2015 04:11:56 PM Viresh Kumar wrote:
> On 07-08-15, 12:34, Bartlomiej Zolnierkiewicz wrote:
> > > I would suggest you sending such patches as reply to the earlier
> > > threads only, instead of a new chain. This will save your time.
> >
> > Please explain it more. This patch needs to be first for cpufreq-dt
> > switch to be complete. scaling_boost_freqs is available currently
> > for exynos-cpufreq users when boost is enabled and ideally we would
> > like it to be available immediately after the switch to cpufreq-dt.
>
> I wasn't talking about the ordering of the patches here, but when to
> send patches.
>
> So, you now sent these patches again, but what you could have done
> is: only send the first patch in reply to the earlier thread. And ask
> if it looks fine. If yes, resend the whole series properly or keep
> fixing there only..
>
> That makes things really fast. You don't have to resend the series and
> people wouldn't stay away from it. I stayed away from this series to
> find enough available time to see your 6 patches. Had it been just a
> reply, I would have replied immediately like now.
>
> Look at how updated versions in the same mail chain in case of OPP
> series..

Please find updated patch below. It can be moved just before
patch #6 and all patches in the series would still apply fine.

---------------------8<-------------------

>From 993ebb6fc632ec7b61654c9610c90ff4dca4be34 Mon Sep 17 00:00:00 2001
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Fri, 7 Aug 2015 13:07:51 +0200
Subject: [PATCH] cpufreq-dt: make scaling_boost_freqs sysfs attr available
when boost is enabled

Make scaling_boost_freqs sysfs attribute is available when
cpufreq-dt driver is used and boost support is enabled.

Cc: Thomas Abraham <[email protected]>
Cc: Javier Martinez Canillas <[email protected]>
Cc: Krzysztof Kozlowski <[email protected]>
Suggested-by: Viresh Kumar <[email protected]>
Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
---
drivers/cpufreq/cpufreq-dt.c | 11 ++++++++++-
include/linux/cpufreq.h | 1 +
2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
index b9259ab..c6a3b98 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
@@ -36,6 +36,12 @@ struct private_data {
unsigned int voltage_tolerance; /* in percentage */
};

+static struct freq_attr *cpufreq_dt_attr[] = {
+ &cpufreq_freq_attr_scaling_available_freqs,
+ NULL, /* Extra space for boost-attr if required */
+ NULL,
+};
+
static int set_target(struct cpufreq_policy *policy, unsigned int index)
{
struct dev_pm_opp *opp;
@@ -182,6 +188,8 @@ try_again:
return ret;
}

+static struct cpufreq_driver dt_cpufreq_driver;
+
static int cpufreq_init(struct cpufreq_policy *policy)
{
struct cpufreq_frequency_table *freq_table;
@@ -336,6 +344,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
ret = cpufreq_enable_boost_support();
if (ret)
goto out_free_cpufreq_table;
+ cpufreq_dt_attr[1] = &cpufreq_freq_attr_scaling_boost_freqs;
}

policy->cpuinfo.transition_latency = transition_latency;
@@ -411,7 +420,7 @@ static struct cpufreq_driver dt_cpufreq_driver = {
.exit = cpufreq_exit,
.ready = cpufreq_ready,
.name = "cpufreq-dt",
- .attr = cpufreq_generic_attr,
+ .attr = cpufreq_dt_attr,
};

static int dt_cpufreq_probe(struct platform_device *pdev)
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 95f0186..657542d 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -609,6 +609,7 @@ struct cpufreq_frequency_table *cpufreq_frequency_get_table(unsigned int cpu);

/* the following are really really optional */
extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
+extern struct freq_attr cpufreq_freq_attr_scaling_boost_freqs;
extern struct freq_attr *cpufreq_generic_attr[];
int cpufreq_table_validate_and_show(struct cpufreq_policy *policy,
struct cpufreq_frequency_table *table);
--
1.9.1

Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform


Hi,

On Friday, August 07, 2015 10:48:26 AM Viresh Kumar wrote:
> On 07-08-15, 13:52, Krzysztof Kozlowski wrote:
> > Thanks for explanation. As fair as I understand, Bartlomiej wanted to
> > merge this in a way which would avoid loosing the boost mode. Kukjin
> > prepared topic branches for previous cpu-freq/clk stuff so maybe
> > everything could go through PM?
>
> We aren't loosing anything at all. There can be two cases here:
>
> 1. Patch 1/6 and 6/6 make it to 4.3 (with suggested changes) via PM tree:
> - All will work fine in this case, no issues at all..
>
> 2. They don't make it:
> - Even in this case, nothing will break. Users can just enable a
> config option and that's all..

Users don't need to enable the config option to get boost
functionality working. It is only needed to get scaling_boost_freqs
sysfs attribute visible (which lists available boost freqs) when
using cpufreq-dt driver. Also the config option in question is not
user visible.

The worst thing that happens if these 2 PM patches don't make it
in time is that there will be no scaling_boost_freqs available
when using cpufreq-dt driver. Which is not very important from
Exynos4x12 POV as it only supports single boost freq currently.

> So, no need to divert things into another tree this late.

I agree.

> Over that, Rafael will not be around for 2 weeks now (Plumbers and
> other stuff) ..
>
> So, just target the cpufreq core changes via PM tree.. rest is just
> fine.
>
> I hope that makes sense :)

Yes. :)

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

2015-08-07 11:37:47

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 1/6] cpufreq: make scaling_boost_freqs sysfs attr available when boost is enabled

On 07-08-15, 13:12, Bartlomiej Zolnierkiewicz wrote:
> >From 993ebb6fc632ec7b61654c9610c90ff4dca4be34 Mon Sep 17 00:00:00 2001
> From: Bartlomiej Zolnierkiewicz <[email protected]>
> Date: Fri, 7 Aug 2015 13:07:51 +0200
> Subject: [PATCH] cpufreq-dt: make scaling_boost_freqs sysfs attr available
> when boost is enabled
>
> Make scaling_boost_freqs sysfs attribute is available when
> cpufreq-dt driver is used and boost support is enabled.
>
> Cc: Thomas Abraham <[email protected]>
> Cc: Javier Martinez Canillas <[email protected]>
> Cc: Krzysztof Kozlowski <[email protected]>
> Suggested-by: Viresh Kumar <[email protected]>
> Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
> ---
> drivers/cpufreq/cpufreq-dt.c | 11 ++++++++++-
> include/linux/cpufreq.h | 1 +
> 2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
> index b9259ab..c6a3b98 100644
> --- a/drivers/cpufreq/cpufreq-dt.c
> +++ b/drivers/cpufreq/cpufreq-dt.c
> @@ -36,6 +36,12 @@ struct private_data {
> unsigned int voltage_tolerance; /* in percentage */
> };
>
> +static struct freq_attr *cpufreq_dt_attr[] = {
> + &cpufreq_freq_attr_scaling_available_freqs,
> + NULL, /* Extra space for boost-attr if required */
> + NULL,
> +};
> +
> static int set_target(struct cpufreq_policy *policy, unsigned int index)
> {
> struct dev_pm_opp *opp;
> @@ -182,6 +188,8 @@ try_again:
> return ret;
> }
>
> +static struct cpufreq_driver dt_cpufreq_driver;
> +
> static int cpufreq_init(struct cpufreq_policy *policy)
> {
> struct cpufreq_frequency_table *freq_table;
> @@ -336,6 +344,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
> ret = cpufreq_enable_boost_support();
> if (ret)
> goto out_free_cpufreq_table;
> + cpufreq_dt_attr[1] = &cpufreq_freq_attr_scaling_boost_freqs;
> }
>
> policy->cpuinfo.transition_latency = transition_latency;
> @@ -411,7 +420,7 @@ static struct cpufreq_driver dt_cpufreq_driver = {
> .exit = cpufreq_exit,
> .ready = cpufreq_ready,
> .name = "cpufreq-dt",
> - .attr = cpufreq_generic_attr,
> + .attr = cpufreq_dt_attr,
> };
>
> static int dt_cpufreq_probe(struct platform_device *pdev)
> diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
> index 95f0186..657542d 100644
> --- a/include/linux/cpufreq.h
> +++ b/include/linux/cpufreq.h
> @@ -609,6 +609,7 @@ struct cpufreq_frequency_table *cpufreq_frequency_get_table(unsigned int cpu);
>
> /* the following are really really optional */
> extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
> +extern struct freq_attr cpufreq_freq_attr_scaling_boost_freqs;
> extern struct freq_attr *cpufreq_generic_attr[];
> int cpufreq_table_validate_and_show(struct cpufreq_policy *policy,
> struct cpufreq_frequency_table *table);

Acked-by: Viresh Kumar <[email protected]>

--
viresh

2015-08-07 11:39:57

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On 07-08-15, 13:31, Bartlomiej Zolnierkiewicz wrote:
> Users don't need to enable the config option to get boost
> functionality working. It is only needed to get scaling_boost_freqs
> sysfs attribute visible (which lists available boost freqs) when
> using cpufreq-dt driver. Also the config option in question is not
> user visible.

By users I meant the people who will prepare the build images for the
release. They can just enable the config option :)

> The worst thing that happens if these 2 PM patches don't make it
> in time is that there will be no scaling_boost_freqs available
> when using cpufreq-dt driver. Which is not very important from
> Exynos4x12 POV as it only supports single boost freq currently.

Right. So, now that your patch is Acked, send 1/6 and 6/6 separately
to pm-list and Rafael can get them merged himself..

I hope, your 6/6 patch will change a bit now ?

--
viresh

Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On Friday, August 07, 2015 05:09:50 PM Viresh Kumar wrote:
> On 07-08-15, 13:31, Bartlomiej Zolnierkiewicz wrote:
> > Users don't need to enable the config option to get boost
> > functionality working. It is only needed to get scaling_boost_freqs
> > sysfs attribute visible (which lists available boost freqs) when
> > using cpufreq-dt driver. Also the config option in question is not
> > user visible.
>
> By users I meant the people who will prepare the build images for the
> release. They can just enable the config option :)

OK.

> > The worst thing that happens if these 2 PM patches don't make it
> > in time is that there will be no scaling_boost_freqs available
> > when using cpufreq-dt driver. Which is not very important from
> > Exynos4x12 POV as it only supports single boost freq currently.
>
> Right. So, now that your patch is Acked, send 1/6 and 6/6 separately
> to pm-list and Rafael can get them merged himself..
>
> I hope, your 6/6 patch will change a bit now ?

Hmm, wait. Patch 6/6 depends on earlier changes. I cannot remove
the config option in question now as it is currently used by
exynos-cpufreq specific boost support. Patch 1/6 can be applied
now but 6/6 needs to wait for patches 2-5 to be applied first.

Actually 6/6 is trivial and can be applied later in v4.3 cycle or
even in v4.4 one.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

2015-08-07 11:56:34

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On 07-08-15, 13:47, Bartlomiej Zolnierkiewicz wrote:
> Hmm, wait. Patch 6/6 depends on earlier changes. I cannot remove
> the config option in question now as it is currently used by
> exynos-cpufreq specific boost support. Patch 1/6 can be applied
> now but 6/6 needs to wait for patches 2-5 to be applied first.
>
> Actually 6/6 is trivial and can be applied later in v4.3 cycle or
> even in v4.4 one.

Ack.

--
viresh

2015-08-07 21:53:59

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH v4 1/6] cpufreq: make scaling_boost_freqs sysfs attr available when boost is enabled

On Friday, August 07, 2015 05:07:39 PM Viresh Kumar wrote:
> On 07-08-15, 13:12, Bartlomiej Zolnierkiewicz wrote:
> > >From 993ebb6fc632ec7b61654c9610c90ff4dca4be34 Mon Sep 17 00:00:00 2001
> > From: Bartlomiej Zolnierkiewicz <[email protected]>
> > Date: Fri, 7 Aug 2015 13:07:51 +0200
> > Subject: [PATCH] cpufreq-dt: make scaling_boost_freqs sysfs attr available
> > when boost is enabled
> >
> > Make scaling_boost_freqs sysfs attribute is available when
> > cpufreq-dt driver is used and boost support is enabled.
> >
> > Cc: Thomas Abraham <[email protected]>
> > Cc: Javier Martinez Canillas <[email protected]>
> > Cc: Krzysztof Kozlowski <[email protected]>
> > Suggested-by: Viresh Kumar <[email protected]>
> > Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
> > ---
> > drivers/cpufreq/cpufreq-dt.c | 11 ++++++++++-
> > include/linux/cpufreq.h | 1 +
> > 2 files changed, 11 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
> > index b9259ab..c6a3b98 100644
> > --- a/drivers/cpufreq/cpufreq-dt.c
> > +++ b/drivers/cpufreq/cpufreq-dt.c
> > @@ -36,6 +36,12 @@ struct private_data {
> > unsigned int voltage_tolerance; /* in percentage */
> > };
> >
> > +static struct freq_attr *cpufreq_dt_attr[] = {
> > + &cpufreq_freq_attr_scaling_available_freqs,
> > + NULL, /* Extra space for boost-attr if required */
> > + NULL,
> > +};
> > +
> > static int set_target(struct cpufreq_policy *policy, unsigned int index)
> > {
> > struct dev_pm_opp *opp;
> > @@ -182,6 +188,8 @@ try_again:
> > return ret;
> > }
> >
> > +static struct cpufreq_driver dt_cpufreq_driver;
> > +
> > static int cpufreq_init(struct cpufreq_policy *policy)
> > {
> > struct cpufreq_frequency_table *freq_table;
> > @@ -336,6 +344,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
> > ret = cpufreq_enable_boost_support();
> > if (ret)
> > goto out_free_cpufreq_table;
> > + cpufreq_dt_attr[1] = &cpufreq_freq_attr_scaling_boost_freqs;
> > }
> >
> > policy->cpuinfo.transition_latency = transition_latency;
> > @@ -411,7 +420,7 @@ static struct cpufreq_driver dt_cpufreq_driver = {
> > .exit = cpufreq_exit,
> > .ready = cpufreq_ready,
> > .name = "cpufreq-dt",
> > - .attr = cpufreq_generic_attr,
> > + .attr = cpufreq_dt_attr,
> > };
> >
> > static int dt_cpufreq_probe(struct platform_device *pdev)
> > diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
> > index 95f0186..657542d 100644
> > --- a/include/linux/cpufreq.h
> > +++ b/include/linux/cpufreq.h
> > @@ -609,6 +609,7 @@ struct cpufreq_frequency_table *cpufreq_frequency_get_table(unsigned int cpu);
> >
> > /* the following are really really optional */
> > extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
> > +extern struct freq_attr cpufreq_freq_attr_scaling_boost_freqs;
> > extern struct freq_attr *cpufreq_generic_attr[];
> > int cpufreq_table_validate_and_show(struct cpufreq_policy *policy,
> > struct cpufreq_frequency_table *table);
>
> Acked-by: Viresh Kumar <[email protected]>

And what exactly am I supposed to do with this?

Have a robot that will pick up all patches ACKed by you magically or what?

Rafael

2015-08-07 21:57:31

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On Friday, August 07, 2015 05:26:27 PM Viresh Kumar wrote:
> On 07-08-15, 13:47, Bartlomiej Zolnierkiewicz wrote:
> > Hmm, wait. Patch 6/6 depends on earlier changes. I cannot remove
> > the config option in question now as it is currently used by
> > exynos-cpufreq specific boost support. Patch 1/6 can be applied
> > now but 6/6 needs to wait for patches 2-5 to be applied first.
> >
> > Actually 6/6 is trivial and can be applied later in v4.3 cycle or
> > even in v4.4 one.
>
> Ack.

OK, so please let me know which patches you want me to pick up.

Ideally, I'd prefer them to be resent in a separate series with ACKs and all
with a cover letter clearly stating whose tree they are being targeted at.

Thanks,
Rafael

2015-08-08 02:06:49

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 1/6] cpufreq: make scaling_boost_freqs sysfs attr available when boost is enabled

On 08-08-15, 00:21, Rafael J. Wysocki wrote:
> > Acked-by: Viresh Kumar <[email protected]>
>
> And what exactly am I supposed to do with this?
>
> Have a robot that will pick up all patches ACKed by you magically or what?

:)

That's why I have asked Bartlomiej specifically to send it separately
to the pm list as a cpufreq patch. I wasn't expecting you to apply
right from here.

--
viresh

2015-08-08 02:07:47

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On 08-08-15, 00:24, Rafael J. Wysocki wrote:
> OK, so please let me know which patches you want me to pick up.
>
> Ideally, I'd prefer them to be resent in a separate series with ACKs and all
> with a cover letter clearly stating whose tree they are being targeted at.

He already sent it separately, let me send a confirmatory mail in
reply to that.

--
viresh

2015-08-08 07:27:22

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

W dniu 08.08.2015 o 11:07, Viresh Kumar pisze:
> On 08-08-15, 00:24, Rafael J. Wysocki wrote:
>> OK, so please let me know which patches you want me to pick up.
>>
>> Ideally, I'd prefer them to be resent in a separate series with ACKs and all
>> with a cover letter clearly stating whose tree they are being targeted at.
>
> He already sent it separately, let me send a confirmatory mail in
> reply to that.

Dear Kukjin,

Can you apply the 2-5 of this series to v4.3? It's getting late but
maybe they still could go?

Best regards,
Krzysztof

2015-08-08 13:59:45

by Viresh Kumar

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On 08-08-15, 16:27, Krzysztof Kozlowski wrote:
> Can you apply the 2-5 of this series to v4.3? It's getting late but
> maybe they still could go?

FWIW, 1/6 (updated version) is already applied by Rafael.

--
viresh

2015-08-10 01:27:24

by Kukjin Kim

[permalink] [raw]
Subject: RE: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

Krzysztof Kozlowski wrote:
>
> W dniu 08.08.2015 o 11:07, Viresh Kumar pisze:
> > On 08-08-15, 00:24, Rafael J. Wysocki wrote:
> >> OK, so please let me know which patches you want me to pick up.
> >>
> >> Ideally, I'd prefer them to be resent in a separate series with ACKs and all
> >> with a cover letter clearly stating whose tree they are being targeted at.
> >
> > He already sent it separately, let me send a confirmatory mail in
> > reply to that.
>
> Dear Kukjin,
>
> Can you apply the 2-5 of this series to v4.3? It's getting late but
> maybe they still could go?
>
Once my previous pull-request landed into arm-soc, I'll try to send out this
series 2-5 for v4.3.

Thanks,
Kukjin

2015-08-11 02:20:20

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

On 10.08.2015 10:27, Kukjin Kim wrote:
> Krzysztof Kozlowski wrote:
>>
>> W dniu 08.08.2015 o 11:07, Viresh Kumar pisze:
>>> On 08-08-15, 00:24, Rafael J. Wysocki wrote:
>>>> OK, so please let me know which patches you want me to pick up.
>>>>
>>>> Ideally, I'd prefer them to be resent in a separate series with ACKs and all
>>>> with a cover letter clearly stating whose tree they are being targeted at.
>>>
>>> He already sent it separately, let me send a confirmatory mail in
>>> reply to that.
>>
>> Dear Kukjin,
>>
>> Can you apply the 2-5 of this series to v4.3? It's getting late but
>> maybe they still could go?
>>
> Once my previous pull-request landed into arm-soc, I'll try to send out this
> series 2-5 for v4.3.

Additionally (better late than never):
Patches 2-5 tested on Trats2 board (Exynos4412)

Tested-by: Krzysztof Kozlowski <[email protected]>

Best regards,
Krzysztof

2015-08-11 07:51:22

by Kukjin Kim

[permalink] [raw]
Subject: RE: [PATCH v4 0/6] cpufreq: use generic cpufreq drivers for Exynos4x12 platform

Krzysztof Kozlowski wrote:
>
> On 10.08.2015 10:27, Kukjin Kim wrote:
> > Krzysztof Kozlowski wrote:
> >>
> >> W dniu 08.08.2015 o 11:07, Viresh Kumar pisze:
> >>> On 08-08-15, 00:24, Rafael J. Wysocki wrote:
> >>>> OK, so please let me know which patches you want me to pick up.
> >>>>
> >>>> Ideally, I'd prefer them to be resent in a separate series with ACKs and all
> >>>> with a cover letter clearly stating whose tree they are being targeted at.
> >>>
> >>> He already sent it separately, let me send a confirmatory mail in
> >>> reply to that.
> >>
> >> Dear Kukjin,
> >>
> >> Can you apply the 2-5 of this series to v4.3? It's getting late but
> >> maybe they still could go?
> >>
> > Once my previous pull-request landed into arm-soc, I'll try to send out this
> > series 2-5 for v4.3.
>
> Additionally (better late than never):

Sure ;-)

> Patches 2-5 tested on Trats2 board (Exynos4412)
>
> Tested-by: Krzysztof Kozlowski <[email protected]>
>
Applied with Krzysztof's 'Tested-by'.

Thanks,
Kukjin

2015-08-25 18:40:37

by Michael Turquette

[permalink] [raw]
Subject: Re: [PATCH v4 2/6] clk: samsung: exynos4x12: add cpu clock configuration data and instantiate cpu clock

Quoting Bartlomiej Zolnierkiewicz (2015-08-06 06:41:50)
> 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 <[email protected]>
> Cc: Michael Turquette <[email protected]>
> Cc: Thomas Abraham <[email protected]>
> Reviewed-by: Javier Martinez Canillas <[email protected]>
> Reviewed-by: Krzysztof Kozlowski <[email protected]>
> Acked-by: Sylwester Nawrocki <[email protected]>
> Tested-by: Tobias Jakobi <[email protected]>
> Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>

Acked-by: Michael Turquette <[email protected]>

> ---
> 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 251f48d..7f370d3 100644
> --- a/drivers/clk/samsung/clk-exynos4.c
> +++ b/drivers/clk/samsung/clk-exynos4.c
> @@ -1398,6 +1398,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)
> @@ -1491,6 +1530,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
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/