[edk2-devel] [PATCH v6 0/5] Handling of multiple PCI

Ard Biesheuvel ardb at kernel.org
Wed Jun 22 15:35:12 UTC 2022


On Tue, 21 Jun 2022 at 23:28, Nicolas Ojeda Leon <ncoleon at amazon.com> wrote:
>
> Increased control is provided in Ovmf platforms to define and configure
> the specifications of multiple PCI host bridges in the hypervisor. The
> host propagates this information to the guest, initially through fw-cfg
> interface.
>
> In some AWS EC2 platforms, we expose a PCI topology including several
> root bridges portraying information about physical distribution that
> enables the guest to optimize accesses. Current PCI driver for Ovmf
> enables the explicit definition of multiple root bridges and contains
> the logic to fix their resources based on platform-specific PCD
> entries. However, we need a way to control, from the hypervisor, how
> many and which resources each PCI root bridge can use. For this
> reason, this patch series introduces a mechanism to provide PCI host
> bridges information like bus number range, attributes, allocation
> attributes, PIO aperture as well as 32 and 64- bit prefetchable and
> non-prefetchable MMIO ranges through a fw-cfg item created by the
> hypervisor and consumed by the guest firmware. In order to offer a
> generic and extensible way to disclose non-discoverable hardware
> information from the host to the guest, a new library called
> HardwareInfoLib is created in the OvmfPkg. In essence, this library
> offers the functionality to parse a generic BLOB into a list as well
> as the methods to iterate over such list, including filtering options.
> The library is conceived in a generic way so that further hardware
> elements can also be described using it. For such purpose the length
> of the BLOB is not restricted but instead regarded as a sequence of
> header-info elements that allow the parsing during runtime.
> Furthermore, specific functionality is provided wrapping
> QemuFwCfgReadBytes to extract hardware descriptions, in the
> aforementioned format, in a static way so that early in the Pei
> stage the library can be used to identify address space requirements.
> The core of the library offers enough flexibility to process as many
> elements, even from different hardware types (heterogenous), as needed
> in a single run. This library is extended for the particular use case
> already exposed, PCI host bridges, and this same code offers an
> example of how to tailor it for further hardware components.
>
> After acknowledgement from Gerd Hoffmann and fixing all warnings and
> errors found by the CI pipeline (via draft pull request), here I send
> a new revision of the patches for merging.
>
> ---
> Notes:
>   v6:
>   Prepearation for upstream merge:
>   - No functional change at all.
>   - Small changes to fix all builds excercised by CI
>     (https://github.com/tianocore/edk2/pull/2938)
>   - Added libraries to furhter platforms as per dependencies requirements
>   - Explicit casting of some values as required by build and
>     verification of values when demoting values.
>   - Arranged added files copyright to the format required.
>   - Changed HOST_BRIDGE_INFO bitfield member to UINT32 to follow
>     EDK2 guidelines motivated on build in 32-bit windows systems.
>   - Added verification of Bus Number range when values provided by
>     host to make sure Root Bridge is initialized with valid values
>
>   v5:
>   - Removed last 3 patches dealing with pre-populated resources to
>     encapsulate related changes in more manageable chunks and while
>     pre-populated changes are finalized.
>   - Added Acked-by to all commits
>   - Re-based on top of latest master and refactored changes in
>     MemDetect.c to adapt to recently created
>     PlatformInitLib/MemDetect.c
>
>   v4:
>   - Minor modification to use MAX_UINT64 as global invalid base address
>     when reading PCI host bridge information provided by the host
>     (Patch 1)
>   - Refactor PciHostBridgeUtilityGetRootBridges into a thin wrapper that
>     calls 2 new function: one (BusScan) that performs the legacy bus
>     scan population process and a new one (HostProvided) that populates
>     Root Bridges with host provided values. (Patch 5)
>   - Move code that sets value of PcdPciPreservePopulatedMappings token
>     based on host-provided fw-cfg file into the function that populates
>     root bridges with host provided data (Patch 6)
>   - Restructured base address retrieval to leave PCI Resource Allocation
>     protocol untouched and instead augment the existing services to
>     enable base address retrieval before allocation. (Patch 7)
>   - Use new method to retrieve Root Bridge base addresses before
>     allocation and use that to handle pre-populated BARs (Patch 8)
>
>
> Nicolas Ojeda Leon (5):
>   OvmfPkg/Library: Create base HardwareInfoLib for PCI Host Bridges
>   Ovmf/HardwareInfoLib: Create Pei lib to parse directly from fw-cfg
>   Ovmf/HardwareInfoLib: Add Dxe lib to dynamically parse heterogenous
>     data
>   Ovmf/PlatformPei: Use host-provided GPA end if available
>   OvmfPkg/PciHostBridgeUtilityLib: Initialize RootBridges apertures with
>     spec
>

Merged as #3000,

Thanks all,

>  ArmVirtPkg/ArmVirtQemu.dsc                    |   2 +
>  OvmfPkg/AmdSev/AmdSevX64.dsc                  |   2 +
>  OvmfPkg/Bhyve/BhyveX64.dsc                    |   2 +
>  OvmfPkg/CloudHv/CloudHvX64.dsc                |   2 +
>  OvmfPkg/Include/Library/HardwareInfoLib.h     | 159 ++++++
>  .../HardwareInfoLib/DxeHardwareInfoLib.inf    |  39 ++
>  .../Library/HardwareInfoLib/HardwareInfoDxe.c | 254 +++++++++
>  .../HardwareInfoPciHostBridgeLib.c            | 508 ++++++++++++++++++
>  .../HardwareInfoPciHostBridgeLib.h            | 256 +++++++++
>  .../Library/HardwareInfoLib/HardwareInfoPei.c |  79 +++
>  .../HardwareInfoLib/HardwareInfoTypesLib.h    |  59 ++
>  .../HardwareInfoLib/PeiHardwareInfoLib.inf    |  39 ++
>  .../QemuFwCfgHardwareInfoLib.c                |  88 +++
>  .../PciHostBridgeUtilityLib.c                 | 332 +++++++++++-
>  .../PciHostBridgeUtilityLib.inf               |   1 +
>  OvmfPkg/Library/PlatformInitLib/MemDetect.c   | 148 ++++-
>  .../PlatformInitLib/PlatformInitLib.inf       |   1 +
>  OvmfPkg/Microvm/MicrovmX64.dsc                |   2 +
>  OvmfPkg/OvmfPkg.dec                           |   4 +
>  OvmfPkg/OvmfPkgIa32.dsc                       |   2 +
>  OvmfPkg/OvmfPkgIa32X64.dsc                    |   2 +
>  OvmfPkg/OvmfPkgX64.dsc                        |   2 +
>  OvmfPkg/OvmfXen.dsc                           |   2 +
>  23 files changed, 1973 insertions(+), 12 deletions(-)
>  create mode 100644 OvmfPkg/Include/Library/HardwareInfoLib.h
>  create mode 100644 OvmfPkg/Library/HardwareInfoLib/DxeHardwareInfoLib.inf
>  create mode 100644 OvmfPkg/Library/HardwareInfoLib/HardwareInfoDxe.c
>  create mode 100644 OvmfPkg/Library/HardwareInfoLib/HardwareInfoPciHostBridgeLib.c
>  create mode 100644 OvmfPkg/Library/HardwareInfoLib/HardwareInfoPciHostBridgeLib.h
>  create mode 100644 OvmfPkg/Library/HardwareInfoLib/HardwareInfoPei.c
>  create mode 100644 OvmfPkg/Library/HardwareInfoLib/HardwareInfoTypesLib.h
>  create mode 100644 OvmfPkg/Library/HardwareInfoLib/PeiHardwareInfoLib.inf
>  create mode 100644 OvmfPkg/Library/HardwareInfoLib/QemuFwCfgHardwareInfoLib.c
>
> --
> 2.17.1
>
>
>
>
> Amazon Development Center Germany GmbH
> Krausenstr. 38
> 10117 Berlin
> Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
> Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
> Sitz: Berlin
> Ust-ID: DE 289 237 879
>
>
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#90687): https://edk2.groups.io/g/devel/message/90687
Mute This Topic: https://groups.io/mt/91909735/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