[edk2-devel] [edk2-platforms: PATCHv2 1/1] Platform/RPi3: Provide "ethernet[0]" aliases in device tree

Leif Lindholm leif.lindholm at linaro.org
Wed Jul 24 18:53:43 UTC 2019


Hi Michael,

Thanks for this.
One comment below.

On Wed, Jul 24, 2019 at 03:31:14PM +0100, Michael Brown wrote:
> 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__));

The DEBUG statements are only included in DEBUG builds.
And I think that's fine for these very detailed ones, but...

> +    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 ();

...would it be worth having a return value here and Print()ing a
message visible regardless of build profile if this function fails?

/
    Leif

>    UpdateMacAddress ();
>    if (Internal) {
>      /*
> -- 
> 2.21.0
> 

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#44329): https://edk2.groups.io/g/devel/message/44329
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