diff mbox

[RESEND,v3] clk: return probe defer when DT clock not yet ready

Message ID 20140208132446.2A26694003E@smtp1-g21.free.fr (mailing list archive)
State New, archived
Headers show

Commit Message

Jean-Francois Moine Nov. 25, 2013, 6:47 p.m. UTC
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 <moinejf@free.fr>
---
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(-)

Comments

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 <moinejf@free.fr>

Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Tested-by: Sylwester Nawrocki <s.nawrocki@samsung.com>

Hope this can be merged for v3.15. Thanks.
Jean-Francois Moine Feb. 19, 2014, 6:03 p.m. UTC | #2
On Mon, 25 Nov 2013 19:47:04 +0100
Jean-Francois Moine <moinejf@free.fr> 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?
Russell King - ARM Linux Feb. 19, 2014, 6:53 p.m. UTC | #3
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 <moinejf@free.fr> 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.
Mike Turquette Feb. 25, 2014, 1:02 a.m. UTC | #4
Quoting Russell King - ARM Linux (2014-02-19 10:53:15)
> 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 <moinejf@free.fr> 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.

I only saw this patch now thanks to another thread. I have some
aggressive mail filtering going on and I guess maybe the original ASoC
subject had something to do with that?

Oh well. I've pull this patch into clk-next for testing. I'll see if
anything goes boom.

Thanks for the patch and longsuffering patience!

Regards,
Mike

> 
> Thanks.
>
diff mbox

Patch

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);