This enables PCI moderation for ARM and ARM64 as well as support for
PCI-based virtual shared memory devices for all our supported archs and
boards.
Only few - but a growing number of - ARM SoCs support PCI and also
MSI/MSI-X yet. We therefore have to emulate a simple generic PCI host
controller on ARM which turned out to be trivial with the existing code.
More complex is INTx support for ivshmem, which is needed in the absence
of a GICv2m that we can piggyback with.
The series enables ivshmem-net for Seattle, HiKey, Banana Pi and TK1
with the root cell and a non-root Linux cell communicating. The tricky
part on ARM is unfortunately the tuning to suitable GICD pins on both
sides that are unused (may not need to be unconnected to physical
devices, but Linux must not make use of them) but still in the range of
physically supported pins so that we can inject the ivshmem interrupts
via the GICD as router. On GICv2m, and likely also with the GICv3 once
we support it fully, there is more space available.
Porting to new boards is clearly underdocumented, but one step after the
other, and maybe people can derive already enough details from the
examples.
Jan
Jan Kiszka (23):
core: ivshmem: Introduce separate header file
core: ivshmem: Remove "pci" tagging from function and module names
x86: pci: Rename pci_translate_msi_vector and move prototype to
asm/pci.h
core: ivhsmem: Factor out architecture-specific parts
core: pci: Add byte and word access support for mmconfig
core, configs, tools: Make mmconfig PCI platform parameters generic
arm: Provide __aeabi_llsl and __aeabi_llsr
arm, arm64: Prepare for PCI support
core: Rename shutdown to hypervisor_disable
core: Make PCI a generic feature
core: pci: Permit write access to read-only Header Type register
arm-common: Add support for interrupt injection via GICD
arm-common: Add MSI-X support for ivshmem devices based on GICv2m
core: pci: Add virtual host controller
core, tools: Add IRQ base number for virtual PCI hosts to cell config
core: ivshmem: Introduce arch_ivshmem_init
arm: ivshmem: Add support for INTx-based interrupt injection
driver: Remove shared memory devices prior to disabling the hypervisor
driver: Register virtual PCI controller via device tree overlay
config: Enable PCI and inter-cell communication for AMD Seattle
configs: Enable inter-cell communication for Jetson TK1
configs: Enable inter-cell communication for Banana Pi
configs: Enable inter-cell communication for HiKey
configs/amd-seattle-linux-demo.c | 48 ++++++-
configs/amd-seattle.c | 53 +++++--
configs/bananapi-linux-demo.c | 28 +++-
configs/bananapi.c | 46 +++++--
configs/dts/inmate-amd-seattle.dts | 39 +++++-
configs/dts/inmate-bananapi.dts | 17 +++
configs/dts/inmate-hikey.dts | 17 +++
configs/dts/inmate-jetson-tk1.dts | 17 +++
configs/f2a88xm-hd3.c | 26 ++--
configs/h87i.c | 26 ++--
configs/hikey-linux-demo.c | 28 +++-
configs/hikey.c | 42 +++++-
configs/imb-a180.c | 10 +-
configs/jetson-tk1-linux-demo.c | 37 ++++-
configs/jetson-tk1.c | 45 ++++--
configs/qemu-vm.c | 18 +--
driver/Makefile | 7 +
driver/cell.c | 6 -
driver/main.c | 3 +
driver/pci.c | 156 +++++++++++++++++++++
driver/pci.h | 11 ++
driver/vpci_template.dts | 26 ++++
hypervisor/Makefile | 2 +-
hypervisor/arch/arm-common/Kbuild | 2 +-
hypervisor/arch/arm-common/gic-common.c | 6 +
hypervisor/arch/arm-common/include/asm/gic.h | 1 +
hypervisor/arch/arm-common/include/asm/ivshmem.h | 20 +++
hypervisor/arch/arm-common/irqchip.c | 6 +
hypervisor/arch/arm-common/ivshmem.c | 56 ++++++++
hypervisor/arch/arm-common/pci.c | 65 +++++++++
hypervisor/arch/arm/Kbuild | 2 +-
hypervisor/arch/arm/include/asm/paging.h | 2 +-
hypervisor/arch/arm/lib.c | 32 +++++
hypervisor/arch/arm/mmio.c | 1 +
hypervisor/arch/arm64/include/asm/paging.h | 2 +-
hypervisor/arch/x86/Kbuild | 4 +-
hypervisor/arch/x86/control.c | 13 +-
hypervisor/arch/x86/include/asm/apic.h | 4 -
hypervisor/arch/x86/include/asm/ivshmem.h | 22 +++
hypervisor/arch/x86/include/asm/pci.h | 5 +
hypervisor/arch/x86/ivshmem.c | 75 ++++++++++
hypervisor/arch/x86/mmio.c | 3 +-
hypervisor/arch/x86/pci.c | 10 +-
hypervisor/arch/x86/setup.c | 5 -
hypervisor/arch/x86/vtd.c | 3 +-
hypervisor/control.c | 26 +++-
hypervisor/include/jailhouse/cell-config.h | 41 +++---
hypervisor/include/jailhouse/control.h | 2 +
hypervisor/include/jailhouse/ivshmem.h | 71 ++++++++++
hypervisor/include/jailhouse/pci.h | 15 +-
hypervisor/{pci_ivshmem.c => ivshmem.c} | 168 +++++++----------------
hypervisor/mmio.c | 3 +-
hypervisor/pci.c | 57 ++++----
hypervisor/setup.c | 6 +-
tools/jailhouse-cell-linux | 5 +-
tools/root-cell-config.c.tmpl | 38 ++---
56 files changed, 1148 insertions(+), 331 deletions(-)
create mode 100644 driver/vpci_template.dts
create mode 100644 hypervisor/arch/arm-common/include/asm/ivshmem.h
create mode 100644 hypervisor/arch/arm-common/ivshmem.c
create mode 100644 hypervisor/arch/arm-common/pci.c
create mode 100644 hypervisor/arch/arm/lib.c
create mode 100644 hypervisor/arch/x86/include/asm/ivshmem.h
create mode 100644 hypervisor/arch/x86/ivshmem.c
create mode 100644 hypervisor/include/jailhouse/ivshmem.h
rename hypervisor/{pci_ivshmem.c => ivshmem.c} (71%)
--
2.1.4
--
You received this message because you are subscribed to the Google Groups
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.