diff mbox

[U-Boot,1/2] fdt: introduce fdt_create_phandle()

Message ID 1305058491-19720-1-git-send-email-timur@freescale.com
State Accepted
Delegated to: Jerry Van Baren
Headers show

Commit Message

Timur Tabi May 10, 2011, 8:14 p.m. UTC
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".

Signed-off-by: Timur Tabi <timur@freescale.com>
---
 common/fdt_support.c  |   40 ++++++++++++++++++++++++++++++++++++++++
 include/fdt_support.h |    1 +
 2 files changed, 41 insertions(+), 0 deletions(-)

Comments

Kumar Gala July 14, 2011, 1:31 p.m. UTC | #1
On May 10, 2011, at 3:14 PM, Timur Tabi 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", 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".
> 
> Signed-off-by: Timur Tabi <timur@freescale.com>
> ---
> common/fdt_support.c  |   40 ++++++++++++++++++++++++++++++++++++++++
> include/fdt_support.h |    1 +
> 2 files changed, 41 insertions(+), 0 deletions(-)

Jerry,

Any comments on this?

- k

> diff --git a/common/fdt_support.c b/common/fdt_support.c
> index 85715ff..dd9deaf 100644
> --- a/common/fdt_support.c
> +++ b/common/fdt_support.c
> @@ -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)
> {
> diff --git a/include/fdt_support.h b/include/fdt_support.h
> index ce6817b..366062f 100644
> --- a/include/fdt_support.h
> +++ b/include/fdt_support.h
> @@ -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 */
> -- 
> 1.7.3.4
> 
> 
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
Jerry Van Baren July 14, 2011, 2:01 p.m. UTC | #2
On 07/14/2011 09:31 AM, Kumar Gala wrote:
>
> On May 10, 2011, at 3:14 PM, Timur Tabi 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", 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".
>>
>> Signed-off-by: Timur Tabi<timur@freescale.com>
>> ---
>> common/fdt_support.c  |   40 ++++++++++++++++++++++++++++++++++++++++
>> include/fdt_support.h |    1 +
>> 2 files changed, 41 insertions(+), 0 deletions(-)
>
> 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
Kumar Gala July 14, 2011, 2:19 p.m. UTC | #3
On Jul 14, 2011, at 9:01 AM, Gerald Van Baren wrote:

> On 07/14/2011 09:31 AM, Kumar Gala wrote:
>> 
>> On May 10, 2011, at 3:14 PM, Timur Tabi 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", 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".
>>> 
>>> Signed-off-by: Timur Tabi<timur@freescale.com>
>>> ---
>>> common/fdt_support.c  |   40 ++++++++++++++++++++++++++++++++++++++++
>>> include/fdt_support.h |    1 +
>>> 2 files changed, 41 insertions(+), 0 deletions(-)
>> 
>> 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

I'd add:

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

at least for a review/ack.

- k
Jerry Van Baren July 15, 2011, 2:58 a.m. UTC | #4
On 05/10/2011 04:14 PM, Timur Tabi 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", 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".
>
> Signed-off-by: Timur Tabi<timur@freescale.com>
> ---
>   common/fdt_support.c  |   40 ++++++++++++++++++++++++++++++++++++++++
>   include/fdt_support.h |    1 +
>   2 files changed, 41 insertions(+), 0 deletions(-)

Applied to u-boot-fdt.

Thanks,
gvb
diff mbox

Patch

diff --git a/common/fdt_support.c b/common/fdt_support.c
index 85715ff..dd9deaf 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -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)
 {
diff --git a/include/fdt_support.h b/include/fdt_support.h
index ce6817b..366062f 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -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 */