From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web11.4171.1684917765338726866 for ; Wed, 24 May 2023 01:42:46 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=iMV3zvAN; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: gua.guo@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684917766; x=1716453766; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=DWjSspkY2Ut+M5WrpJpYClgaJGQygPkwOd6HekPiw/M=; b=iMV3zvAN4n5wNBxG2C525e0X89BAeeqcBPLwUdAjtmgu9OBBAJetV+A3 3NRVhuyih5OF912avfFdPxjk29HG9jTn4MXRwzU0yvJODah/WO8E30O5S zJg2i4uBwCyh0qvCukC3SKXGcASg3YPpBu6Y91k1hg0lVQO17PHahashF Wxatxh7RZKWcDNfm493TKDpDDyCoeTMqnHp+pkg0OpsOGoXh2GbW1EZjK yk8f3dfbgrgUu3sPy3lQT+SIqsWXUlpxrVweC5C5OnhSkU9Xh+FykzYx6 zlw2YqU5XLl856JDyF5P1PwJPc3k1d8KUlI8Lmc0QjBXQDzr6xABmwwin w==; X-IronPort-AV: E=McAfee;i="6600,9927,10719"; a="381745538" X-IronPort-AV: E=Sophos;i="6.00,188,1681196400"; d="scan'208";a="381745538" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 May 2023 01:42:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10719"; a="848658007" X-IronPort-AV: E=Sophos;i="6.00,188,1681196400"; d="scan'208";a="848658007" Received: from gguo-desk.gar.corp.intel.com ([10.5.215.23]) by fmsmga001.fm.intel.com with ESMTP; 24 May 2023 01:42:45 -0700 From: "Guo, Gua" To: devel@edk2.groups.io Cc: gua.guo@intel.com, Ray Ni , Michael D Kinney Subject: [PATCH v4 1/1] PcAtChipsetPkg: RTC Runtime unable to get correct IO port by PCD Date: Wed, 24 May 2023 16:42:39 +0800 Message-Id: <20230524084239.1223-2-gua.guo@intel.com> X-Mailer: git-send-email 2.39.2.windows.1 In-Reply-To: <20230524084239.1223-1-gua.guo@intel.com> References: <20230524084239.1223-1-gua.guo@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Gua Guo 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 Cc: Michael D Kinney Signed-off-by: Gua Guo --- .../PcatRealTimeClockRuntimeDxe/PcRtc.c | 36 ++++++++++--------- .../PcatRealTimeClockRuntimeDxe/PcRtcEntry.c | 14 ++++++-- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtc.c b/PcAtChips= etPkg/PcatRealTimeClockRuntimeDxe/PcRtc.c index d8b9fa8376..ff1b019ce2 100644 --- a/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtc.c +++ b/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtc.c @@ -11,9 +11,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent =0D #include "PcRtc.h"=0D =0D -extern UINTN mRtcIndexRegister;=0D -extern UINTN mRtcTargetRegister;=0D -=0D +extern UINTN mRtcIndexRegister;=0D +extern UINTN mRtcTargetRegister;=0D +extern UINT16 mRtcDefaultYear;=0D +extern UINT16 mMinimalValidYear;=0D +extern UINT16 mMaximalValidYear;=0D //=0D // Days of month.=0D //=0D @@ -72,10 +74,10 @@ IoRtcRead ( )=0D {=0D IoWrite8 (=0D - PcdGet8 (PcdRtcIndexRegister),=0D - (UINT8)(Address | (UINT8)(IoRead8 (PcdGet8 (PcdRtcIndexRegister)) & 0x= 80))=0D + mRtcIndexRegister,=0D + (UINT8)(Address | (UINT8)(IoRead8 (mRtcIndexRegister) & 0x80))=0D );=0D - return IoRead8 (PcdGet8 (PcdRtcTargetRegister));=0D + return IoRead8 (mRtcTargetRegister);=0D }=0D =0D /**=0D @@ -94,10 +96,10 @@ IoRtcWrite ( )=0D {=0D IoWrite8 (=0D - PcdGet8 (PcdRtcIndexRegister),=0D - (UINT8)(Address | (UINT8)(IoRead8 (PcdGet8 (PcdRtcIndexRegister)) & 0x= 80))=0D + mRtcIndexRegister,=0D + (UINT8)(Address | (UINT8)(IoRead8 (mRtcIndexRegister) & 0x80))=0D );=0D - IoWrite8 (PcdGet8 (PcdRtcTargetRegister), Data);=0D + IoWrite8 (mRtcTargetRegister, Data);=0D }=0D =0D /**=0D @@ -317,8 +319,8 @@ PcRtcInit ( Time.Hour =3D RTC_INIT_HOUR;=0D Time.Day =3D RTC_INIT_DAY;=0D Time.Month =3D RTC_INIT_MONTH;=0D - Time.Year =3D MAX (PcdGet16 (PcdRtcDefaultYear), PcdGet16 (PcdMi= nimalValidYear));=0D - Time.Year =3D MIN (Time.Year, PcdGet16 (PcdMaximalValidYear));=0D + Time.Year =3D MAX (mRtcDefaultYear, mMinimalValidYear);=0D + Time.Year =3D MIN (Time.Year, mMaximalValidYear);=0D Time.Nanosecond =3D 0;=0D Time.TimeZone =3D EFI_UNSPECIFIED_TIMEZONE;=0D Time.Daylight =3D 0;=0D @@ -358,8 +360,8 @@ PcRtcInit ( Time.Hour =3D RTC_INIT_HOUR;=0D Time.Day =3D RTC_INIT_DAY;=0D Time.Month =3D RTC_INIT_MONTH;=0D - Time.Year =3D MAX (PcdGet16 (PcdRtcDefaultYear), PcdGet16 (PcdMini= malValidYear));=0D - Time.Year =3D MIN (Time.Year, PcdGet16 (PcdMaximalValidYear));=0D + Time.Year =3D MAX (mRtcDefaultYear, mMinimalValidYear);=0D + Time.Year =3D MIN (Time.Year, mMaximalValidYear);=0D Time.Nanosecond =3D 0;=0D Time.TimeZone =3D Global->SavedTimeZone;=0D Time.Daylight =3D Global->Daylight;=0D @@ -1031,8 +1033,8 @@ ConvertRtcTimeToEfiTime ( // Century is 19 if RTC year >=3D 70,=0D // Century is 20 otherwise.=0D //=0D - Century =3D (UINT8)(PcdGet16 (PcdMinimalValidYear) / 100);=0D - if (Time->Year < PcdGet16 (PcdMinimalValidYear) % 100) {=0D + Century =3D (UINT8)(mMinimalValidYear / 100);=0D + if (Time->Year < mMinimalValidYear % 100) {=0D Century++;=0D }=0D =0D @@ -1114,8 +1116,8 @@ RtcTimeFieldsValid ( IN EFI_TIME *Time=0D )=0D {=0D - if ((Time->Year < PcdGet16 (PcdMinimalValidYear)) ||=0D - (Time->Year > PcdGet16 (PcdMaximalValidYear)) ||=0D + if ((Time->Year < mMinimalValidYear) ||=0D + (Time->Year > mMaximalValidYear) ||=0D (Time->Month < 1) ||=0D (Time->Month > 12) ||=0D (!DayValid (Time)) ||=0D diff --git a/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtcEntry.c b/PcAt= ChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtcEntry.c index e6e9458d75..b600df4879 100644 --- a/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtcEntry.c +++ b/PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcRtcEntry.c @@ -16,8 +16,11 @@ EFI_HANDLE mHandle =3D NULL; =0D STATIC EFI_EVENT mVirtualAddrChangeEvent;=0D =0D -UINTN mRtcIndexRegister;=0D -UINTN mRtcTargetRegister;=0D +UINTN mRtcIndexRegister;=0D +UINTN mRtcTargetRegister;=0D +UINT16 mRtcDefaultYear;=0D +UINT16 mMinimalValidYear;=0D +UINT16 mMaximalValidYear;=0D =0D /**=0D Returns the current time and date information, and the time-keeping capa= bilities=0D @@ -164,8 +167,15 @@ InitializePcRtc ( if (FeaturePcdGet (PcdRtcUseMmio)) {=0D mRtcIndexRegister =3D (UINTN)PcdGet64 (PcdRtcIndexRegister64);=0D mRtcTargetRegister =3D (UINTN)PcdGet64 (PcdRtcTargetRegister64);=0D + } else {=0D + mRtcIndexRegister =3D (UINTN)PcdGet8 (PcdRtcIndexRegister);=0D + mRtcTargetRegister =3D (UINTN)PcdGet8 (PcdRtcTargetRegister);=0D }=0D =0D + mRtcDefaultYear =3D PcdGet16 (PcdRtcDefaultYear);=0D + mMinimalValidYear =3D PcdGet16 (PcdMinimalValidYear);=0D + mMaximalValidYear =3D PcdGet16 (PcdMaximalValidYear);=0D +=0D Status =3D PcRtcInit (&mModuleGlobal);=0D ASSERT_EFI_ERROR (Status);=0D =0D --=20 2.39.2.windows.1