Hi Laszlo,

This change is look good to me and I will take this change into edk2/OvmfPkg/LoongArchVirt/ which I'm porting. Thanks.

Reviewed-by: Chao Li <lic...@loongson.cn>



Thanks,
Chao
在 2023/10/20 20:18, Laszlo Ersek 写道:
RealTimeClockLib instances are consumed by edk2's
EmbeddedPkg/RealTimeClockRuntimeDxe driver. In its entry point function
InitializeRealTimeClock(), the driver:

(1) calls LibRtcInitialize(),

(2) sets the GetTime(), SetTime(), GetWakeupTime() and SetWakeupTime()
     runtime services to its own similarly-named functions -- where those
     functions wrap the corresponding RealTimeClockLib APIs,

(3) installs EFI_REAL_TIME_CLOCK_ARCH_PROTOCOL with a NULL protocol
     interface.

Steps (2) and (3) conform to PI v1.8 sections II-9.7.2.4 through
II-9.7.2.7.

However, this means that LibRtcInitialize() (of any RealTimeClockLib
instance) should not itself (a) set the GetTime(), SetTime(),
GetWakeupTime() and SetWakeupTime() runtime services, nor (b) install
EFI_REAL_TIME_CLOCK_ARCH_PROTOCOL. The runtime service pointers will be
overwritten in step (2) anyway, and step (3) will uselessly install a
second (NULL-interface) EFI_REAL_TIME_CLOCK_ARCH_PROTOCOL instance in the
protocol database. (The protocol only serves to notify the DXE Foundation
about said runtime services being available.)

Clean up LoongArchQemuPkg/LsRealTimeClockLib accordingly.

(Note that the lib instance INF file already does not list
UefiRuntimeServicesTableLib.)

Build-tested only (with "Loongson.dsc").

Cc: Bibo Mao<maob...@loongson.cn>
Cc: Chao Li<lic...@loongson.cn>
Cc: Xianglai li<lixiang...@loongson.cn>
Ref:https://bugzilla.tianocore.org/show_bug.cgi?id=4565
Signed-off-by: Laszlo Ersek<ler...@redhat.com>
---

Notes:
     context:-W

  
Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.inf
 |  3 ---
  
Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.c
   | 16 ----------------
  2 files changed, 19 deletions(-)

diff --git 
a/Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.inf
 
b/Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.inf
index 5aa95650f8ba..c5ab1a702167 100644
--- 
a/Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.inf
+++ 
b/Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.inf
@@ -40,8 +40,5 @@ [Pcd]
  [Guids]
    gEfiEventVirtualAddressChangeGuid
-[Protocols]
-  gEfiRealTimeClockArchProtocolGuid             # PROTOCOL ALWAYS_PRODUCED
-
  [Depex]
    TRUE
diff --git 
a/Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.c
 
b/Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.c
index eeac011a9400..954589ecb328 100644
--- 
a/Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.c
+++ 
b/Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.c
@@ -1,30 +1,28 @@
  /** @file
    Implement EFI RealTimeClock runtime services via RTC Lib.
Copyright (c) 2022, Loongson Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include <Uefi.h>
  #include <PiDxe.h>
#include <Guid/EventGroup.h>
  #include <Guid/GlobalVariable.h>
#include <Library/BaseLib.h>
  #include <Library/DebugLib.h>
  #include <Library/DxeServicesTableLib.h>
  #include <Library/IoLib.h>
  #include <Library/MemoryAllocationLib.h>
  #include <Library/PcdLib.h>
  #include <Library/RealTimeClockLib.h>
  #include <Library/TimeBaseLib.h>
  #include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
  #include <Library/UefiRuntimeLib.h>
-#include <Protocol/RealTimeClock.h>
  #include "LsRealTimeClock.h"
STATIC BOOLEAN mInitialized = FALSE;
@@ -291,46 +289,32 @@ EFIAPI
  LibRtcInitialize (
    IN EFI_HANDLE                            ImageHandle,
    IN EFI_SYSTEM_TABLE                      *SystemTable
    )
  {
    EFI_STATUS    Status;
-  EFI_HANDLE    Handle;
InitRtc ();
    Status = KvmtoolRtcMapMemory (ImageHandle, (mRtcBase & ~EFI_PAGE_MASK));
    if (EFI_ERROR (Status)) {
      DEBUG ((
        DEBUG_ERROR,
        "Failed to map memory for loongson 7A RTC. Status = %r\n",
        Status
        ));
      return Status;
    }
- // Setup the setters and getters
-  gRT->GetTime       = LibGetTime;
-  gRT->SetTime       = LibSetTime;
-
-  // Install the protocol
-  Handle = NULL;
-  Status = gBS->InstallMultipleProtocolInterfaces (
-                  &Handle,
-                  &gEfiRealTimeClockArchProtocolGuid,  NULL,
-                  NULL
-                 );
-  ASSERT_EFI_ERROR (Status);
-
    //
    // Register for the virtual address change event
    //
    Status = gBS->CreateEventEx (
                    EVT_NOTIFY_SIGNAL,
                    TPL_NOTIFY,
                    VirtualNotifyEvent,
                    NULL,
                    &gEfiEventVirtualAddressChangeGuid,
                    &mRtcVirtualAddrChangeEvent
                    );
    ASSERT_EFI_ERROR (Status);
    return Status;
  }








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


Reply via email to