[edk2-devel] [edk2-platforms: PATCHv2 1/1] Platform/RPi3: Provide "ethernet[0]" aliases in device tree
Michael Brown
mbrown at fensystems.co.uk
Wed Jul 24 14:31:14 UTC 2019
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 <mbrown at 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/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list