* [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks @ 2021-10-13 22:10 ` Will McVicker 2021-10-13 22:10 ` [PATCH v3 1/2] [RFT] clk: samsung: add " Will McVicker ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Will McVicker @ 2021-10-13 22:10 UTC (permalink / raw) To: Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd, Krzysztof Kozlowski Cc: kernel-team, Will McVicker, linux-samsung-soc, linux-clk, linux-kernel, linux-arm-kernel These two patches were originally a part of the series [1]. They add support to the common samsung clock driver to parse and register the CPU clocks when provided. This allows for the samsung clock drivers to simply provide a `struct samsung_cpu_clock` to `struct samsung_cmu_info` and then call samsung_cmu_register_one(). With this new support, we can now get rid of the custom apollo and atlas CLK_OF_DECLARE init functions. Since I don't have the hardware to test these, I'm including the RFT tag to try and get help testing and verifying these. [1] https://lore.kernel.org/all/20210928235635.1348330-4-willmcvicker@google.com/ Will McVicker (2): [RFT] clk: samsung: add support for CPU clocks [RFT] clk: samsung: exynos5433: update apollo and atlas clock probing drivers/clk/samsung/clk-cpu.c | 26 ++++++ drivers/clk/samsung/clk-exynos5433.c | 120 +++++++++++---------------- drivers/clk/samsung/clk.c | 2 + drivers/clk/samsung/clk.h | 26 ++++++ 4 files changed, 102 insertions(+), 72 deletions(-) -- 2.33.0.882.g93a45727a2-goog ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 1/2] [RFT] clk: samsung: add support for CPU clocks 2021-10-13 22:10 ` [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks Will McVicker @ 2021-10-13 22:10 ` Will McVicker 2021-10-14 1:49 ` Stephen Boyd 2021-10-13 22:10 ` [PATCH v3 2/2] [RFT] clk: samsung: exynos5433: update apollo and atlas clock probing Will McVicker 2021-10-14 8:33 ` [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks Marek Szyprowski 2 siblings, 1 reply; 9+ messages in thread From: Will McVicker @ 2021-10-13 22:10 UTC (permalink / raw) To: Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd, Krzysztof Kozlowski Cc: kernel-team, Will McVicker, linux-samsung-soc, linux-clk, linux-kernel, linux-arm-kernel Adds 'struct samsung_cpu_clock' and corresponding CPU clock registration function to the samsung common clk driver. This allows samsung clock drivers to register their CPU clocks with the samsung_cmu_register_one() API. Currently the exynos5433 apollo and atlas clks have their own custom init functions to handle registering their CPU clocks. With this patch we can drop their custom CLK_OF_DECLARE functions and directly call samsung_cmu_register_one(). Signed-off-by: Will McVicker <willmcvicker@google.com> --- drivers/clk/samsung/clk-cpu.c | 26 ++++++++++++++++++++++++++ drivers/clk/samsung/clk.c | 2 ++ drivers/clk/samsung/clk.h | 26 ++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/drivers/clk/samsung/clk-cpu.c b/drivers/clk/samsung/clk-cpu.c index 00ef4d1b0888..b5017934fc41 100644 --- a/drivers/clk/samsung/clk-cpu.c +++ b/drivers/clk/samsung/clk-cpu.c @@ -469,3 +469,29 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx, kfree(cpuclk); return ret; } + +void samsung_clk_register_cpu(struct samsung_clk_provider *ctx, + const struct samsung_cpu_clock *list, unsigned int nr_clk) +{ + unsigned int idx; + unsigned int num_cfgs; + struct clk *parent_clk, *alt_parent_clk; + const struct clk_hw *parent_clk_hw = NULL; + const struct clk_hw *alt_parent_clk_hw = NULL; + + for (idx = 0; idx < nr_clk; idx++, list++) { + /* find count of configuration rates in cfg */ + for (num_cfgs = 0; list->cfg[num_cfgs].prate != 0; ) + num_cfgs++; + + parent_clk = __clk_lookup(list->parent_name); + if (parent_clk) + parent_clk_hw = __clk_get_hw(parent_clk); + alt_parent_clk = __clk_lookup(list->alt_parent_name); + if (alt_parent_clk) + alt_parent_clk_hw = __clk_get_hw(alt_parent_clk); + + exynos_register_cpu_clock(ctx, list->id, list->name, parent_clk_hw, + alt_parent_clk_hw, list->offset, list->cfg, num_cfgs, list->flags); + } +} diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c index 1949ae7851b2..336243c6f120 100644 --- a/drivers/clk/samsung/clk.c +++ b/drivers/clk/samsung/clk.c @@ -378,6 +378,8 @@ struct samsung_clk_provider * __init samsung_cmu_register_one( samsung_clk_extended_sleep_init(reg_base, cmu->clk_regs, cmu->nr_clk_regs, cmu->suspend_regs, cmu->nr_suspend_regs); + if (cmu->cpu_clks) + samsung_clk_register_cpu(ctx, cmu->cpu_clks, cmu->nr_cpu_clks); samsung_clk_of_add_provider(np, ctx); diff --git a/drivers/clk/samsung/clk.h b/drivers/clk/samsung/clk.h index c1e1a6b2f499..a52a38cc1740 100644 --- a/drivers/clk/samsung/clk.h +++ b/drivers/clk/samsung/clk.h @@ -271,6 +271,27 @@ struct samsung_pll_clock { __PLL(_typ, _id, _name, _pname, CLK_GET_RATE_NOCACHE, _lock, \ _con, _rtable) +struct samsung_cpu_clock { + unsigned int id; + const char *name; + const char *parent_name; + const char *alt_parent_name; + unsigned long flags; + int offset; + const struct exynos_cpuclk_cfg_data *cfg; +}; + +#define CPU_CLK(_id, _name, _pname, _apname, _flags, _offset, _cfg) \ + { \ + .id = _id, \ + .name = _name, \ + .parent_name = _pname, \ + .alt_parent_name = _apname, \ + .flags = _flags, \ + .offset = _offset, \ + .cfg = _cfg, \ + } + struct samsung_clock_reg_cache { struct list_head node; void __iomem *reg_base; @@ -301,6 +322,9 @@ struct samsung_cmu_info { unsigned int nr_fixed_factor_clks; /* total number of clocks with IDs assigned*/ unsigned int nr_clk_ids; + /* list of cpu clocks and respective count */ + const struct samsung_cpu_clock *cpu_clks; + unsigned int nr_cpu_clks; /* list and number of clocks registers */ const unsigned long *clk_regs; @@ -350,6 +374,8 @@ extern void __init samsung_clk_register_gate(struct samsung_clk_provider *ctx, extern void __init samsung_clk_register_pll(struct samsung_clk_provider *ctx, const struct samsung_pll_clock *pll_list, unsigned int nr_clk, void __iomem *base); +extern void __init samsung_clk_register_cpu(struct samsung_clk_provider *ctx, + const struct samsung_cpu_clock *list, unsigned int nr_clk); extern struct samsung_clk_provider __init *samsung_cmu_register_one( struct device_node *, -- 2.33.0.882.g93a45727a2-goog ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/2] [RFT] clk: samsung: add support for CPU clocks 2021-10-13 22:10 ` [PATCH v3 1/2] [RFT] clk: samsung: add " Will McVicker @ 2021-10-14 1:49 ` Stephen Boyd 2021-10-14 19:35 ` Will McVicker 0 siblings, 1 reply; 9+ messages in thread From: Stephen Boyd @ 2021-10-14 1:49 UTC (permalink / raw) To: Chanwoo Choi, Krzysztof Kozlowski, Michael Turquette, Sylwester Nawrocki, Tomasz Figa, Will McVicker Cc: kernel-team, Will McVicker, linux-samsung-soc, linux-clk, linux-kernel, linux-arm-kernel Quoting Will McVicker (2021-10-13 15:10:19) > diff --git a/drivers/clk/samsung/clk-cpu.c b/drivers/clk/samsung/clk-cpu.c > index 00ef4d1b0888..b5017934fc41 100644 > --- a/drivers/clk/samsung/clk-cpu.c > +++ b/drivers/clk/samsung/clk-cpu.c > @@ -469,3 +469,29 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx, > kfree(cpuclk); > return ret; > } > + > +void samsung_clk_register_cpu(struct samsung_clk_provider *ctx, > + const struct samsung_cpu_clock *list, unsigned int nr_clk) > +{ > + unsigned int idx; > + unsigned int num_cfgs; > + struct clk *parent_clk, *alt_parent_clk; > + const struct clk_hw *parent_clk_hw = NULL; > + const struct clk_hw *alt_parent_clk_hw = NULL; > + > + for (idx = 0; idx < nr_clk; idx++, list++) { > + /* find count of configuration rates in cfg */ > + for (num_cfgs = 0; list->cfg[num_cfgs].prate != 0; ) > + num_cfgs++; > + > + parent_clk = __clk_lookup(list->parent_name); Please stop using __clk_lookup() > + if (parent_clk) > + parent_clk_hw = __clk_get_hw(parent_clk); > + alt_parent_clk = __clk_lookup(list->alt_parent_name); Can the DT binding be updated? > + if (alt_parent_clk) > + alt_parent_clk_hw = __clk_get_hw(alt_parent_clk); > + > + exynos_register_cpu_clock(ctx, list->id, list->name, parent_clk_hw, > + alt_parent_clk_hw, list->offset, list->cfg, num_cfgs, list->flags); > + } > +} > diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c > index 1949ae7851b2..336243c6f120 100644 > --- a/drivers/clk/samsung/clk.c > +++ b/drivers/clk/samsung/clk.c > @@ -378,6 +378,8 @@ struct samsung_clk_provider * __init samsung_cmu_register_one( > samsung_clk_extended_sleep_init(reg_base, > cmu->clk_regs, cmu->nr_clk_regs, > cmu->suspend_regs, cmu->nr_suspend_regs); > + if (cmu->cpu_clks) > + samsung_clk_register_cpu(ctx, cmu->cpu_clks, cmu->nr_cpu_clks); > > samsung_clk_of_add_provider(np, ctx); > > diff --git a/drivers/clk/samsung/clk.h b/drivers/clk/samsung/clk.h > index c1e1a6b2f499..a52a38cc1740 100644 > --- a/drivers/clk/samsung/clk.h > +++ b/drivers/clk/samsung/clk.h > @@ -271,6 +271,27 @@ struct samsung_pll_clock { > __PLL(_typ, _id, _name, _pname, CLK_GET_RATE_NOCACHE, _lock, \ > _con, _rtable) > > +struct samsung_cpu_clock { > + unsigned int id; > + const char *name; > + const char *parent_name; > + const char *alt_parent_name; > + unsigned long flags; > + int offset; > + const struct exynos_cpuclk_cfg_data *cfg; > +}; > + > +#define CPU_CLK(_id, _name, _pname, _apname, _flags, _offset, _cfg) \ > + { \ > + .id = _id, \ > + .name = _name, \ > + .parent_name = _pname, \ > + .alt_parent_name = _apname, \ > + .flags = _flags, \ > + .offset = _offset, \ > + .cfg = _cfg, \ > + } > + > struct samsung_clock_reg_cache { > struct list_head node; > void __iomem *reg_base; > @@ -301,6 +322,9 @@ struct samsung_cmu_info { > unsigned int nr_fixed_factor_clks; > /* total number of clocks with IDs assigned*/ > unsigned int nr_clk_ids; > + /* list of cpu clocks and respective count */ > + const struct samsung_cpu_clock *cpu_clks; > + unsigned int nr_cpu_clks; > > /* list and number of clocks registers */ > const unsigned long *clk_regs; > @@ -350,6 +374,8 @@ extern void __init samsung_clk_register_gate(struct samsung_clk_provider *ctx, > extern void __init samsung_clk_register_pll(struct samsung_clk_provider *ctx, > const struct samsung_pll_clock *pll_list, > unsigned int nr_clk, void __iomem *base); > +extern void __init samsung_clk_register_cpu(struct samsung_clk_provider *ctx, __init in header files is useless. > + const struct samsung_cpu_clock *list, unsigned int nr_clk); > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/2] [RFT] clk: samsung: add support for CPU clocks 2021-10-14 1:49 ` Stephen Boyd @ 2021-10-14 19:35 ` Will McVicker 2021-10-14 21:40 ` Stephen Boyd 0 siblings, 1 reply; 9+ messages in thread From: Will McVicker @ 2021-10-14 19:35 UTC (permalink / raw) To: Stephen Boyd Cc: Chanwoo Choi, Krzysztof Kozlowski, Michael Turquette, Sylwester Nawrocki, Tomasz Figa, Cc: Android Kernel, linux-samsung-soc, linux-clk, Linux Kernel Mailing List, Linux ARM On Wed, Oct 13, 2021 at 6:49 PM Stephen Boyd <sboyd@kernel.org> wrote: > > Quoting Will McVicker (2021-10-13 15:10:19) > > diff --git a/drivers/clk/samsung/clk-cpu.c b/drivers/clk/samsung/clk-cpu.c > > index 00ef4d1b0888..b5017934fc41 100644 > > --- a/drivers/clk/samsung/clk-cpu.c > > +++ b/drivers/clk/samsung/clk-cpu.c > > @@ -469,3 +469,29 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx, > > kfree(cpuclk); > > return ret; > > } > > + > > +void samsung_clk_register_cpu(struct samsung_clk_provider *ctx, > > + const struct samsung_cpu_clock *list, unsigned int nr_clk) > > +{ > > + unsigned int idx; > > + unsigned int num_cfgs; > > + struct clk *parent_clk, *alt_parent_clk; > > + const struct clk_hw *parent_clk_hw = NULL; > > + const struct clk_hw *alt_parent_clk_hw = NULL; > > + > > + for (idx = 0; idx < nr_clk; idx++, list++) { > > + /* find count of configuration rates in cfg */ > > + for (num_cfgs = 0; list->cfg[num_cfgs].prate != 0; ) > > + num_cfgs++; > > + > > + parent_clk = __clk_lookup(list->parent_name); > > Please stop using __clk_lookup() Thanks, I believe I have a way around this. I'll fix this up in the follow-up version. > > > + if (parent_clk) > > + parent_clk_hw = __clk_get_hw(parent_clk); > > + alt_parent_clk = __clk_lookup(list->alt_parent_name); > > Can the DT binding be updated? Are you referring to removing alt_parent and just adding it as another parent clock? > > > + if (alt_parent_clk) > > + alt_parent_clk_hw = __clk_get_hw(alt_parent_clk); > > + > > + exynos_register_cpu_clock(ctx, list->id, list->name, parent_clk_hw, > > + alt_parent_clk_hw, list->offset, list->cfg, num_cfgs, list->flags); > > + } > > +} > > diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c > > index 1949ae7851b2..336243c6f120 100644 > > --- a/drivers/clk/samsung/clk.c > > +++ b/drivers/clk/samsung/clk.c > > @@ -378,6 +378,8 @@ struct samsung_clk_provider * __init samsung_cmu_register_one( > > samsung_clk_extended_sleep_init(reg_base, > > cmu->clk_regs, cmu->nr_clk_regs, > > cmu->suspend_regs, cmu->nr_suspend_regs); > > + if (cmu->cpu_clks) > > + samsung_clk_register_cpu(ctx, cmu->cpu_clks, cmu->nr_cpu_clks); > > > > samsung_clk_of_add_provider(np, ctx); > > > > diff --git a/drivers/clk/samsung/clk.h b/drivers/clk/samsung/clk.h > > index c1e1a6b2f499..a52a38cc1740 100644 > > --- a/drivers/clk/samsung/clk.h > > +++ b/drivers/clk/samsung/clk.h > > @@ -271,6 +271,27 @@ struct samsung_pll_clock { > > __PLL(_typ, _id, _name, _pname, CLK_GET_RATE_NOCACHE, _lock, \ > > _con, _rtable) > > > > +struct samsung_cpu_clock { > > + unsigned int id; > > + const char *name; > > + const char *parent_name; > > + const char *alt_parent_name; > > + unsigned long flags; > > + int offset; > > + const struct exynos_cpuclk_cfg_data *cfg; > > +}; > > + > > +#define CPU_CLK(_id, _name, _pname, _apname, _flags, _offset, _cfg) \ > > + { \ > > + .id = _id, \ > > + .name = _name, \ > > + .parent_name = _pname, \ > > + .alt_parent_name = _apname, \ > > + .flags = _flags, \ > > + .offset = _offset, \ > > + .cfg = _cfg, \ > > + } > > + > > struct samsung_clock_reg_cache { > > struct list_head node; > > void __iomem *reg_base; > > @@ -301,6 +322,9 @@ struct samsung_cmu_info { > > unsigned int nr_fixed_factor_clks; > > /* total number of clocks with IDs assigned*/ > > unsigned int nr_clk_ids; > > + /* list of cpu clocks and respective count */ > > + const struct samsung_cpu_clock *cpu_clks; > > + unsigned int nr_cpu_clks; > > > > /* list and number of clocks registers */ > > const unsigned long *clk_regs; > > @@ -350,6 +374,8 @@ extern void __init samsung_clk_register_gate(struct samsung_clk_provider *ctx, > > extern void __init samsung_clk_register_pll(struct samsung_clk_provider *ctx, > > const struct samsung_pll_clock *pll_list, > > unsigned int nr_clk, void __iomem *base); > > +extern void __init samsung_clk_register_cpu(struct samsung_clk_provider *ctx, > > __init in header files is useless. Thanks for pointing that out. Looks like this header needs some cleaning up. > > > + const struct samsung_cpu_clock *list, unsigned int nr_clk); > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/2] [RFT] clk: samsung: add support for CPU clocks 2021-10-14 19:35 ` Will McVicker @ 2021-10-14 21:40 ` Stephen Boyd 2021-10-15 14:36 ` Sylwester Nawrocki 0 siblings, 1 reply; 9+ messages in thread From: Stephen Boyd @ 2021-10-14 21:40 UTC (permalink / raw) To: Will McVicker Cc: Chanwoo Choi, Krzysztof Kozlowski, Michael Turquette, Sylwester Nawrocki, Tomasz Figa, Android Kernel, linux-samsung-soc, linux-clk, Linux Kernel Mailing List, Linux ARM, Quoting Will McVicker (2021-10-14 12:35:57) > On Wed, Oct 13, 2021 at 6:49 PM Stephen Boyd <sboyd@kernel.org> wrote: > > > > Quoting Will McVicker (2021-10-13 15:10:19) > > > diff --git a/drivers/clk/samsung/clk-cpu.c b/drivers/clk/samsung/clk-cpu.c > > > index 00ef4d1b0888..b5017934fc41 100644 > > > --- a/drivers/clk/samsung/clk-cpu.c > > > +++ b/drivers/clk/samsung/clk-cpu.c > > > @@ -469,3 +469,29 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx, > > > kfree(cpuclk); > > > return ret; > > > } > > > + > > > +void samsung_clk_register_cpu(struct samsung_clk_provider *ctx, > > > + const struct samsung_cpu_clock *list, unsigned int nr_clk) > > > +{ > > > + unsigned int idx; > > > + unsigned int num_cfgs; > > > + struct clk *parent_clk, *alt_parent_clk; > > > + const struct clk_hw *parent_clk_hw = NULL; > > > + const struct clk_hw *alt_parent_clk_hw = NULL; > > > + > > > + for (idx = 0; idx < nr_clk; idx++, list++) { > > > + /* find count of configuration rates in cfg */ > > > + for (num_cfgs = 0; list->cfg[num_cfgs].prate != 0; ) > > > + num_cfgs++; > > > + > > > + parent_clk = __clk_lookup(list->parent_name); > > > > Please stop using __clk_lookup() > > Thanks, I believe I have a way around this. I'll fix this up in the > follow-up version. Great! > > > > > > + if (parent_clk) > > > + parent_clk_hw = __clk_get_hw(parent_clk); > > > + alt_parent_clk = __clk_lookup(list->alt_parent_name); > > > > Can the DT binding be updated? > > Are you referring to removing alt_parent and just adding it as another > parent clock? > I was wondering if this is an external clk that feeds into here or if it is all internal to the clk controller. It sounds like it's all internal to the clk controller? In which case a binding update isn't needed. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 1/2] [RFT] clk: samsung: add support for CPU clocks 2021-10-14 21:40 ` Stephen Boyd @ 2021-10-15 14:36 ` Sylwester Nawrocki 0 siblings, 0 replies; 9+ messages in thread From: Sylwester Nawrocki @ 2021-10-15 14:36 UTC (permalink / raw) To: Stephen Boyd, Will McVicker Cc: Chanwoo Choi, Krzysztof Kozlowski, Michael Turquette, Sylwester Nawrocki, Tomasz Figa, Android Kernel, linux-samsung-soc, linux-clk, Linux Kernel Mailing List, Linux ARM On 14.10.2021 23:40, Stephen Boyd wrote: > Quoting Will McVicker (2021-10-14 12:35:57) >> On Wed, Oct 13, 2021 at 6:49 PM Stephen Boyd <sboyd@kernel.org> wrote: >>> Quoting Will McVicker (2021-10-13 15:10:19) >>>> diff --git a/drivers/clk/samsung/clk-cpu.c b/drivers/clk/samsung/clk-cpu.c >>> >>>> + if (parent_clk) >>>> + parent_clk_hw = __clk_get_hw(parent_clk); >>>> + alt_parent_clk = __clk_lookup(list->alt_parent_name); >>> >>> Can the DT binding be updated? >> >> Are you referring to removing alt_parent and just adding it as another >> parent clock? >> > > I was wondering if this is an external clk that feeds into here or if it > is all internal to the clk controller. It sounds like it's all internal > to the clk controller? In which case a binding update isn't needed. Yes, I double checked and the cpu parent clocks are always internal to the clock provider. There is one exception where physically a parent clock comes from other CMU (exynos5250), but in that case all CMUs are modeled as a single clk provider anyway. Thus we don't need a binding update. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 2/2] [RFT] clk: samsung: exynos5433: update apollo and atlas clock probing 2021-10-13 22:10 ` [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks Will McVicker 2021-10-13 22:10 ` [PATCH v3 1/2] [RFT] clk: samsung: add " Will McVicker @ 2021-10-13 22:10 ` Will McVicker 2021-10-14 8:33 ` [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks Marek Szyprowski 2 siblings, 0 replies; 9+ messages in thread From: Will McVicker @ 2021-10-13 22:10 UTC (permalink / raw) To: Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd, Krzysztof Kozlowski Cc: kernel-team, Will McVicker, linux-samsung-soc, linux-clk, linux-kernel, linux-arm-kernel Use the samsung common clk driver to initialize and probe the apollo and atlas clocks. This removes their custom init functions and uses the samsung_cmu_register_one() instead. Signed-off-by: Will McVicker <willmcvicker@google.com> --- drivers/clk/samsung/clk-exynos5433.c | 120 +++++++++++---------------- 1 file changed, 48 insertions(+), 72 deletions(-) diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c index f203074d858b..0ef809c9e2da 100644 --- a/drivers/clk/samsung/clk-exynos5433.c +++ b/drivers/clk/samsung/clk-exynos5433.c @@ -3675,44 +3675,32 @@ static const struct exynos_cpuclk_cfg_data exynos5433_apolloclk_d[] __initconst { 0 }, }; +static const struct samsung_cpu_clock apollo_cpu_clks[] __initconst = { + CPU_CLK(CLK_SCLK_APOLLO, "apolloclk", "mout_apollo_pll", + "mout_bus_pll_apollo_user", + CLK_CPU_HAS_E5433_REGS_LAYOUT, 0x200, + exynos5433_apolloclk_d), +}; + +static const struct samsung_cmu_info apollo_cmu_info __initconst = { + .pll_clks = apollo_pll_clks, + .nr_pll_clks = ARRAY_SIZE(apollo_pll_clks), + .mux_clks = apollo_mux_clks, + .nr_mux_clks = ARRAY_SIZE(apollo_mux_clks), + .div_clks = apollo_div_clks, + .nr_div_clks = ARRAY_SIZE(apollo_div_clks), + .gate_clks = apollo_gate_clks, + .nr_gate_clks = ARRAY_SIZE(apollo_gate_clks), + .cpu_clks = apollo_cpu_clks, + .nr_cpu_clks = ARRAY_SIZE(apollo_cpu_clks), + .nr_clk_ids = APOLLO_NR_CLK, + .clk_regs = apollo_clk_regs, + .nr_clk_regs = ARRAY_SIZE(apollo_clk_regs), +}; + 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) { - panic("%s: failed to map registers\n", __func__); - return; - } - - ctx = samsung_clk_init(np, reg_base, APOLLO_NR_CLK); - if (!ctx) { - panic("%s: unable to allocate ctx\n", __func__); - return; - } - - samsung_clk_register_pll(ctx, apollo_pll_clks, - ARRAY_SIZE(apollo_pll_clks), reg_base); - samsung_clk_register_mux(ctx, apollo_mux_clks, - ARRAY_SIZE(apollo_mux_clks)); - samsung_clk_register_div(ctx, apollo_div_clks, - ARRAY_SIZE(apollo_div_clks)); - 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", - 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); - - samsung_clk_sleep_init(reg_base, apollo_clk_regs, - ARRAY_SIZE(apollo_clk_regs)); - - samsung_clk_of_add_provider(np, ctx); + samsung_cmu_register_one(np, &apollo_cmu_info); } CLK_OF_DECLARE(exynos5433_cmu_apollo, "samsung,exynos5433-cmu-apollo", exynos5433_cmu_apollo_init); @@ -3932,44 +3920,32 @@ static const struct exynos_cpuclk_cfg_data exynos5433_atlasclk_d[] __initconst = { 0 }, }; -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) { - panic("%s: failed to map registers\n", __func__); - return; - } - - ctx = samsung_clk_init(np, reg_base, ATLAS_NR_CLK); - if (!ctx) { - panic("%s: unable to allocate ctx\n", __func__); - return; - } - - samsung_clk_register_pll(ctx, atlas_pll_clks, - ARRAY_SIZE(atlas_pll_clks), reg_base); - samsung_clk_register_mux(ctx, atlas_mux_clks, - ARRAY_SIZE(atlas_mux_clks)); - samsung_clk_register_div(ctx, atlas_div_clks, - ARRAY_SIZE(atlas_div_clks)); - 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", - 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); +static const struct samsung_cpu_clock atlas_cpu_clks[] __initconst = { + CPU_CLK(CLK_SCLK_ATLAS, "atlasclk", "mout_atlas_pll", + "mout_bus_pll_atlas_user", + CLK_CPU_HAS_E5433_REGS_LAYOUT, 0x200, + exynos5433_atlasclk_d), +}; - samsung_clk_sleep_init(reg_base, atlas_clk_regs, - ARRAY_SIZE(atlas_clk_regs)); +static const struct samsung_cmu_info atlas_cmu_info __initconst = { + .pll_clks = atlas_pll_clks, + .nr_pll_clks = ARRAY_SIZE(atlas_pll_clks), + .mux_clks = atlas_mux_clks, + .nr_mux_clks = ARRAY_SIZE(atlas_mux_clks), + .div_clks = atlas_div_clks, + .nr_div_clks = ARRAY_SIZE(atlas_div_clks), + .gate_clks = atlas_gate_clks, + .nr_gate_clks = ARRAY_SIZE(atlas_gate_clks), + .cpu_clks = atlas_cpu_clks, + .nr_cpu_clks = ARRAY_SIZE(atlas_cpu_clks), + .nr_clk_ids = ATLAS_NR_CLK, + .clk_regs = atlas_clk_regs, + .nr_clk_regs = ARRAY_SIZE(atlas_clk_regs), +}; - samsung_clk_of_add_provider(np, ctx); +static void __init exynos5433_cmu_atlas_init(struct device_node *np) +{ + samsung_cmu_register_one(np, &atlas_cmu_info); } CLK_OF_DECLARE(exynos5433_cmu_atlas, "samsung,exynos5433-cmu-atlas", exynos5433_cmu_atlas_init); -- 2.33.0.882.g93a45727a2-goog ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks 2021-10-13 22:10 ` [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks Will McVicker 2021-10-13 22:10 ` [PATCH v3 1/2] [RFT] clk: samsung: add " Will McVicker 2021-10-13 22:10 ` [PATCH v3 2/2] [RFT] clk: samsung: exynos5433: update apollo and atlas clock probing Will McVicker @ 2021-10-14 8:33 ` Marek Szyprowski 2021-10-14 19:46 ` Will McVicker 2 siblings, 1 reply; 9+ messages in thread From: Marek Szyprowski @ 2021-10-14 8:33 UTC (permalink / raw) To: Will McVicker, Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd, Krzysztof Kozlowski Cc: kernel-team, linux-samsung-soc, linux-clk, linux-kernel, linux-arm-kernel On 14.10.2021 00:10, Will McVicker wrote: > These two patches were originally a part of the series [1]. They add > support to the common samsung clock driver to parse and register the > CPU clocks when provided. This allows for the samsung clock drivers to > simply provide a `struct samsung_cpu_clock` to `struct samsung_cmu_info` > and then call samsung_cmu_register_one(). With this new support, we can > now get rid of the custom apollo and atlas CLK_OF_DECLARE init functions. > > Since I don't have the hardware to test these, I'm including the RFT tag > to try and get help testing and verifying these. > > [1] https://protect2.fireeye.com/v1/url?k=91329df7-cea9a478-913316b8-0cc47a31307c-8e0b8e6442100c5a&q=1&e=50af1e33-8bdf-429f-9e54-434d425998d6&u=https%3A%2F%2Flore.kernel.org%2Fall%2F20210928235635.1348330-4-willmcvicker%40google.com%2F Works fine on my Exynos5433 TM2e test board. Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> > Will McVicker (2): > [RFT] clk: samsung: add support for CPU clocks > [RFT] clk: samsung: exynos5433: update apollo and atlas clock probing > > drivers/clk/samsung/clk-cpu.c | 26 ++++++ > drivers/clk/samsung/clk-exynos5433.c | 120 +++++++++++---------------- > drivers/clk/samsung/clk.c | 2 + > drivers/clk/samsung/clk.h | 26 ++++++ > 4 files changed, 102 insertions(+), 72 deletions(-) > Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks 2021-10-14 8:33 ` [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks Marek Szyprowski @ 2021-10-14 19:46 ` Will McVicker 0 siblings, 0 replies; 9+ messages in thread From: Will McVicker @ 2021-10-14 19:46 UTC (permalink / raw) To: Marek Szyprowski Cc: Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd, Krzysztof Kozlowski, Cc: Android Kernel, linux-samsung-soc, linux-clk, Linux Kernel Mailing List, Linux ARM On Thu, Oct 14, 2021 at 1:33 AM Marek Szyprowski <m.szyprowski@samsung.com> wrote: > > On 14.10.2021 00:10, Will McVicker wrote: > > These two patches were originally a part of the series [1]. They add > > support to the common samsung clock driver to parse and register the > > CPU clocks when provided. This allows for the samsung clock drivers to > > simply provide a `struct samsung_cpu_clock` to `struct samsung_cmu_info` > > and then call samsung_cmu_register_one(). With this new support, we can > > now get rid of the custom apollo and atlas CLK_OF_DECLARE init functions. > > > > Since I don't have the hardware to test these, I'm including the RFT tag > > to try and get help testing and verifying these. > > > > [1] https://protect2.fireeye.com/v1/url?k=91329df7-cea9a478-913316b8-0cc47a31307c-8e0b8e6442100c5a&q=1&e=50af1e33-8bdf-429f-9e54-434d425998d6&u=https%3A%2F%2Flore.kernel.org%2Fall%2F20210928235635.1348330-4-willmcvicker%40google.com%2F > > Works fine on my Exynos5433 TM2e test board. > > Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> Thanks for testing! > > > Will McVicker (2): > > [RFT] clk: samsung: add support for CPU clocks > > [RFT] clk: samsung: exynos5433: update apollo and atlas clock probing > > > > drivers/clk/samsung/clk-cpu.c | 26 ++++++ > > drivers/clk/samsung/clk-exynos5433.c | 120 +++++++++++---------------- > > drivers/clk/samsung/clk.c | 2 + > > drivers/clk/samsung/clk.h | 26 ++++++ > > 4 files changed, 102 insertions(+), 72 deletions(-) > > > Best regards > -- > Marek Szyprowski, PhD > Samsung R&D Institute Poland > ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-10-15 14:36 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20211013221032eucas1p1d8e2fcc36d3f021aa86cb846df0ed6da@eucas1p1.samsung.com> 2021-10-13 22:10 ` [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks Will McVicker 2021-10-13 22:10 ` [PATCH v3 1/2] [RFT] clk: samsung: add " Will McVicker 2021-10-14 1:49 ` Stephen Boyd 2021-10-14 19:35 ` Will McVicker 2021-10-14 21:40 ` Stephen Boyd 2021-10-15 14:36 ` Sylwester Nawrocki 2021-10-13 22:10 ` [PATCH v3 2/2] [RFT] clk: samsung: exynos5433: update apollo and atlas clock probing Will McVicker 2021-10-14 8:33 ` [RFT PATCH v3 0/2] clk: samsung: add common support for CPU clocks Marek Szyprowski 2021-10-14 19:46 ` Will McVicker
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).