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]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to