linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks
       [not found] <CGME20200826171539eucas1p2e999972d3e7dd6dd701e312548933e87@eucas1p2.samsung.com>
@ 2020-08-26 17:15 ` Sylwester Nawrocki
       [not found]   ` <CGME20200826171552eucas1p28ace6b1efbcdab420aaa4458ac8bad08@eucas1p2.samsung.com>
                     ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: Sylwester Nawrocki @ 2020-08-26 17:15 UTC (permalink / raw)
  To: linux-clk
  Cc: Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Kukjin Kim, Krzysztof Kozlowski, Rob Herring, linux-samsung-soc,
	linux-kernel, linux-arm-kernel, devicetree, m.szyprowski,
	b.zolnierkie, Sylwester Nawrocki

Add clock ID definitions for the CPU parent clocks for SoCs
which don't have such definitions yet. This will allow us to
reference the parent clocks directly by cached struct clk_hw
pointers in the clock provider, rather than doing clk lookup
by name.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
---
 include/dt-bindings/clock/exynos5250.h | 4 +++-
 include/dt-bindings/clock/exynos5420.h | 5 +++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/include/dt-bindings/clock/exynos5250.h b/include/dt-bindings/clock/exynos5250.h
index bc8a3c5..e259cc0 100644
--- a/include/dt-bindings/clock/exynos5250.h
+++ b/include/dt-bindings/clock/exynos5250.h
@@ -172,8 +172,10 @@
 #define CLK_MOUT_GPLL		1025
 #define CLK_MOUT_ACLK200_DISP1_SUB	1026
 #define CLK_MOUT_ACLK300_DISP1_SUB	1027
+#define CLK_MOUT_APLL		1028
+#define CLK_MOUT_MPLL		1029
 
 /* must be greater than maximal clock id */
-#define CLK_NR_CLKS		1028
+#define CLK_NR_CLKS		1030
 
 #endif /* _DT_BINDINGS_CLOCK_EXYNOS_5250_H */
diff --git a/include/dt-bindings/clock/exynos5420.h b/include/dt-bindings/clock/exynos5420.h
index ff917c8..9fffc6c 100644
--- a/include/dt-bindings/clock/exynos5420.h
+++ b/include/dt-bindings/clock/exynos5420.h
@@ -231,6 +231,11 @@
 #define CLK_MOUT_SCLK_SPLL	660
 #define CLK_MOUT_MX_MSPLL_CCORE_PHY	661
 #define CLK_MOUT_SW_ACLK_G3D	662
+#define CLK_MOUT_APLL		663
+#define CLK_MOUT_MSPLL_CPU	664
+#define CLK_MOUT_KPLL		665
+#define CLK_MOUT_MSPLL_KFC	666
+
 
 /* divider clocks */
 #define CLK_DOUT_PIXEL		768
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/3] clk: samsung: exynos5420/5250: Add IDs to the CPU parent clk definitions
       [not found]   ` <CGME20200826171552eucas1p28ace6b1efbcdab420aaa4458ac8bad08@eucas1p2.samsung.com>
@ 2020-08-26 17:15     ` Sylwester Nawrocki
  2020-08-28  6:33       ` Krzysztof Kozlowski
                         ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Sylwester Nawrocki @ 2020-08-26 17:15 UTC (permalink / raw)
  To: linux-clk
  Cc: Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Kukjin Kim, Krzysztof Kozlowski, Rob Herring, linux-samsung-soc,
	linux-kernel, linux-arm-kernel, devicetree, m.szyprowski,
	b.zolnierkie, Sylwester Nawrocki

Use non-zero clock IDs in definitions of the CPU parent clocks
for exynos5420, exynos5250 SoCs. This will allow us to reference
the parent clocks directly in the driver by cached struct clk_hw
pointers, rather than doing clk lookup by name.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
---
 drivers/clk/samsung/clk-exynos5250.c |  4 ++--
 drivers/clk/samsung/clk-exynos5420.c | 11 ++++++-----
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/clk/samsung/clk-exynos5250.c b/drivers/clk/samsung/clk-exynos5250.c
index 931c70a..7bcff76 100644
--- a/drivers/clk/samsung/clk-exynos5250.c
+++ b/drivers/clk/samsung/clk-exynos5250.c
@@ -253,14 +253,14 @@ static const struct samsung_mux_clock exynos5250_mux_clks[] __initconst = {
 	/*
 	 * CMU_CPU
 	 */
-	MUX_F(0, "mout_apll", mout_apll_p, SRC_CPU, 0, 1,
+	MUX_F(CLK_MOUT_APLL, "mout_apll", mout_apll_p, SRC_CPU, 0, 1,
 					CLK_SET_RATE_PARENT, 0),
 	MUX(0, "mout_cpu", mout_cpu_p, SRC_CPU, 16, 1),
 
 	/*
 	 * CMU_CORE
 	 */
-	MUX(0, "mout_mpll", mout_mpll_p, SRC_CORE1, 8, 1),
+	MUX(CLK_MOUT_MPLL, "mout_mpll", mout_mpll_p, SRC_CORE1, 8, 1),
 
 	/*
 	 * CMU_TOP
diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
index f76ebd6..d07cee2 100644
--- a/drivers/clk/samsung/clk-exynos5420.c
+++ b/drivers/clk/samsung/clk-exynos5420.c
@@ -596,13 +596,14 @@ static const struct samsung_gate_clock exynos5420_gate_clks[] __initconst = {
 static const struct samsung_mux_clock exynos5x_mux_clks[] __initconst = {
 	MUX(0, "mout_user_pclk66_gpio", mout_user_pclk66_gpio_p,
 			SRC_TOP7, 4, 1),
-	MUX(0, "mout_mspll_kfc", mout_mspll_cpu_p, SRC_TOP7, 8, 2),
-	MUX(0, "mout_mspll_cpu", mout_mspll_cpu_p, SRC_TOP7, 12, 2),
-
-	MUX_F(0, "mout_apll", mout_apll_p, SRC_CPU, 0, 1,
+	MUX(CLK_MOUT_MSPLL_KFC, "mout_mspll_kfc", mout_mspll_cpu_p,
+	    SRC_TOP7, 8, 2),
+	MUX(CLK_MOUT_MSPLL_CPU, "mout_mspll_cpu", mout_mspll_cpu_p,
+	    SRC_TOP7, 12, 2),
+	MUX_F(CLK_MOUT_APLL, "mout_apll", mout_apll_p, SRC_CPU, 0, 1,
 	      CLK_SET_RATE_PARENT | CLK_RECALC_NEW_RATES, 0),
 	MUX(0, "mout_cpu", mout_cpu_p, SRC_CPU, 16, 1),
-	MUX_F(0, "mout_kpll", mout_kpll_p, SRC_KFC, 0, 1,
+	MUX_F(CLK_MOUT_KPLL, "mout_kpll", mout_kpll_p, SRC_KFC, 0, 1,
 	      CLK_SET_RATE_PARENT | CLK_RECALC_NEW_RATES, 0),
 	MUX(0, "mout_kfc", mout_kfc_p, SRC_KFC, 16, 1),
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 3/3] clk: samsung: Use cached clk_hws instead of __clk_lookup() calls
       [not found]   ` <CGME20200826171557eucas1p13c960ad6abc814cf53bc125f5c4d9b39@eucas1p1.samsung.com>
@ 2020-08-26 17:15     ` Sylwester Nawrocki
  2020-08-28  6:40       ` Krzysztof Kozlowski
                         ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Sylwester Nawrocki @ 2020-08-26 17:15 UTC (permalink / raw)
  To: linux-clk
  Cc: Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Kukjin Kim, Krzysztof Kozlowski, Rob Herring, linux-samsung-soc,
	linux-kernel, linux-arm-kernel, devicetree, m.szyprowski,
	b.zolnierkie, Sylwester Nawrocki

For the CPU clock registration two parent clocks are required, these
are now being passed as struct clk_hw pointers, rather than by the
global scope names. That allows us to avoid  __clk_lookup() calls
and simplifies a bit the CPU clock registration function.
While at it drop unneeded extern keyword in the function declaration.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
---
 drivers/clk/samsung/clk-cpu.c        | 37 +++++++++++++++---------------------
 drivers/clk/samsung/clk-cpu.h        |  6 +++---
 drivers/clk/samsung/clk-exynos3250.c |  6 ++++--
 drivers/clk/samsung/clk-exynos4.c    |  7 +++++--
 drivers/clk/samsung/clk-exynos5250.c |  4 +++-
 drivers/clk/samsung/clk-exynos5420.c |  6 +++---
 drivers/clk/samsung/clk-exynos5433.c | 10 ++++++++--
 7 files changed, 41 insertions(+), 35 deletions(-)

diff --git a/drivers/clk/samsung/clk-cpu.c b/drivers/clk/samsung/clk-cpu.c
index efc4fa6..00ef4d1 100644
--- a/drivers/clk/samsung/clk-cpu.c
+++ b/drivers/clk/samsung/clk-cpu.c
@@ -401,26 +401,34 @@ static int exynos5433_cpuclk_notifier_cb(struct notifier_block *nb,
 
 /* helper function to register a CPU clock */
 int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
-		unsigned int lookup_id, const char *name, const char *parent,
-		const char *alt_parent, unsigned long offset,
-		const struct exynos_cpuclk_cfg_data *cfg,
+		unsigned int lookup_id, const char *name,
+		const struct clk_hw *parent, const struct clk_hw *alt_parent,
+		unsigned long offset, const struct exynos_cpuclk_cfg_data *cfg,
 		unsigned long num_cfgs, unsigned long flags)
 {
 	struct exynos_cpuclk *cpuclk;
 	struct clk_init_data init;
-	struct clk *parent_clk;
+	const char *parent_name;
 	int ret = 0;
 
+	if (IS_ERR(parent) || IS_ERR(alt_parent)) {
+		pr_err("%s: invalid parent clock(s)\n", __func__);
+		return -EINVAL;
+	}
+
 	cpuclk = kzalloc(sizeof(*cpuclk), GFP_KERNEL);
 	if (!cpuclk)
 		return -ENOMEM;
 
+	parent_name = clk_hw_get_name(parent);
+
 	init.name = name;
 	init.flags = CLK_SET_RATE_PARENT;
-	init.parent_names = &parent;
+	init.parent_names = &parent_name;
 	init.num_parents = 1;
 	init.ops = &exynos_cpuclk_clk_ops;
 
+	cpuclk->alt_parent = alt_parent;
 	cpuclk->hw.init = &init;
 	cpuclk->ctrl_base = ctx->reg_base + offset;
 	cpuclk->lock = &ctx->lock;
@@ -430,23 +438,8 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
 	else
 		cpuclk->clk_nb.notifier_call = exynos_cpuclk_notifier_cb;
 
-	cpuclk->alt_parent = __clk_get_hw(__clk_lookup(alt_parent));
-	if (!cpuclk->alt_parent) {
-		pr_err("%s: could not lookup alternate parent %s\n",
-				__func__, alt_parent);
-		ret = -EINVAL;
-		goto free_cpuclk;
-	}
-
-	parent_clk = __clk_lookup(parent);
-	if (!parent_clk) {
-		pr_err("%s: could not lookup parent clock %s\n",
-				__func__, parent);
-		ret = -EINVAL;
-		goto free_cpuclk;
-	}
 
-	ret = clk_notifier_register(parent_clk, &cpuclk->clk_nb);
+	ret = clk_notifier_register(parent->clk, &cpuclk->clk_nb);
 	if (ret) {
 		pr_err("%s: failed to register clock notifier for %s\n",
 				__func__, name);
@@ -471,7 +464,7 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
 free_cpuclk_data:
 	kfree(cpuclk->cfg);
 unregister_clk_nb:
-	clk_notifier_unregister(parent_clk, &cpuclk->clk_nb);
+	clk_notifier_unregister(parent->clk, &cpuclk->clk_nb);
 free_cpuclk:
 	kfree(cpuclk);
 	return ret;
diff --git a/drivers/clk/samsung/clk-cpu.h b/drivers/clk/samsung/clk-cpu.h
index ad38cc2..af74686 100644
--- a/drivers/clk/samsung/clk-cpu.h
+++ b/drivers/clk/samsung/clk-cpu.h
@@ -46,7 +46,7 @@ struct exynos_cpuclk_cfg_data {
  */
 struct exynos_cpuclk {
 	struct clk_hw				hw;
-	struct clk_hw				*alt_parent;
+	const struct clk_hw			*alt_parent;
 	void __iomem				*ctrl_base;
 	spinlock_t				*lock;
 	const struct exynos_cpuclk_cfg_data	*cfg;
@@ -62,9 +62,9 @@ struct exynos_cpuclk {
 #define CLK_CPU_HAS_E5433_REGS_LAYOUT	(1 << 2)
 };
 
-extern int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
+int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
 			unsigned int lookup_id, const char *name,
-			const char *parent, const char *alt_parent,
+			const struct clk_hw *parent, const struct clk_hw *alt_parent,
 			unsigned long offset,
 			const struct exynos_cpuclk_cfg_data *cfg,
 			unsigned long num_cfgs, unsigned long flags);
diff --git a/drivers/clk/samsung/clk-exynos3250.c b/drivers/clk/samsung/clk-exynos3250.c
index 17897c7..17df7f9 100644
--- a/drivers/clk/samsung/clk-exynos3250.c
+++ b/drivers/clk/samsung/clk-exynos3250.c
@@ -808,14 +808,16 @@ static const struct exynos_cpuclk_cfg_data e3250_armclk_d[] __initconst = {
 static void __init exynos3250_cmu_init(struct device_node *np)
 {
 	struct samsung_clk_provider *ctx;
+	struct clk_hw **hws;
 
 	ctx = samsung_cmu_register_one(np, &cmu_info);
 	if (!ctx)
 		return;
 
+	hws = ctx->clk_data.hws;
 	exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
-			mout_core_p[0], mout_core_p[1], 0x14200,
-			e3250_armclk_d, ARRAY_SIZE(e3250_armclk_d),
+			hws[CLK_MOUT_APLL], hws[CLK_MOUT_MPLL_USER_C],
+			0x14200, e3250_armclk_d, ARRAY_SIZE(e3250_armclk_d),
 			CLK_CPU_HAS_DIV1);
 
 	exynos3_core_down_clock(ctx->reg_base);
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
index 51564fc..436fcd2 100644
--- a/drivers/clk/samsung/clk-exynos4.c
+++ b/drivers/clk/samsung/clk-exynos4.c
@@ -1233,6 +1233,8 @@ static void __init exynos4_clk_init(struct device_node *np,
 				    enum exynos4_soc soc)
 {
 	struct samsung_clk_provider *ctx;
+	struct clk_hw **hws;
+
 	exynos4_soc = soc;
 
 	reg_base = of_iomap(np, 0);
@@ -1240,6 +1242,7 @@ static void __init exynos4_clk_init(struct device_node *np,
 		panic("%s: failed to map registers\n", __func__);
 
 	ctx = samsung_clk_init(np, reg_base, CLK_NR_CLKS);
+	hws = ctx->clk_data.hws;
 
 	samsung_clk_of_register_fixed_ext(ctx, exynos4_fixed_rate_ext_clks,
 			ARRAY_SIZE(exynos4_fixed_rate_ext_clks),
@@ -1302,7 +1305,7 @@ static void __init exynos4_clk_init(struct device_node *np,
 			exynos4210_fixed_factor_clks,
 			ARRAY_SIZE(exynos4210_fixed_factor_clks));
 		exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
-			mout_core_p4210[0], mout_core_p4210[1], 0x14200,
+			hws[CLK_MOUT_APLL], hws[CLK_SCLK_MPLL], 0x14200,
 			e4210_armclk_d, ARRAY_SIZE(e4210_armclk_d),
 			CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1);
 	} else {
@@ -1317,7 +1320,7 @@ static void __init exynos4_clk_init(struct device_node *np,
 			ARRAY_SIZE(exynos4x12_fixed_factor_clks));
 
 		exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
-			mout_core_p4x12[0], mout_core_p4x12[1], 0x14200,
+			hws[CLK_MOUT_APLL], hws[CLK_MOUT_MPLL_USER_C], 0x14200,
 			e4412_armclk_d, ARRAY_SIZE(e4412_armclk_d),
 			CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1);
 	}
diff --git a/drivers/clk/samsung/clk-exynos5250.c b/drivers/clk/samsung/clk-exynos5250.c
index 7bcff76..06588fa 100644
--- a/drivers/clk/samsung/clk-exynos5250.c
+++ b/drivers/clk/samsung/clk-exynos5250.c
@@ -782,6 +782,7 @@ static void __init exynos5250_clk_init(struct device_node *np)
 {
 	struct samsung_clk_provider *ctx;
 	unsigned int tmp;
+	struct clk_hw **hws;
 
 	if (np) {
 		reg_base = of_iomap(np, 0);
@@ -792,6 +793,7 @@ static void __init exynos5250_clk_init(struct device_node *np)
 	}
 
 	ctx = samsung_clk_init(np, reg_base, CLK_NR_CLKS);
+	hws = ctx->clk_data.hws;
 
 	samsung_clk_of_register_fixed_ext(ctx, exynos5250_fixed_rate_ext_clks,
 			ARRAY_SIZE(exynos5250_fixed_rate_ext_clks),
@@ -821,7 +823,7 @@ static void __init exynos5250_clk_init(struct device_node *np)
 	samsung_clk_register_gate(ctx, exynos5250_gate_clks,
 			ARRAY_SIZE(exynos5250_gate_clks));
 	exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
-			mout_cpu_p[0], mout_cpu_p[1], 0x200,
+			hws[CLK_MOUT_APLL], hws[CLK_MOUT_MPLL], 0x200,
 			exynos5250_armclk_d, ARRAY_SIZE(exynos5250_armclk_d),
 			CLK_CPU_HAS_DIV1);
 
diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
index d07cee2..ba4e0a4 100644
--- a/drivers/clk/samsung/clk-exynos5420.c
+++ b/drivers/clk/samsung/clk-exynos5420.c
@@ -1625,15 +1625,15 @@ static void __init exynos5x_clk_init(struct device_node *np,
 
 	if (soc == EXYNOS5420) {
 		exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
-			mout_cpu_p[0], mout_cpu_p[1], 0x200,
+			hws[CLK_MOUT_APLL], hws[CLK_MOUT_MSPLL_CPU], 0x200,
 			exynos5420_eglclk_d, ARRAY_SIZE(exynos5420_eglclk_d), 0);
 	} else {
 		exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
-			mout_cpu_p[0], mout_cpu_p[1], 0x200,
+			hws[CLK_MOUT_APLL], hws[CLK_MOUT_MSPLL_CPU], 0x200,
 			exynos5800_eglclk_d, ARRAY_SIZE(exynos5800_eglclk_d), 0);
 	}
 	exynos_register_cpu_clock(ctx, CLK_KFC_CLK, "kfcclk",
-		mout_kfc_p[0], mout_kfc_p[1], 0x28200,
+		hws[CLK_MOUT_KPLL], hws[CLK_MOUT_MSPLL_KFC],  0x28200,
 		exynos5420_kfcclk_d, ARRAY_SIZE(exynos5420_kfcclk_d), 0);
 
 	samsung_clk_extended_sleep_init(reg_base,
diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c
index 6f29ecd..f203074 100644
--- a/drivers/clk/samsung/clk-exynos5433.c
+++ b/drivers/clk/samsung/clk-exynos5433.c
@@ -3679,6 +3679,7 @@ static void __init exynos5433_cmu_apollo_init(struct device_node *np)
 {
 	void __iomem *reg_base;
 	struct samsung_clk_provider *ctx;
+	struct clk_hw **hws;
 
 	reg_base = of_iomap(np, 0);
 	if (!reg_base) {
@@ -3701,8 +3702,10 @@ static void __init exynos5433_cmu_apollo_init(struct device_node *np)
 	samsung_clk_register_gate(ctx, apollo_gate_clks,
 				  ARRAY_SIZE(apollo_gate_clks));
 
+	hws = ctx->clk_data.hws;
+
 	exynos_register_cpu_clock(ctx, CLK_SCLK_APOLLO, "apolloclk",
-		mout_apollo_p[0], mout_apollo_p[1], 0x200,
+		hws[CLK_MOUT_APOLLO_PLL], hws[CLK_MOUT_BUS_PLL_APOLLO_USER], 0x200,
 		exynos5433_apolloclk_d, ARRAY_SIZE(exynos5433_apolloclk_d),
 		CLK_CPU_HAS_E5433_REGS_LAYOUT);
 
@@ -3933,6 +3936,7 @@ static void __init exynos5433_cmu_atlas_init(struct device_node *np)
 {
 	void __iomem *reg_base;
 	struct samsung_clk_provider *ctx;
+	struct clk_hw **hws;
 
 	reg_base = of_iomap(np, 0);
 	if (!reg_base) {
@@ -3955,8 +3959,10 @@ static void __init exynos5433_cmu_atlas_init(struct device_node *np)
 	samsung_clk_register_gate(ctx, atlas_gate_clks,
 				  ARRAY_SIZE(atlas_gate_clks));
 
+	hws = ctx->clk_data.hws;
+
 	exynos_register_cpu_clock(ctx, CLK_SCLK_ATLAS, "atlasclk",
-		mout_atlas_p[0], mout_atlas_p[1], 0x200,
+		hws[CLK_MOUT_ATLAS_PLL], hws[CLK_MOUT_BUS_PLL_ATLAS_USER], 0x200,
 		exynos5433_atlasclk_d, ARRAY_SIZE(exynos5433_atlasclk_d),
 		CLK_CPU_HAS_E5433_REGS_LAYOUT);
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks
  2020-08-26 17:15 ` [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks Sylwester Nawrocki
       [not found]   ` <CGME20200826171552eucas1p28ace6b1efbcdab420aaa4458ac8bad08@eucas1p2.samsung.com>
       [not found]   ` <CGME20200826171557eucas1p13c960ad6abc814cf53bc125f5c4d9b39@eucas1p1.samsung.com>
@ 2020-08-28  6:32   ` Krzysztof Kozlowski
  2020-08-29 12:46   ` Chanwoo Choi
                     ` (2 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2020-08-28  6:32 UTC (permalink / raw)
  To: Sylwester Nawrocki
  Cc: linux-clk, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Kukjin Kim, Rob Herring, linux-samsung-soc,
	linux-kernel, linux-arm-kernel, devicetree, m.szyprowski,
	b.zolnierkie

On Wed, Aug 26, 2020 at 07:15:27PM +0200, Sylwester Nawrocki wrote:
> Add clock ID definitions for the CPU parent clocks for SoCs
> which don't have such definitions yet. This will allow us to
> reference the parent clocks directly by cached struct clk_hw
> pointers in the clock provider, rather than doing clk lookup
> by name.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
>  include/dt-bindings/clock/exynos5250.h | 4 +++-
>  include/dt-bindings/clock/exynos5420.h | 5 +++++
>  2 files changed, 8 insertions(+), 1 deletion(-)


Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/3] clk: samsung: exynos5420/5250: Add IDs to the CPU parent clk definitions
  2020-08-26 17:15     ` [PATCH 2/3] clk: samsung: exynos5420/5250: Add IDs to the CPU parent clk definitions Sylwester Nawrocki
@ 2020-08-28  6:33       ` Krzysztof Kozlowski
  2020-08-29 12:46       ` Chanwoo Choi
  2020-09-15 13:20       ` Sylwester Nawrocki
  2 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2020-08-28  6:33 UTC (permalink / raw)
  To: Sylwester Nawrocki
  Cc: linux-clk, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Kukjin Kim, Rob Herring, linux-samsung-soc,
	linux-kernel, linux-arm-kernel, devicetree, m.szyprowski,
	b.zolnierkie

On Wed, Aug 26, 2020 at 07:15:28PM +0200, Sylwester Nawrocki wrote:
> Use non-zero clock IDs in definitions of the CPU parent clocks
> for exynos5420, exynos5250 SoCs. This will allow us to reference
> the parent clocks directly in the driver by cached struct clk_hw
> pointers, rather than doing clk lookup by name.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
>  drivers/clk/samsung/clk-exynos5250.c |  4 ++--
>  drivers/clk/samsung/clk-exynos5420.c | 11 ++++++-----
>  2 files changed, 8 insertions(+), 7 deletions(-)

Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/3] clk: samsung: Use cached clk_hws instead of __clk_lookup() calls
  2020-08-26 17:15     ` [PATCH 3/3] clk: samsung: Use cached clk_hws instead of __clk_lookup() calls Sylwester Nawrocki
@ 2020-08-28  6:40       ` Krzysztof Kozlowski
  2020-08-29 12:47       ` Chanwoo Choi
  2020-09-15 13:21       ` Sylwester Nawrocki
  2 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2020-08-28  6:40 UTC (permalink / raw)
  To: Sylwester Nawrocki
  Cc: linux-clk, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Kukjin Kim, Rob Herring, linux-samsung-soc,
	linux-kernel, linux-arm-kernel, devicetree, m.szyprowski,
	b.zolnierkie

On Wed, Aug 26, 2020 at 07:15:29PM +0200, Sylwester Nawrocki wrote:
> For the CPU clock registration two parent clocks are required, these
> are now being passed as struct clk_hw pointers, rather than by the
> global scope names. That allows us to avoid  __clk_lookup() calls
> and simplifies a bit the CPU clock registration function.
> While at it drop unneeded extern keyword in the function declaration.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
>  drivers/clk/samsung/clk-cpu.c        | 37 +++++++++++++++---------------------
>  drivers/clk/samsung/clk-cpu.h        |  6 +++---
>  drivers/clk/samsung/clk-exynos3250.c |  6 ++++--
>  drivers/clk/samsung/clk-exynos4.c    |  7 +++++--
>  drivers/clk/samsung/clk-exynos5250.c |  4 +++-
>  drivers/clk/samsung/clk-exynos5420.c |  6 +++---
>  drivers/clk/samsung/clk-exynos5433.c | 10 ++++++++--
>  7 files changed, 41 insertions(+), 35 deletions(-)

Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks
  2020-08-26 17:15 ` [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks Sylwester Nawrocki
                     ` (2 preceding siblings ...)
  2020-08-28  6:32   ` [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks Krzysztof Kozlowski
@ 2020-08-29 12:46   ` Chanwoo Choi
  2020-09-08 23:01   ` Rob Herring
  2020-09-15 13:06   ` Sylwester Nawrocki
  5 siblings, 0 replies; 13+ messages in thread
From: Chanwoo Choi @ 2020-08-29 12:46 UTC (permalink / raw)
  To: Sylwester Nawrocki
  Cc: linux-clk, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Kukjin Kim, Krzysztof Kozlowski, Rob Herring,
	linux-samsung-soc, linux-kernel, linux-arm-kernel, devicetree,
	Marek Szyprowski, Bartlomiej Zolnierkiewicz

Hi Sylwester,

On Thu, Aug 27, 2020 at 2:16 AM Sylwester Nawrocki
<s.nawrocki@samsung.com> wrote:
>
> Add clock ID definitions for the CPU parent clocks for SoCs
> which don't have such definitions yet. This will allow us to
> reference the parent clocks directly by cached struct clk_hw
> pointers in the clock provider, rather than doing clk lookup
> by name.
>
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
>  include/dt-bindings/clock/exynos5250.h | 4 +++-
>  include/dt-bindings/clock/exynos5420.h | 5 +++++
>  2 files changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/include/dt-bindings/clock/exynos5250.h b/include/dt-bindings/clock/exynos5250.h
> index bc8a3c5..e259cc0 100644
> --- a/include/dt-bindings/clock/exynos5250.h
> +++ b/include/dt-bindings/clock/exynos5250.h
> @@ -172,8 +172,10 @@
>  #define CLK_MOUT_GPLL          1025
>  #define CLK_MOUT_ACLK200_DISP1_SUB     1026
>  #define CLK_MOUT_ACLK300_DISP1_SUB     1027
> +#define CLK_MOUT_APLL          1028
> +#define CLK_MOUT_MPLL          1029
>
>  /* must be greater than maximal clock id */
> -#define CLK_NR_CLKS            1028
> +#define CLK_NR_CLKS            1030
>
>  #endif /* _DT_BINDINGS_CLOCK_EXYNOS_5250_H */
> diff --git a/include/dt-bindings/clock/exynos5420.h b/include/dt-bindings/clock/exynos5420.h
> index ff917c8..9fffc6c 100644
> --- a/include/dt-bindings/clock/exynos5420.h
> +++ b/include/dt-bindings/clock/exynos5420.h
> @@ -231,6 +231,11 @@
>  #define CLK_MOUT_SCLK_SPLL     660
>  #define CLK_MOUT_MX_MSPLL_CCORE_PHY    661
>  #define CLK_MOUT_SW_ACLK_G3D   662
> +#define CLK_MOUT_APLL          663
> +#define CLK_MOUT_MSPLL_CPU     664
> +#define CLK_MOUT_KPLL          665
> +#define CLK_MOUT_MSPLL_KFC     666
> +
>
>  /* divider clocks */
>  #define CLK_DOUT_PIXEL         768
> --
> 2.7.4
>

Acked-by: Chanwoo Choi <cw00.choi@samsung.com>

-- 
Best Regards,
Chanwoo Choi
Samsung Electronics

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/3] clk: samsung: exynos5420/5250: Add IDs to the CPU parent clk definitions
  2020-08-26 17:15     ` [PATCH 2/3] clk: samsung: exynos5420/5250: Add IDs to the CPU parent clk definitions Sylwester Nawrocki
  2020-08-28  6:33       ` Krzysztof Kozlowski
@ 2020-08-29 12:46       ` Chanwoo Choi
  2020-09-15 13:20       ` Sylwester Nawrocki
  2 siblings, 0 replies; 13+ messages in thread
From: Chanwoo Choi @ 2020-08-29 12:46 UTC (permalink / raw)
  To: Sylwester Nawrocki
  Cc: linux-clk, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Kukjin Kim, Krzysztof Kozlowski, Rob Herring,
	linux-samsung-soc, linux-kernel, linux-arm-kernel, devicetree,
	Marek Szyprowski, Bartlomiej Zolnierkiewicz

Hi Sylwester,

On Thu, Aug 27, 2020 at 2:17 AM Sylwester Nawrocki
<s.nawrocki@samsung.com> wrote:
>
> Use non-zero clock IDs in definitions of the CPU parent clocks
> for exynos5420, exynos5250 SoCs. This will allow us to reference
> the parent clocks directly in the driver by cached struct clk_hw
> pointers, rather than doing clk lookup by name.
>
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
>  drivers/clk/samsung/clk-exynos5250.c |  4 ++--
>  drivers/clk/samsung/clk-exynos5420.c | 11 ++++++-----
>  2 files changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/clk/samsung/clk-exynos5250.c b/drivers/clk/samsung/clk-exynos5250.c
> index 931c70a..7bcff76 100644
> --- a/drivers/clk/samsung/clk-exynos5250.c
> +++ b/drivers/clk/samsung/clk-exynos5250.c
> @@ -253,14 +253,14 @@ static const struct samsung_mux_clock exynos5250_mux_clks[] __initconst = {
>         /*
>          * CMU_CPU
>          */
> -       MUX_F(0, "mout_apll", mout_apll_p, SRC_CPU, 0, 1,
> +       MUX_F(CLK_MOUT_APLL, "mout_apll", mout_apll_p, SRC_CPU, 0, 1,
>                                         CLK_SET_RATE_PARENT, 0),
>         MUX(0, "mout_cpu", mout_cpu_p, SRC_CPU, 16, 1),
>
>         /*
>          * CMU_CORE
>          */
> -       MUX(0, "mout_mpll", mout_mpll_p, SRC_CORE1, 8, 1),
> +       MUX(CLK_MOUT_MPLL, "mout_mpll", mout_mpll_p, SRC_CORE1, 8, 1),
>
>         /*
>          * CMU_TOP
> diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
> index f76ebd6..d07cee2 100644
> --- a/drivers/clk/samsung/clk-exynos5420.c
> +++ b/drivers/clk/samsung/clk-exynos5420.c
> @@ -596,13 +596,14 @@ static const struct samsung_gate_clock exynos5420_gate_clks[] __initconst = {
>  static const struct samsung_mux_clock exynos5x_mux_clks[] __initconst = {
>         MUX(0, "mout_user_pclk66_gpio", mout_user_pclk66_gpio_p,
>                         SRC_TOP7, 4, 1),
> -       MUX(0, "mout_mspll_kfc", mout_mspll_cpu_p, SRC_TOP7, 8, 2),
> -       MUX(0, "mout_mspll_cpu", mout_mspll_cpu_p, SRC_TOP7, 12, 2),
> -
> -       MUX_F(0, "mout_apll", mout_apll_p, SRC_CPU, 0, 1,
> +       MUX(CLK_MOUT_MSPLL_KFC, "mout_mspll_kfc", mout_mspll_cpu_p,
> +           SRC_TOP7, 8, 2),
> +       MUX(CLK_MOUT_MSPLL_CPU, "mout_mspll_cpu", mout_mspll_cpu_p,
> +           SRC_TOP7, 12, 2),
> +       MUX_F(CLK_MOUT_APLL, "mout_apll", mout_apll_p, SRC_CPU, 0, 1,
>               CLK_SET_RATE_PARENT | CLK_RECALC_NEW_RATES, 0),
>         MUX(0, "mout_cpu", mout_cpu_p, SRC_CPU, 16, 1),
> -       MUX_F(0, "mout_kpll", mout_kpll_p, SRC_KFC, 0, 1,
> +       MUX_F(CLK_MOUT_KPLL, "mout_kpll", mout_kpll_p, SRC_KFC, 0, 1,
>               CLK_SET_RATE_PARENT | CLK_RECALC_NEW_RATES, 0),
>         MUX(0, "mout_kfc", mout_kfc_p, SRC_KFC, 16, 1),
>
> --
> 2.7.4
>

Acked-by: Chanwoo Choi <cw00.choi@samsung.com>


-- 
Best Regards,
Chanwoo Choi
Samsung Electronics

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/3] clk: samsung: Use cached clk_hws instead of __clk_lookup() calls
  2020-08-26 17:15     ` [PATCH 3/3] clk: samsung: Use cached clk_hws instead of __clk_lookup() calls Sylwester Nawrocki
  2020-08-28  6:40       ` Krzysztof Kozlowski
@ 2020-08-29 12:47       ` Chanwoo Choi
  2020-09-15 13:21       ` Sylwester Nawrocki
  2 siblings, 0 replies; 13+ messages in thread
From: Chanwoo Choi @ 2020-08-29 12:47 UTC (permalink / raw)
  To: Sylwester Nawrocki
  Cc: linux-clk, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Kukjin Kim, Krzysztof Kozlowski, Rob Herring,
	linux-samsung-soc, linux-kernel, linux-arm-kernel, devicetree,
	Marek Szyprowski, Bartlomiej Zolnierkiewicz

Hi Sylwester,

On Thu, Aug 27, 2020 at 2:16 AM Sylwester Nawrocki
<s.nawrocki@samsung.com> wrote:
>
> For the CPU clock registration two parent clocks are required, these
> are now being passed as struct clk_hw pointers, rather than by the
> global scope names. That allows us to avoid  __clk_lookup() calls
> and simplifies a bit the CPU clock registration function.
> While at it drop unneeded extern keyword in the function declaration.
>
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
>  drivers/clk/samsung/clk-cpu.c        | 37 +++++++++++++++---------------------
>  drivers/clk/samsung/clk-cpu.h        |  6 +++---
>  drivers/clk/samsung/clk-exynos3250.c |  6 ++++--
>  drivers/clk/samsung/clk-exynos4.c    |  7 +++++--
>  drivers/clk/samsung/clk-exynos5250.c |  4 +++-
>  drivers/clk/samsung/clk-exynos5420.c |  6 +++---
>  drivers/clk/samsung/clk-exynos5433.c | 10 ++++++++--
>  7 files changed, 41 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/clk/samsung/clk-cpu.c b/drivers/clk/samsung/clk-cpu.c
> index efc4fa6..00ef4d1 100644
> --- a/drivers/clk/samsung/clk-cpu.c
> +++ b/drivers/clk/samsung/clk-cpu.c
> @@ -401,26 +401,34 @@ static int exynos5433_cpuclk_notifier_cb(struct notifier_block *nb,
>
>  /* helper function to register a CPU clock */
>  int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
> -               unsigned int lookup_id, const char *name, const char *parent,
> -               const char *alt_parent, unsigned long offset,
> -               const struct exynos_cpuclk_cfg_data *cfg,
> +               unsigned int lookup_id, const char *name,
> +               const struct clk_hw *parent, const struct clk_hw *alt_parent,
> +               unsigned long offset, const struct exynos_cpuclk_cfg_data *cfg,
>                 unsigned long num_cfgs, unsigned long flags)
>  {
>         struct exynos_cpuclk *cpuclk;
>         struct clk_init_data init;
> -       struct clk *parent_clk;
> +       const char *parent_name;
>         int ret = 0;
>
> +       if (IS_ERR(parent) || IS_ERR(alt_parent)) {
> +               pr_err("%s: invalid parent clock(s)\n", __func__);
> +               return -EINVAL;
> +       }
> +
>         cpuclk = kzalloc(sizeof(*cpuclk), GFP_KERNEL);
>         if (!cpuclk)
>                 return -ENOMEM;
>
> +       parent_name = clk_hw_get_name(parent);
> +
>         init.name = name;
>         init.flags = CLK_SET_RATE_PARENT;
> -       init.parent_names = &parent;
> +       init.parent_names = &parent_name;
>         init.num_parents = 1;
>         init.ops = &exynos_cpuclk_clk_ops;
>
> +       cpuclk->alt_parent = alt_parent;
>         cpuclk->hw.init = &init;
>         cpuclk->ctrl_base = ctx->reg_base + offset;
>         cpuclk->lock = &ctx->lock;
> @@ -430,23 +438,8 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
>         else
>                 cpuclk->clk_nb.notifier_call = exynos_cpuclk_notifier_cb;
>
> -       cpuclk->alt_parent = __clk_get_hw(__clk_lookup(alt_parent));
> -       if (!cpuclk->alt_parent) {
> -               pr_err("%s: could not lookup alternate parent %s\n",
> -                               __func__, alt_parent);
> -               ret = -EINVAL;
> -               goto free_cpuclk;
> -       }
> -
> -       parent_clk = __clk_lookup(parent);
> -       if (!parent_clk) {
> -               pr_err("%s: could not lookup parent clock %s\n",
> -                               __func__, parent);
> -               ret = -EINVAL;
> -               goto free_cpuclk;
> -       }
>
> -       ret = clk_notifier_register(parent_clk, &cpuclk->clk_nb);
> +       ret = clk_notifier_register(parent->clk, &cpuclk->clk_nb);
>         if (ret) {
>                 pr_err("%s: failed to register clock notifier for %s\n",
>                                 __func__, name);
> @@ -471,7 +464,7 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
>  free_cpuclk_data:
>         kfree(cpuclk->cfg);
>  unregister_clk_nb:
> -       clk_notifier_unregister(parent_clk, &cpuclk->clk_nb);
> +       clk_notifier_unregister(parent->clk, &cpuclk->clk_nb);
>  free_cpuclk:
>         kfree(cpuclk);
>         return ret;
> diff --git a/drivers/clk/samsung/clk-cpu.h b/drivers/clk/samsung/clk-cpu.h
> index ad38cc2..af74686 100644
> --- a/drivers/clk/samsung/clk-cpu.h
> +++ b/drivers/clk/samsung/clk-cpu.h
> @@ -46,7 +46,7 @@ struct exynos_cpuclk_cfg_data {
>   */
>  struct exynos_cpuclk {
>         struct clk_hw                           hw;
> -       struct clk_hw                           *alt_parent;
> +       const struct clk_hw                     *alt_parent;
>         void __iomem                            *ctrl_base;
>         spinlock_t                              *lock;
>         const struct exynos_cpuclk_cfg_data     *cfg;
> @@ -62,9 +62,9 @@ struct exynos_cpuclk {
>  #define CLK_CPU_HAS_E5433_REGS_LAYOUT  (1 << 2)
>  };
>
> -extern int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
> +int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
>                         unsigned int lookup_id, const char *name,
> -                       const char *parent, const char *alt_parent,
> +                       const struct clk_hw *parent, const struct clk_hw *alt_parent,
>                         unsigned long offset,
>                         const struct exynos_cpuclk_cfg_data *cfg,
>                         unsigned long num_cfgs, unsigned long flags);
> diff --git a/drivers/clk/samsung/clk-exynos3250.c b/drivers/clk/samsung/clk-exynos3250.c
> index 17897c7..17df7f9 100644
> --- a/drivers/clk/samsung/clk-exynos3250.c
> +++ b/drivers/clk/samsung/clk-exynos3250.c
> @@ -808,14 +808,16 @@ static const struct exynos_cpuclk_cfg_data e3250_armclk_d[] __initconst = {
>  static void __init exynos3250_cmu_init(struct device_node *np)
>  {
>         struct samsung_clk_provider *ctx;
> +       struct clk_hw **hws;
>
>         ctx = samsung_cmu_register_one(np, &cmu_info);
>         if (!ctx)
>                 return;
>
> +       hws = ctx->clk_data.hws;
>         exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
> -                       mout_core_p[0], mout_core_p[1], 0x14200,
> -                       e3250_armclk_d, ARRAY_SIZE(e3250_armclk_d),
> +                       hws[CLK_MOUT_APLL], hws[CLK_MOUT_MPLL_USER_C],
> +                       0x14200, e3250_armclk_d, ARRAY_SIZE(e3250_armclk_d),
>                         CLK_CPU_HAS_DIV1);
>
>         exynos3_core_down_clock(ctx->reg_base);
> diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
> index 51564fc..436fcd2 100644
> --- a/drivers/clk/samsung/clk-exynos4.c
> +++ b/drivers/clk/samsung/clk-exynos4.c
> @@ -1233,6 +1233,8 @@ static void __init exynos4_clk_init(struct device_node *np,
>                                     enum exynos4_soc soc)
>  {
>         struct samsung_clk_provider *ctx;
> +       struct clk_hw **hws;
> +
>         exynos4_soc = soc;
>
>         reg_base = of_iomap(np, 0);
> @@ -1240,6 +1242,7 @@ static void __init exynos4_clk_init(struct device_node *np,
>                 panic("%s: failed to map registers\n", __func__);
>
>         ctx = samsung_clk_init(np, reg_base, CLK_NR_CLKS);
> +       hws = ctx->clk_data.hws;
>
>         samsung_clk_of_register_fixed_ext(ctx, exynos4_fixed_rate_ext_clks,
>                         ARRAY_SIZE(exynos4_fixed_rate_ext_clks),
> @@ -1302,7 +1305,7 @@ static void __init exynos4_clk_init(struct device_node *np,
>                         exynos4210_fixed_factor_clks,
>                         ARRAY_SIZE(exynos4210_fixed_factor_clks));
>                 exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
> -                       mout_core_p4210[0], mout_core_p4210[1], 0x14200,
> +                       hws[CLK_MOUT_APLL], hws[CLK_SCLK_MPLL], 0x14200,
>                         e4210_armclk_d, ARRAY_SIZE(e4210_armclk_d),
>                         CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1);
>         } else {
> @@ -1317,7 +1320,7 @@ static void __init exynos4_clk_init(struct device_node *np,
>                         ARRAY_SIZE(exynos4x12_fixed_factor_clks));
>
>                 exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
> -                       mout_core_p4x12[0], mout_core_p4x12[1], 0x14200,
> +                       hws[CLK_MOUT_APLL], hws[CLK_MOUT_MPLL_USER_C], 0x14200,
>                         e4412_armclk_d, ARRAY_SIZE(e4412_armclk_d),
>                         CLK_CPU_NEEDS_DEBUG_ALT_DIV | CLK_CPU_HAS_DIV1);
>         }
> diff --git a/drivers/clk/samsung/clk-exynos5250.c b/drivers/clk/samsung/clk-exynos5250.c
> index 7bcff76..06588fa 100644
> --- a/drivers/clk/samsung/clk-exynos5250.c
> +++ b/drivers/clk/samsung/clk-exynos5250.c
> @@ -782,6 +782,7 @@ static void __init exynos5250_clk_init(struct device_node *np)
>  {
>         struct samsung_clk_provider *ctx;
>         unsigned int tmp;
> +       struct clk_hw **hws;
>
>         if (np) {
>                 reg_base = of_iomap(np, 0);
> @@ -792,6 +793,7 @@ static void __init exynos5250_clk_init(struct device_node *np)
>         }
>
>         ctx = samsung_clk_init(np, reg_base, CLK_NR_CLKS);
> +       hws = ctx->clk_data.hws;
>
>         samsung_clk_of_register_fixed_ext(ctx, exynos5250_fixed_rate_ext_clks,
>                         ARRAY_SIZE(exynos5250_fixed_rate_ext_clks),
> @@ -821,7 +823,7 @@ static void __init exynos5250_clk_init(struct device_node *np)
>         samsung_clk_register_gate(ctx, exynos5250_gate_clks,
>                         ARRAY_SIZE(exynos5250_gate_clks));
>         exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
> -                       mout_cpu_p[0], mout_cpu_p[1], 0x200,
> +                       hws[CLK_MOUT_APLL], hws[CLK_MOUT_MPLL], 0x200,
>                         exynos5250_armclk_d, ARRAY_SIZE(exynos5250_armclk_d),
>                         CLK_CPU_HAS_DIV1);
>
> diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
> index d07cee2..ba4e0a4 100644
> --- a/drivers/clk/samsung/clk-exynos5420.c
> +++ b/drivers/clk/samsung/clk-exynos5420.c
> @@ -1625,15 +1625,15 @@ static void __init exynos5x_clk_init(struct device_node *np,
>
>         if (soc == EXYNOS5420) {
>                 exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
> -                       mout_cpu_p[0], mout_cpu_p[1], 0x200,
> +                       hws[CLK_MOUT_APLL], hws[CLK_MOUT_MSPLL_CPU], 0x200,
>                         exynos5420_eglclk_d, ARRAY_SIZE(exynos5420_eglclk_d), 0);
>         } else {
>                 exynos_register_cpu_clock(ctx, CLK_ARM_CLK, "armclk",
> -                       mout_cpu_p[0], mout_cpu_p[1], 0x200,
> +                       hws[CLK_MOUT_APLL], hws[CLK_MOUT_MSPLL_CPU], 0x200,
>                         exynos5800_eglclk_d, ARRAY_SIZE(exynos5800_eglclk_d), 0);
>         }
>         exynos_register_cpu_clock(ctx, CLK_KFC_CLK, "kfcclk",
> -               mout_kfc_p[0], mout_kfc_p[1], 0x28200,
> +               hws[CLK_MOUT_KPLL], hws[CLK_MOUT_MSPLL_KFC],  0x28200,
>                 exynos5420_kfcclk_d, ARRAY_SIZE(exynos5420_kfcclk_d), 0);
>
>         samsung_clk_extended_sleep_init(reg_base,
> diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c
> index 6f29ecd..f203074 100644
> --- a/drivers/clk/samsung/clk-exynos5433.c
> +++ b/drivers/clk/samsung/clk-exynos5433.c
> @@ -3679,6 +3679,7 @@ static void __init exynos5433_cmu_apollo_init(struct device_node *np)
>  {
>         void __iomem *reg_base;
>         struct samsung_clk_provider *ctx;
> +       struct clk_hw **hws;
>
>         reg_base = of_iomap(np, 0);
>         if (!reg_base) {
> @@ -3701,8 +3702,10 @@ static void __init exynos5433_cmu_apollo_init(struct device_node *np)
>         samsung_clk_register_gate(ctx, apollo_gate_clks,
>                                   ARRAY_SIZE(apollo_gate_clks));
>
> +       hws = ctx->clk_data.hws;
> +
>         exynos_register_cpu_clock(ctx, CLK_SCLK_APOLLO, "apolloclk",
> -               mout_apollo_p[0], mout_apollo_p[1], 0x200,
> +               hws[CLK_MOUT_APOLLO_PLL], hws[CLK_MOUT_BUS_PLL_APOLLO_USER], 0x200,
>                 exynos5433_apolloclk_d, ARRAY_SIZE(exynos5433_apolloclk_d),
>                 CLK_CPU_HAS_E5433_REGS_LAYOUT);
>
> @@ -3933,6 +3936,7 @@ static void __init exynos5433_cmu_atlas_init(struct device_node *np)
>  {
>         void __iomem *reg_base;
>         struct samsung_clk_provider *ctx;
> +       struct clk_hw **hws;
>
>         reg_base = of_iomap(np, 0);
>         if (!reg_base) {
> @@ -3955,8 +3959,10 @@ static void __init exynos5433_cmu_atlas_init(struct device_node *np)
>         samsung_clk_register_gate(ctx, atlas_gate_clks,
>                                   ARRAY_SIZE(atlas_gate_clks));
>
> +       hws = ctx->clk_data.hws;
> +
>         exynos_register_cpu_clock(ctx, CLK_SCLK_ATLAS, "atlasclk",
> -               mout_atlas_p[0], mout_atlas_p[1], 0x200,
> +               hws[CLK_MOUT_ATLAS_PLL], hws[CLK_MOUT_BUS_PLL_ATLAS_USER], 0x200,
>                 exynos5433_atlasclk_d, ARRAY_SIZE(exynos5433_atlasclk_d),
>                 CLK_CPU_HAS_E5433_REGS_LAYOUT);
>
> --
> 2.7.4
>

Acked-by: Chanwoo Choi <cw00.choi@samsung.com>

-- 
Best Regards,
Chanwoo Choi
Samsung Electronics

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks
  2020-08-26 17:15 ` [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks Sylwester Nawrocki
                     ` (3 preceding siblings ...)
  2020-08-29 12:46   ` Chanwoo Choi
@ 2020-09-08 23:01   ` Rob Herring
  2020-09-15 13:06   ` Sylwester Nawrocki
  5 siblings, 0 replies; 13+ messages in thread
From: Rob Herring @ 2020-09-08 23:01 UTC (permalink / raw)
  To: Sylwester Nawrocki
  Cc: linux-clk, m.szyprowski, Stephen Boyd, linux-samsung-soc,
	Kukjin Kim, Tomasz Figa, Michael Turquette, Chanwoo Choi,
	Krzysztof Kozlowski, devicetree, linux-kernel, Rob Herring,
	linux-arm-kernel, b.zolnierkie

On Wed, 26 Aug 2020 19:15:27 +0200, Sylwester Nawrocki wrote:
> Add clock ID definitions for the CPU parent clocks for SoCs
> which don't have such definitions yet. This will allow us to
> reference the parent clocks directly by cached struct clk_hw
> pointers in the clock provider, rather than doing clk lookup
> by name.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
>  include/dt-bindings/clock/exynos5250.h | 4 +++-
>  include/dt-bindings/clock/exynos5420.h | 5 +++++
>  2 files changed, 8 insertions(+), 1 deletion(-)
> 

Acked-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks
  2020-08-26 17:15 ` [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks Sylwester Nawrocki
                     ` (4 preceding siblings ...)
  2020-09-08 23:01   ` Rob Herring
@ 2020-09-15 13:06   ` Sylwester Nawrocki
  5 siblings, 0 replies; 13+ messages in thread
From: Sylwester Nawrocki @ 2020-09-15 13:06 UTC (permalink / raw)
  To: linux-clk
  Cc: Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Kukjin Kim, Krzysztof Kozlowski, Rob Herring, linux-samsung-soc,
	linux-kernel, linux-arm-kernel, devicetree, m.szyprowski,
	b.zolnierkie

On 26.08.2020 19:15, Sylwester Nawrocki wrote:
> Add clock ID definitions for the CPU parent clocks for SoCs
> which don't have such definitions yet. This will allow us to
> reference the parent clocks directly by cached struct clk_hw
> pointers in the clock provider, rather than doing clk lookup
> by name.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>

Applied.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/3] clk: samsung: exynos5420/5250: Add IDs to the CPU parent clk definitions
  2020-08-26 17:15     ` [PATCH 2/3] clk: samsung: exynos5420/5250: Add IDs to the CPU parent clk definitions Sylwester Nawrocki
  2020-08-28  6:33       ` Krzysztof Kozlowski
  2020-08-29 12:46       ` Chanwoo Choi
@ 2020-09-15 13:20       ` Sylwester Nawrocki
  2 siblings, 0 replies; 13+ messages in thread
From: Sylwester Nawrocki @ 2020-09-15 13:20 UTC (permalink / raw)
  To: linux-clk
  Cc: Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Kukjin Kim, Krzysztof Kozlowski, Rob Herring, linux-samsung-soc,
	linux-kernel, linux-arm-kernel, devicetree, m.szyprowski,
	b.zolnierkie

On 26.08.2020 19:15, Sylwester Nawrocki wrote:
> Use non-zero clock IDs in definitions of the CPU parent clocks
> for exynos5420, exynos5250 SoCs. This will allow us to reference
> the parent clocks directly in the driver by cached struct clk_hw
> pointers, rather than doing clk lookup by name.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>

Applied.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/3] clk: samsung: Use cached clk_hws instead of __clk_lookup() calls
  2020-08-26 17:15     ` [PATCH 3/3] clk: samsung: Use cached clk_hws instead of __clk_lookup() calls Sylwester Nawrocki
  2020-08-28  6:40       ` Krzysztof Kozlowski
  2020-08-29 12:47       ` Chanwoo Choi
@ 2020-09-15 13:21       ` Sylwester Nawrocki
  2 siblings, 0 replies; 13+ messages in thread
From: Sylwester Nawrocki @ 2020-09-15 13:21 UTC (permalink / raw)
  To: linux-clk
  Cc: Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Kukjin Kim, Krzysztof Kozlowski, Rob Herring, linux-samsung-soc,
	linux-kernel, linux-arm-kernel, devicetree, m.szyprowski,
	b.zolnierkie

On 26.08.2020 19:15, Sylwester Nawrocki wrote:
> For the CPU clock registration two parent clocks are required, these
> are now being passed as struct clk_hw pointers, rather than by the
> global scope names. That allows us to avoid  __clk_lookup() calls
> and simplifies a bit the CPU clock registration function.
> While at it drop unneeded extern keyword in the function declaration.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>

Applied.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-09-16  0:39 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20200826171539eucas1p2e999972d3e7dd6dd701e312548933e87@eucas1p2.samsung.com>
2020-08-26 17:15 ` [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks Sylwester Nawrocki
     [not found]   ` <CGME20200826171552eucas1p28ace6b1efbcdab420aaa4458ac8bad08@eucas1p2.samsung.com>
2020-08-26 17:15     ` [PATCH 2/3] clk: samsung: exynos5420/5250: Add IDs to the CPU parent clk definitions Sylwester Nawrocki
2020-08-28  6:33       ` Krzysztof Kozlowski
2020-08-29 12:46       ` Chanwoo Choi
2020-09-15 13:20       ` Sylwester Nawrocki
     [not found]   ` <CGME20200826171557eucas1p13c960ad6abc814cf53bc125f5c4d9b39@eucas1p1.samsung.com>
2020-08-26 17:15     ` [PATCH 3/3] clk: samsung: Use cached clk_hws instead of __clk_lookup() calls Sylwester Nawrocki
2020-08-28  6:40       ` Krzysztof Kozlowski
2020-08-29 12:47       ` Chanwoo Choi
2020-09-15 13:21       ` Sylwester Nawrocki
2020-08-28  6:32   ` [PATCH 1/3] clk: samsung: Add clk ID definitions for the CPU parent clocks Krzysztof Kozlowski
2020-08-29 12:46   ` Chanwoo Choi
2020-09-08 23:01   ` Rob Herring
2020-09-15 13:06   ` Sylwester Nawrocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).