diff options
| -rw-r--r-- | common/fdt_support.c | 46 | ||||
| -rw-r--r-- | include/fdt_support.h | 1 | 
2 files changed, 47 insertions, 0 deletions
| diff --git a/common/fdt_support.c b/common/fdt_support.c index d5743b445..e848386fb 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -386,4 +386,50 @@ 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 fdt_fixup_ethernet(void *fdt, bd_t *bd) +{ +	int node; +	const char *path; + +	node = fdt_path_offset(fdt, "/aliases"); +	if (node >= 0) { +#if defined(CONFIG_HAS_ETH0) +		path = fdt_getprop(fdt, node, "ethernet0", NULL); +		if (path) { +			do_fixup_by_path(fdt, path, "mac-address", +				bd->bi_enetaddr, 6, 0); +			do_fixup_by_path(fdt, path, "local-mac-address", +				bd->bi_enetaddr, 6, 1); +		} +#endif +#if defined(CONFIG_HAS_ETH1) +		path = fdt_getprop(fdt, node, "ethernet1", NULL); +		if (path) { +			do_fixup_by_path(fdt, path, "mac-address", +				bd->bi_enet1addr, 6, 0); +			do_fixup_by_path(fdt, path, "local-mac-address", +				bd->bi_enet1addr, 6, 1); +		} +#endif +#if defined(CONFIG_HAS_ETH2) +		path = fdt_getprop(fdt, node, "ethernet2", NULL); +		if (path) { +			do_fixup_by_path(fdt, path, "mac-address", +				bd->bi_enet2addr, 6, 0); +			do_fixup_by_path(fdt, path, "local-mac-address", +				bd->bi_enet2addr, 6, 1); +		} +#endif +#if defined(CONFIG_HAS_ETH3) +		path = fdt_getprop(fdt, node, "ethernet3", NULL); +		if (path) { +			do_fixup_by_path(fdt, path, "mac-address", +				bd->bi_enet3addr, 6, 0); +			do_fixup_by_path(fdt, path, "local-mac-address", +				bd->bi_enet3addr, 6, 1); +		} +#endif +	} +} +  #endif /* CONFIG_OF_LIBFDT */ diff --git a/include/fdt_support.h b/include/fdt_support.h index 0314dfdf8..150dd2b22 100644 --- a/include/fdt_support.h +++ b/include/fdt_support.h @@ -33,6 +33,7 @@ void do_fixup_by_path(void *fdt, const char *path, const char *prop,  		      const void *val, int len, int create);  void do_fixup_by_path_u32(void *fdt, const char *path, const char *prop,  			  u32 val, int create); +void fdt_fixup_ethernet(void *fdt, bd_t *bd);  #ifdef CONFIG_OF_HAS_UBOOT_ENV  int fdt_env(void *fdt); |