mbox series

[edk2,v3,00/16,Arm|ArmVirt|MdePkg|Embedded] Pkg: lift 40-bit IPA space limit

Message ID 20181128143357.991-1-ard.biesheuvel@linaro.org
Headers show
Series Pkg: lift 40-bit IPA space limit | expand

Message

Ard Biesheuvel Nov. 28, 2018, 2:33 p.m. UTC
This v3 subsumes and/or supersedes

[PATCH v2 00/13] ArmPkg, ArmVirtPkg: lift 40-bit IPA space limit
[PATCH] MdePkg/ProcessorBind.h AARCH64: limit MAX_ADDRESS to 48 bits
[PATCH v2 0/2] ArmVirtPkg: remove high peripheral space mapping

The ArmVirtQemu targets currently limit the size of the IPA space to
40 bits because that is all what KVM supports. However, this is about
to change, and so we need to update the code if we want to ensure that
our UEFI firmware builds can keep running on systems that set values
other than 40 (which could be > 40 or < 40)

This series refactors how we handle the maximum size of the physical
address space supported by the CPU in relation with the size of UEFI's
1:1 mapping and the size of the GCD memory space map, taking the following
observations into account:
- the range of the linear mapping can be tied to whatever the CPU supports
  (as long as it doesn't exceed what the architecture permits for 4k pages)
  since we mostly already use the maximum of 4 levels anyway, and there is
  no memory cost involved beyond that
- there is usually no point in mapping the entire address space, which does
  involve a memory cost
- the GCD memory space may be required to cover more than what UEFI can
  address itself, since it is the based for the UEFI memory map that is
  provided to the OS

Patches #1 and #2 remove some unused code to avoid having to fix it.

Patches #3 and #4 update ArmVirtQemu and ArmVirtQemuKernel to drop the high
peripheral space mapping, and map whatever may reside there explicitly
(currently only the ECAM space in practice, but the MMIO view of the PCI
I/O space is mapped explicitly as well)

Patch #5 was sent out before individually, and sets MAX_ADDRESS to the
maximum value AArch64 can map in UEFI which runs with 4k pages.

Patch #6 adds a helper to ArmLib to read the number of supported address
bits and take this into account in the page table code (#8), which allows
PcdPrePiCpuMemorySize to assume a value that exceeds the capabilities of
the CPU.

Patch #7 is mostly a cleanup patch, to switch to the new helper added in
patch #6. No functional changes intended.

Patches #9 to #12 modify building of the CPU hob (and thus the size of the
GCD memory space) based on the CPU capabilities rather than the value of 
PcdPrePiCpuMemorySize, which is dropped in the last patch.

Pacthes #13 and #14 remove some needless references to PcdPrePiCpuMemorySize

Patch #15 drops the overrides of PcdPrePiCpuMemorySize from all ArmVirtPkg
platforms.

Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Eric Auger <eric.auger@redhat.com>
Cc: Andrew Jones <drjones@redhat.com>
Cc: Philippe Mathieu-Daude <philmd@redhat.com>
Cc: Julien Grall <julien.grall@linaro.org>

Ard Biesheuvel (16):
  EmbeddedPkg/TemplateSec: remove unused module
  EmbeddedPkg/PrePiHobLib: drop CreateHobList() from library
  ArmVirtPkg/FdtPciHostBridgeLib: map ECAM and I/O spaces in GCD memory
    map
  ArmVirtPkg/QemuVirtMemInfoLib: remove 1:1 mapping of top of PA range
  MdePkg/ProcessorBind.h AARCH64: limit MAX_ADDRESS to 48 bits
  ArmPkg/ArmLib: add support for reading the max physical address space
    size
  ArmVirtPkg/XenVirtMemInfoLib: refactor reading of the PA space size
  ArmPkg/ArmMmuLib: take the CPU supported maximum PA space into account
  ArmPkg/CpuPei: base GCD memory space size on CPU's PA range
  ArmPlatformPkg/PrePi: base GCD memory space size on CPU's PA range
  ArmVirtPkg/PrePi: base GCD memory space size on CPU's PA range
  BeagleBoardPkg/PrePi: base GCD memory space size on CPU's PA range
  ArmPlatformPkg/PlatformPei: drop unused PCD references
  EmbeddedPkg/PrePiLib: drop unused PCD reference
  ArmVirtPkg: drop PcdPrePiCpuMemorySize assignments from all platforms
  EmbeddedPkg/EmbeddedPkg.dec: drop PcdPrePiCpuMemorySize declarations

 EmbeddedPkg/EmbeddedPkg.dec                   |  4 -
 ArmVirtPkg/ArmVirt.dsc.inc                    |  3 -
 ArmVirtPkg/ArmVirtQemu.dsc                    |  4 -
 ArmVirtPkg/ArmVirtQemuKernel.dsc              |  4 -
 ArmPkg/Drivers/CpuPei/CpuPei.inf              |  1 -
 ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf    |  3 -
 ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf     |  3 -
 ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf |  3 -
 ArmPlatformPkg/PlatformPei/PlatformPeim.inf   |  3 -
 ArmPlatformPkg/PrePi/PeiMPCore.inf            |  1 -
 ArmPlatformPkg/PrePi/PeiUniCore.inf           |  1 -
 .../FdtPciHostBridgeLib.inf                   |  1 +
 .../QemuVirtMemInfoLib/QemuVirtMemInfoLib.inf |  7 --
 .../QemuVirtMemInfoPeiLib.inf                 |  7 --
 .../XenVirtMemInfoLib/XenVirtMemInfoLib.inf   |  6 --
 .../PrePi/ArmVirtPrePiUniCoreRelocatable.inf  |  1 -
 BeagleBoardPkg/PrePi/PeiUniCore.inf           |  1 -
 EmbeddedPkg/Library/PrePiLib/PrePiLib.inf     |  1 -
 EmbeddedPkg/TemplateSec/TemplateSec.inf       | 65 ----------------
 ArmPkg/Include/Library/ArmLib.h               |  6 ++
 EmbeddedPkg/Include/Library/PrePiLib.h        | 18 -----
 MdePkg/Include/AArch64/ProcessorBind.h        |  4 +-
 ArmPkg/Drivers/CpuPei/CpuPei.c                |  2 +-
 .../Library/ArmMmuLib/AArch64/ArmMmuLibCore.c | 11 ++-
 ArmPlatformPkg/PrePi/PrePi.c                  |  2 +-
 .../FdtPciHostBridgeLib/FdtPciHostBridgeLib.c | 46 ++++++++++-
 .../QemuVirtMemInfoLib/QemuVirtMemInfoLib.c   | 25 ++----
 .../XenVirtMemInfoLib/XenVirtMemInfoLib.c     | 11 ++-
 ArmVirtPkg/PrePi/PrePi.c                      |  2 +-
 BeagleBoardPkg/PrePi/PrePi.c                  |  2 +-
 EmbeddedPkg/Library/PrePiHobLib/Hob.c         | 41 ----------
 EmbeddedPkg/TemplateSec/TemplateSec.c         | 76 -------------------
 ArmPkg/Library/ArmLib/AArch64/ArmLibSupport.S | 17 +++++
 ArmPkg/Library/ArmLib/Arm/ArmLibSupport.S     |  8 ++
 ArmPkg/Library/ArmLib/Arm/ArmLibSupport.asm   |  8 ++
 .../QemuVirtMemInfoLib/AArch64/PhysAddrTop.S  | 39 ----------
 .../QemuVirtMemInfoLib/Arm/PhysAddrTop.S      | 24 ------
 .../XenVirtMemInfoLib/AArch64/PhysAddrTop.S   | 39 ----------
 .../XenVirtMemInfoLib/Arm/PhysAddrTop.S       | 24 ------
 39 files changed, 110 insertions(+), 414 deletions(-)
 delete mode 100644 EmbeddedPkg/TemplateSec/TemplateSec.inf
 delete mode 100644 EmbeddedPkg/TemplateSec/TemplateSec.c
 delete mode 100644 ArmVirtPkg/Library/QemuVirtMemInfoLib/AArch64/PhysAddrTop.S
 delete mode 100644 ArmVirtPkg/Library/QemuVirtMemInfoLib/Arm/PhysAddrTop.S
 delete mode 100644 ArmVirtPkg/Library/XenVirtMemInfoLib/AArch64/PhysAddrTop.S
 delete mode 100644 ArmVirtPkg/Library/XenVirtMemInfoLib/Arm/PhysAddrTop.S

-- 
2.19.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Ard Biesheuvel Nov. 29, 2018, 5:59 p.m. UTC | #1
On Wed, 28 Nov 2018 at 15:34, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
>

> This v3 subsumes and/or supersedes

>

> [PATCH v2 00/13] ArmPkg, ArmVirtPkg: lift 40-bit IPA space limit

> [PATCH] MdePkg/ProcessorBind.h AARCH64: limit MAX_ADDRESS to 48 bits

> [PATCH v2 0/2] ArmVirtPkg: remove high peripheral space mapping

>

> The ArmVirtQemu targets currently limit the size of the IPA space to

> 40 bits because that is all what KVM supports. However, this is about

> to change, and so we need to update the code if we want to ensure that

> our UEFI firmware builds can keep running on systems that set values

> other than 40 (which could be > 40 or < 40)

>

> This series refactors how we handle the maximum size of the physical

> address space supported by the CPU in relation with the size of UEFI's

> 1:1 mapping and the size of the GCD memory space map, taking the following

> observations into account:

> - the range of the linear mapping can be tied to whatever the CPU supports

>   (as long as it doesn't exceed what the architecture permits for 4k pages)

>   since we mostly already use the maximum of 4 levels anyway, and there is

>   no memory cost involved beyond that

> - there is usually no point in mapping the entire address space, which does

>   involve a memory cost

> - the GCD memory space may be required to cover more than what UEFI can

>   address itself, since it is the based for the UEFI memory map that is

>   provided to the OS

>

> Patches #1 and #2 remove some unused code to avoid having to fix it.

>

> Patches #3 and #4 update ArmVirtQemu and ArmVirtQemuKernel to drop the high

> peripheral space mapping, and map whatever may reside there explicitly

> (currently only the ECAM space in practice, but the MMIO view of the PCI

> I/O space is mapped explicitly as well)

>

> Patch #5 was sent out before individually, and sets MAX_ADDRESS to the

> maximum value AArch64 can map in UEFI which runs with 4k pages.

>

> Patch #6 adds a helper to ArmLib to read the number of supported address

> bits and take this into account in the page table code (#8), which allows

> PcdPrePiCpuMemorySize to assume a value that exceeds the capabilities of

> the CPU.

>

> Patch #7 is mostly a cleanup patch, to switch to the new helper added in

> patch #6. No functional changes intended.

>

> Patches #9 to #12 modify building of the CPU hob (and thus the size of the

> GCD memory space) based on the CPU capabilities rather than the value of

> PcdPrePiCpuMemorySize, which is dropped in the last patch.

>

> Pacthes #13 and #14 remove some needless references to PcdPrePiCpuMemorySize

>

> Patch #15 drops the overrides of PcdPrePiCpuMemorySize from all ArmVirtPkg

> platforms.

>

> Cc: Laszlo Ersek <lersek@redhat.com>

> Cc: Leif Lindholm <leif.lindholm@linaro.org>

> Cc: Eric Auger <eric.auger@redhat.com>

> Cc: Andrew Jones <drjones@redhat.com>

> Cc: Philippe Mathieu-Daude <philmd@redhat.com>

> Cc: Julien Grall <julien.grall@linaro.org>

>

> Ard Biesheuvel (16):

>   EmbeddedPkg/TemplateSec: remove unused module

>   EmbeddedPkg/PrePiHobLib: drop CreateHobList() from library

>   ArmVirtPkg/FdtPciHostBridgeLib: map ECAM and I/O spaces in GCD memory

>     map

>   ArmVirtPkg/QemuVirtMemInfoLib: remove 1:1 mapping of top of PA range

>   MdePkg/ProcessorBind.h AARCH64: limit MAX_ADDRESS to 48 bits

>   ArmPkg/ArmLib: add support for reading the max physical address space

>     size

>   ArmVirtPkg/XenVirtMemInfoLib: refactor reading of the PA space size

>   ArmPkg/ArmMmuLib: take the CPU supported maximum PA space into account

>   ArmPkg/CpuPei: base GCD memory space size on CPU's PA range

>   ArmPlatformPkg/PrePi: base GCD memory space size on CPU's PA range

>   ArmVirtPkg/PrePi: base GCD memory space size on CPU's PA range

>   BeagleBoardPkg/PrePi: base GCD memory space size on CPU's PA range

>   ArmPlatformPkg/PlatformPei: drop unused PCD references

>   EmbeddedPkg/PrePiLib: drop unused PCD reference

>   ArmVirtPkg: drop PcdPrePiCpuMemorySize assignments from all platforms

>   EmbeddedPkg/EmbeddedPkg.dec: drop PcdPrePiCpuMemorySize declarations

>


Thanks all for the reviews.

Patches #1 .. #15 pushed as e979ea74aa14..55342094fb86

Patch #16 needs to wait until edk2-platforms is brought up to date
with the removal of PcdPrePiCpuMemorySize
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ard Biesheuvel Nov. 30, 2018, 9:45 p.m. UTC | #2
On Thu, 29 Nov 2018 at 18:59, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
>

> On Wed, 28 Nov 2018 at 15:34, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:

> >

> > This v3 subsumes and/or supersedes

> >

> > [PATCH v2 00/13] ArmPkg, ArmVirtPkg: lift 40-bit IPA space limit

> > [PATCH] MdePkg/ProcessorBind.h AARCH64: limit MAX_ADDRESS to 48 bits

> > [PATCH v2 0/2] ArmVirtPkg: remove high peripheral space mapping

> >

> > The ArmVirtQemu targets currently limit the size of the IPA space to

> > 40 bits because that is all what KVM supports. However, this is about

> > to change, and so we need to update the code if we want to ensure that

> > our UEFI firmware builds can keep running on systems that set values

> > other than 40 (which could be > 40 or < 40)

> >

> > This series refactors how we handle the maximum size of the physical

> > address space supported by the CPU in relation with the size of UEFI's

> > 1:1 mapping and the size of the GCD memory space map, taking the following

> > observations into account:

> > - the range of the linear mapping can be tied to whatever the CPU supports

> >   (as long as it doesn't exceed what the architecture permits for 4k pages)

> >   since we mostly already use the maximum of 4 levels anyway, and there is

> >   no memory cost involved beyond that

> > - there is usually no point in mapping the entire address space, which does

> >   involve a memory cost

> > - the GCD memory space may be required to cover more than what UEFI can

> >   address itself, since it is the based for the UEFI memory map that is

> >   provided to the OS

> >

> > Patches #1 and #2 remove some unused code to avoid having to fix it.

> >

> > Patches #3 and #4 update ArmVirtQemu and ArmVirtQemuKernel to drop the high

> > peripheral space mapping, and map whatever may reside there explicitly

> > (currently only the ECAM space in practice, but the MMIO view of the PCI

> > I/O space is mapped explicitly as well)

> >

> > Patch #5 was sent out before individually, and sets MAX_ADDRESS to the

> > maximum value AArch64 can map in UEFI which runs with 4k pages.

> >

> > Patch #6 adds a helper to ArmLib to read the number of supported address

> > bits and take this into account in the page table code (#8), which allows

> > PcdPrePiCpuMemorySize to assume a value that exceeds the capabilities of

> > the CPU.

> >

> > Patch #7 is mostly a cleanup patch, to switch to the new helper added in

> > patch #6. No functional changes intended.

> >

> > Patches #9 to #12 modify building of the CPU hob (and thus the size of the

> > GCD memory space) based on the CPU capabilities rather than the value of

> > PcdPrePiCpuMemorySize, which is dropped in the last patch.

> >

> > Pacthes #13 and #14 remove some needless references to PcdPrePiCpuMemorySize

> >

> > Patch #15 drops the overrides of PcdPrePiCpuMemorySize from all ArmVirtPkg

> > platforms.

> >

> > Cc: Laszlo Ersek <lersek@redhat.com>

> > Cc: Leif Lindholm <leif.lindholm@linaro.org>

> > Cc: Eric Auger <eric.auger@redhat.com>

> > Cc: Andrew Jones <drjones@redhat.com>

> > Cc: Philippe Mathieu-Daude <philmd@redhat.com>

> > Cc: Julien Grall <julien.grall@linaro.org>

> >

> > Ard Biesheuvel (16):

> >   EmbeddedPkg/TemplateSec: remove unused module

> >   EmbeddedPkg/PrePiHobLib: drop CreateHobList() from library

> >   ArmVirtPkg/FdtPciHostBridgeLib: map ECAM and I/O spaces in GCD memory

> >     map

> >   ArmVirtPkg/QemuVirtMemInfoLib: remove 1:1 mapping of top of PA range

> >   MdePkg/ProcessorBind.h AARCH64: limit MAX_ADDRESS to 48 bits

> >   ArmPkg/ArmLib: add support for reading the max physical address space

> >     size

> >   ArmVirtPkg/XenVirtMemInfoLib: refactor reading of the PA space size

> >   ArmPkg/ArmMmuLib: take the CPU supported maximum PA space into account

> >   ArmPkg/CpuPei: base GCD memory space size on CPU's PA range

> >   ArmPlatformPkg/PrePi: base GCD memory space size on CPU's PA range

> >   ArmVirtPkg/PrePi: base GCD memory space size on CPU's PA range

> >   BeagleBoardPkg/PrePi: base GCD memory space size on CPU's PA range

> >   ArmPlatformPkg/PlatformPei: drop unused PCD references

> >   EmbeddedPkg/PrePiLib: drop unused PCD reference

> >   ArmVirtPkg: drop PcdPrePiCpuMemorySize assignments from all platforms

> >   EmbeddedPkg/EmbeddedPkg.dec: drop PcdPrePiCpuMemorySize declarations

> >

>

> Thanks all for the reviews.

>

> Patches #1 .. #15 pushed as e979ea74aa14..55342094fb86

>

> Patch #16 needs to wait until edk2-platforms is brought up to date

> with the removal of PcdPrePiCpuMemorySize


Patch #16 now merged as 55342094fb86..bcf2a9db1f8e
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel