From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Rini Date: Fri, 17 Mar 2017 21:26:51 -0400 Subject: [U-Boot] [PATCH] fdt_support: Fixup 'ethernet' aliases not ending in digits In-Reply-To: <20170317194459.10109-1-tuomas@tuxera.com> References: <20170317194459.10109-1-tuomas@tuxera.com> Message-ID: <20170318012651.GB19897@bill-the-cat> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Fri, Mar 17, 2017 at 09:44:59PM +0200, Tuomas Tynkkynen wrote: > The Raspberry Pi device tree files since Linux v4.9 have a "ethernet" > alias pointing to the on-board Ethernet device node. However, > U-Boot's fdt_fixup_ethernet() (and the kernel's of_alias_scan()) only > looks at ethernet aliases ending in digits. Make it also check the > "ethernet" alias. > > Without this Linux isn't told of the MAC address provided by the > RPI firmware and the ethernet device is always assigned a random MAC > address. > > The device trees themselves can't be fixed as someone is already > depending on the "ethernet" alias: > https://github.com/raspberrypi/firmware/issues/613 > > Signed-off-by: Tuomas Tynkkynen I looked into this a bit and there's a few other (much older) examples of 'ethernet' rather than 'ethernet0' and the spec doesn't mandate aliases end in a number. That said, looking at the code, I think we can do this in a more clear manner. Can you test this please? diff --git a/common/fdt_support.c b/common/fdt_support.c index 55d4d6f6d444..80186a95baf0 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -482,7 +482,6 @@ void fdt_fixup_ethernet(void *fdt) /* Cycle through all aliases */ for (prop = 0; ; prop++) { const char *name; - int len = strlen("ethernet"); /* FDT might have been edited, recompute the offset */ offset = fdt_first_property_offset(fdt, @@ -495,16 +494,13 @@ void fdt_fixup_ethernet(void *fdt) break; path = fdt_getprop_by_offset(fdt, offset, &name, NULL); - if (!strncmp(name, "ethernet", len)) { + if (!strncmp(name, "ethernet", 8)) { i = trailing_strtol(name); - if (i != -1) { - if (i == 0) - strcpy(mac, "ethaddr"); - else - sprintf(mac, "eth%daddr", i); - } else { - continue; - } + /* Handle 'ethernet0' (0) and 'ethernet' (-1) */ + if (i <= 0) + strcpy(mac, "ethaddr"); + else + sprintf(mac, "eth%daddr", i); tmp = getenv(mac); if (!tmp) continue; -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: