Hello all:

I have some questions related to what I think is a recent change in the OVMF 
code.

I checked out the EDK2 code to build a set of OVMF images for use with QEMU. 
I'm using QEMU 1.1.1 on FreeBSD/amd64 9.1-RELEASE.

When I did the svn checkout, I got revision 15189.

I was able to build the firmware for both IA32 and X64 (after first setting up  
the cross-compiler environment with mingw-gcc-build.py and building the 
BaseTools for FreeBSD). I used the general UNIX-based instructions, and for 
the most part, building OVMF on FreeBSD is pretty painless. (The only real nit 
is that edk2/BaseTools/Source/C/GenFv/GenFvInternalLib.c wants <uuid/uuid.h>, 
but on FreeBSD it's just <uuid.h>. Everything else works just like it says on 
the box.)

I added the openssl patch to the CryptoPkg patch and built with the following 
commands:

build -a X64 -p OvmfPkg/OvmfPkgX64.dsc \
        -DFD_SIZE_2MB -DSECURE_BOOT_ENABLE=TRUE

build -a IA32 -p OvmfPkg/OvmfPkgIa32.dsc \
        -DFD_SIZE_2MB -DSECURE_BOOT_ENABLE=TRUE

The resulting OVMF images boot up and run with QEMU just fine, however I 
noticed one major difference in behavior compared to the images that I built 
the last time around (which was back in April/May of last year).

The difference is in the memory map. There is a large (2MB) block at address 
0x820000 marked as ACPI NVS. Below is the output from memmap run from the 
shell that shows this (this is with a simulation using qemu-system-x86-64 
using 2GB of RAM):

[...]
Shell> memmap -b
Type      Start            End              #pages             Attributes
Available 0000000000000000-000000000009FFFF 00000000000000A0 000000000000000F
Available 0000000000100000-000000000081FFFF 0000000000000720 000000000000000F
ACPI_NVS  0000000000820000-00000000008FFFFF 00000000000000E0 000000000000000F
BS_Data   0000000000900000-0000000000FFFFFF 0000000000000700 000000000000000F
Available 0000000001000000-000000007BFFFFFF 000000000007B000 000000000000000F
BS_Data   000000007C000000-000000007C01FFFF 0000000000000020 000000000000000F
Available 000000007C020000-000000007E32EFFF 000000000000230F 000000000000000F
BS_Data   000000007E32F000-000000007E353FFF 0000000000000025 000000000000000F
Available 000000007E354000-000000007E364FFF 0000000000000011 000000000000000F
BS_Data   000000007E365000-000000007E49AFFF 0000000000000136 000000000000000F
LoaderCode 000000007E49B000-000000007E56EFFF 00000000000000D4 000000000000000F
BS_Data   000000007E56F000-000000007EA29FFF 00000000000004BB 000000000000000F
BS_Code   000000007EA2A000-000000007EC0BFFF 00000000000001E2 000000000000000F
RT_Data   000000007EC0C000-000000007ECBEFFF 00000000000000B3 800000000000000F
RT_Code   000000007ECBF000-000000007ED51FFF 0000000000000093 800000000000000F
BS_Data   000000007ED52000-000000007FD51FFF 0000000000001000 000000000000000F
Available 000000007FD52000-000000007FD53FFF 0000000000000002 000000000000000F
BS_Code   000000007FD54000-000000007FED1FFF 000000000000017E 000000000000000F
RT_Code   000000007FED2000-000000007FF01FFF 0000000000000030 800000000000000F
RT_Data   000000007FF02000-000000007FF25FFF 0000000000000024 800000000000000F
Reserved  000000007FF26000-000000007FF29FFF 0000000000000004 000000000000000F
ACPIRec   000000007FF2A000-000000007FF31FFF 0000000000000008 000000000000000F
ACPI_NVS  000000007FF32000-000000007FF35FFF 0000000000000004 000000000000000F
BS_Data   000000007FF36000-000000007FFCFFFF 000000000000009A 000000000000000F
RT_Data   000000007FFD0000-000000007FFFFFFF 0000000000000030 800000000000000F
RT_Data   00000000FFE00000-00000000FFFFFFFF 0000000000000200 8000000000000001
  Reserved  :          4 Pages (16,384)
  LoaderCode:        212 Pages (868,352)
  LoaderData:          0 Pages (0)
  BS_Code   :        864 Pages (3,538,944)
  BS_Data   :      7,632 Pages (31,260,672)
  RT_Code   :        195 Pages (798,720)
  RT_Data   :        775 Pages (3,174,400)
  ACPI Recl :          8 Pages (32,768)
  ACPI NVS  :        228 Pages (933,888)
  MMIO      :          0 Pages (0)
  Available :    514,786 Pages (2,108,563,456)
Total Memory: 2049 MB (2,149,187,584 Bytes)
[...]

After some investigation, I found that this has to do with the following code 
in OvmfPkg/PlatformPei/Fv.c:

[...]
  DEBUG ((EFI_D_INFO, "Platform PEI Firmware Volume Initialization\n"));

  //
  // Create a memory allocation HOB for the PEI FV.
  //
  // This is marked as ACPI NVS so it will still be available on S3 resume.
  //
  BuildMemoryAllocationHob (
    PcdGet32 (PcdOvmfPeiMemFvBase),
    PcdGet32 (PcdOvmfPeiMemFvSize),
    EfiACPIMemoryNVS
    );
[...]

The PeiFv address is set to 0x800000 in OvmfPkgX64.fdf and OvmfPkgIa32.fdf:

[...]
[FD.MEMFD]
BaseAddress   = 0x800000
Size          = 0x800000
ErasePolarity = 1
BlockSize     = 0x10000
NumBlocks     = 0x80
   
0x000000|0x006000
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize

0x010000|0x008000
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
   
0x020000|0x0E0000
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvBase|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvSize
FV = PEIFV

0x100000|0x700000
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvSize
FV = DXEFV
[...]

My questions are:

- What exactly is this block for? It's not clear to me what the PEI module 
does, though it seems to have something to do with bootstrapping the firmware 
out of the flash region. Once the firmware is up and running, does this really 
need to be preserved?

- If it must be preserved, is there any way to move this to some other 
location in RAM? (I tried fiddling with the BaseAddress value in the .fdf 
files, and that helps, but that's not really a portable solution.

It happens that, at least for me, this block creates a memory hole in the 
worst possible location. I can work around the problem a bit by changing the 
BaseAddress shown above to a location a bit higher up in RAM, but something 
tells me there's got to be a better way.

Thanks in advance for any info you can provide.

-Bill

-- 
=============================================================================
-Bill Paul            (510) 749-2329 | Senior Member of Technical Staff,
                 wp...@windriver.com | Master of Unix-Fu - Wind River Systems
=============================================================================
   "I put a dollar in a change machine. Nothing changed." - George Carlin
=============================================================================

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to