From: "Laszlo Ersek" <lersek@redhat.com>
To: Anthony PERARD <anthony.perard@citrix.com>, devel@edk2.groups.io
Cc: Jordan Justen <jordan.l.justen@intel.com>,
Ard Biesheuvel <ardb+tianocore@kernel.org>,
xen-devel@lists.xenproject.org, Julien Grall <julien@xen.org>
Subject: Re: [PATCH v3 7/7] OvmfPkg/OvmfXen: Set PcdFSBClock
Date: Tue, 13 Apr 2021 12:09:05 +0200 [thread overview]
Message-ID: <fe734f47-7721-e9f4-29b6-40f711f46fe3@redhat.com> (raw)
In-Reply-To: <20210412133003.146438-8-anthony.perard@citrix.com>
On 04/12/21 15:30, Anthony PERARD wrote:
> Update gEfiMdePkgTokenSpaceGuid.PcdFSBClock so it can have the correct
> value when SecPeiDxeTimerLibCpu start to use it for the APIC timer.
>
> Currently, nothing appear to use the value in PcdFSBClock before
> XenPlatformPei had a chance to set it even though TimerLib is included
> in modules run before XenPlatformPei.
>
> XenPlatformPei doesn't use any of the functions that would use that
> value. No other modules in the PEI phase seems to use the TimerLib
> before PcdFSBClock is set. There are currently two other modules in
> the PEI phase that needs the TimerLib:
> - S3Resume2Pei, but only because LocalApicLib needs it, but nothing is
> using the value from PcdFSBClock.
> - CpuMpPei, but I believe it only runs after XenPlatformPei
>
> Before the PEI phase, there's the SEC phase, and SecMain needs
> TimerLib because of LocalApicLib. And it initialise the APIC timers
> for the debug agent. But I don't think any of the DebugLib that
> OvmfXen could use are actually using the *Delay functions in TimerLib,
> and so would not use the value from PcdFSBClock which would be
> uninitialised.
>
> A simple runtime test showed that TimerLib doesn't use PcdFSBClock
> value before it is set.
>
> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2490
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
> ---
>
> Notes:
> v3:
> - cast Freq in assert
> - fix typos
> - use correct assert to check Status
> v2:
> - keep the default value of PcdFSBClock because that is part of the syntax.
>
> OvmfPkg/OvmfXen.dsc | 4 +---
> OvmfPkg/XenPlatformPei/XenPlatformPei.inf | 1 +
> OvmfPkg/XenPlatformPei/Xen.c | 4 ++++
> 3 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/OvmfPkg/OvmfXen.dsc b/OvmfPkg/OvmfXen.dsc
> index 86abe277c349..e535503e385d 100644
> --- a/OvmfPkg/OvmfXen.dsc
> +++ b/OvmfPkg/OvmfXen.dsc
> @@ -447,9 +447,6 @@ [PcdsFixedAtBuild]
> # Point to the MdeModulePkg/Application/UiApp/UiApp.inf
> gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
>
> - ## Xen vlapic's frequence is 100 MHz
> - gEfiMdePkgTokenSpaceGuid.PcdFSBClock|100000000
> -
> # We populate DXE IPL tables with 1G pages preferably on Xen
> gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable|TRUE
>
> @@ -476,6 +473,7 @@ [PcdsDynamicDefault]
> gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Base|0x0
> gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size|0x800000000
>
> + gEfiMdePkgTokenSpaceGuid.PcdFSBClock|100000000
> gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|0
>
> # Set video resolution for text setup.
> diff --git a/OvmfPkg/XenPlatformPei/XenPlatformPei.inf b/OvmfPkg/XenPlatformPei/XenPlatformPei.inf
> index 5732d2188871..87dd4b24679a 100644
> --- a/OvmfPkg/XenPlatformPei/XenPlatformPei.inf
> +++ b/OvmfPkg/XenPlatformPei/XenPlatformPei.inf
> @@ -85,6 +85,7 @@ [Pcd]
> gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode
> gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable
> gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask
> + gEfiMdePkgTokenSpaceGuid.PcdFSBClock
> gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy
> gUefiCpuPkgTokenSpaceGuid.PcdCpuLocalApicBaseAddress
>
> diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c
> index 8b06bebd7731..2dc9f9ff8f3c 100644
> --- a/OvmfPkg/XenPlatformPei/Xen.c
> +++ b/OvmfPkg/XenPlatformPei/Xen.c
> @@ -632,5 +632,9 @@ CalibrateLapicTimer (
> Freq = DivU64x64Remainder (Dividend, TscTick2 - TscTick, NULL);
> DEBUG ((DEBUG_INFO, "APIC Freq % 8lu Hz\n", Freq));
>
> + ASSERT ((UINT32)Freq <= MAX_UINT32);
> + Status = PcdSet32S (PcdFSBClock, Freq);
You misunderstood my request for the explicit cast. I meant that for the
"Freq" argument of the PcdSet32S() function call. Adding it inside the
ASSERT() makes the assertion a tautology, hence, useless. Whereas,
casting Freq to UINT32 *after* the ASSERT() is (a) safe, (b) shuts up a
potential "truncation warning" from visual studio (i.e. when the cast
happens implicitly, due to passing the UINT64 Freq as the 2nd, UINT32,
parameter of PcdSet32S()).
But, I'll fix this up for you when I merge v3; no need to send v4.
Thanks
Laszlo
> + ASSERT_EFI_ERROR (Status);
> +
> UnmapXenPage (SharedInfo);
> }
>
next prev parent reply other threads:[~2021-04-13 10:09 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-12 13:29 [PATCH v3 0/7] OvmfXen: Set PcdFSBClock at runtime Anthony PERARD
2021-04-12 13:29 ` [PATCH v3 1/7] OvmfPkg/XenResetVector: Silent a warning from nasm Anthony PERARD
2021-04-12 13:29 ` [PATCH v3 2/7] MdePkg: Allow PcdFSBClock to by Dynamic Anthony PERARD
2021-04-13 0:59 ` 回复: [edk2-devel] " gaoliming
2021-04-13 10:18 ` Laszlo Ersek
2021-04-12 13:29 ` [PATCH v3 3/7] OvmfPkg/IndustryStandard/Xen: Apply EDK2 coding style to XEN_VCPU_TIME_INFO Anthony PERARD
2021-04-12 13:30 ` [PATCH v3 4/7] OvmfPkg/IndustryStandard: Introduce PageTable.h Anthony PERARD
2021-04-13 9:59 ` Laszlo Ersek
2021-04-12 13:30 ` [PATCH v3 5/7] OvmfPkg/XenPlatformPei: Map extra physical address Anthony PERARD
2021-04-12 13:30 ` [PATCH v3 6/7] OvmfPkg/XenPlatformPei: Calibrate APIC timer frequency Anthony PERARD
2021-04-13 10:04 ` Laszlo Ersek
2021-04-12 13:30 ` [PATCH v3 7/7] OvmfPkg/OvmfXen: Set PcdFSBClock Anthony PERARD
2021-04-13 10:09 ` Laszlo Ersek [this message]
2021-04-13 12:10 ` [edk2-devel] [PATCH v3 0/7] OvmfXen: Set PcdFSBClock at runtime Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fe734f47-7721-e9f4-29b6-40f711f46fe3@redhat.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox