Older device trees tend to use the alias "ethernet". Newer device trees tend to use "ethernet0" since older versions of U-Boot would skip aliases that do not include an index number. See, for example, Linux kernel commit 10b6c0c ("ARM: dts: bcm2835: add index to the ethernet alias") and U-Boot commit f8e57c6 ("fdt_support: Fixup 'ethernet' aliases not ending in digits").
Ensure that both "ethernet" and "ethernet0" aliases are present within the device tree, to provide compatibility with operating systems that expect either alias, and with device trees that contain either (or both) aliases. Signed-off-by: Michael Brown <mbr...@fensystems.co.uk> --- .../RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c b/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c index 83446e3e45..57e4bee8da 100644 --- a/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c +++ b/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c @@ -23,6 +23,69 @@ STATIC VOID *mFdtImage; STATIC RASPBERRY_PI_FIRMWARE_PROTOCOL *mFwProtocol; +STATIC +VOID +FixEthernetAliases ( + VOID +) +{ + INTN Aliases; + CONST CHAR8 *Ethernet; + CONST CHAR8 *Ethernet0; + CONST CHAR8 *Alias; + UINTN CopySize; + CHAR8 *Copy; + INTN Retval; + + // + // Look up the 'ethernet[0]' aliases + // + Aliases = fdt_path_offset (mFdtImage, "/aliases"); + if (Aliases < 0) { + DEBUG ((DEBUG_ERROR, "%a: failed to locate '/aliases'\n", __FUNCTION__)); + return; + } + Ethernet = fdt_getprop (mFdtImage, Aliases, "ethernet", NULL); + Ethernet0 = fdt_getprop (mFdtImage, Aliases, "ethernet0", NULL); + Alias = Ethernet ? Ethernet : Ethernet0; + if (!Alias) { + DEBUG ((DEBUG_ERROR, "%a: failed to locate 'ethernet[0]' alias\n", __FUNCTION__)); + return; + } + + // + // Create copy for fdt_setprop + // + CopySize = AsciiStrSize (Alias); + Copy = AllocateCopyPool (CopySize, Alias); + if (!Copy) { + DEBUG ((DEBUG_ERROR, "%a: failed to copy '%a'\n", __FUNCTION__, Alias)); + return; + } + + // + // Create missing aliases + // + if (!Ethernet) { + Retval = fdt_setprop (mFdtImage, Aliases, "ethernet", Copy, CopySize); + if (Retval != 0) { + DEBUG ((DEBUG_ERROR, "%a: failed to create 'ethernet' alias (%d)\n", + __FUNCTION__, Retval)); + } + DEBUG ((DEBUG_INFO, "%a: created 'ethernet' alias '%a'\n", __FUNCTION__, Copy)); + } + if (!Ethernet0) { + Retval = fdt_setprop (mFdtImage, Aliases, "ethernet0", Copy, CopySize); + if (Retval != 0) { + DEBUG ((DEBUG_ERROR, "%a: failed to create 'ethernet0' alias (%d)\n", + __FUNCTION__, Retval)); + } + DEBUG ((DEBUG_INFO, "%a: created 'ethernet0' alias '%a'\n", __FUNCTION__, Copy)); + } + + FreePool (Copy); +} + STATIC VOID UpdateMacAddress ( @@ -342,6 +405,7 @@ FdtDxeInitialize ( SanitizePSCI (); CleanMemoryNodes (); CleanSimpleFramebuffer (); + FixEthernetAliases (); UpdateMacAddress (); if (Internal) { /* -- 2.21.0 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#44319): https://edk2.groups.io/g/devel/message/44319 Mute This Topic: https://groups.io/mt/32585981/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-