* [PATCH] of/device: Don't register disabled devices
@ 2011-01-03 23:01 Grant Likely
2011-01-05 22:53 ` Blanchard, Hollis
0 siblings, 1 reply; 4+ messages in thread
From: Grant Likely @ 2011-01-03 23:01 UTC (permalink / raw)
To: devicetree-discuss, linuxppc-dev, linux-kernel
Cc: Scott Wood, Benjamin Herrenschmidt, David Gibson,
Hollis Blanchard, Deepak Saxena
Device nodes with the property status="disabled" are not usable and so
don't register them when parsing the device tree for devices.
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Cc: Hollis Blanchard <hollis_blanchard@mentor.com>
Cc: Deepak Saxena <deepak_saxena@mentor.com>
Cc: Scott Wood <scottwood@freescale.com>,
Cc: David Gibson <david@gibson.dropbear.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
drivers/of/platform.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 5b4a07f..c01cd1a 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -633,6 +633,9 @@ EXPORT_SYMBOL(of_device_alloc);
* @np: pointer to node to create device for
* @bus_id: name to assign device
* @parent: Linux device model parent device.
+ *
+ * Returns pointer to created platform device, or NULL if a device was not
+ * registered. Unavailable devices will not get registered.
*/
struct platform_device *of_platform_device_create(struct device_node *np,
const char *bus_id,
@@ -640,6 +643,9 @@ struct platform_device *of_platform_device_create(struct device_node *np,
{
struct platform_device *dev;
+ if (!of_device_is_available(np))
+ return NULL;
+
dev = of_device_alloc(np, bus_id, parent);
if (!dev)
return NULL;
@@ -683,8 +689,9 @@ static int of_platform_bus_create(const struct device_node *bus,
pr_debug(" create child: %s\n", child->full_name);
dev = of_platform_device_create(child, NULL, parent);
if (dev == NULL)
- rc = -ENOMEM;
- else if (!of_match_node(matches, child))
+ continue;
+
+ if (!of_match_node(matches, child))
continue;
if (rc == 0) {
pr_debug(" and sub busses\n");
@@ -733,10 +740,9 @@ int of_platform_bus_probe(struct device_node *root,
if (of_match_node(matches, root)) {
pr_debug(" root match, create all sub devices\n");
dev = of_platform_device_create(root, NULL, parent);
- if (dev == NULL) {
- rc = -ENOMEM;
+ if (dev == NULL)
goto bail;
- }
+
pr_debug(" create all sub busses\n");
rc = of_platform_bus_create(root, matches, &dev->dev);
goto bail;
@@ -748,9 +754,9 @@ int of_platform_bus_probe(struct device_node *root,
pr_debug(" match: %s\n", child->full_name);
dev = of_platform_device_create(child, NULL, parent);
if (dev == NULL)
- rc = -ENOMEM;
- else
- rc = of_platform_bus_create(child, matches, &dev->dev);
+ continue;
+
+ rc = of_platform_bus_create(child, matches, &dev->dev);
if (rc) {
of_node_put(child);
break;
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] of/device: Don't register disabled devices
2011-01-03 23:01 [PATCH] of/device: Don't register disabled devices Grant Likely
@ 2011-01-05 22:53 ` Blanchard, Hollis
2011-01-05 23:35 ` David Gibson
0 siblings, 1 reply; 4+ messages in thread
From: Blanchard, Hollis @ 2011-01-05 22:53 UTC (permalink / raw)
To: Grant Likely
Cc: devicetree-discuss, linuxppc-dev, linux-kernel, Scott Wood,
Benjamin Herrenschmidt, David Gibson, Saxena, Deepak
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 2981 bytes --]
On 01/03/2011 03:01 PM, Grant Likely wrote:
> Device nodes with the property status="disabled" are not usable and so
> don't register them when parsing the device tree for devices.
>
This is great and all, but a fair amount of driver code explicitly
searches the tree, rather than registering a probe function. That's why
our earlier patches in this area were more comprehensive.
What are your thoughts on handling those cases?
Hollis Blanchard
Mentor Graphics, Embedded Systems Division
> ---
> drivers/of/platform.c | 22 ++++++++++++++--------
> 1 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/of/platform.c b/drivers/of/platform.c
> index 5b4a07f..c01cd1a 100644
> --- a/drivers/of/platform.c
> +++ b/drivers/of/platform.c
> @@ -633,6 +633,9 @@ EXPORT_SYMBOL(of_device_alloc);
> * @np: pointer to node to create device for
> * @bus_id: name to assign device
> * @parent: Linux device model parent device.
> + *
> + * Returns pointer to created platform device, or NULL if a device was not
> + * registered. Unavailable devices will not get registered.
> */
> struct platform_device *of_platform_device_create(struct device_node *np,
> const char *bus_id,
> @@ -640,6 +643,9 @@ struct platform_device *of_platform_device_create(struct device_node *np,
> {
> struct platform_device *dev;
>
> + if (!of_device_is_available(np))
> + return NULL;
> +
> dev = of_device_alloc(np, bus_id, parent);
> if (!dev)
> return NULL;
> @@ -683,8 +689,9 @@ static int of_platform_bus_create(const struct device_node *bus,
> pr_debug(" create child: %s\n", child->full_name);
> dev = of_platform_device_create(child, NULL, parent);
> if (dev == NULL)
> - rc = -ENOMEM;
> - else if (!of_match_node(matches, child))
> + continue;
> +
> + if (!of_match_node(matches, child))
> continue;
> if (rc == 0) {
> pr_debug(" and sub busses\n");
> @@ -733,10 +740,9 @@ int of_platform_bus_probe(struct device_node *root,
> if (of_match_node(matches, root)) {
> pr_debug(" root match, create all sub devices\n");
> dev = of_platform_device_create(root, NULL, parent);
> - if (dev == NULL) {
> - rc = -ENOMEM;
> + if (dev == NULL)
> goto bail;
> - }
> +
> pr_debug(" create all sub busses\n");
> rc = of_platform_bus_create(root, matches,&dev->dev);
> goto bail;
> @@ -748,9 +754,9 @@ int of_platform_bus_probe(struct device_node *root,
> pr_debug(" match: %s\n", child->full_name);
> dev = of_platform_device_create(child, NULL, parent);
> if (dev == NULL)
> - rc = -ENOMEM;
> - else
> - rc = of_platform_bus_create(child, matches,&dev->dev);
> + continue;
> +
> + rc = of_platform_bus_create(child, matches,&dev->dev);
> if (rc) {
> of_node_put(child);
> break;
>
ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] of/device: Don't register disabled devices
2011-01-05 22:53 ` Blanchard, Hollis
@ 2011-01-05 23:35 ` David Gibson
2011-01-07 17:23 ` Grant Likely
0 siblings, 1 reply; 4+ messages in thread
From: David Gibson @ 2011-01-05 23:35 UTC (permalink / raw)
To: Blanchard, Hollis
Cc: Grant Likely, devicetree-discuss, linuxppc-dev, linux-kernel,
Scott Wood, Benjamin Herrenschmidt, Saxena, Deepak
On Wed, Jan 05, 2011 at 02:53:27PM -0800, Blanchard, Hollis wrote:
> On 01/03/2011 03:01 PM, Grant Likely wrote:
> > Device nodes with the property status="disabled" are not usable and so
> > don't register them when parsing the device tree for devices.
> >
> This is great and all, but a fair amount of driver code explicitly
> searches the tree, rather than registering a probe function. That's why
> our earlier patches in this area were more comprehensive.
>
> What are your thoughts on handling those cases?
One by one. Trying to handle the explicit searches automagically is
just asking for trouble.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] of/device: Don't register disabled devices
2011-01-05 23:35 ` David Gibson
@ 2011-01-07 17:23 ` Grant Likely
0 siblings, 0 replies; 4+ messages in thread
From: Grant Likely @ 2011-01-07 17:23 UTC (permalink / raw)
To: David Gibson, Blanchard, Hollis, devicetree-discuss,
linuxppc-dev, linux-kernel, Scott Wood, Benjamin Herrenschmidt,
Saxena, Deepak
On Thu, Jan 06, 2011 at 10:35:35AM +1100, David Gibson wrote:
> On Wed, Jan 05, 2011 at 02:53:27PM -0800, Blanchard, Hollis wrote:
> > On 01/03/2011 03:01 PM, Grant Likely wrote:
> > > Device nodes with the property status="disabled" are not usable and so
> > > don't register them when parsing the device tree for devices.
> > >
> > This is great and all, but a fair amount of driver code explicitly
> > searches the tree, rather than registering a probe function. That's why
> > our earlier patches in this area were more comprehensive.
As your patch set shows, the total set isn't unmanageable, and the
preference for new code is to use the device model infrastructure if
at all possible.
> >
> > What are your thoughts on handling those cases?
>
> One by one. Trying to handle the explicit searches automagically is
> just asking for trouble.
Just as David says, the special cases are... well... special.
Anything making decisions about registering devices needs to follow
the status!="okay" rules.
g.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-01-07 17:23 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-03 23:01 [PATCH] of/device: Don't register disabled devices Grant Likely
2011-01-05 22:53 ` Blanchard, Hollis
2011-01-05 23:35 ` David Gibson
2011-01-07 17:23 ` Grant Likely
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).