diff options
| author | Kumar Gala <galak@kernel.crashing.org> | 2007-11-21 13:30:15 -0600 | 
|---|---|---|
| committer | Kumar Gala <galak@kernel.crashing.org> | 2007-11-21 15:11:58 -0600 | 
| commit | 9eb77cea1fa12d5969eb26a1d1d81da381bd6b1c (patch) | |
| tree | 989e4f66372f19f1faf905e0cc863649c0e00a59 /common | |
| parent | ab544633abdd14f4dd5d92e500b73eb59ef57e67 (diff) | |
| download | olio-uboot-2014.01-9eb77cea1fa12d5969eb26a1d1d81da381bd6b1c.tar.xz olio-uboot-2014.01-9eb77cea1fa12d5969eb26a1d1d81da381bd6b1c.zip | |
Add additional fdt fixup helper functions
Added the following fdt fixup helpers:
 * do_fixup_by_prop{_u32} - Find matching nodes by property name/value
 * do_fixup_by_compat{_u32} - Find matching nodes by compat
The _u32 variants work the same only the property they are setting
is know to be a 32-bit integer instead of a byte buffer.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'common')
| -rw-r--r-- | common/fdt_support.c | 55 | 
1 files changed, 55 insertions, 0 deletions
| diff --git a/common/fdt_support.c b/common/fdt_support.c index e848386fb..c67bb3d39 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -386,6 +386,61 @@ void do_fixup_by_path_u32(void *fdt, const char *path, const char *prop,  	do_fixup_by_path(fdt, path, prop, &val, sizeof(val), create);  } +void do_fixup_by_prop(void *fdt, +		      const char *pname, const void *pval, int plen, +		      const char *prop, const void *val, int len, +		      int create) +{ +	int off; +#if defined(DEBUG) +	int i; +	debug("Updating property '%s/%s' = ", node, prop); +	for (i = 0; i < len; i++) +		debug(" %.2x", *(u8*)(val+i)); +	debug("\n"); +#endif +	off = fdt_node_offset_by_prop_value(fdt, -1, pname, pval, plen); +	while (off != -FDT_ERR_NOTFOUND) { +		if (create || (fdt_get_property(fdt, off, prop, 0) != NULL)) +			fdt_setprop(fdt, off, prop, val, len); +		off = fdt_node_offset_by_prop_value(fdt, off, pname, pval, plen); +	} +} + +void do_fixup_by_prop_u32(void *fdt, +			  const char *pname, const void *pval, int plen, +			  const char *prop, u32 val, int create) +{ +	val = cpu_to_fdt32(val); +	do_fixup_by_prop(fdt, pname, pval, plen, prop, &val, 4, create); +} + +void do_fixup_by_compat(void *fdt, const char *compat, +			const char *prop, const void *val, int len, int create) +{ +	int off = -1; +#if defined(DEBUG) +	int i; +	debug("Updating property '%s/%s' = ", node, prop); +	for (i = 0; i < len; i++) +		debug(" %.2x", *(u8*)(val+i)); +	debug("\n"); +#endif +	off = fdt_node_offset_by_compatible(fdt, -1, compat); +	while (off != -FDT_ERR_NOTFOUND) { +		if (create || (fdt_get_property(fdt, off, prop, 0) != NULL)) +			fdt_setprop(fdt, off, prop, val, len); +		off = fdt_node_offset_by_compatible(fdt, off, compat); +	} +} + +void do_fixup_by_compat_u32(void *fdt, const char *compat, +			    const char *prop, u32 val, int create) +{ +	val = cpu_to_fdt32(val); +	do_fixup_by_compat(fdt, compat, prop, &val, 4, create); +} +  void fdt_fixup_ethernet(void *fdt, bd_t *bd)  {  	int node; |