On 05/14/20 14:12, Laszlo Ersek wrote:
> On 05/14/20 11:29, Ard Biesheuvel wrote:
>> On 5/14/20 10:40 AM, Sami Mujawar wrote:
>>> Kvmtool is a virtual machine manager that enables
>>> hosting KVM guests. It essentially provides an
>>> emulated platform for guest operating systems.
>>>
>>> Kvmtool hands of a device tree containing the
>>> current hardware configuration to the firmware.
>>>
>>> A standards-based operating system would use
>>> ACPI to consume the platform hardware
>>> information, while some operating systems may
>>> prefer to use Device Tree.
>>>
>>> The KvmtoolPlatformDxe performs the platform
>>> actions like determining if the firmware should
>>> expose ACPI or the Device Tree based hardware
>>> description to the operating system.
>>>
>>> Signed-off-by: Sami Mujawar <sami.muja...@arm.com>
>>> ---
>>>
>>> Notes:
>>>      v2:
>>>        - Updated according to review comments.                     [Sami]
>>>           v1:
>>>        - Add kvmtool platform driver to support loading platform   [Sami]
>>>          specific information.
>>>        - Keep code to initialise the variable storage PCDs in the 
>>> [Laszlo]
>>>          platform-specific FVB driver.
>>>        - Document code derived from                               
>>> [Laszlo]
>>>          "ArmVirtPkg/PlatformHasAcpiDtDxe"
>>>          Ref: https://edk2.groups.io/g/devel/topic/30915278#30757
>>>
>>>   ArmVirtPkg/KvmtoolPlatformDxe/KvmtoolPlatformDxe.c   | 93
>>> ++++++++++++++++++++
>>>   ArmVirtPkg/KvmtoolPlatformDxe/KvmtoolPlatformDxe.inf | 47 ++++++++++
>>>   2 files changed, 140 insertions(+)
>>>
>>> diff --git a/ArmVirtPkg/KvmtoolPlatformDxe/KvmtoolPlatformDxe.c
>>> b/ArmVirtPkg/KvmtoolPlatformDxe/KvmtoolPlatformDxe.c
>>> new file mode 100644
>>> index
>>> 0000000000000000000000000000000000000000..e7568f66f5ebeb0423fc1c10345cd8dad0800d94
>>>
>>> --- /dev/null
>>> +++ b/ArmVirtPkg/KvmtoolPlatformDxe/KvmtoolPlatformDxe.c
>>> @@ -0,0 +1,93 @@
>>> +/** @file
>>> +
>>> +  The KvmtoolPlatformDxe performs the platform specific
>>> initialization like:
>>> +  - It decides if the firmware should expose ACPI or Device Tree-based
>>> +    hardware description to the operating system.
>>> +
>>> +  Copyright (c) 2018 - 2020, ARM Limited. All rights reserved.
>>> +
>>> +  SPDX-License-Identifier: BSD-2-Clause-Patent
>>> +
>>> +**/
>>> +
>>> +#include <Guid/VariableFormat.h>
>>> +#include <Library/BaseLib.h>
>>> +#include <Library/BaseMemoryLib.h>
>>> +#include <Library/DebugLib.h>
>>> +#include <Library/DxeServicesTableLib.h>
>>> +#include <Library/UefiBootServicesTableLib.h>
>>> +#include <Library/UefiDriverEntryPoint.h>
>>> +#include <Protocol/FdtClient.h>
>>> +
>>> +/** Decide if the firmware should expose ACPI tables or Device Tree and
>>> +    install the appropriate protocol interface.
>>> +
>>> +  Note: This function is derived from "ArmVirtPkg/PlatformHasAcpiDtDxe",
>>> +        by dropping the word size check, and the fw_cfg check.
>>> +
>>> +  @param [in]  ImageHandle  Handle for this image.
>>> +
>>> +  @retval EFI_SUCCESS             Success.
>>> +  @retval EFI_OUT_OF_RESOURCES    There was not enough memory to
>>> install the
>>> +                                  protocols.
>>> +  @retval EFI_INVALID_PARAMETER   A parameter is invalid.
>>> +
>>> +**/
>>> +STATIC
>>> +EFI_STATUS
>>> +PlatformHasAcpiDt (
>>> +  IN EFI_HANDLE           ImageHandle
>>> +  )
>>> +{
>>> +  if (!PcdGetBool (PcdForceNoAcpi)) {
>>> +    // Expose ACPI tables
>>> +    return gBS->InstallProtocolInterface (
>>> +                  &ImageHandle,
>>> +                  &gEdkiiPlatformHasAcpiGuid,
>>> +                  EFI_NATIVE_INTERFACE,
>>> +                  NULL
>>> +                  );
>>> +  }
>>> +
>>> +  // Expose the Device Tree.
>>> +  return gBS->InstallProtocolInterface (
>>> +                &ImageHandle,
>>> +                &gEdkiiPlatformHasDeviceTreeGuid,
>>> +                EFI_NATIVE_INTERFACE,
>>> +                NULL
>>> +                );
>>> +}
>>> +
>>> +/** Entry point for Kvmtool Platform Dxe
>>> +
>>> +  @param [in]  ImageHandle  Handle for this image.
>>> +  @param [in]  SystemTable  Pointer to the EFI system table.
>>> +
>>> +  @retval EFI_SUCCESS             Success.
>>> +  @retval EFI_OUT_OF_RESOURCES    There was not enough memory to
>>> install the
>>> +                                  protocols.
>>> +  @retval EFI_INVALID_PARAMETER   A parameter is invalid.
>>> +
>>> +**/
>>> +EFI_STATUS
>>> +EFIAPI
>>> +KvmtoolPlatformDxeEntryPoint (
>>> +  IN EFI_HANDLE           ImageHandle,
>>> +  IN EFI_SYSTEM_TABLE     *SystemTable
>>> +  )
>>> +{
>>> +  EFI_STATUS                     Status;
>>> +
>>> +  Status = PlatformHasAcpiDt (ImageHandle);
>>> +  if (EFI_ERROR (Status)) {
>>> +    goto Failed;
>>> +  }
>>> +
>>> +  return Status;
>>> +
>>> +Failed:
>>> +  ASSERT_EFI_ERROR (Status);
>>> +  CpuDeadLoop ();
>>> +
>>> +  return Status;
>>> +}
>>
>> Please don't use CpuDeadLoop()s in your drivers.
>>
>> Installing a protocol on an image handle like this should not ever fail,
>> and if it does, it is unlikely to be an issue in the driver itself. So
>> just use ASSERT_EFI_ERROR() here, and return EFI_SUCCESS.
> 
> I think Sami just followed the original code in
> "ArmVirtPkg/PlatformHasAcpiDtDxe".
> 
> I'm fine either way:
> 
> Acked-by: Laszlo Ersek <ler...@redhat.com>
> 
> Different question:
> 
> Should we ask Sami to become a designated reviewer (in Maintainers.txt)
> for the kvmtool-specific modules under ArmVirtPkg? Personally I'm
> unlikely to use kvmtool.

Apologies -- I now see that I had requested that under v1 (in October
2018... a long time ago), and I've also found the last patch now. (I
guess I thought of documenting the new modules in Maintainers.txt in the
same patches that added the new modules, but end-of-series is fine too.)

Thanks!
Laszlo

> 
> Thanks
> Laszlo
> 
>>
>>
>>> diff --git a/ArmVirtPkg/KvmtoolPlatformDxe/KvmtoolPlatformDxe.inf
>>> b/ArmVirtPkg/KvmtoolPlatformDxe/KvmtoolPlatformDxe.inf
>>> new file mode 100644
>>> index
>>> 0000000000000000000000000000000000000000..08a0fe5ce14469133479046385bdd48c22698639
>>>
>>> --- /dev/null
>>> +++ b/ArmVirtPkg/KvmtoolPlatformDxe/KvmtoolPlatformDxe.inf
>>> @@ -0,0 +1,47 @@
>>> +#/** @file
>>> +#
>>> +#  The KvmtoolPlatformDxe performs the platform specific
>>> initialization like:
>>> +#  - It decides if the firmware should expose ACPI or Device Tree-based
>>> +#    hardware description to the operating system.
>>> +#
>>> +#  Copyright (c) 2018 - 2020, ARM Limited. All rights reserved.
>>> +#
>>> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
>>> +#
>>> +#**/
>>> +
>>> +[Defines]
>>> +  INF_VERSION                    = 0x0001001B
>>> +  BASE_NAME                      = KvmtoolPlatformDxe
>>> +  FILE_GUID                      = 7479CCCD-D721-442A-8C73-A72DBB886669
>>> +  MODULE_TYPE                    = DXE_DRIVER
>>> +  VERSION_STRING                 = 1.0
>>> +  ENTRY_POINT                    = KvmtoolPlatformDxeEntryPoint
>>> +
>>> +[Sources]
>>> +  KvmtoolPlatformDxe.c
>>> +
>>> +[Packages]
>>> +  ArmVirtPkg/ArmVirtPkg.dec
>>> +  EmbeddedPkg/EmbeddedPkg.dec
>>> +  MdePkg/MdePkg.dec
>>> +  MdeModulePkg/MdeModulePkg.dec
>>> +
>>> +[LibraryClasses]
>>> +  BaseLib
>>> +  BaseMemoryLib
>>> +  DebugLib
>>> +  DxeServicesTableLib
>>> +  MemoryAllocationLib
>>> +  UefiBootServicesTableLib
>>> +  UefiDriverEntryPoint
>>> +
>>> +[Guids]
>>> +  gEdkiiPlatformHasAcpiGuid       ## SOMETIMES_PRODUCES ## PROTOCOL
>>> +  gEdkiiPlatformHasDeviceTreeGuid ## SOMETIMES_PRODUCES ## PROTOCOL
>>> +
>>> +[Pcd]
>>> +  gArmVirtTokenSpaceGuid.PcdForceNoAcpi
>>> +
>>> +[Depex]
>>> +  TRUE
>>>
>>
>>
>> 
>>
> 


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

View/Reply Online (#59551): https://edk2.groups.io/g/devel/message/59551
Mute This Topic: https://groups.io/mt/74200911/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to