From: Andres Salomon <dilinger@queued.net>
To: devicetree-discuss@lists.ozlabs.org
Cc: sparclinux@vger.kernel.org, x86@kernel.org, tglx@linutronix.de,
mingo@redhat.com, hpa@zytor.com, cjb@laptop.org,
Mitch Bradley <wmb@laptop.org>,
pgf@laptop.org, linux-kernel@vger.kernel.org,
davem@davemloft.net, grant.likely@secretlab.ca,
Stephen Neuendorffer <stephen.neuendorffer@xilinx.com>
Subject: [PATCH 7/9] of: add package-to-path support to pdt
Date: Mon, 30 Aug 2010 04:04:45 +0000 [thread overview]
Message-ID: <20100830000445.3beb3e79@debxo> (raw)
In-Reply-To: <20100829235100.6dcedcb8@debxo>
package-to-path is a PROM function which tells us the real (full) name of the
node. This provides a hook for that in the prom ops struct, and makes use
of it in the pdt code when attempting to determine a node's name. If the
hook is available, try using it (falling back to looking at the "name"
property if it fails).
Signed-off-by: Andres Salomon <dilinger@queued.net>
---
drivers/of/pdt.c | 43 ++++++++++++++++++++++++++++++++++++++++++-
include/linux/of_pdt.h | 3 +++
2 files changed, 45 insertions(+), 1 deletions(-)
diff --git a/drivers/of/pdt.c b/drivers/of/pdt.c
index 31a4fb8..28295d0 100644
--- a/drivers/of/pdt.c
+++ b/drivers/of/pdt.c
@@ -132,6 +132,47 @@ static char * __init of_pdt_get_one_property(phandle node, const char *name)
return buf;
}
+static char * __init of_pdt_try_pkg2path(phandle node)
+{
+ char *res, *buf = NULL;
+ int len;
+
+ if (!of_pdt_prom_ops->pkg2path)
+ return NULL;
+
+ if (of_pdt_prom_ops->pkg2path(node, buf, 0, &len))
+ return NULL;
+ buf = prom_early_alloc(len + 1);
+ if (of_pdt_prom_ops->pkg2path(node, buf, len, &len)) {
+ pr_err("%s: package-to-path failed\n", __func__);
+ return NULL;
+ }
+
+ res = strrchr(buf, '/');
+ if (!res) {
+ pr_err("%s: couldn't find / in %s\n", __func__, buf);
+ return NULL;
+ }
+ return res+1;
+}
+
+/*
+ * When fetching the node's name, first try using package-to-path; if
+ * that fails (either because the arch hasn't supplied a PROM callback,
+ * or some other random failure), fall back to just looking at the node's
+ * 'name' property.
+ */
+static char * __init of_pdt_build_name(phandle node)
+{
+ char *buf;
+
+ buf = of_pdt_try_pkg2path(node);
+ if (!buf)
+ buf = of_pdt_get_one_property(node, "name");
+
+ return buf;
+}
+
static struct device_node * __init of_pdt_create_node(phandle node,
struct device_node *parent)
{
@@ -146,7 +187,7 @@ static struct device_node * __init of_pdt_create_node(phandle node,
kref_init(&dp->kref);
- dp->name = of_pdt_get_one_property(node, "name");
+ dp->name = of_pdt_build_name(node);
dp->type = of_pdt_get_one_property(node, "device_type");
dp->phandle = node;
diff --git a/include/linux/of_pdt.h b/include/linux/of_pdt.h
index a057417..9945e58 100644
--- a/include/linux/of_pdt.h
+++ b/include/linux/of_pdt.h
@@ -29,6 +29,9 @@ struct of_pdt_ops {
/* phandles are 0 if no child or sibling exists */
phandle (*getchild)(phandle parent);
phandle (*getsibling)(phandle node);
+
+ /* return 0 on success; fill in 'len' with number of bytes in path */
+ int (*pkg2path)(phandle node, char *buf, const int buflen, int *len);
};
extern void *prom_early_alloc(unsigned long size);
--
1.5.6.5
WARNING: multiple messages have this Message-ID (diff)
From: Andres Salomon <dilinger@queued.net>
To: devicetree-discuss@lists.ozlabs.org
Cc: sparclinux@vger.kernel.org, x86@kernel.org, tglx@linutronix.de,
mingo@redhat.com, hpa@zytor.com, cjb@laptop.org,
Mitch Bradley <wmb@laptop.org>,
pgf@laptop.org, linux-kernel@vger.kernel.org,
davem@davemloft.net, grant.likely@secretlab.ca,
Stephen Neuendorffer <stephen.neuendorffer@xilinx.com>
Subject: [PATCH 7/9] of: add package-to-path support to pdt
Date: Mon, 30 Aug 2010 00:04:45 -0400 [thread overview]
Message-ID: <20100830000445.3beb3e79@debxo> (raw)
In-Reply-To: <20100829235100.6dcedcb8@debxo>
package-to-path is a PROM function which tells us the real (full) name of the
node. This provides a hook for that in the prom ops struct, and makes use
of it in the pdt code when attempting to determine a node's name. If the
hook is available, try using it (falling back to looking at the "name"
property if it fails).
Signed-off-by: Andres Salomon <dilinger@queued.net>
---
drivers/of/pdt.c | 43 ++++++++++++++++++++++++++++++++++++++++++-
include/linux/of_pdt.h | 3 +++
2 files changed, 45 insertions(+), 1 deletions(-)
diff --git a/drivers/of/pdt.c b/drivers/of/pdt.c
index 31a4fb8..28295d0 100644
--- a/drivers/of/pdt.c
+++ b/drivers/of/pdt.c
@@ -132,6 +132,47 @@ static char * __init of_pdt_get_one_property(phandle node, const char *name)
return buf;
}
+static char * __init of_pdt_try_pkg2path(phandle node)
+{
+ char *res, *buf = NULL;
+ int len;
+
+ if (!of_pdt_prom_ops->pkg2path)
+ return NULL;
+
+ if (of_pdt_prom_ops->pkg2path(node, buf, 0, &len))
+ return NULL;
+ buf = prom_early_alloc(len + 1);
+ if (of_pdt_prom_ops->pkg2path(node, buf, len, &len)) {
+ pr_err("%s: package-to-path failed\n", __func__);
+ return NULL;
+ }
+
+ res = strrchr(buf, '/');
+ if (!res) {
+ pr_err("%s: couldn't find / in %s\n", __func__, buf);
+ return NULL;
+ }
+ return res+1;
+}
+
+/*
+ * When fetching the node's name, first try using package-to-path; if
+ * that fails (either because the arch hasn't supplied a PROM callback,
+ * or some other random failure), fall back to just looking at the node's
+ * 'name' property.
+ */
+static char * __init of_pdt_build_name(phandle node)
+{
+ char *buf;
+
+ buf = of_pdt_try_pkg2path(node);
+ if (!buf)
+ buf = of_pdt_get_one_property(node, "name");
+
+ return buf;
+}
+
static struct device_node * __init of_pdt_create_node(phandle node,
struct device_node *parent)
{
@@ -146,7 +187,7 @@ static struct device_node * __init of_pdt_create_node(phandle node,
kref_init(&dp->kref);
- dp->name = of_pdt_get_one_property(node, "name");
+ dp->name = of_pdt_build_name(node);
dp->type = of_pdt_get_one_property(node, "device_type");
dp->phandle = node;
diff --git a/include/linux/of_pdt.h b/include/linux/of_pdt.h
index a057417..9945e58 100644
--- a/include/linux/of_pdt.h
+++ b/include/linux/of_pdt.h
@@ -29,6 +29,9 @@ struct of_pdt_ops {
/* phandles are 0 if no child or sibling exists */
phandle (*getchild)(phandle parent);
phandle (*getsibling)(phandle node);
+
+ /* return 0 on success; fill in 'len' with number of bytes in path */
+ int (*pkg2path)(phandle node, char *buf, const int buflen, int *len);
};
extern void *prom_early_alloc(unsigned long size);
--
1.5.6.5
next prev parent reply other threads:[~2010-08-30 4:04 UTC|newest]
Thread overview: 130+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-29 1:54 [PATCH 0/4] RFC: OLPC/x86 device tree code Andres Salomon
2010-06-29 1:54 ` Andres Salomon
2010-06-29 2:00 ` [PATCH 1/4] x86: OLPC: constify an olpc_ofw() arg Andres Salomon
2010-06-29 2:00 ` Andres Salomon
2010-07-31 1:10 ` [tip:x86/olpc] x86, olpc: Constify " tip-bot for Andres Salomon
2010-06-29 2:00 ` [PATCH 2/4] sparc: break out some prom device-tree building code Andres Salomon
2010-06-29 2:00 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Andres Salomon
2010-06-29 3:11 ` [PATCH 2/4] sparc: break out some prom device-tree building David Miller
2010-06-29 3:11 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of David Miller
2010-06-29 3:11 ` David Miller
2010-06-29 6:15 ` [PATCH 2/4] sparc: break out some prom device-tree building Stephen Rothwell
2010-06-29 6:15 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Stephen Rothwell
2010-06-29 7:50 ` [PATCH 2/4] sparc: break out some prom device-tree building code Grant Likely
2010-06-29 7:50 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Grant Likely
2010-06-29 7:50 ` Grant Likely
2010-06-29 15:03 ` [PATCH 2/4] sparc: break out some prom device-tree building Andres Salomon
2010-06-29 15:03 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Andres Salomon
2010-06-29 21:42 ` [PATCH 2/4] sparc: break out some prom device-tree building code Grant Likely
2010-06-29 21:42 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Grant Likely
2010-06-29 21:42 ` Grant Likely
2010-06-29 23:36 ` [PATCH 2/4] sparc: break out some prom device-tree building Andres Salomon
2010-06-29 23:36 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Andres Salomon
2010-06-30 21:52 ` [PATCH 2/4] sparc: break out some prom device-tree building code Grant Likely
2010-06-30 21:52 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Grant Likely
2010-06-30 21:52 ` Grant Likely
[not found] ` <AANLkTilme2uAoXjorUEzam9j_xosR8kl70W8PS71d-Th-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-07-06 2:17 ` Andres Salomon
2010-07-07 4:07 ` Andres Salomon
2010-07-06 2:17 ` [PATCH 2/4] sparc: break out some prom device-tree building Andres Salomon
2010-07-06 2:22 ` David Miller
2010-07-06 2:22 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of David Miller
[not found] ` <20100705.192221.241453945.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2010-07-06 3:24 ` Andres Salomon
2010-07-07 5:15 ` Andres Salomon
2010-07-06 3:25 ` [PATCH 2/4] sparc: break out some prom device-tree building Andres Salomon
2010-07-06 10:17 ` Benjamin Herrenschmidt
2010-07-06 10:17 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Benjamin Herrenschmidt
2010-07-06 10:17 ` Benjamin Herrenschmidt
2010-07-06 3:25 ` Andres Salomon
2010-07-06 3:25 ` Andres Salomon
2010-07-06 7:00 ` [PATCH 2/4] sparc: break out some prom device-tree building code Grant Likely
2010-07-06 7:00 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Grant Likely
2010-07-06 7:00 ` Grant Likely
2010-07-06 7:16 ` [PATCH 2/4] sparc: break out some prom device-tree building David Miller
2010-07-06 7:16 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of David Miller
2010-07-06 8:17 ` [PATCH 2/4] sparc: break out some prom device-tree building code Grant Likely
2010-07-06 8:17 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Grant Likely
2010-07-06 8:17 ` Grant Likely
2010-07-06 8:17 ` [PATCH 2/4] sparc: break out some prom device-tree building code Grant Likely
2010-07-06 8:17 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Grant Likely
2010-07-06 8:17 ` Grant Likely
2010-07-06 2:17 ` Andres Salomon
2010-07-06 2:17 ` Andres Salomon
2010-07-06 9:21 ` [PATCH 2/4] sparc: break out some prom device-tree building code Grant Likely
2010-07-06 9:21 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Grant Likely
2010-07-06 9:21 ` Grant Likely
2010-07-06 21:54 ` [PATCH 2/4] sparc: break out some prom device-tree building Andres Salomon
2010-07-06 21:54 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Andres Salomon
2010-07-06 21:54 ` Andres Salomon
2010-07-06 22:06 ` [PATCH 2/4] sparc: break out some prom device-tree building code Grant Likely
2010-07-06 22:06 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Grant Likely
2010-07-06 22:06 ` Grant Likely
2010-07-07 1:15 ` [PATCH 2/4] sparc: break out some prom device-tree building Andres Salomon
2010-07-07 1:15 ` [PATCH 2/4] sparc: break out some prom device-tree building code out into drivers/of Andres Salomon
2010-06-29 2:00 ` [PATCH 3/4] proc: unify PROC_DEVICETREE config Andres Salomon
2010-06-29 2:00 ` Andres Salomon
2010-06-29 7:33 ` Grant Likely
2010-06-29 7:33 ` Grant Likely
2010-06-29 7:33 ` Grant Likely
2010-06-29 2:00 ` [PATCH 4/4] x86: OLPC: add OLPC device-tree support Andres Salomon
2010-06-29 2:00 ` Andres Salomon
2010-06-29 8:12 ` Grant Likely
2010-06-29 8:12 ` Grant Likely
2010-06-29 8:12 ` Grant Likely
[not found] ` <AANLkTinUy_FGuN9DiF5KtMCsqYUbByfS6g2Mdw0ATvtQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-06-29 8:33 ` Stephen Rothwell
2010-06-29 8:33 ` Stephen Rothwell
2010-06-29 8:33 ` Stephen Rothwell
2010-06-29 14:23 ` Andres Salomon
2010-06-29 14:23 ` Andres Salomon
2010-06-29 14:23 ` Andres Salomon
[not found] ` <20100629102339.5e8a30b6-ztAUm9HJea/EueBKFXcDjA@public.gmane.org>
2010-06-30 21:13 ` Grant Likely
2010-06-30 21:13 ` Grant Likely
2010-06-30 21:13 ` Grant Likely
[not found] ` <AANLkTik7rqaGz7RtsOlhoSZw_-6bhv43YlWETsB17__4-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-06-30 21:32 ` Andres Salomon
2010-06-30 21:32 ` Andres Salomon
2010-06-30 21:32 ` Andres Salomon
2010-08-30 3:51 ` [PATCH 0/9] " Andres Salomon
2010-08-30 3:51 ` Andres Salomon
2010-08-30 3:53 ` [PATCH 1/9] of: move phandle/ihandle into types.h Andres Salomon
2010-08-30 3:53 ` Andres Salomon
2010-08-30 5:06 ` Sam Ravnborg
2010-08-30 5:06 ` Sam Ravnborg
2010-09-03 7:33 ` Andres Salomon
2010-09-03 8:17 ` Andres Salomon
2010-09-05 6:22 ` Sam Ravnborg
2010-09-05 6:22 ` Sam Ravnborg
2010-08-30 3:55 ` [PATCH 2/9] sparc: convert various prom_* functions to use phandle Andres Salomon
2010-08-30 3:55 ` Andres Salomon
2010-08-30 3:57 ` [PATCH 3/9] sparc: break out some PROM device-tree building code Andres Salomon
2010-08-30 3:57 ` [PATCH 3/9] sparc: break out some PROM device-tree building code out into drivers/of Andres Salomon
2010-08-30 3:58 ` [PATCH 5/9] of: no longer call prom_ functions directly; use an ops Andres Salomon
2010-08-30 4:00 ` [PATCH 5/9] of: no longer call prom_ functions directly; use an ops structure Andres Salomon
2010-08-30 3:59 ` [PATCH 4/9] sparc: make drivers/of/pdt.c no longer sparc-only Andres Salomon
2010-08-30 3:59 ` Andres Salomon
2010-08-30 4:02 ` [PATCH 6/9] of: add of_pdt namespace to pdt code Andres Salomon
2010-08-30 4:02 ` Andres Salomon
2010-08-30 4:04 ` Andres Salomon [this message]
2010-08-30 4:04 ` [PATCH 7/9] of: add package-to-path support to pdt Andres Salomon
2010-08-30 4:06 ` [PATCH 8/9] x86: of: irq additions to make drivers/of/* build on Andres Salomon
2010-08-30 4:06 ` [PATCH 8/9] x86: of: irq additions to make drivers/of/* build on x86 Andres Salomon
2010-08-30 4:06 ` Andres Salomon
2010-08-30 15:58 ` Stephen Neuendorffer
2010-08-30 15:58 ` Stephen Neuendorffer
2010-08-30 15:58 ` Stephen Neuendorffer
[not found] ` <c7823e09-3ce8-434f-98f4-6a84a996c942-RaUQJvECHitZbvUCbuG1mrjjLBE8jN/0@public.gmane.org>
2010-08-30 17:31 ` Grant Likely
2010-08-30 17:31 ` Grant Likely
2010-08-30 17:31 ` Grant Likely
2010-08-30 4:07 ` [PATCH 9/9] x86: OLPC: add OLPC device-tree support Andres Salomon
2010-08-30 4:07 ` Andres Salomon
2010-08-30 4:07 ` Andres Salomon
2010-08-30 18:14 ` Grant Likely
2010-08-30 18:14 ` Grant Likely
2010-08-30 18:14 ` Grant Likely
[not found] ` <AANLkTi=EMkZLiAG7-ni8_7K=qtAriv=AfSUZ58661jNY-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-08-30 18:49 ` Andres Salomon
2010-08-30 18:49 ` Andres Salomon
2010-08-30 18:49 ` Andres Salomon
2010-08-31 5:49 ` Grant Likely
2010-08-31 5:49 ` Grant Likely
2010-08-31 5:49 ` Grant Likely
2010-08-30 17:58 ` [PATCH 0/9] " Grant Likely
2010-08-30 17:58 ` Grant Likely
2010-08-30 17:58 ` Grant Likely
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=20100830000445.3beb3e79@debxo \
--to=dilinger@queued.net \
--cc=cjb@laptop.org \
--cc=davem@davemloft.net \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=grant.likely@secretlab.ca \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pgf@laptop.org \
--cc=sparclinux@vger.kernel.org \
--cc=stephen.neuendorffer@xilinx.com \
--cc=tglx@linutronix.de \
--cc=wmb@laptop.org \
--cc=x86@kernel.org \
/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.