2014-02-08 13:25:07

by Jean-Francois Moine

[permalink] [raw]
Subject: [PATCH RESEND v3] clk: return probe defer when DT clock not yet ready

At probe time, a clock device may not be ready when some other device
wants to use it.

This patch lets the functions clk_get/devm_clk_get return a probe defer
when the clock is defined in the DT but not yet available.

Signed-off-by: Jean-Francois Moine <[email protected]>
---
resend v3:
- base kernel 3.14.0-rc1
- __clk_get() failure is fixed
resend v2: remove ASoc from subject (thank you, Mark)
resend: - patch subject change from
[PATCH v3 1/2] ASoC: kirkwood: clk: probe defer when clock not yet ready
- base kernel 3.13.0-rc1
v2: fix __clk_get() failure (from Russell King)
---
drivers/clk/clk.c | 2 +-
drivers/clk/clkdev.c | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 5517944..32d84e9 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -2472,7 +2472,7 @@ EXPORT_SYMBOL_GPL(of_clk_del_provider);
struct clk *__of_clk_get_from_provider(struct of_phandle_args *clkspec)
{
struct of_clk_provider *provider;
- struct clk *clk = ERR_PTR(-ENOENT);
+ struct clk *clk = ERR_PTR(-EPROBE_DEFER);

/* Check if we have such a provider in our array */
list_for_each_entry(provider, &of_clk_providers, link) {
diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c
index 48f6721..a360b2e 100644
--- a/drivers/clk/clkdev.c
+++ b/drivers/clk/clkdev.c
@@ -167,6 +167,8 @@ struct clk *clk_get(struct device *dev, const char *con_id)
clk = of_clk_get_by_name(dev->of_node, con_id);
if (!IS_ERR(clk))
return clk;
+ if (PTR_ERR(clk) == -EPROBE_DEFER)
+ return clk;
}

return clk_get_sys(dev_id, con_id);
--
1.9.0.rc3


2014-02-18 13:23:37

by Sylwester Nawrocki

[permalink] [raw]
Subject: Re: [PATCH RESEND v3] clk: return probe defer when DT clock not yet ready

On 25/11/13 19:47, Jean-Francois Moine wrote:
> At probe time, a clock device may not be ready when some other device
> wants to use it.
>
> This patch lets the functions clk_get/devm_clk_get return a probe defer
> when the clock is defined in the DT but not yet available.
>
> Signed-off-by: Jean-Francois Moine <[email protected]>

Reviewed-by: Sylwester Nawrocki <[email protected]>
Tested-by: Sylwester Nawrocki <[email protected]>

Hope this can be merged for v3.15. Thanks.

2014-02-19 18:01:53

by Jean-Francois Moine

[permalink] [raw]
Subject: Re: [PATCH RESEND v3] clk: return probe defer when DT clock not yet ready

On Mon, 25 Nov 2013 19:47:04 +0100
Jean-Francois Moine <[email protected]> wrote:

> At probe time, a clock device may not be ready when some other device
> wants to use it.
>
> This patch lets the functions clk_get/devm_clk_get return a probe defer
> when the clock is defined in the DT but not yet available.

Hi Mike,

Any news about this patch?

--
Ken ar c'hentaƱ | ** Breizh ha Linux atav! **
Jef | http://moinejf.free.fr/

2014-02-19 18:53:25

by Russell King - ARM Linux

[permalink] [raw]
Subject: Re: [PATCH RESEND v3] clk: return probe defer when DT clock not yet ready

On Wed, Feb 19, 2014 at 07:03:05PM +0100, Jean-Francois Moine wrote:
> On Mon, 25 Nov 2013 19:47:04 +0100
> Jean-Francois Moine <[email protected]> wrote:
>
> > At probe time, a clock device may not be ready when some other device
> > wants to use it.
> >
> > This patch lets the functions clk_get/devm_clk_get return a probe defer
> > when the clock is defined in the DT but not yet available.
>
> Hi Mike,
>
> Any news about this patch?

Mike,

Can you please have a look at this patch so that either you or I can take
this. It /is/ required so that subsystems can correctly identify whether
a clock is missing because it's not specified in DT, or whether the clock
is missing because it's specified in DT but doesn't yet exist.

This patch has been hanging around for ages and deserves some attention.

Thanks.

--
FTTC broadband for 0.8mile line: 5.8Mbps down 500kbps up. Estimation
in database were 13.1 to 19Mbit for a good line, about 7.5+ for a bad.
Estimate before purchase was "up to 13.2Mbit".


Attachments:
(No filename) (1.23 kB)