From: Laszlo Ersek <lersek@redhat.com>
To: Jeff Fan <jeff.fan@intel.com>, edk2-devel@ml01.01.org
Cc: Michael D Kinney <michael.d.kinney@intel.com>,
Feng Tian <feng.tian@intel.com>,
Jiewen Yao <jiewen.yao@intel.com>
Subject: Re: [PATCH] UefiCpuPkg/CpuDxe: Add Local APIC memory mapped space in gDS
Date: Mon, 20 Feb 2017 10:11:09 +0100 [thread overview]
Message-ID: <c07bf826-997c-26ac-825a-de2388814dde@redhat.com> (raw)
In-Reply-To: <20170220084005.21924-1-jeff.fan@intel.com>
Hi Jeff,
On 02/20/17 09:40, Jeff Fan wrote:
> Local APIC memory mapped space should be added into gDS and be allocated.
> Otherwise, UEFI firmware cannot get correct memory map for it. For example,
> SMM profile feature needs to get the completed MMIO map to protect them.
>
> https://bugzilla.tianocore.org/show_bug.cgi?id=390
>
> Cc: Jiewen Yao <jiewen.yao@intel.com>
> Cc: Feng Tian <feng.tian@intel.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Jeff Fan <jeff.fan@intel.com>
> ---
> UefiCpuPkg/CpuDxe/CpuDxe.c | 39 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 39 insertions(+)
>
> diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c
> index 9fb6d76..71a08cd 100644
> --- a/UefiCpuPkg/CpuDxe/CpuDxe.c
> +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c
> @@ -887,6 +887,40 @@ IdleLoopEventCallback (
> CpuSleep ();
> }
>
> +/**
> + Add and allocate CPU local APIC memory mapped space.
> +
> + @param[in]ImageHandle Image handle this driver.
> +
> +**/
> +VOID
> +AddLocalApicMemorySpace (
> + IN EFI_HANDLE ImageHandle
> + )
> +{
> + EFI_STATUS Status;
> + EFI_PHYSICAL_ADDRESS BaseAddress;
> +
> + BaseAddress = (EFI_PHYSICAL_ADDRESS) GetLocalApicBaseAddress ();
> + Status = gDS->AddMemorySpace (
> + EfiGcdMemoryTypeMemoryMappedIo,
> + BaseAddress,
> + SIZE_4KB,
> + EFI_MEMORY_UC
> + );
> + ASSERT_EFI_ERROR (Status);
(1) This would break OVMF:
> Loading driver at 0x0007F510000 EntryPoint=0x0007F51027B CpuDxe.efi
> InstallProtocolInterface: [EfiLoadedImageDevicePathProtocol] 7EE08498
> InstallProtocolInterface: [EfiCpuArchProtocol] 7F522480
> Flushing GCD
> Flushing GCD
> Flushing GCD
> Flushing GCD
> Flushing GCD
> Flushing GCD
> Flushing GCD
> Flushing GCD
> Flushing GCD
> Flushing GCD
> Flushing GCD
> Flushing GCD
>
> ASSERT_EFI_ERROR (Status = Access Denied)
> ASSERT .../UefiCpuPkg/CpuDxe/CpuDxe.c(891): !EFI_ERROR (Status)
The reason for the assertion failure is that we add an uncacheable MMIO
resource descriptor HOB for the LAPIC range earlier, in
OvmfPkg/PlatformPei. When DXE starts up, it initializes the GCD memory
space accordingly, hence the above addition failure.
There was a similar issue in PciHostBridgeDxe: originally it tried to
add uncacheable MMIO space for the PCI bridges' apertures,
unconditionally. The solution was to check the GCD memory space map, and:
- for any existing, overlapping entries, check if their attributes were
compatible with UC,
- missing gaps were filled with new additions.
Please see commit 6474f1f156ee ("MdeModulePkg/PciHostBridge: Don't
assume resources are fully NonExistent", 2016-02-25).
(2) After the memory space addition, the allocation should be attempted,
I agree. But for that too, if it fails, that shouldn't be a fatal error.
Thanks
Laszlo
> +
> + Status = gDS->AllocateMemorySpace (
> + EfiGcdAllocateAddress,
> + EfiGcdMemoryTypeMemoryMappedIo,
> + 0,
> + SIZE_4KB,
> + &BaseAddress,
> + ImageHandle,
> + NULL
> + );
> + ASSERT_EFI_ERROR (Status);
> +}
>
> /**
> Initialize the state information for the CPU Architectural Protocol.
> @@ -947,6 +981,11 @@ InitializeCpu (
> RefreshGcdMemoryAttributes ();
>
> //
> + // Add and allocate local APIC memory mapped space
> + //
> + AddLocalApicMemorySpace (ImageHandle);
> +
> + //
> // Setup a callback for idle events
> //
> Status = gBS->CreateEventEx (
>
next prev parent reply other threads:[~2017-02-20 9:11 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-20 8:40 [PATCH] UefiCpuPkg/CpuDxe: Add Local APIC memory mapped space in gDS Jeff Fan
2017-02-20 9:11 ` Laszlo Ersek [this message]
2017-02-21 1:33 ` Fan, Jeff
2017-02-21 8:32 ` 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=c07bf826-997c-26ac-825a-de2388814dde@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