diff --git a/common/fdt_support.c b/common/fdt_support.c index 93b144e64cb4774a7ff6cf8978c9f915c9ba6da6..e57ac0a545322819cf7239703a5f46219eabdb4a 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -368,55 +368,41 @@ int fdt_fixup_memory(void *blob, u64 start, u64 size) return 0; } -#if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\ - defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) - -void fdt_fixup_ethernet(void *fdt, bd_t *bd) +void fdt_fixup_ethernet(void *fdt) { - int node; + int node, i, j; + char enet[16], *tmp, *end; + char mac[16] = "ethaddr"; const char *path; + unsigned char mac_addr[6]; 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); + if (node < 0) + return; + + i = 0; + while ((tmp = getenv(mac)) != NULL) { + sprintf(enet, "ethernet%d", i); + path = fdt_getprop(fdt, node, enet, NULL); + if (!path) { + debug("No alias for %s\n", enet); + sprintf(mac, "eth%daddr", ++i); + continue; } -#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); + + for (j = 0; j < 6; j++) { + mac_addr[j] = tmp ? simple_strtoul(tmp, &end, 16) : 0; + if (tmp) + tmp = (*end) ? end+1 : end; } -#endif + + do_fixup_by_path(fdt, path, "mac-address", &mac_addr, 6, 0); + do_fixup_by_path(fdt, path, "local-mac-address", + &mac_addr, 6, 1); + + sprintf(mac, "eth%daddr", ++i); } } -#endif #ifdef CONFIG_HAS_FSL_DR_USB void fdt_fixup_dr_usb(void *blob, bd_t *bd) diff --git a/cpu/74xx_7xx/cpu.c b/cpu/74xx_7xx/cpu.c index ea43c9a9bf96e843e150b1e8b4df8e0b6699aa9b..c007abc98655e66d758abb7fc13b9633d3e77378 100644 --- a/cpu/74xx_7xx/cpu.c +++ b/cpu/74xx_7xx/cpu.c @@ -314,7 +314,7 @@ void ft_cpu_setup(void *blob, bd_t *bd) fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize); - fdt_fixup_ethernet(blob, bd); + fdt_fixup_ethernet(blob); } #endif /* ------------------------------------------------------------------------- */ diff --git a/cpu/mpc512x/cpu.c b/cpu/mpc512x/cpu.c index 703e1889c3b3152dcf88ca3cb045915d77521e7c..1f39ac4c173f06338c469c486e2919435e6f4b80 100644 --- a/cpu/mpc512x/cpu.c +++ b/cpu/mpc512x/cpu.c @@ -191,7 +191,7 @@ void ft_cpu_setup(void *blob, bd_t *bd) #endif ft_clock_setup(blob, bd); #ifdef CONFIG_HAS_ETH0 - fdt_fixup_ethernet(blob, bd); + fdt_fixup_ethernet(blob); #endif } #endif diff --git a/cpu/mpc8260/cpu.c b/cpu/mpc8260/cpu.c index 4d5d141ea2667820a31e58ddbf107c82d17fd523..efb8ed6f4e8d60f674b13ee263a03f077ff7a2b5 100644 --- a/cpu/mpc8260/cpu.c +++ b/cpu/mpc8260/cpu.c @@ -307,7 +307,7 @@ void ft_cpu_setup (void *blob, bd_t *bd) #if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\ defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) - fdt_fixup_ethernet(blob, bd); + fdt_fixup_ethernet(blob); #endif do_fixup_by_path_u32(blob, cpu_path, "bus-frequency", bd->bi_busfreq, 1); diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c index fda85c15d0e572e63828f6a16b28a1dc33d12375..39bd9dc7d52822f36afe4075ae2c84f0bbe9f91a 100644 --- a/cpu/mpc83xx/fdt.c +++ b/cpu/mpc83xx/fdt.c @@ -53,7 +53,7 @@ void ft_cpu_setup(void *blob, bd_t *bd) #if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\ defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) - fdt_fixup_ethernet(blob, bd); + fdt_fixup_ethernet(blob); #endif do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, diff --git a/cpu/mpc85xx/fdt.c b/cpu/mpc85xx/fdt.c index c159934c5b24630e6c906a748e3dead91e0a9252..bc1550d7c260352bdcc0a78984757f87b495dc58 100644 --- a/cpu/mpc85xx/fdt.c +++ b/cpu/mpc85xx/fdt.c @@ -212,7 +212,7 @@ void ft_cpu_setup(void *blob, bd_t *bd) #if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\ defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) - fdt_fixup_ethernet(blob, bd); + fdt_fixup_ethernet(blob); #endif do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, diff --git a/cpu/mpc86xx/fdt.c b/cpu/mpc86xx/fdt.c index 80a5c78a79436c2c98721b9666b21008a82fbcfc..12d90520317b74e83cb62278bbc1e5293900ff67 100644 --- a/cpu/mpc86xx/fdt.c +++ b/cpu/mpc86xx/fdt.c @@ -25,7 +25,7 @@ void ft_cpu_setup(void *blob, bd_t *bd) #if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) \ || defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) - fdt_fixup_ethernet(blob, bd); + fdt_fixup_ethernet(blob); #endif #ifdef CFG_NS16550 diff --git a/cpu/mpc8xx/fdt.c b/cpu/mpc8xx/fdt.c index 567094a96b065dd06c26f7ca409a70446a817ff6..7130983ff222f19e17d59c395af6fc5fe3a72ac1 100644 --- a/cpu/mpc8xx/fdt.c +++ b/cpu/mpc8xx/fdt.c @@ -40,7 +40,7 @@ void ft_cpu_setup(void *blob, bd_t *bd) gd->brg_clk, 1); /* Fixup ethernet MAC addresses */ - fdt_fixup_ethernet(blob, bd); + fdt_fixup_ethernet(blob); fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize); } diff --git a/cpu/ppc4xx/fdt.c b/cpu/ppc4xx/fdt.c index 0323dc52fe59fe7b222326af9dd0176f0db721be..a97484fa74ee34123126fcdf89888fabfd3f5740 100644 --- a/cpu/ppc4xx/fdt.c +++ b/cpu/ppc4xx/fdt.c @@ -130,7 +130,7 @@ void ft_cpu_setup(void *blob, bd_t *bd) * Fixup all ethernet nodes * Note: aliases in the dts are required for this */ - fdt_fixup_ethernet(blob, bd); + fdt_fixup_ethernet(blob); /* * Fixup all available PCIe nodes by setting the device_type property diff --git a/include/fdt_support.h b/include/fdt_support.h index a7c6326e128bff22acf46010b10933210f6c6bdf..f2f2cd5532c457bf22a5a6bba969b85126316646 100644 --- a/include/fdt_support.h +++ b/include/fdt_support.h @@ -45,7 +45,7 @@ void do_fixup_by_compat(void *fdt, const char *compat, void do_fixup_by_compat_u32(void *fdt, const char *compat, const char *prop, u32 val, int create); int fdt_fixup_memory(void *blob, u64 start, u64 size); -void fdt_fixup_ethernet(void *fdt, bd_t *bd); +void fdt_fixup_ethernet(void *fdt); int fdt_find_and_setprop(void *fdt, const char *node, const char *prop, const void *val, int len, int create); void fdt_fixup_qe_firmware(void *fdt);