Hi
I am not sure where the problem is. "FdtClient is unhappy without a device 
tree, so add an empty fdt"

Do we have option 2 to fix the issue?
If no device tree, why we need FdtClient? Why we need make it happy?

Thank you
Yao Jiewen

> -----Original Message-----
> From: Gerd Hoffmann <kra...@redhat.com>
> Sent: Thursday, October 14, 2021 11:30 PM
> To: devel@edk2.groups.io
> Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org>; Justen, Jordan L
> <jordan.l.jus...@intel.com>; Yao, Jiewen <jiewen....@intel.com>; Gerd
> Hoffmann <kra...@redhat.com>
> Subject: [PATCH 3/5] OvmfPkg/Microvm/fdt: add empty fdt
> 
> FdtClient is unhappy without a device tree, so add an empty fdt
> which we can use in case etc/fdt is not present in fw_cfg.
> 
> https://bugzilla.tianocore.org/show_bug.cgi?id=3689
> Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
> ---
>  OvmfPkg/PlatformPei/Platform.c | 26 ++++++++++++++++++++++----
>  1 file changed, 22 insertions(+), 4 deletions(-)
> 
> diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c
> index 3c0cdba67c83..5071389c1fb4 100644
> --- a/OvmfPkg/PlatformPei/Platform.c
> +++ b/OvmfPkg/PlatformPei/Platform.c
> @@ -16,6 +16,7 @@
>  //
>  // The Library classes this module consumes
>  //
> +#include <Library/BaseMemoryLib.h>
>  #include <Library/BaseLib.h>
>  #include <Library/DebugLib.h>
>  #include <Library/HobLib.h>
> @@ -321,6 +322,18 @@ PciExBarInitialization (
>      );
>  }
> 
> +static const UINT8 EmptyFdt[] = {
> +  0xd0, 0x0d, 0xfe, 0xed, 0x00, 0x00, 0x00, 0x48,
> +  0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x48,
> +  0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x11,
> +  0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09,
> +};
> +
>  VOID
>  MicrovmInitialization (
>    VOID
> @@ -335,8 +348,9 @@ MicrovmInitialization (
> 
>      Status = QemuFwCfgFindFile ("etc/fdt", &FdtItem, &FdtSize);
>      if (EFI_ERROR (Status)) {
> -      DEBUG ((DEBUG_INFO, "%a: no etc/fdt found in fw_cfg\n",
> __FUNCTION__));
> -      return;
> +      DEBUG ((DEBUG_INFO, "%a: no etc/fdt found in fw_cfg, using dummy\n",
> __FUNCTION__));
> +      FdtItem = 0;
> +      FdtSize = sizeof(EmptyFdt);
>      }
> 
>      FdtPages = EFI_SIZE_TO_PAGES (FdtSize);
> @@ -346,8 +360,12 @@ MicrovmInitialization (
>        return;
>      }
> 
> -    QemuFwCfgSelectItem (FdtItem);
> -    QemuFwCfgReadBytes (FdtSize, NewBase);
> +    if (FdtItem) {
> +      QemuFwCfgSelectItem (FdtItem);
> +      QemuFwCfgReadBytes (FdtSize, NewBase);
> +    } else {
> +      CopyMem(NewBase, EmptyFdt, FdtSize);
> +    }
> 
>      FdtHobData = BuildGuidHob (&gFdtHobGuid, sizeof (*FdtHobData));
>      if (FdtHobData == NULL) {
> --
> 2.31.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#82079): https://edk2.groups.io/g/devel/message/82079
Mute This Topic: https://groups.io/mt/86316755/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to