Skip to contentSkip to conversation

fdt: Add function to alloc phandle values

PATCH Superseded Kumar Gala 4 participants 9 messages Jul 9, 2010 – Jul 26, 2010

lore
Share & tools
lore

Kumar Gala

author
#0 lore raw

PATCH 1/1 fdt: Add function to alloc phandle values

If we are creating reference (handles) to nodes in a device tree we need to first create a new phandle in node and this needs a new phandle value. So we search through the whole dtb to find the max phandle value and return the next greater value for a new phandle allocation.

---
 common/fdt_support.c  |   16 ++++++++++++++++
 include/fdt_support.h |    1 +
 2 files changed, 17 insertions(+), 0 deletions(-)
common/fdt_support.c +16 -0
index 718b635..30c662a 100644
@@ -1151,4 +1151,20 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
 	return -FDT_ERR_NOTFOUND;
 }
 
+/**
+ * fdt_alloc_phandle: Return next free phandle value
+ *
+ * @blob: ptr to device tree
+ */
+int fdt_alloc_phandle(void *blob)
+{
+	int offset, len, phandle = 0;
+	const u32 *val;
+        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);
+        }
 
+	return phandle + 1;
+}
include/fdt_support.h +1 -0
index 54af9fe..871ef45 100644
@@ -86,6 +86,7 @@ void fdt_del_node_and_alias(void *blob, const char *alias);
 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);
 
 #endif /* ifdef CONFIG_OF_LIBFDT */
 #endif /* ifndef __FDT_SUPPORT_H */
Signature · 1 line
1.6.0.6
#1 lore raw

PATCH 1/1 fdt: Add function to alloc phandle values

Review

Quoted 12 lines · Kumar Gala
(quoted diff) +11 -0
+int fdt_alloc_phandle(void *blob)
+{
+ ? ? ? int offset, len, phandle = 0;
+ ? ? ? const u32 *val;
+ ? ? ? ?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);
+ ? ? ? ?}
 
+ ? ? ? return phandle + 1;
+}

If you incorporate my patch titled, "libfdt: introduce function fdt_get_max_phandle", you can simplify this function.

Wolfgang rejected that patch because I didn't include any code that called fdt_get_max_phandle(). I see you're doing the same thing here with fdt_alloc_phandle(). It will be interesting to see if Wolfgang rejects your patch.

Signature · 2 lines
Timur Tabi
Linux kernel developer at Freescale
#2 lore raw

PATCH 1/1 fdt: Add function to alloc phandle values

In reply to Kumar Gala

Hello.

Quoted 6 lines · Kumar Gala

If we are creating reference (handles) to nodes in a device tree we need to first create a new phandle in node and this needs a new phandle value. So we search through the whole dtb to find the max phandle value and return the next greater value for a new phandle allocation.

[...]

Quoted 7 lines
common/fdt_support.c +0 -0
index 718b635..30c662a 100644
@@ -1151,4 +1151,20 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
 	return -FDT_ERR_NOTFOUND;
 }

common/fdt_support.c int fdt_node_offset_by_compat_reg(void *blob, const char *compat, · line 1162

Quoted 10 lines
common/fdt_support.c +9 -0
 
+/**
+ * fdt_alloc_phandle: Return next free phandle value
+ *
+ * @blob: ptr to device tree
+ */
+int fdt_alloc_phandle(void *blob)
+{
+	int offset, len, phandle = 0;
+	const u32 *val;

Shouldn't there be an emoty line after declarations?

common/fdt_support.c int fdt_node_offset_by_compat_reg(void *blob, const char *compat, · line 1165

Quoted 3 lines
common/fdt_support.c +3 -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);

You indented the above 3 lines with spaces, other with tabs.

common/fdt_support.c int fdt_node_offset_by_compat_reg(void *blob, const char *compat, · line 1167

Quoted 2 lines
common/fdt_support.c +2 -0
+		if (val) phandle = max(*val, phandle);
+        }

Another space-indented line...

WBR, Sergei

author
#3 lore raw

PATCH v2 1/1 fdt: Add function to alloc phandle values

If we are creating reference (handles) to nodes in a device tree we need to first create a new phandle in node and this needs a new phandle value. So we search through the whole dtb to find the max phandle value and return the next greater value for a new phandle allocation.

---
* Hopefully fixed white space issues

 common/fdt_support.c  |   18 ++++++++++++++++++
 include/fdt_support.h |    1 +
 2 files changed, 19 insertions(+), 0 deletions(-)
common/fdt_support.c +18 -0
index 718b635..65751aa 100644
@@ -1151,4 +1151,22 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
 	return -FDT_ERR_NOTFOUND;
 }
 
+/**
+ * fdt_alloc_phandle: Return next free phandle value
+ *
+ * @blob: ptr to device tree
+ */
+int fdt_alloc_phandle(void *blob)
+{
+	int offset, len, phandle = 0;
+	const u32 *val;
 
+        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);
+        }
+
+	return phandle + 1;
+}
include/fdt_support.h +1 -0
index 54af9fe..871ef45 100644
@@ -86,6 +86,7 @@ void fdt_del_node_and_alias(void *blob, const char *alias);
 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);
 
 #endif /* ifdef CONFIG_OF_LIBFDT */
 #endif /* ifndef __FDT_SUPPORT_H */
Signature · 1 line
1.6.0.6
author
#4 lore raw

PATCH v3 1/1 fdt: Add function to alloc phandle values

In reply to Kumar Gala

If we are creating reference (handles) to nodes in a device tree we need to first create a new phandle in node and this needs a new phandle value. So we search through the whole dtb to find the max phandle value and return the next greater value for a new phandle allocation.

---
* Try this whitespace cleanup again

 common/fdt_support.c  |   18 ++++++++++++++++++
 include/fdt_support.h |    1 +
 2 files changed, 19 insertions(+), 0 deletions(-)
common/fdt_support.c +18 -0
index 718b635..166f5e1 100644
@@ -1151,4 +1151,22 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
 	return -FDT_ERR_NOTFOUND;
 }
 
+/**
+ * fdt_alloc_phandle: Return next free phandle value
+ *
+ * @blob: ptr to device tree
+ */
+int fdt_alloc_phandle(void *blob)
+{
+	int offset, len, phandle = 0;
+	const u32 *val;
+
+	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);
+	}
 
+	return phandle + 1;
+}
include/fdt_support.h +1 -0
index 54af9fe..871ef45 100644
@@ -86,6 +86,7 @@ void fdt_del_node_and_alias(void *blob, const char *alias);
 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);
 
 #endif /* ifdef CONFIG_OF_LIBFDT */
 #endif /* ifndef __FDT_SUPPORT_H */
Signature · 1 line
1.6.0.6
#5 lore raw

PATCH v3 1/1 fdt: Add function to alloc phandle values

Quoted 6 lines · Kumar Gala

If we are creating reference (handles) to nodes in a device tree we need to first create a new phandle in node and this needs a new phandle value. ?So we search through the whole dtb to find the max phandle value and return the next greater value for a new phandle allocation.

I still think you should merge my fdt_get_max_phandle() function into this patch. The two functions are related and can share code.

Signature · 2 lines
Timur Tabi
Linux kernel developer at Freescale
author
#6 lore raw

PATCH v3 1/1 fdt: Add function to alloc phandle values

Quoted 10 lines · Timur Tabi
Quoted 6 lines · Kumar Gala

If we are creating reference (handles) to nodes in a device tree we need to first create a new phandle in node and this needs a new phandle value. So we search through the whole dtb to find the max phandle value and return the next greater value for a new phandle allocation.

I still think you should merge my fdt_get_max_phandle() function into this patch. The two functions are related and can share code.

I'm replacing fdt_get_max_phandle w/fdt_alloc_phandle in our tree's. As what we are doing is allocating a phandle value.

- k

#7 lore raw

PATCH v3 1/1 fdt: Add function to alloc phandle values

In reply to Kumar Gala
Quoted 5 lines · Kumar Gala

If we are creating reference (handles) to nodes in a device tree we need to first create a new phandle in node and this needs a new phandle value. So we search through the whole dtb to find the max phandle value and return the next greater value for a new phandle allocation.

Quoted 7 lines

---
* Try this whitespace cleanup again

  common/fdt_support.c  |   18 ++++++++++++++++++
  include/fdt_support.h |    1 +
  2 files changed, 19 insertions(+), 0 deletions(-)

Best regards,
gvb

author Applied
#8 lore raw

PATCH v3 1/1 fdt: Add function to alloc phandle values

Quoted 10 lines · Jerry Van Baren
Quoted 9 lines · Kumar Gala

If we are creating reference (handles) to nodes in a device tree we need to first create a new phandle in node and this needs a new phandle value. So we search through the whole dtb to find the max phandle value and return the next greater value for a new phandle allocation.

---
* Try this whitespace cleanup again

Quoted 8 lines
Quoted 3 lines
 common/fdt_support.c  |   18 ++++++++++++++++++
 include/fdt_support.h |    1 +
 2 files changed, 19 insertions(+), 0 deletions(-)

Best regards,
gvb

applied to 85xx

- k