mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01:00 
			
		
		
		
	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>
			
			
This commit is contained in:
		| @@ -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); | 	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) | void fdt_fixup_ethernet(void *fdt, bd_t *bd) | ||||||
| { | { | ||||||
| 	int node; | 	int node; | ||||||
|   | |||||||
| @@ -33,6 +33,17 @@ void do_fixup_by_path(void *fdt, const char *path, const char *prop, | |||||||
| 		      const void *val, int len, int create); | 		      const void *val, int len, int create); | ||||||
| void do_fixup_by_path_u32(void *fdt, const char *path, const char *prop, | void do_fixup_by_path_u32(void *fdt, const char *path, const char *prop, | ||||||
| 			  u32 val, int create); | 			  u32 val, int 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); | ||||||
|  | void do_fixup_by_prop_u32(void *fdt, | ||||||
|  | 			  const char *pname, const void *pval, int plen, | ||||||
|  | 			  const char *prop, u32 val, int create); | ||||||
|  | void do_fixup_by_compat(void *fdt, const char *compat, | ||||||
|  | 			const char *prop, const void *val, int len, int create); | ||||||
|  | void do_fixup_by_compat_u32(void *fdt, const char *compat, | ||||||
|  | 			    const char *prop, u32 val, int create); | ||||||
| void fdt_fixup_ethernet(void *fdt, bd_t *bd); | void fdt_fixup_ethernet(void *fdt, bd_t *bd); | ||||||
|  |  | ||||||
| #ifdef CONFIG_OF_HAS_UBOOT_ENV | #ifdef CONFIG_OF_HAS_UBOOT_ENV | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user