All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
To: Stephen Boyd <sboyd@kernel.org>
Cc: mazziesaccount@gmail.com, mturquette@baylibre.com,
	cw00.choi@samsung.com, krzk@kernel.org, b.zolnierkie@samsung.com,
	linux@armlinux.org.uk, andy.gross@linaro.org,
	david.brown@linaro.org, pavel@ucw.cz, andrew.smirnov@gmail.com,
	pombredanne@nexb.com, sjhuang@iluvatar.ai, akshu.agrawal@amd.com,
	djkurtz@chromium.org, rafael.j.wysocki@intel.com,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v6 03/10] clk: of-provider: look at parent if registered device has no provider info
Date: Wed, 5 Dec 2018 20:28:32 +0200	[thread overview]
Message-ID: <20181205182832.GH31204@localhost.localdomain> (raw)
In-Reply-To: <20181205182058.GF31204@localhost.localdomain>

On Wed, Dec 05, 2018 at 08:20:58PM +0200, Matti Vaittinen wrote:
> On Wed, Dec 05, 2018 at 09:19:33AM -0800, Stephen Boyd wrote:
> > Quoting Matti Vaittinen (2018-12-04 23:00:46)
> > > But that won't solve the issue if we don't do "dirty hacks" in driver.
> > > The devm interface still only gets the device-pointer, not the DT node
> > > as argument. And if DT node for device is NULL (like in MFD cases) -
> > > then there is no parent node, only parent device with a node. For plain
> > > of_clk_add_provider() the driver can just give the parent's node pointer
> > > in cases where it knows it is the parent who has the provider data in
> > > DT. But our original problem is in devm interfaces.
> > > 
> > 
> > I was misunderstanding the MFD design. Should still work though, so I
> > squashed this into the patch to clean things up a bit. Does this work
> > for you?
> 
> This looks good to me. Especially changing the of_is_clk_provider to
> get_clk_provider_node which allows to remove some repetition. If you
> apply this then I will drop my patch from the series. Just please let me
> know. I will cook version 7 of the series at Friday - tomorrow is the
> independence day in Finland and I'll be offline =)

I see you already applied the follow-up patches to clk-next. Please note
that most of the clean-ups did require this functionality as they used
the parent DT node.

> 
> Thanks!
> 
> > 
> > ------8<-----
> > 
> > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> > index bb689161f0f5..6ff852bda892 100644
> > --- a/drivers/clk/clk.c
> > +++ b/drivers/clk/clk.c
> > @@ -3893,9 +3893,23 @@ static void devm_of_clk_release_provider(struct device *dev, void *res)
> >  	of_clk_del_provider(*(struct device_node **)res);
> >  }
> >  
> > -static int of_is_clk_provider(struct device_node *np)
> > +/*
> > + * We allow a child device to use its parent device as the clock provider node
> > + * for cases like MFD sub-devices where the child device driver wants to use
> > + * devm_*() APIs but not list the device in DT as a sub-node.
> > + */
> > +static struct device_node *get_clk_provider_node(struct device *dev)
> >  {
> > -	return !!of_find_property(np, "#clock-cells", NULL);
> > +	struct device_node *np, *parent_np;
> > +
> > +	np = dev->of_node;
> > +	parent_np = dev->parent ? dev->parent->of_node : NULL;
> > +
> > +	if (!of_find_property(np, "#clock-cells", NULL))
> > +		if (of_find_property(parent_np, "#clock-cells", NULL))
> > +			np = parent_np;
> > +
> > +	return np;
> >  }
> >  
> >  /**
> > @@ -3920,17 +3934,12 @@ int devm_of_clk_add_hw_provider(struct device *dev,
> >  	struct device_node **ptr, *np;
> >  	int ret;
> >  
> > -	np = dev->of_node;
> > -
> > -	if (!of_is_clk_provider(dev->of_node))
> > -		if (of_is_clk_provider(dev->parent->of_node))
> > -			np = dev->parent->of_node;
> > -
> >  	ptr = devres_alloc(devm_of_clk_release_provider, sizeof(*ptr),
> >  			   GFP_KERNEL);
> >  	if (!ptr)
> >  		return -ENOMEM;
> >  
> > +	np = get_clk_provider_node(dev);
> >  	ret = of_clk_add_hw_provider(np, get, data);
> >  	if (!ret) {
> >  		*ptr = np;
> > @@ -3981,13 +3990,8 @@ static int devm_clk_provider_match(struct device *dev, void *res, void *data)
> >  void devm_of_clk_del_provider(struct device *dev)
> >  {
> >  	int ret;
> > -	struct device_node *np;
> > -
> > -	np = dev->of_node;
> > +	struct device_node *np = get_clk_provider_node(dev);
> >  
> > -	if (!of_is_clk_provider(dev->of_node))
> > -		if (of_is_clk_provider(dev->parent->of_node))
> > -			np = dev->parent->of_node;
> >  	ret = devres_release(dev, devm_of_clk_release_provider,
> >  			     devm_clk_provider_match, np);
> >  
> > 
> 
> -- 
> Matti Vaittinen
> ROHM Semiconductors
> 
> ~~~ "I don't think so," said Rene Descartes.  Just then, he vanished ~~~

-- 
Matti Vaittinen
ROHM Semiconductors

~~~ "I don't think so," said Rene Descartes.  Just then, he vanished ~~~

WARNING: multiple messages have this Message-ID (diff)
From: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
To: Stephen Boyd <sboyd@kernel.org>
Cc: david.brown@linaro.org, rafael.j.wysocki@intel.com,
	linux-clk@vger.kernel.org, b.zolnierkie@samsung.com,
	andrew.smirnov@gmail.com, linux-kernel@vger.kernel.org,
	mturquette@baylibre.com, mazziesaccount@gmail.com,
	linux-doc@vger.kernel.org, linux@armlinux.org.uk,
	krzk@kernel.org, akshu.agrawal@amd.com, cw00.choi@samsung.com,
	djkurtz@chromium.org, pavel@ucw.cz, pombredanne@nexb.com,
	andy.gross@linaro.org, sjhuang@iluvatar.ai,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v6 03/10] clk: of-provider: look at parent if registered device has no provider info
Date: Wed, 5 Dec 2018 20:28:32 +0200	[thread overview]
Message-ID: <20181205182832.GH31204@localhost.localdomain> (raw)
In-Reply-To: <20181205182058.GF31204@localhost.localdomain>

On Wed, Dec 05, 2018 at 08:20:58PM +0200, Matti Vaittinen wrote:
> On Wed, Dec 05, 2018 at 09:19:33AM -0800, Stephen Boyd wrote:
> > Quoting Matti Vaittinen (2018-12-04 23:00:46)
> > > But that won't solve the issue if we don't do "dirty hacks" in driver.
> > > The devm interface still only gets the device-pointer, not the DT node
> > > as argument. And if DT node for device is NULL (like in MFD cases) -
> > > then there is no parent node, only parent device with a node. For plain
> > > of_clk_add_provider() the driver can just give the parent's node pointer
> > > in cases where it knows it is the parent who has the provider data in
> > > DT. But our original problem is in devm interfaces.
> > > 
> > 
> > I was misunderstanding the MFD design. Should still work though, so I
> > squashed this into the patch to clean things up a bit. Does this work
> > for you?
> 
> This looks good to me. Especially changing the of_is_clk_provider to
> get_clk_provider_node which allows to remove some repetition. If you
> apply this then I will drop my patch from the series. Just please let me
> know. I will cook version 7 of the series at Friday - tomorrow is the
> independence day in Finland and I'll be offline =)

I see you already applied the follow-up patches to clk-next. Please note
that most of the clean-ups did require this functionality as they used
the parent DT node.

> 
> Thanks!
> 
> > 
> > ------8<-----
> > 
> > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> > index bb689161f0f5..6ff852bda892 100644
> > --- a/drivers/clk/clk.c
> > +++ b/drivers/clk/clk.c
> > @@ -3893,9 +3893,23 @@ static void devm_of_clk_release_provider(struct device *dev, void *res)
> >  	of_clk_del_provider(*(struct device_node **)res);
> >  }
> >  
> > -static int of_is_clk_provider(struct device_node *np)
> > +/*
> > + * We allow a child device to use its parent device as the clock provider node
> > + * for cases like MFD sub-devices where the child device driver wants to use
> > + * devm_*() APIs but not list the device in DT as a sub-node.
> > + */
> > +static struct device_node *get_clk_provider_node(struct device *dev)
> >  {
> > -	return !!of_find_property(np, "#clock-cells", NULL);
> > +	struct device_node *np, *parent_np;
> > +
> > +	np = dev->of_node;
> > +	parent_np = dev->parent ? dev->parent->of_node : NULL;
> > +
> > +	if (!of_find_property(np, "#clock-cells", NULL))
> > +		if (of_find_property(parent_np, "#clock-cells", NULL))
> > +			np = parent_np;
> > +
> > +	return np;
> >  }
> >  
> >  /**
> > @@ -3920,17 +3934,12 @@ int devm_of_clk_add_hw_provider(struct device *dev,
> >  	struct device_node **ptr, *np;
> >  	int ret;
> >  
> > -	np = dev->of_node;
> > -
> > -	if (!of_is_clk_provider(dev->of_node))
> > -		if (of_is_clk_provider(dev->parent->of_node))
> > -			np = dev->parent->of_node;
> > -
> >  	ptr = devres_alloc(devm_of_clk_release_provider, sizeof(*ptr),
> >  			   GFP_KERNEL);
> >  	if (!ptr)
> >  		return -ENOMEM;
> >  
> > +	np = get_clk_provider_node(dev);
> >  	ret = of_clk_add_hw_provider(np, get, data);
> >  	if (!ret) {
> >  		*ptr = np;
> > @@ -3981,13 +3990,8 @@ static int devm_clk_provider_match(struct device *dev, void *res, void *data)
> >  void devm_of_clk_del_provider(struct device *dev)
> >  {
> >  	int ret;
> > -	struct device_node *np;
> > -
> > -	np = dev->of_node;
> > +	struct device_node *np = get_clk_provider_node(dev);
> >  
> > -	if (!of_is_clk_provider(dev->of_node))
> > -		if (of_is_clk_provider(dev->parent->of_node))
> > -			np = dev->parent->of_node;
> >  	ret = devres_release(dev, devm_of_clk_release_provider,
> >  			     devm_clk_provider_match, np);
> >  
> > 
> 
> -- 
> Matti Vaittinen
> ROHM Semiconductors
> 
> ~~~ "I don't think so," said Rene Descartes.  Just then, he vanished ~~~

-- 
Matti Vaittinen
ROHM Semiconductors

~~~ "I don't think so," said Rene Descartes.  Just then, he vanished ~~~

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2018-12-05 18:28 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-04 11:31 [PATCH v6 00/10] clk: clkdev/of_clk - add managed lookup and provider registrations Matti Vaittinen
2018-12-04 11:31 ` Matti Vaittinen
2018-12-04 11:33 ` [PATCH v6 01/10] clkdev: add managed clkdev lookup registration Matti Vaittinen
2018-12-04 11:33   ` Matti Vaittinen
2018-12-04 11:33 ` [PATCH v6 02/10] clk: Add kerneldoc to managed of-provider interfaces Matti Vaittinen
2018-12-04 11:33   ` Matti Vaittinen
2018-12-04 19:39   ` Stephen Boyd
2018-12-04 19:39     ` Stephen Boyd
2018-12-04 11:34 ` [PATCH v6 03/10] clk: of-provider: look at parent if registered device has no provider info Matti Vaittinen
2018-12-04 11:34   ` Matti Vaittinen
2018-12-04 19:38   ` Stephen Boyd
2018-12-04 19:38     ` Stephen Boyd
2018-12-05  7:00     ` Matti Vaittinen
2018-12-05  7:00       ` Matti Vaittinen
2018-12-05 17:19       ` Stephen Boyd
2018-12-05 17:19         ` Stephen Boyd
2018-12-05 18:20         ` Matti Vaittinen
2018-12-05 18:20           ` Matti Vaittinen
2018-12-05 18:28           ` Matti Vaittinen [this message]
2018-12-05 18:28             ` Matti Vaittinen
2018-12-05 19:35           ` Stephen Boyd
2018-12-05 19:35             ` Stephen Boyd
2018-12-04 11:35 ` [PATCH v6 04/10] clk: clk-max77686: Clean clkdev lookup leak and use devm Matti Vaittinen
2018-12-04 11:35   ` Matti Vaittinen
2018-12-04 11:37 ` [PATCH v6 05/10] clk: clk-st: avoid clkdev lookup leak at remove Matti Vaittinen
2018-12-04 11:37   ` Matti Vaittinen
2018-12-04 11:37 ` [PATCH v6 06/10] clk: clk-hi655x: Free of_provider " Matti Vaittinen
2018-12-04 11:37   ` Matti Vaittinen
2018-12-05 17:25   ` Stephen Boyd
2018-12-05 17:25     ` Stephen Boyd
2018-12-04 11:38 ` [PATCH v6 07/10] clk: rk808: use managed version of of_provider registration Matti Vaittinen
2018-12-04 11:38   ` Matti Vaittinen
2018-12-05 17:25   ` Stephen Boyd
2018-12-05 17:25     ` Stephen Boyd
2018-12-04 11:38 ` [PATCH v6 08/10] clk: clk-twl6040: Free of_provider at remove Matti Vaittinen
2018-12-04 11:38   ` Matti Vaittinen
2018-12-05 17:25   ` Stephen Boyd
2018-12-05 17:25     ` Stephen Boyd
2018-12-04 11:39 ` [PATCH v6 09/10] clk: apcs-msm8916: simplify probe cleanup by using devm Matti Vaittinen
2018-12-04 11:39   ` Matti Vaittinen
2018-12-05 17:25   ` Stephen Boyd
2018-12-05 17:25     ` Stephen Boyd
2018-12-04 11:39 ` [PATCH v6 10/10] clk: bd718x7: Initial support for ROHM bd71837/bd71847 PMIC clock Matti Vaittinen
2018-12-04 11:39   ` Matti Vaittinen
2018-12-05 17:28   ` Stephen Boyd
2018-12-05 17:28     ` Stephen Boyd
2018-12-05 18:24     ` Matti Vaittinen
2018-12-05 18:24       ` Matti Vaittinen
2018-12-05 20:17     ` Pavel Machek
2018-12-05 20:17       ` Pavel Machek
2018-12-04 11:45 ` [PATCH v6 00/10] clk: clkdev/of_clk - add managed lookup and provider registrations Matti Vaittinen
2018-12-04 11:45   ` Matti Vaittinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181205182832.GH31204@localhost.localdomain \
    --to=matti.vaittinen@fi.rohmeurope.com \
    --cc=akshu.agrawal@amd.com \
    --cc=andrew.smirnov@gmail.com \
    --cc=andy.gross@linaro.org \
    --cc=b.zolnierkie@samsung.com \
    --cc=cw00.choi@samsung.com \
    --cc=david.brown@linaro.org \
    --cc=djkurtz@chromium.org \
    --cc=krzk@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mazziesaccount@gmail.com \
    --cc=mturquette@baylibre.com \
    --cc=pavel@ucw.cz \
    --cc=pombredanne@nexb.com \
    --cc=rafael.j.wysocki@intel.com \
    --cc=sboyd@kernel.org \
    --cc=sjhuang@iluvatar.ai \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.