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 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 > Cc: Chao Li > Cc: Xianglai li > Ref:https://bugzilla.tianocore.org/show_bug.cgi?id=4565 > Signed-off-by: Laszlo Ersek > --- > > 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 > #include > > #include > #include > > #include > #include > #include > #include > #include > #include > #include > #include > #include > -#include > #include > -#include > #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/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-