Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1643728 > unrolled thread
| Started by | Leo Yan <leo.yan@linaro.org> |
|---|---|
| First post | 2017-05-18 04:00 +0200 |
| Last post | 2017-05-19 04:10 +0200 |
| Articles | 5 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v2 1/2] clk: Hi3660: change to register crgctrl clock with CLK_OF_DECLARE_DRIVER Leo Yan <leo.yan@linaro.org> - 2017-05-18 04:00 +0200
Re: [PATCH v2 1/2] clk: Hi3660: change to register crgctrl clock with CLK_OF_DECLARE_DRIVER Daniel Lezcano <daniel.lezcano@linaro.org> - 2017-05-18 11:40 +0200
Re: [PATCH v2 1/2] clk: Hi3660: change to register crgctrl clock with CLK_OF_DECLARE_DRIVER Leo Yan <leo.yan@linaro.org> - 2017-05-18 11:50 +0200
Re: [PATCH v2 1/2] clk: Hi3660: change to register crgctrl clock with CLK_OF_DECLARE_DRIVER Stephen Boyd <sboyd@codeaurora.org> - 2017-05-19 04:00 +0200
Re: [PATCH v2 1/2] clk: Hi3660: change to register crgctrl clock with CLK_OF_DECLARE_DRIVER Leo Yan <leo.yan@linaro.org> - 2017-05-19 04:10 +0200
| From | Leo Yan <leo.yan@linaro.org> |
|---|---|
| Date | 2017-05-18 04:00 +0200 |
| Subject | [PATCH v2 1/2] clk: Hi3660: change to register crgctrl clock with CLK_OF_DECLARE_DRIVER |
| Message-ID | <tIiTn-2In-3@gated-at.bofh.it> |
The timer will register into system at very early phase at kernel boot;
if timer needs to use clock, the clock should be get ready in function
of_clk_init() so later the timer driver probe can retrieve clock
successfully. This is finished in below flow on arm64:
start_kernel()
`-> time_init()
`-> of_clk_init(NULL) => register timer's clock
`-> clocksource_probe() => register timer
On Hi3660 the sp804 timer uses clock "osc32k", this clock is registered
as platform driver rather than CLK_OF_DECLARE_DRIVER method. As result,
sp804 timer probe returns failure due if cannot bind clock properly.
To fix the failure, this patch is to change crgctrl clock registration
from platform driver to CLK_OF_DECLARE_DRIVER method so the clocks can
be registered ahead with function of_clk_init() and then timer driver
can use it.
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
drivers/clk/hisilicon/clk-hi3660.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/hisilicon/clk-hi3660.c b/drivers/clk/hisilicon/clk-hi3660.c
index fd5ce7f..4e5713b 100644
--- a/drivers/clk/hisilicon/clk-hi3660.c
+++ b/drivers/clk/hisilicon/clk-hi3660.c
@@ -547,10 +547,10 @@ static void hi3660_clk_crgctrl_init(struct device_node *np)
ARRAY_SIZE(hi3660_crgctrl_divider_clks),
clk_data);
}
+CLK_OF_DECLARE_DRIVER(hi3660_clk_crgctrl, "hisilicon,hi3660-crgctrl",
+ hi3660_clk_crgctrl_init);
static const struct of_device_id hi3660_clk_match_table[] = {
- { .compatible = "hisilicon,hi3660-crgctrl",
- .data = hi3660_clk_crgctrl_init },
{ .compatible = "hisilicon,hi3660-pctrl",
.data = hi3660_clk_pctrl_init },
{ .compatible = "hisilicon,hi3660-pmuctrl",
--
1.9.1
[toc] | [next] | [standalone]
| From | Daniel Lezcano <daniel.lezcano@linaro.org> |
|---|---|
| Date | 2017-05-18 11:40 +0200 |
| Subject | Re: [PATCH v2 1/2] clk: Hi3660: change to register crgctrl clock with CLK_OF_DECLARE_DRIVER |
| Message-ID | <tIq4x-8sq-3@gated-at.bofh.it> |
| In reply to | #1643728 |
On Thu, May 18, 2017 at 09:50:46AM +0800, Leo Yan wrote:
> The timer will register into system at very early phase at kernel boot;
> if timer needs to use clock, the clock should be get ready in function
> of_clk_init() so later the timer driver probe can retrieve clock
> successfully. This is finished in below flow on arm64:
>
> start_kernel()
> `-> time_init()
> `-> of_clk_init(NULL) => register timer's clock
> `-> clocksource_probe() => register timer
>
> On Hi3660 the sp804 timer uses clock "osc32k", this clock is registered
> as platform driver rather than CLK_OF_DECLARE_DRIVER method. As result,
> sp804 timer probe returns failure due if cannot bind clock properly.
> To fix the failure, this patch is to change crgctrl clock registration
> from platform driver to CLK_OF_DECLARE_DRIVER method so the clocks can
> be registered ahead with function of_clk_init() and then timer driver
> can use it.
>
> Signed-off-by: Leo Yan <leo.yan@linaro.org>
> ---
> drivers/clk/hisilicon/clk-hi3660.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/clk/hisilicon/clk-hi3660.c b/drivers/clk/hisilicon/clk-hi3660.c
> index fd5ce7f..4e5713b 100644
> --- a/drivers/clk/hisilicon/clk-hi3660.c
> +++ b/drivers/clk/hisilicon/clk-hi3660.c
> @@ -547,10 +547,10 @@ static void hi3660_clk_crgctrl_init(struct device_node *np)
> ARRAY_SIZE(hi3660_crgctrl_divider_clks),
> clk_data);
> }
> +CLK_OF_DECLARE_DRIVER(hi3660_clk_crgctrl, "hisilicon,hi3660-crgctrl",
> + hi3660_clk_crgctrl_init);
>
> static const struct of_device_id hi3660_clk_match_table[] = {
> - { .compatible = "hisilicon,hi3660-crgctrl",
> - .data = hi3660_clk_crgctrl_init },
> { .compatible = "hisilicon,hi3660-pctrl",
> .data = hi3660_clk_pctrl_init },
> { .compatible = "hisilicon,hi3660-pmuctrl",
Why not do the change for all the clocks and remove the
hi3660_clk_match_table[]? and all the related platform driver code?
That will be consistent with the other clk-hi* drivers.
--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
[toc] | [prev] | [next] | [standalone]
| From | Leo Yan <leo.yan@linaro.org> |
|---|---|
| Date | 2017-05-18 11:50 +0200 |
| Subject | Re: [PATCH v2 1/2] clk: Hi3660: change to register crgctrl clock with CLK_OF_DECLARE_DRIVER |
| Message-ID | <tIqed-aM-1@gated-at.bofh.it> |
| In reply to | #1644014 |
Hi Daniel,
On Thu, May 18, 2017 at 11:32:26AM +0200, Daniel Lezcano wrote:
> On Thu, May 18, 2017 at 09:50:46AM +0800, Leo Yan wrote:
> > The timer will register into system at very early phase at kernel boot;
> > if timer needs to use clock, the clock should be get ready in function
> > of_clk_init() so later the timer driver probe can retrieve clock
> > successfully. This is finished in below flow on arm64:
> >
> > start_kernel()
> > `-> time_init()
> > `-> of_clk_init(NULL) => register timer's clock
> > `-> clocksource_probe() => register timer
> >
> > On Hi3660 the sp804 timer uses clock "osc32k", this clock is registered
> > as platform driver rather than CLK_OF_DECLARE_DRIVER method. As result,
> > sp804 timer probe returns failure due if cannot bind clock properly.
> > To fix the failure, this patch is to change crgctrl clock registration
> > from platform driver to CLK_OF_DECLARE_DRIVER method so the clocks can
> > be registered ahead with function of_clk_init() and then timer driver
> > can use it.
> >
> > Signed-off-by: Leo Yan <leo.yan@linaro.org>
> > ---
> > drivers/clk/hisilicon/clk-hi3660.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/clk/hisilicon/clk-hi3660.c b/drivers/clk/hisilicon/clk-hi3660.c
> > index fd5ce7f..4e5713b 100644
> > --- a/drivers/clk/hisilicon/clk-hi3660.c
> > +++ b/drivers/clk/hisilicon/clk-hi3660.c
> > @@ -547,10 +547,10 @@ static void hi3660_clk_crgctrl_init(struct device_node *np)
> > ARRAY_SIZE(hi3660_crgctrl_divider_clks),
> > clk_data);
> > }
> > +CLK_OF_DECLARE_DRIVER(hi3660_clk_crgctrl, "hisilicon,hi3660-crgctrl",
> > + hi3660_clk_crgctrl_init);
> >
> > static const struct of_device_id hi3660_clk_match_table[] = {
> > - { .compatible = "hisilicon,hi3660-crgctrl",
> > - .data = hi3660_clk_crgctrl_init },
> > { .compatible = "hisilicon,hi3660-pctrl",
> > .data = hi3660_clk_pctrl_init },
> > { .compatible = "hisilicon,hi3660-pmuctrl",
>
> Why not do the change for all the clocks and remove the
> hi3660_clk_match_table[]? and all the related platform driver code?
>
> That will be consistent with the other clk-hi* drivers.
I checked a bit with Stephen on IRC, follow the suggestion to 'split
the clks are registsered between CLK_OF_DECLARE_DRIVER() and driver
probe so that the ones you need really early are done through the
CLK_OF path and the other ones are done through regular driver probe'.
Also checked for mainline kernel, now there have some examples,
like: drivers/clk/mediatek/clk-mt2701.c.
Thanks,
Leo Yan
[toc] | [prev] | [next] | [standalone]
| From | Stephen Boyd <sboyd@codeaurora.org> |
|---|---|
| Date | 2017-05-19 04:00 +0200 |
| Subject | Re: [PATCH v2 1/2] clk: Hi3660: change to register crgctrl clock with CLK_OF_DECLARE_DRIVER |
| Message-ID | <tIFmV-3k7-3@gated-at.bofh.it> |
| In reply to | #1643728 |
On 05/18, Leo Yan wrote:
> diff --git a/drivers/clk/hisilicon/clk-hi3660.c b/drivers/clk/hisilicon/clk-hi3660.c
> index fd5ce7f..4e5713b 100644
> --- a/drivers/clk/hisilicon/clk-hi3660.c
> +++ b/drivers/clk/hisilicon/clk-hi3660.c
> @@ -547,10 +547,10 @@ static void hi3660_clk_crgctrl_init(struct device_node *np)
> ARRAY_SIZE(hi3660_crgctrl_divider_clks),
> clk_data);
> }
> +CLK_OF_DECLARE_DRIVER(hi3660_clk_crgctrl, "hisilicon,hi3660-crgctrl",
> + hi3660_clk_crgctrl_init);
>
> static const struct of_device_id hi3660_clk_match_table[] = {
> - { .compatible = "hisilicon,hi3660-crgctrl",
> - .data = hi3660_clk_crgctrl_init },
I'm slightly confused. CLK_OF_DECLARE_DRIVER is for when a
platform driver _and_ CLK_OF_DELARE need to "probe" the same
device node. But in this patch, the compatible string is being
deleted from the driver's match table. Also, are all the
registered in hi3660_clk_crgctrl_init() actually needed for the
timer? If only a subset, then I would expect to split the code
and have the CLK_OF_DECLARE_DRIVER() path register just the clks
that matter for the timer, and then leave the rest of the clks to
be registered by the probe of the platform driver.
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
[toc] | [prev] | [next] | [standalone]
| From | Leo Yan <leo.yan@linaro.org> |
|---|---|
| Date | 2017-05-19 04:10 +0200 |
| Subject | Re: [PATCH v2 1/2] clk: Hi3660: change to register crgctrl clock with CLK_OF_DECLARE_DRIVER |
| Message-ID | <tIFwC-3CA-19@gated-at.bofh.it> |
| In reply to | #1645113 |
On Thu, May 18, 2017 at 06:51:37PM -0700, Stephen Boyd wrote:
> On 05/18, Leo Yan wrote:
> > diff --git a/drivers/clk/hisilicon/clk-hi3660.c b/drivers/clk/hisilicon/clk-hi3660.c
> > index fd5ce7f..4e5713b 100644
> > --- a/drivers/clk/hisilicon/clk-hi3660.c
> > +++ b/drivers/clk/hisilicon/clk-hi3660.c
> > @@ -547,10 +547,10 @@ static void hi3660_clk_crgctrl_init(struct device_node *np)
> > ARRAY_SIZE(hi3660_crgctrl_divider_clks),
> > clk_data);
> > }
> > +CLK_OF_DECLARE_DRIVER(hi3660_clk_crgctrl, "hisilicon,hi3660-crgctrl",
> > + hi3660_clk_crgctrl_init);
> >
> > static const struct of_device_id hi3660_clk_match_table[] = {
> > - { .compatible = "hisilicon,hi3660-crgctrl",
> > - .data = hi3660_clk_crgctrl_init },
>
> I'm slightly confused. CLK_OF_DECLARE_DRIVER is for when a
> platform driver _and_ CLK_OF_DELARE need to "probe" the same
> device node. But in this patch, the compatible string is being
> deleted from the driver's match table. Also, are all the
> registered in hi3660_clk_crgctrl_init() actually needed for the
> timer?
No.
> If only a subset, then I would expect to split the code
> and have the CLK_OF_DECLARE_DRIVER() path register just the clks
> that matter for the timer, and then leave the rest of the clks to
> be registered by the probe of the platform driver.
I'm also puzzled if need divide crgctrl clock into two parts. Thanks
for suggestion, will do this.
Thanks,
Leo Yan
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web