* [U-Boot] [PATCH 1/3] fdt: check for fdt errors in fdt_create_phandle
@ 2011-09-20 23:24 Timur Tabi
2011-09-20 23:24 ` [U-Boot] [PATCH 2/3] fdt: update fdt_alloc_phandle to use fdt_get_phandle Timur Tabi
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Timur Tabi @ 2011-09-20 23:24 UTC (permalink / raw)
To: u-boot
fdt_create_phandle() was ignoring errors from fdt_set_phandle(). If an
error occurs, print an error message and return 0, which is an invalid
phandle. We also need to change the return type for fdt_create_phandle()
to indicate that it cannot return an error code.
Signed-off-by: Timur Tabi <timur@freescale.com>
---
common/fdt_support.c | 11 +++++++++--
include/fdt_support.h | 2 +-
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/common/fdt_support.c b/common/fdt_support.c
index 46aa842..698abf7 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -1241,15 +1241,22 @@ int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle)
* @fdt: ptr to device tree
* @nodeoffset: node to update
*/
-int fdt_create_phandle(void *fdt, int nodeoffset)
+unsigned int fdt_create_phandle(void *fdt, int nodeoffset)
{
/* see if there is a phandle already */
int phandle = fdt_get_phandle(fdt, nodeoffset);
/* if we got 0, means no phandle so create one */
if (phandle == 0) {
+ int ret;
+
phandle = fdt_alloc_phandle(fdt);
- fdt_set_phandle(fdt, nodeoffset, phandle);
+ ret = fdt_set_phandle(fdt, nodeoffset, phandle);
+ if (ret < 0) {
+ printf("Can't set phandle %u: %s\n", phandle,
+ fdt_strerror(ret));
+ return 0;
+ }
}
return phandle;
diff --git a/include/fdt_support.h b/include/fdt_support.h
index 8f06aac..7206c56 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -90,7 +90,7 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
phys_addr_t compat_off);
int fdt_alloc_phandle(void *blob);
int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle);
-int fdt_create_phandle(void *fdt, int nodeoffset);
+unsigned int fdt_create_phandle(void *fdt, int nodeoffset);
int fdt_add_edid(void *blob, const char *compat, unsigned char *buf);
int fdt_verify_alias_address(void *fdt, int anode, const char *alias,
--
1.7.4.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH 2/3] fdt: update fdt_alloc_phandle to use fdt_get_phandle
2011-09-20 23:24 [U-Boot] [PATCH 1/3] fdt: check for fdt errors in fdt_create_phandle Timur Tabi
@ 2011-09-20 23:24 ` Timur Tabi
2011-09-20 23:24 ` [U-Boot] [PATCH 3/3] powerpc/85xx: use fdt_create_phandle() to create the Fman firmware phandles Timur Tabi
2011-10-15 15:34 ` [U-Boot] [PATCH 1/3] fdt: check for fdt errors in fdt_create_phandle Jerry Van Baren
2 siblings, 0 replies; 4+ messages in thread
From: Timur Tabi @ 2011-09-20 23:24 UTC (permalink / raw)
To: u-boot
The device tree compiler, dtc, can use "phandle" and/or "linux,phandle"
properties to specify the phandle for any node. By default, it uses
both, but "linux,phandle" is deprecated. One day, we'd like to stop using
"linux,phandle", but U-boot needs to support both properties equally
first.
fdt_alloc_phandle() generates a unique phandle, but it was only checking
the "linux,phandle" properties. Instead, we use fdt_get_phandle(),
which checks both properties automatically. This ensures that we
support dtbs that only use "phandle".
The side-effect is that fdt_alloc_phandle() now takes twice as long, since
it has to check for two properties instead of one in each node that it
searches.
Signed-off-by: Timur Tabi <timur@freescale.com>
---
common/fdt_support.c | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/common/fdt_support.c b/common/fdt_support.c
index 698abf7..abf6d53 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -1182,14 +1182,11 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
*/
int fdt_alloc_phandle(void *blob)
{
- int offset, len, phandle = 0;
- const u32 *val;
+ int offset, phandle = 0;
for (offset = fdt_next_node(blob, -1, NULL); offset >= 0;
offset = fdt_next_node(blob, offset, NULL)) {
- val = fdt_getprop(blob, offset, "linux,phandle", &len);
- if (val)
- phandle = max(*val, phandle);
+ phandle = max(phandle, fdt_get_phandle(blob, offset));
}
return phandle + 1;
--
1.7.4.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH 3/3] powerpc/85xx: use fdt_create_phandle() to create the Fman firmware phandles
2011-09-20 23:24 [U-Boot] [PATCH 1/3] fdt: check for fdt errors in fdt_create_phandle Timur Tabi
2011-09-20 23:24 ` [U-Boot] [PATCH 2/3] fdt: update fdt_alloc_phandle to use fdt_get_phandle Timur Tabi
@ 2011-09-20 23:24 ` Timur Tabi
2011-10-15 15:34 ` [U-Boot] [PATCH 1/3] fdt: check for fdt errors in fdt_create_phandle Jerry Van Baren
2 siblings, 0 replies; 4+ messages in thread
From: Timur Tabi @ 2011-09-20 23:24 UTC (permalink / raw)
To: u-boot
Function fdt_create_phandle() conveniently creates new phandle properties
using both "linux,phandle" and "phandle", so it should be used by all code
that wants to create a phandle.
The Fman firmware code, which embeds an Fman firmware into the device tree,
was creating the phandle properties manually. Instead, change it to use
fdt_create_phandle().
Signed-off-by: Timur Tabi <timur@freescale.com>
---
arch/powerpc/cpu/mpc85xx/fdt.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/arch/powerpc/cpu/mpc85xx/fdt.c b/arch/powerpc/cpu/mpc85xx/fdt.c
index d20c94c..9d2d769 100644
--- a/arch/powerpc/cpu/mpc85xx/fdt.c
+++ b/arch/powerpc/cpu/mpc85xx/fdt.c
@@ -504,9 +504,8 @@ void fdt_fixup_fman_firmware(void *blob)
fdt_strerror(rc));
return;
}
- phandle = fdt_alloc_phandle(blob);
- rc = fdt_setprop_cell(blob, fwnode, "linux,phandle", phandle);
- if (rc < 0) {
+ phandle = fdt_create_phandle(blob, fwnode);
+ if (!phandle) {
char s[64];
fdt_get_path(blob, fwnode, s, sizeof(s));
printf("Could not add phandle property to node %s: %s\n", s,
--
1.7.4.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH 1/3] fdt: check for fdt errors in fdt_create_phandle
2011-09-20 23:24 [U-Boot] [PATCH 1/3] fdt: check for fdt errors in fdt_create_phandle Timur Tabi
2011-09-20 23:24 ` [U-Boot] [PATCH 2/3] fdt: update fdt_alloc_phandle to use fdt_get_phandle Timur Tabi
2011-09-20 23:24 ` [U-Boot] [PATCH 3/3] powerpc/85xx: use fdt_create_phandle() to create the Fman firmware phandles Timur Tabi
@ 2011-10-15 15:34 ` Jerry Van Baren
2 siblings, 0 replies; 4+ messages in thread
From: Jerry Van Baren @ 2011-10-15 15:34 UTC (permalink / raw)
To: u-boot
On 09/20/2011 07:24 PM, Timur Tabi wrote:
> fdt_create_phandle() was ignoring errors from fdt_set_phandle(). If an
> error occurs, print an error message and return 0, which is an invalid
> phandle. We also need to change the return type for fdt_create_phandle()
> to indicate that it cannot return an error code.
>
> Signed-off-by: Timur Tabi<timur@freescale.com>
> ---
> common/fdt_support.c | 11 +++++++++--
> include/fdt_support.h | 2 +-
> 2 files changed, 10 insertions(+), 3 deletions(-)
Added to u-boot-fdt, sent a pull request to wd.
Thanks,
gvb
[snip]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-10-15 15:34 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-20 23:24 [U-Boot] [PATCH 1/3] fdt: check for fdt errors in fdt_create_phandle Timur Tabi
2011-09-20 23:24 ` [U-Boot] [PATCH 2/3] fdt: update fdt_alloc_phandle to use fdt_get_phandle Timur Tabi
2011-09-20 23:24 ` [U-Boot] [PATCH 3/3] powerpc/85xx: use fdt_create_phandle() to create the Fman firmware phandles Timur Tabi
2011-10-15 15:34 ` [U-Boot] [PATCH 1/3] fdt: check for fdt errors in fdt_create_phandle Jerry Van Baren
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.