From: Gua Guo <gua....@intel.com> RTC runtime is unable to get dynamic PCD value after booting to OS using runtime services.
Resolution: Cache the dynamic PCD value in RTC driver entry point Cc: Ray Ni <ray...@intel.com> Cc: Michael D Kinney <michael.d.kin...@intel.com> Signed-off-by: Gua Guo <gua....@intel.com> --- .../PcatRealTimeClockRuntimeDxe/PcRtc.c | 15 ++++++++------- .../PcatRealTimeClockRuntimeDxe/PcRtcEntry.c | 5 +++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtc.c b/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtc.c index d8b9fa8376..3f114dce5d 100644 --- a/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtc.c +++ b/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtc.c @@ -13,7 +13,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent extern UINTN mRtcIndexRegister; extern UINTN mRtcTargetRegister; - +extern UINTN mRtcIndexRegisterIo; +extern UINTN mRtcTargetRegisterIo; // // Days of month. // @@ -72,10 +73,10 @@ IoRtcRead ( ) { IoWrite8 ( - PcdGet8 (PcdRtcIndexRegister), - (UINT8)(Address | (UINT8)(IoRead8 (PcdGet8 (PcdRtcIndexRegister)) & 0x80)) + mRtcIndexRegisterIo, + (UINT8)(Address | (UINT8)(IoRead8 (mRtcIndexRegisterIo) & 0x80)) ); - return IoRead8 (PcdGet8 (PcdRtcTargetRegister)); + return IoRead8 (mRtcTargetRegisterIo); } /** @@ -94,10 +95,10 @@ IoRtcWrite ( ) { IoWrite8 ( - PcdGet8 (PcdRtcIndexRegister), - (UINT8)(Address | (UINT8)(IoRead8 (PcdGet8 (PcdRtcIndexRegister)) & 0x80)) + mRtcIndexRegisterIo, + (UINT8)(Address | (UINT8)(IoRead8 (mRtcIndexRegisterIo) & 0x80)) ); - IoWrite8 (PcdGet8 (PcdRtcTargetRegister), Data); + IoWrite8 (mRtcTargetRegisterIo, Data); } /** diff --git a/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtcEntry.c b/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtcEntry.c index e6e9458d75..23e87978bf 100644 --- a/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtcEntry.c +++ b/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtcEntry.c @@ -18,6 +18,8 @@ STATIC EFI_EVENT mVirtualAddrChangeEvent; UINTN mRtcIndexRegister; UINTN mRtcTargetRegister; +UINTN mRtcIndexRegisterIo; +UINTN mRtcTargetRegisterIo; /** Returns the current time and date information, and the time-keeping capabilities @@ -164,6 +166,9 @@ InitializePcRtc ( if (FeaturePcdGet (PcdRtcUseMmio)) { mRtcIndexRegister = (UINTN)PcdGet64 (PcdRtcIndexRegister64); mRtcTargetRegister = (UINTN)PcdGet64 (PcdRtcTargetRegister64); + } else { + mRtcIndexRegisterIo = (UINTN)PcdGet8 (PcdRtcIndexRegister); + mRtcTargetRegisterIo = (UINTN)PcdGet8 (PcdRtcTargetRegister); } Status = PcRtcInit (&mModuleGlobal); -- 2.39.2.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#105099): https://edk2.groups.io/g/devel/message/105099 Mute This Topic: https://groups.io/mt/99057517/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-