This is v6 of the series that adds a platform config to support QEMU based
virtual machines, either in TCG or KVM mode. These virtual machines declare
their platform configuration by passing a device tree which needs to be parsed
by Tianocore, rather than relying on hardcoded peripherals.

Currently, the only assumptions made with respect to the platform config are:
- at least 1 MB of DRAM at 0x4000_0000, containing the device tree blob
- device tree addresses and address range sizes encoded in 64-bit
  (#address-cells = 2 and #size-cells = 2)
- NOR flash at 0x0 (2 x 64 MB)
- Cortex-A15 CPU (if built for 32-bit ARM)

Peripherals detected at runtime:
- PL011 UART
- GIC interrupt controller
- timer interrupt line
- PL031 RTC
- system memory size
- virtio MMIO transports

There are some dependencies on QEMU and KVM changes that are not yet upstream:
- QEMU: 'hw/arm/virt: Provide flash devices for boot ROMs'
- QEMU: copy DTB to base of DRAM if no -kernel option is passed
- KVM: 'KVM: Introduce gfn_to_hva_memslot_prot'
- KVM: 'arm/arm64: KVM: Support KVM_CAP_READONLY_MEM'
- KVM: 'arm/arm64: KVM: Complete WFI/WFE instructions'

The code was tested in TCG mode on x64_64 (AArch64, ARM) and in TCG and KVM mode
on a ARMv8 Foundation Model emulator (AArch64 only)

Changes since v4/v5:
- *lots* of changes due to now properly performed rebase on edk2-github/master,
  details of changes are below the commit log of each patch
- support for dynamic PL011 base address, causing some fallout and a couple of
  additional patches
- refactored private ResetSystemLib into a generic ArmPsciResetSystemLib
- refactored timer libraries
- whitespace fixes, unused functions removed, etc.

Changes since v3:
- lots of minor style changes, added ASSERT()s, etc.
- added support for 32-bit ARM, the code can now be built with '-t ARM' instead
  of '-t AARCH64' and it will work with QEMU mach-virt/cortex-a15
- eliminate AArch64 references where not appropriate
- added 32-bit ARM .S alternatives where appropriate
- refactor into separate patches for all of the modules that make up the 
  QEMU mach-virt platform implementation
- move everything under ArmPlatformPkg/ArmVirtualizationPkg
- eliminate references to KVM where plain QEMU suffices

Changes since v2:
- fixed *lots* of EDK2 Style Guide violations
- use EFI_D_ERROR only where appropriate
- use ASSERT()s to ensure we are running with at least 128 MB and not executing
  from shadowed NOR flash, and relocate the DTB device tree image earlier so
  we can be confident it does not get clobbered inadvertently
- handle 32-bit PCDs that may get initialized from 64-bit DT nodes more
  consistently, and don't abort the DT traversal if virtio transports fail to
  install

Changes since v1:
- rebased onto upstream GitHub tianocore/edk2.git (421ccda307)
- moved primary FV 0x1000 bytes into flash image, and added jump to it at 0x0
- dropped patch to allow FVs at physical offset 0x0
- dropped patch introducing device config table GUID, and used the upstream one
  instead (EmbeddedPkg/Include/Guid/Fdt.h)
- added 'Contributed-under:' lines to commit logs
- style fixes: remove redundant '== TRUE', add space between function and (
- updated/removed comments related to arch timer PCD and arch timer imask
- use feature PCD to define whether to use the virtual timer


Ard Biesheuvel (23):
  ArmPkg: allow dynamically discovered timer interrupts
  ArmPkg: allow dynamic GIC base addresses
  ArmPkg: add ArmHvcLib
  ArmPkg: add ArmPsciResetSystemLib
  ArmPkg: rename ArmArchTimerLib.h to ArmArchTimer.h
  ArmPkg: add ArmGenericTimerCounterLib interface
  ArmPkg: add ArmGenericTimerCounterLib implementation using physical
    timer
  ArmPkg: add ArmGenericTimerCounterLib implementation using virtual
    timer
  ArmPkg/TimerDxe: respect layering of ARM timer libraries
  ArmPkg: move TimerDxe and ArmArchTimerLib to new
    ArmGenericTimerCounterLib
  ArmPkg,ArmPlatformPkg: allow dynamic PCDs for memory base and size
  ArmPlatformPkg: separate PlatformPei and PlatformPeiLib
  EmbeddedPkg: split off FDT loading functionality from FdtLib
  ArmVirtualizationPkg: introduce PCDs for device tree base address
  ArmVirtualizationPkg: add Include/ArmPlatform.h
  ArmVirtualizationPkg: add private UefiBootServicesTableLib
    implementation
  ArmVirtualizationPkg: add device tree based PL011 SerialPortLib
  ArmVirtualizationPkg: add VirtFdtDxe driver
  ArmVirtualizationPkg: add ArmVirtualizationPlatformLib library
  ArmVirtualizationPkg: add ArmVirtualizationPlatformSysConfigLib
    library
  ArmVirtualizationPkg: add PlatformPeiLib library
  ArmVirtualizationPkg: add driver for QEMU's NOR flash
  ArmVirtualizationPkg: add ArmVirtualizationQemu platform

 ArmPkg/ArmPkg.dec                                  |  37 ++-
 .../ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.c    |   2 +-
 .../ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.c    |   2 +-
 .../ArmCortexAEMv8Lib/ArmCortexAEMv8Lib.c          |   2 +-
 ArmPkg/Drivers/ArmGic/ArmGicDxe.inf                |   3 +-
 ArmPkg/Drivers/ArmGic/GicV2/ArmGicV2Dxe.c          |  37 ++-
 ArmPkg/Drivers/TimerDxe/TimerDxe.c                 |  21 +-
 ArmPkg/Drivers/TimerDxe/TimerDxe.inf               |   3 +
 .../Library/{ArmArchTimerLib.h => ArmArchTimer.h}  |  66 +---
 ArmPkg/Include/Library/ArmGenericTimerCounterLib.h |  85 ++++++
 ArmPkg/Include/Library/ArmHvcLib.h                 |  42 +++
 ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.c   |   2 +-
 ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf |   1 +
 .../ArmGenericTimerPhyCounterLib.c                 | 139 +++++++++
 .../ArmGenericTimerPhyCounterLib.inf               |  33 ++
 .../ArmGenericTimerVirtCounterLib.c                | 150 +++++++++
 .../ArmGenericTimerVirtCounterLib.inf              |  33 ++
 ArmPkg/Library/ArmHvcLib/AArch64/ArmHvc.S          |  38 +++
 ArmPkg/Library/ArmHvcLib/Arm/ArmHvc.S              |  43 +++
 ArmPkg/Library/ArmHvcLib/Arm/ArmHvc.asm            |  43 +++
 ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf             |  32 ++
 ArmPkg/Library/ArmLib/AArch64/AArch64ArchTimer.c   | 109 +------
 ArmPkg/Library/ArmLib/ArmV7/ArmV7ArchTimer.c       | 109 +------
 .../ArmPsciResetSystemLib/ArmPsciResetSystemLib.c  | 114 +++++++
 .../ArmPsciResetSystemLib.inf                      |  41 +++
 ArmPkg/Library/BdsLib/BdsLib.inf                   |   5 +-
 .../ArmRealViewEbPkg/ArmRealViewEb.dsc.inc         |   1 +
 ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc  |   1 +
 .../ArmVirtualizationPkg/ArmVirtualization.dsc.inc | 335 +++++++++++++++++++++
 .../ArmVirtualizationPkg/ArmVirtualizationPkg.dec  |  47 +++
 .../ArmVirtualizationPkg/ArmVirtualizationQemu.dsc | 265 ++++++++++++++++
 .../ArmVirtualizationPkg/ArmVirtualizationQemu.fdf | 334 ++++++++++++++++++++
 .../ArmVirtualizationPkg/Include/ArmPlatform.h     |  33 ++
 .../AARCH64/VirtHelper.S                           |  86 ++++++
 .../ArmVirtualizationPlatformLib/ARM/VirtHelper.S  |  74 +++++
 .../ArmVirtualizationPlatformLib.inf               |  63 ++++
 .../Library/ArmVirtualizationPlatformLib/Virt.c    | 189 ++++++++++++
 .../Library/ArmVirtualizationPlatformLib/VirtMem.c | 107 +++++++
 .../ArmVirtualizationPlatformSysConfigLib.c        |  87 ++++++
 .../ArmVirtualizationPlatformSysConfigLib.inf      |  31 ++
 .../ArmVirtualizationUefiBootServicesTableLib.c    |  65 ++++
 .../ArmVirtualizationUefiBootServicesTableLib.inf  |  34 +++
 .../EarlyFdtPL011SerialPortLib.c                   | 186 ++++++++++++
 .../EarlyFdtPL011SerialPortLib.inf                 |  45 +++
 .../FdtPL011SerialPortLib/FdtPL011SerialPortLib.c  | 145 +++++++++
 .../FdtPL011SerialPortLib.inf                      |  50 +++
 .../FdtPL011SerialPortLib/NullSerialPortExtLib.c   |  47 +++
 .../FdtPL011SerialPortLib/NullSerialPortExtLib.inf |  30 ++
 .../Library/NorFlashQemuLib/NorFlashQemuLib.c      |  56 ++++
 .../Library/NorFlashQemuLib/NorFlashQemuLib.inf    |  35 +++
 .../Library/PlatformPeiLib/PlatformPeiLib.c        |  47 +++
 .../Library/PlatformPeiLib/PlatformPeiLib.inf      |  48 +++
 .../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c   | 282 +++++++++++++++++
 .../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf |  61 ++++
 .../PrePi/PrePiArmPlatformGlobalVariableLib.inf    |   7 +-
 ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf  |   6 +-
 ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.c      |  16 +-
 ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf    |   6 +-
 ArmPlatformPkg/PlatformPei/PlatformPeim.inf        |   2 +-
 ArmPlatformPkg/PrePi/PeiUniCore.inf                |   6 +-
 EmbeddedPkg/Include/FdtLoadLib.h                   |  51 ++++
 EmbeddedPkg/Include/libfdt_env.h                   |  31 --
 EmbeddedPkg/Library/FdtLib/FdtLib.inf              |  13 -
 .../{FdtLib => FdtLoadLib}/FdtConfigurationTable.c |   2 +-
 EmbeddedPkg/Library/FdtLoadLib/FdtLoadLib.inf      |  44 +++
 65 files changed, 3775 insertions(+), 385 deletions(-)
 rename ArmPkg/Include/Library/{ArmArchTimerLib.h => ArmArchTimer.h} (58%)
 create mode 100644 ArmPkg/Include/Library/ArmGenericTimerCounterLib.h
 create mode 100644 ArmPkg/Include/Library/ArmHvcLib.h
 create mode 100644 
ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.c
 create mode 100644 
ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf
 create mode 100644 
ArmPkg/Library/ArmGenericTimerVirtCounterLib/ArmGenericTimerVirtCounterLib.c
 create mode 100644 
ArmPkg/Library/ArmGenericTimerVirtCounterLib/ArmGenericTimerVirtCounterLib.inf
 create mode 100644 ArmPkg/Library/ArmHvcLib/AArch64/ArmHvc.S
 create mode 100644 ArmPkg/Library/ArmHvcLib/Arm/ArmHvc.S
 create mode 100644 ArmPkg/Library/ArmHvcLib/Arm/ArmHvc.asm
 create mode 100644 ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf
 create mode 100644 ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.c
 create mode 100644 
ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.inf
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualization.dsc.inc
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.fdf
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Include/ArmPlatform.h
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/AARCH64/VirtHelper.S
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ARM/VirtHelper.S
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ArmVirtualizationPlatformLib.inf
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/Virt.c
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/VirtMem.c
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformSysConfigLib/ArmVirtualizationPlatformSysConfigLib.c
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformSysConfigLib/ArmVirtualizationPlatformSysConfigLib.inf
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationUefiBootServicesTableLib/ArmVirtualizationUefiBootServicesTableLib.c
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationUefiBootServicesTableLib/ArmVirtualizationUefiBootServicesTableLib.inf
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/FdtPL011SerialPortLib/EarlyFdtPL011SerialPortLib.c
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/FdtPL011SerialPortLib/EarlyFdtPL011SerialPortLib.inf
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/FdtPL011SerialPortLib/FdtPL011SerialPortLib.c
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/FdtPL011SerialPortLib/FdtPL011SerialPortLib.inf
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/FdtPL011SerialPortLib/NullSerialPortExtLib.c
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/FdtPL011SerialPortLib/NullSerialPortExtLib.inf
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.c
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c
 create mode 100644 
ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf
 create mode 100644 EmbeddedPkg/Include/FdtLoadLib.h
 rename EmbeddedPkg/Library/{FdtLib => FdtLoadLib}/FdtConfigurationTable.c (96%)
 create mode 100644 EmbeddedPkg/Library/FdtLoadLib/FdtLoadLib.inf

-- 
1.8.3.2


------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to