Skip to contentSkip to conversation

fdt: introduce fdt_create_phandle()

PATCH New Timur Tabi 5 participants 7 messages May 10, 2011 – Jul 15, 2011 PowerPC

lore
Share & tools
lore

Timur Tabi

author
#0 lore raw

PATCH 1/2 fdt: introduce fdt_create_phandle()

The ePAPR specification says that phandle properties should be called "phandle", and not "linux,phandle". To facilitate the migration from "linux,phandle" to "phandle", introduce function fdt_create_phandle(), which creates a phandle in a given node. For now, we create both the "phandle" and "linux,phandle" properties. A later version of this function will remove support for "linux,phandle".

---
 common/fdt_support.c  |   40 ++++++++++++++++++++++++++++++++++++++++
 include/fdt_support.h |    1 +
 2 files changed, 41 insertions(+), 0 deletions(-)
common/fdt_support.c +40 -0
index 85715ff..dd9deaf 100644
@@ -1201,6 +1201,46 @@ int fdt_alloc_phandle(void *blob)
 	return phandle + 1;
 }
 
+/*
+ * fdt_create_phandle: Create a phandle property for the given node
+ *
+ * @fdt: ptr to device tree
+ * @nodeoffset: node to update
+ * @phandle: phandle value to set (must be unique)
+*/
+int fdt_create_phandle(void *fdt, int nodeoffset, uint32_t phandle)
+{
+	int ret;
+
+#ifdef DEBUG
+	int off = fdt_node_offset_by_phandle(fdt, phandle);
+
+	if ((off >= 0) && (off != nodeoffset)) {
+		char buf[64];
+
+		fdt_get_path(fdt, nodeoffset, buf, sizeof(buf));
+		printf("Trying to update node %s with phandle %u ",
+		       buf, phandle);
+
+		fdt_get_path(fdt, off, buf, sizeof(buf));
+		printf("that already exists in node %s.\n", buf);
+		return -FDT_ERR_BADPHANDLE;
+	}
+#endif
+
+	ret = fdt_setprop_cell(fdt, nodeoffset, "phandle", phandle);
+	if (ret < 0)
+		return ret;
+
+	/*
+	 * For now, also set the deprecated "linux,phandle" property, so that we
+	 * don't break older kernels.
+	 */
+	ret = fdt_setprop_cell(fdt, nodeoffset, "linux,phandle", phandle);
+
+	return ret;
+}
+
 #if defined(CONFIG_VIDEO)
 int fdt_add_edid(void *blob, const char *compat, unsigned char *edid_buf)
 {
include/fdt_support.h +1 -0
index ce6817b..366062f 100644
@@ -88,6 +88,7 @@ u64 fdt_translate_address(void *blob, int node_offset, const u32 *in_addr);
 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_create_phandle(void *fdt, int nodeoffset, uint32_t phandle);
 int fdt_add_edid(void *blob, const char *compat, unsigned char *buf);
 
 #endif /* ifdef CONFIG_OF_LIBFDT */
Signature · 1 line
1.7.3.4
author
#1 lore raw

PATCH v2 2/2 powerpc/85xx: add support the ePAPR "phandle" property

The ePAPR specification says that phandle properties should be called "phandle", and not "linux,phandle". To facilitate the migration from "linux,phandle" to "phandle", we update fdt_qportal() to use the new function, fdt_create_phandle(). This function abstracts the creation of phandle properties.

---
 arch/powerpc/cpu/mpc85xx/portals.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
arch/powerpc/cpu/mpc85xx/portals.c +3 -2
index c014163..4325f45 100644
@@ -151,8 +151,9 @@ static int fdt_qportal(void *blob, int off, int id, char *name,
 			dev_handle = fdt_get_phandle(blob, dev_off);
 			if (dev_handle <= 0) {
 				dev_handle = fdt_alloc_phandle(blob);
-				fdt_setprop_cell(blob, dev_off,
-					"linux,phandle", dev_handle);
+				ret = fdt_create_phandle(blob, dev_off, dev_handle);
+				if (ret < 0)
+					return ret;
 			}
 
 			ret = fdt_setprop(blob, childoff, "dev-handle",
Signature · 1 line
1.7.3.4
#2 lore raw

PATCH v2 2/2 powerpc/85xx: add support the ePAPR "phandle" property

Dear Timur Tabi,

Quoted 16 lines · In message <[email protected]> you wrote:

The ePAPR specification says that phandle properties should be called "phandle", and not "linux,phandle". To facilitate the migration from "linux,phandle" to "phandle", we update fdt_qportal() to use the new function, fdt_create_phandle(). This function abstracts the creation of phandle properties.

---
 arch/powerpc/cpu/mpc85xx/portals.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
arch/powerpc/cpu/mpc85xx/portals.c +0 -0
index c014163..4325f45 100644

arch/powerpc/cpu/mpc85xx/portals.c static int fdt_qportal(void *blob, int off, int id, char *name, · line 154

Quoted 6 lines
arch/powerpc/cpu/mpc85xx/portals.c +1 -2
@@ -151,8 +151,9 @@ static int fdt_qportal(void *blob, int off, int id, char *name,
 			dev_handle = fdt_get_phandle(blob, dev_off);
 			if (dev_handle <= 0) {
 				dev_handle = fdt_alloc_phandle(blob);
-				fdt_setprop_cell(blob, dev_off,
-					"linux,phandle", dev_handle);
+				ret = fdt_create_phandle(blob, dev_off, dev_handle);

Line too long.

Best regards,

Wolfgang Denk

Signature · 5 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Power is danger.
	-- The Centurion, "Balance of Terror", stardate 1709.2
#3 lore raw

PATCH 1/2 fdt: introduce fdt_create_phandle()

In reply to Timur Tabi
Quoted 7 lines · Timur Tabi

The ePAPR specification says that phandle properties should be called "phandle", and not "linux,phandle". To facilitate the migration from "linux,phandle" to "phandle", introduce function fdt_create_phandle(), which creates a phandle in a given node. For now, we create both the "phandle" and "linux,phandle" properties. A later version of this function will remove support for "linux,phandle".

Quoted 5 lines

---
common/fdt_support.c | 40 ++++++++++++++++++++++++++++++++++++++++
include/fdt_support.h | 1 +

2 files changed, 41 insertions(+), 0 deletions(-)

Jerry,

Any comments on this?

- k

Quoted 71 lines
common/fdt_support.c +40 -0
index 85715ff..dd9deaf 100644
@@ -1201,6 +1201,46 @@ int fdt_alloc_phandle(void *blob)
 	return phandle + 1;
 }
 
+/*
+ * fdt_create_phandle: Create a phandle property for the given node
+ *
+ * @fdt: ptr to device tree
+ * @nodeoffset: node to update
+ * @phandle: phandle value to set (must be unique)
+*/
+int fdt_create_phandle(void *fdt, int nodeoffset, uint32_t phandle)
+{
+	int ret;
+
+#ifdef DEBUG
+	int off = fdt_node_offset_by_phandle(fdt, phandle);
+
+	if ((off >= 0) && (off != nodeoffset)) {
+		char buf[64];
+
+		fdt_get_path(fdt, nodeoffset, buf, sizeof(buf));
+		printf("Trying to update node %s with phandle %u ",
+		       buf, phandle);
+
+		fdt_get_path(fdt, off, buf, sizeof(buf));
+		printf("that already exists in node %s.\n", buf);
+		return -FDT_ERR_BADPHANDLE;
+	}
+#endif
+
+	ret = fdt_setprop_cell(fdt, nodeoffset, "phandle", phandle);
+	if (ret < 0)
+		return ret;
+
+	/*
+	 * For now, also set the deprecated "linux,phandle" property, so that we
+	 * don't break older kernels.
+	 */
+	ret = fdt_setprop_cell(fdt, nodeoffset, "linux,phandle", phandle);
+
+	return ret;
+}
+
 #if defined(CONFIG_VIDEO)
 int fdt_add_edid(void *blob, const char *compat, unsigned char *edid_buf)
 {
include/fdt_support.h +1 -0
index ce6817b..366062f 100644
@@ -88,6 +88,7 @@ u64 fdt_translate_address(void *blob, int node_offset, const u32 *in_addr);
 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_create_phandle(void *fdt, int nodeoffset, uint32_t phandle);
 int fdt_add_edid(void *blob, const char *compat, unsigned char *buf);
 
 #endif /* ifdef CONFIG_OF_LIBFDT */
Signature · 7 lines
1.7.3.4


_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot
#4 lore raw

PATCH 1/2 fdt: introduce fdt_create_phandle()

Quoted 16 lines · Kumar Gala
Quoted 7 lines · Timur Tabi

The ePAPR specification says that phandle properties should be called "phandle", and not "linux,phandle". To facilitate the migration from "linux,phandle" to "phandle", introduce function fdt_create_phandle(), which creates a phandle in a given node. For now, we create both the "phandle" and "linux,phandle" properties. A later version of this function will remove support for "linux,phandle".

Quoted 5 lines

---
common/fdt_support.c | 40 ++++++++++++++++++++++++++++++++++++++++
include/fdt_support.h | 1 +

2 files changed, 41 insertions(+), 0 deletions(-)
Quoted 5 lines

Jerry,

Any comments on this?

- k

I put it in my todo list on patchworks. What I have queued are two patches from upstream
0329-Support-ePAPR-compliant-phandle-properties.patch 0344-libfdt-Implement-property-iteration-functions.patch
and...

[U-Boot,v2] Add uboot "fdt_high" enviroment variable 2011-07-09 David
A. Long gvb New
[U-Boot,2/2,v3] powerpc/85xx: add support the ePAPR "phandle" property
2011-05-10 Timur Tabi gvb New
[U-Boot,1/2] fdt: introduce fdt_create_phandle() 2011-05-10 Timur
Tabi gvb New
[U-Boot,1/2] fdt: add prototype for fdt_increase_size() 2011-05-03
Timur Tabi gvb New
[U-Boot,1/2,v2] fdt: introduce fdt_verify_alias_address() and
fdt_get_base_address() 2011-05-03 Timur Tabi gvb New

Hollor if I'm missing something.

Thanks,
gvb

#5 lore raw

PATCH 1/2 fdt: introduce fdt_create_phandle()

Quoted 29 lines · Gerald Van Baren
Quoted 16 lines · Kumar Gala
Quoted 7 lines · Timur Tabi

The ePAPR specification says that phandle properties should be called "phandle", and not "linux,phandle". To facilitate the migration from "linux,phandle" to "phandle", introduce function fdt_create_phandle(), which creates a phandle in a given node. For now, we create both the "phandle" and "linux,phandle" properties. A later version of this function will remove support for "linux,phandle".

Quoted 5 lines

---
common/fdt_support.c | 40 ++++++++++++++++++++++++++++++++++++++++
include/fdt_support.h | 1 +

2 files changed, 41 insertions(+), 0 deletions(-)
Quoted 5 lines

Jerry,

Any comments on this?

- k

I put it in my todo list on patchworks. What I have queued are two patches from upstream
0329-Support-ePAPR-compliant-phandle-properties.patch 0344-libfdt-Implement-property-iteration-functions.patch
and...

Quoted 10 lines

[U-Boot,v2] Add uboot "fdt_high" enviroment variable 2011-07-09 David
A. Long gvb New
[U-Boot,2/2,v3] powerpc/85xx: add support the ePAPR "phandle" property
2011-05-10 Timur Tabi gvb New
[U-Boot,1/2] fdt: introduce fdt_create_phandle() 2011-05-10 Timur
Tabi gvb New
[U-Boot,1/2] fdt: add prototype for fdt_increase_size() 2011-05-03
Timur Tabi gvb New
[U-Boot,1/2,v2] fdt: introduce fdt_verify_alias_address() and
fdt_get_base_address() 2011-05-03 Timur Tabi gvb New

I'd add:

http://patchwork.ozlabs.org/patch/103598/

at least for a review/ack.

- k

#6 lore raw

PATCH 1/2 fdt: introduce fdt_create_phandle()

In reply to Timur Tabi
Quoted 7 lines · Timur Tabi

The ePAPR specification says that phandle properties should be called "phandle", and not "linux,phandle". To facilitate the migration from "linux,phandle" to "phandle", introduce function fdt_create_phandle(), which creates a phandle in a given node. For now, we create both the "phandle" and "linux,phandle" properties. A later version of this function will remove support for "linux,phandle".

Quoted 5 lines
---
  common/fdt_support.c  |   40 ++++++++++++++++++++++++++++++++++++++++
  include/fdt_support.h |    1 +
  2 files changed, 41 insertions(+), 0 deletions(-)

Applied to u-boot-fdt.

Thanks,
gvb