diff options
author | Anmol <anmol.karan123@gmail.com> | 2021-08-21 00:39:46 +0200 |
---|---|---|
committer | Jan-Simon Moeller <jsmoeller@linuxfoundation.org> | 2021-08-30 12:14:03 +0000 |
commit | 042806431fafef0ce60ede76c66747e2ebe5d222 (patch) | |
tree | 3c2c070148f86d5eec617f0d3450b5cbd3e9036a /meta-agl-jailhouse/recipes-extended | |
parent | 46b8ed7b8241ccd211048a91d16dcaf844558919 (diff) |
[PATCH] meta-agl-jailhouse: Add support for virtio over IVSHMEM block
This patch adds the support for the virtio over IVSHMEM block for AGL with Jailhouse.
Current state of the Patchset:
- Add PCI devices from (00:0c.0 - 00:0f.0), for various virtio devices(virtio-ivshmem-{block, console, NET, custom}), primarily for virtio-blk.
- Add Common memory regions for virtio-blk in the Root-Cell and Non-Root-Linux-Cell configurations.
- Add Documentation `meta-agl-jailhouse.md` for usage and Instructions.
- Add `virtio-ivshmem-block` and `virtio-ivshmem-console` recipes for ott Kernel modules.
v2 (Anmol): Update `agl-linux-x86-demo.c` and `qemu-agl.c` for PCI macros and small descriptions for IVSHMEM PCI devices.
V3 (Anmol):
- [RFC] Add packagegroup for the virtio-ivshmem-{block, console} applications.
- Update the `meta-agl-jailhouse.md` for architecture specific information.
v4 (Anmol): Update recipe files according to the new syntax(3.4-honister).
v5 (Anmol):
- Update recipe files for virtio-ivshmem binaries.
- Update `50_local.conf.inc` for `packagegroup-agl-jailhouse`.
v5 (Anmol): Update syntax for `50_local.conf.inc`.
Signed-off-by: Anmol <anmol.karan123@gmail.com>
Change-Id: I1bed4c6f1d3d9b0792a18544ad18edca85a5f4f7
Diffstat (limited to 'meta-agl-jailhouse/recipes-extended')
4 files changed, 376 insertions, 27 deletions
diff --git a/meta-agl-jailhouse/recipes-extended/jailhouse/files/agl-linux-x86-demo.c b/meta-agl-jailhouse/recipes-extended/jailhouse/files/agl-linux-x86-demo.c index 4aa8db44..37fcf54c 100644 --- a/meta-agl-jailhouse/recipes-extended/jailhouse/files/agl-linux-x86-demo.c +++ b/meta-agl-jailhouse/recipes-extended/jailhouse/files/agl-linux-x86-demo.c @@ -12,6 +12,52 @@ * the COPYING file in the top-level directory. */ +/* For extending the virtio-blk over IVSHMEM. */ +#define USE_VIRTIO_BLK + +/* + * Placeholder for extending virtio-device + * + * #define USE_VIRTIO_NET + * #define USE_VIRTIO_CON + * #define USE_VIRTIO_DEMO + */ + +#ifdef USE_VIRTIO_BLK +# define BLK_MEM 4 +# define BLK_PCI 1 +#else +# define BLK_MEM 0 +# define BLK_PCI 0 +#endif + +#ifdef USE_IVSHMEM_DEMO +# define DEMO_MEM 5 +# define DEMO_PCI 1 +#else +# define DEMO_MEM 0 +# define DEMO_PCI 0 +#endif + +#ifdef USE_IVSHMEM_NET +# define NET_MEM 4 +# define NET_PCI 1 +#else +# define NET_MEM 0 +# define NET_PCI 0 +#endif + +#ifdef USE_VIRTIO_CON +# define CON_MEM 4 +# define CON_PCI 1 +#else +# define CON_MEM 0 +# define CON_PCI 0 +#endif + +#define COMM_MEM_REGIONS (BLK_MEM + CON_MEM + NET_MEM + DEMO_MEM) +#define COMM_PCI_REGIONS (BLK_PCI + CON_PCI + NET_PCI + DEMO_PCI) + #include <jailhouse/types.h> #include <jailhouse/cell-config.h> @@ -19,17 +65,17 @@ struct { struct jailhouse_cell_desc cell; __u64 cpus[1]; #ifdef CONFIG_QEMU_E1000E_ASSIGNMENT - struct jailhouse_memory mem_regions[24]; + struct jailhouse_memory mem_regions[7 + COMM_MEM_REGIONS]; #else - struct jailhouse_memory mem_regions[20]; + struct jailhouse_memory mem_regions[3 + COMM_MEM_REGIONS]; #endif struct jailhouse_cache cache_regions[1]; struct jailhouse_irqchip irqchips[1]; struct jailhouse_pio pio_regions[2]; #ifdef CONFIG_QEMU_E1000E_ASSIGNMENT - struct jailhouse_pci_device pci_devices[5]; + struct jailhouse_pci_device pci_devices[1 + COMM_PCI_REGIONS]; #else - struct jailhouse_pci_device pci_devices[4]; + struct jailhouse_pci_device pci_devices[COMM_PCI_REGIONS]; #endif struct jailhouse_pci_capability pci_caps[6]; } __attribute__((packed)) config = { @@ -54,24 +100,26 @@ struct { }, .mem_regions = { - - /* IVSHMEM shared memory region (virtio-blk front) */ +#if defined USE_VIRTIO_BLK + /* IVSHMEM shared memory region (virtio-blk front-end) */ { - .phys_start = 0x22000000, - .virt_start = 0x22000000, + .phys_start = 0x26e00000, + .virt_start = 0x26e00000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { - .phys_start = 0x22001000, - .virt_start = 0x22001000, + .phys_start = 0x26e01000, + .virt_start = 0x26e01000, .size = 0xdf000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, { 0 }, { 0 }, - /* IVSHMEM shared memory region (virtio-con front) */ +#endif +#if defined USE_IVSHMEM_CON + /* IVSHMEM shared memory region (virtio-con front-end) */ { .phys_start = 0x220e0000, .virt_start = 0x220e0000, @@ -87,7 +135,8 @@ struct { }, { 0 }, { 0 }, - +#endif +#if defined USE_IVSHMEM_DEMO /* IVSHMEM shared memory regions (demo) */ { .phys_start = 0x220f0000, @@ -121,8 +170,11 @@ struct { .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, +#endif +#if defined USE_IVSHMEM_NET /* IVSHMEM shared memory regions (networking) */ JAILHOUSE_SHMEM_NET_REGIONS(0x22100000, 1), +#endif /* low RAM */ { .phys_start = 0x22600000, .virt_start = 0, @@ -202,7 +254,8 @@ struct { }, .pci_devices = { - { +#if defined USE_VIRTIO_BLK + { /* IVSHMEM (virtio-blk front-end) */ .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 0x0, .bdf = 0x0c << 3, @@ -214,40 +267,47 @@ struct { .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VIRTIO_FRONT + VIRTIO_DEV_BLOCK, }, - { +#endif +#if defined USE_IVSHMEM_CON + { /* IVSHMEM (virtio-con front-end) */ .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 0x0, .bdf = 0x0d << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, .num_msix_vectors = 3, - .shmem_regions_start = 4, + .shmem_regions_start = BLK_MEM, /* 0 + BLK_MEM */ .shmem_dev_id = 1, .shmem_peers = 2, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VIRTIO_FRONT + VIRTIO_DEV_CONSOLE, }, - { +#endif +#if defined USE_IVSHMEM_DEMO + { /* IVSHMEM (demo) */ .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 0x0, .bdf = 0x0e << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, .num_msix_vectors = 16, - .shmem_regions_start = 8, + .shmem_regions_start = BLK_MEM + CON_MEM, .shmem_dev_id = 2, .shmem_peers = 3, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_UNDEFINED, }, - { +#endif +#if defined USE_IVSHMEM_NET + { /* IVSHMEM (networking) */ .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 0x0, .bdf = 0x0f << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, .num_msix_vectors = 2, - .shmem_regions_start = 13, + .shmem_regions_start = BLK_MEM + CON_MEM + DEMO_MEM, .shmem_dev_id = 1, .shmem_peers = 2, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VETH, }, +#endif #ifdef CONFIG_QEMU_E1000E_ASSIGNMENT { /* e1000e */ .type = JAILHOUSE_PCI_TYPE_DEVICE, diff --git a/meta-agl-jailhouse/recipes-extended/jailhouse/files/qemu-agl.c b/meta-agl-jailhouse/recipes-extended/jailhouse/files/qemu-agl.c index d134e971..265b4997 100644 --- a/meta-agl-jailhouse/recipes-extended/jailhouse/files/qemu-agl.c +++ b/meta-agl-jailhouse/recipes-extended/jailhouse/files/qemu-agl.c @@ -39,16 +39,65 @@ * "memmap=0x5200000$0x22000000" */ +/* For extending virtio-blk over IVSHMEM. */ +#define USE_VIRTIO_BLK + +/* + * Placeholder for extending virtio-device + * + * #define USE_VIRTIO_NET + * #define USE_VIRTIO_CON + * #define USE_VIRTIO_DEMO + * + */ + +#ifdef USE_VIRTIO_BLK +# define BLK_MEM 4 +# define BLK_PCI 1 +#else +# define BLK_MEM 0 +# define BLK_PCI 0 +#endif + +#ifdef USE_IVSHMEM_DEMO +# define DEMO_MEM 5 +# define DEMO_PCI 1 +#else +# define DEMO_MEM 0 +# define DEMO_PCI 0 +#endif + +#ifdef USE_IVSHMEM_NET +# define NET_MEM 4 +# define NET_PCI 1 +#else +# define NET_MEM 0 +# define NET_PCI 0 +#endif + +#ifdef USE_VIRTIO_CON +# define CON_MEM 4 +# define CON_PCI 1 +#else +# define CON_MEM 0 +# define CON_PCI 0 +#endif + + +#define COMM_MEM_REGIONS (BLK_MEM + DEMO_MEM + NET_MEM + CON_MEM) +#define COMM_PCI_REGIONS (BLK_PCI + DEMO_PCI + NET_PCI + CON_PCI) + + #include <jailhouse/types.h> #include <jailhouse/cell-config.h> struct { struct jailhouse_system header; __u64 cpus[1]; - struct jailhouse_memory mem_regions[17]; + struct jailhouse_memory mem_regions[17 + COMM_MEM_REGIONS]; struct jailhouse_irqchip irqchips[1]; - struct jailhouse_pio pio_regions[14]; - struct jailhouse_pci_device pci_devices[13]; + struct jailhouse_pio pio_regions[15]; + struct jailhouse_pci_device pci_devices[13 + COMM_PCI_REGIONS]; struct jailhouse_pci_capability pci_caps[14]; } __attribute__((packed)) config = { .header = { @@ -96,6 +145,81 @@ struct { }, .mem_regions = { + +#if defined USE_VIRTIO_BLK + /* IVSHMEM shared memory region (virtio-blk back-end) */ + { + .phys_start = 0x26e00000, + .virt_start = 0x26e00000, + .size = 0x1000, + .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, + }, + { + .phys_start = 0x26e01000, + .virt_start = 0x26e01000, + .size = 0xdf000, + .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE, + }, + { 0 }, + { 0 }, +#endif +#if defined(USE_VIRTIO_CON) + /* IVSHMEM shared memory region (virtio-con back-end) */ + { + .phys_start = 0x220e0000, + .virt_start = 0x220e0000, + .size = 0x1000, + .flags = JAILHOUSE_MEM_READ, + }, + { + .phys_start = 0x220e1000, + .virt_start = 0x220e1000, + .size = 0xf000, + .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE, + }, + { 0 }, + { 0 }, +#endif +#if defined USE_IVSHMEM_DMEO + /* IVSHMEM shared memory regions (demo) */ + { + .phys_start = 0x220f0000, + .virt_start = 0x220f0000, + .size = 0x1000, + .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, + }, + { + .phys_start = 0x220f1000, + .virt_start = 0x220f1000, + .size = 0x9000, + .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | + JAILHOUSE_MEM_ROOTSHARED, + }, + { + .phys_start = 0x220fa000, + .virt_start = 0x220fa000, + .size = 0x2000, + .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, + }, + { + .phys_start = 0x220fc000, + .virt_start = 0x220fc000, + .size = 0x2000, + .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, + }, + { + .phys_start = 0x220fe000, + .virt_start = 0x220fe000, + .size = 0x2000, + .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | + JAILHOUSE_MEM_ROOTSHARED, + }, +#endif +#if defined(USE_IVSHMEM_NET) + /* IVSHMEM shared memory regions (networking) */ + JAILHOUSE_SHMEM_NET_REGIONS(0x22100000, 0), +#endif + /* MemRegion: 00000000-0009fbff : System RAM */ { .phys_start = 0x0, @@ -126,11 +250,11 @@ struct { .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA, }, - /* MemRegion: 27200000-7ffd7fff : System RAM */ + /* MemRegion: 27200000-3ffd7fff : System RAM */ { .phys_start = 0x27200000, .virt_start = 0x27200000, - .size = 0x58dd8000, + .size = 0x18dd8000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA, }, @@ -258,10 +382,9 @@ struct { PIO_RANGE(0x2f8, 0x8), /* Port I/O: 03c0-03df : vga+ */ PIO_RANGE(0x3c0, 0x20), - /* Port I/O: 03e8-03ef : serial */ - /* PIO_RANGE(0x3e8, 0x8), */ /* Port I/O: 03f8-03ff : serial */ PIO_RANGE(0x3f8, 0x8), + PIO_RANGE(0x3e8, 0x8), /* Port I/O: 0510-051b : QEMU0002:00 */ /* PIO_RANGE(0x510, 0xc), */ /* Port I/O: 0600-0603 : ACPI PM1a_EVT_BLK */ @@ -538,6 +661,64 @@ struct { .msix_region_size = 0x0, .msix_address = 0x0, }, +#if defined USE_VIRTIO_BLK + { /* IVSHMEM (virtio-blk back-end) */ + .type = JAILHOUSE_PCI_TYPE_IVSHMEM, + .iommu = 1, + .domain = 0x0, + .bdf = 0x0c << 3, + .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, + .num_msix_vectors = 2, + .shmem_regions_start = 0, + .shmem_dev_id = 0, + .shmem_peers = 2, + .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VIRTIO_BACK + + VIRTIO_DEV_BLOCK, + }, +#endif +#if defined USE_VIRTIO_CON + { /* IVSHMEM (virtio-con back-end) */ + .type = JAILHOUSE_PCI_TYPE_IVSHMEM, + .iommu = 1, + .domain = 0x0, + .bdf = 0x0d << 3, + .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, + .num_msix_vectors = 3, + .shmem_regions_start = BLK_MEM, /* 0 + BLK_MEM */ + .shmem_dev_id = 0, + .shmem_peers = 2, + .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VIRTIO_BACK + + VIRTIO_DEV_CONSOLE, + }, +#endif +#if defined USE_IVSHMEM_DEMO + { /* IVSHMEM (demo) */ + .type = JAILHOUSE_PCI_TYPE_IVSHMEM, + .iommu = 1, + .domain = 0x0, + .bdf = 0x0e << 3, + .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, + .num_msix_vectors = 16, + .shmem_regions_start = BLK_MEM + CON_MEM, + .shmem_dev_id = 0, + .shmem_peers = 3, + .shmem_protocol = JAILHOUSE_SHMEM_PROTO_UNDEFINED, + }, +#endif +#if defined USE_VIRTIO_NET + { /* IVSHMEM (Networking) */ + .type = JAILHOUSE_PCI_TYPE_IVSHMEM, + .iommu = 1, + .domain = 0x0, + .bdf = 0x0f << 3, + .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, + .num_msix_vectors = 2, + .shmem_regions_start = BLK_MEM + CON_MEM + DEMO_MEM, + .shmem_dev_id = 0, + .shmem_peers = 2, + .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VETH, + }, +#endif }, .pci_caps = { @@ -632,4 +813,4 @@ struct { .flags = 0, }, }, -}; +};
\ No newline at end of file diff --git a/meta-agl-jailhouse/recipes-extended/jailhouse/virtio-ivshmem-block.bb b/meta-agl-jailhouse/recipes-extended/jailhouse/virtio-ivshmem-block.bb new file mode 100644 index 00000000..4ee6c98a --- /dev/null +++ b/meta-agl-jailhouse/recipes-extended/jailhouse/virtio-ivshmem-block.bb @@ -0,0 +1,54 @@ +SUMMARY = "virtio-ivshmem-block built out of the kernel tree" +DESCRIPTION = "virtio-ivshmem-block built out of the kernel tree." +HOMEPAGE = "https://kernel.org" + +LICENSE = "GPLv2" + +PR = "r1" + +DEPENDS = " \ + virtual/${MLPREFIX}libc \ + ${MLPREFIX}elfutils \ + ${MLPREFIX}binutils \ + bison-native flex-native xz \ +" + +do_configure[depends] += "virtual/kernel:do_shared_workdir" + +PROVIDES = "virtual/virtio-ivshmem-block" + +inherit linux-kernel-base kernel-arch + +#kernel 3.1+ supports WERROR to disable warnings as errors +export WERROR = "0" + +do_populate_lic[depends] += "virtual/kernel:do_shared_workdir" + +inherit kernelsrc + + +#PACKAGE_ARCH = "${MACHINE_ARCH}" + +S = "${WORKDIR}" + +RDEPENDS:${PN}-dev = "" + +EXTRA_OEMAKE = " CC="${CC} ${CFLAGS} ${LDFLAGS}" CPP="${CPP}"" + +do_configure() { + echo "configure" +} + +do_compile() { + + oe_runmake CC="${CC} -I${STAGING_DIR_TARGET}/usr/include/ " LD="${LD}" AR="${AR}" \ + -C ${STAGING_KERNEL_DIR}/tools/virtio/ O=${S} virtio-ivshmem-block + +} + +do_install(){ + + install -d ${D}${bindir}/ + install -m 0755 ${STAGING_KERNEL_DIR}/tools/virtio/virtio-ivshmem-block ${D}${bindir} + +}
\ No newline at end of file diff --git a/meta-agl-jailhouse/recipes-extended/jailhouse/virtio-ivshmem-console.bb b/meta-agl-jailhouse/recipes-extended/jailhouse/virtio-ivshmem-console.bb new file mode 100644 index 00000000..3d046f14 --- /dev/null +++ b/meta-agl-jailhouse/recipes-extended/jailhouse/virtio-ivshmem-console.bb @@ -0,0 +1,54 @@ +SUMMARY = "virtio-ivshmem-console built out of the kernel tree" +DESCRIPTION = "virtio-ivshmem-console built out of the kernel tree." +HOMEPAGE = "https://kernel.org" + +LICENSE = "GPLv2" + +PR = "r1" + +DEPENDS = " \ + virtual/${MLPREFIX}libc \ + ${MLPREFIX}elfutils \ + ${MLPREFIX}binutils \ + bison-native flex-native xz \ +" + +do_configure[depends] += "virtual/kernel:do_shared_workdir" + +PROVIDES = "virtual/virtio-ivshmem-console" + +inherit linux-kernel-base kernel-arch + +#kernel 3.1+ supports WERROR to disable warnings as errors +export WERROR = "0" + +do_populate_lic[depends] += "virtual/kernel:do_shared_workdir" + +inherit kernelsrc + + +#PACKAGE_ARCH = "${MACHINE_ARCH}" + +S = "${WORKDIR}" + +RDEPENDS:${PN}-dev = "" + +EXTRA_OEMAKE = " CC="${CC} ${CFLAGS} ${LDFLAGS}" CPP="${CPP}"" + +do_configure() { + echo "configure" +} + +do_compile() { + + oe_runmake CC="${CC} -I${STAGING_DIR_TARGET}/usr/include/ " LD="${LD}" AR="${AR}" \ + -C ${STAGING_KERNEL_DIR}/tools/virtio/ O=${S} virtio-ivshmem-console + +} + +do_install(){ + + install -d ${D}${bindir}/ + install -m 0755 ${STAGING_KERNEL_DIR}/tools/virtio/virtio-ivshmem-console ${D}${bindir} + +}
\ No newline at end of file |