[edk2-devel] mmio mappings for runtime service

Michael D Kinney michael.d.kinney at intel.com
Mon Aug 30 16:26:32 UTC 2021


Hi Gerd,

The following library provides an example of all the steps to register an MMIO range for RT access.

https://github.com/tianocore/edk2/blob/master/MdePkg/Library/DxeRuntimePciExpressLib/PciExpressLib.c

The example is from PCI Express, but the PCI Config space for PCI Express is an MMIO window.  This
library contains a Constructor/Destructor to create/close a Set Virtual Address Map event.  It has the 
Set Virtual Address Map Event Notification Function and a function to request a specific 4KB 
portion of the 256 MB MMIO window to be marked as RT.

DxeRuntimePciExpressLibConstructor()
DxeRuntimePciExpressLibDestructor()
DxeRuntimePciExpressLibVirtualNotify()
PciExpressRegisterForRuntimeAccess()

Best regards,

Mike


> -----Original Message-----
> From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Yao, Jiewen
> Sent: Monday, August 30, 2021 6:02 AM
> To: devel at edk2.groups.io; kraxel at redhat.com
> Subject: Re: [edk2-devel] mmio mappings for runtime service
> 
> The BIOS driver must set EFI_RUNTIME_MEMORY attribute for the EfiGcdMemoryTypeMemoryMappedIo region with GCD service gDS-
> >SetMemorySpaceAttributes().
> Then DXE will report EfiMemoryMappedIO with EFI_RUNTIME_MEMORY attribute in UEFI memory map.
> The OS will gBS->GetMemoryMap() and assign virtual address for the MMIO, and gRT->SetVirtualAddressMap() back to the BIOS.
> 
> Finally, the BIOS driver can gRT->ConvertPointer() the MMIO physical address to virtual address, then access it at
> runtime.
> 
> Thank you
> Yao Jiewen
> 
> > -----Original Message-----
> > From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Gerd
> > Hoffmann
> > Sent: Monday, August 30, 2021 6:24 PM
> > To: devel at edk2.groups.io
> > Subject: [edk2-devel] mmio mappings for runtime service
> >
> >   Hi,
> >
> > What is the correct way to make sure runtime services can access
> > mmio registers, i.e. that there is a mapping in the page tables
> > for the mmio page needed?
> >
> > Is that the job of the firmware?
> > Or should the OS calling the runtime service handle that?
> > In case of the latter: How does the OS figure which pages are needed?
> >
> > thanks,
> >   Gerd
> >
> >
> >
> >
> >
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#79956): https://edk2.groups.io/g/devel/message/79956
Mute This Topic: https://groups.io/mt/85247585/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list