summaryrefslogtreecommitdiffstats
path: root/meta-agl-jailhouse/recipes-extended
diff options
context:
space:
mode:
authorAnmol <anmol.karan123@gmail.com>2021-08-21 00:39:46 +0200
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2021-08-30 12:14:03 +0000
commit042806431fafef0ce60ede76c66747e2ebe5d222 (patch)
tree3c2c070148f86d5eec617f0d3450b5cbd3e9036a /meta-agl-jailhouse/recipes-extended
parent46b8ed7b8241ccd211048a91d16dcaf844558919 (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')
-rw-r--r--meta-agl-jailhouse/recipes-extended/jailhouse/files/agl-linux-x86-demo.c98
-rw-r--r--meta-agl-jailhouse/recipes-extended/jailhouse/files/qemu-agl.c197
-rw-r--r--meta-agl-jailhouse/recipes-extended/jailhouse/virtio-ivshmem-block.bb54
-rw-r--r--meta-agl-jailhouse/recipes-extended/jailhouse/virtio-ivshmem-console.bb54
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