meta-agl-jailhouse: Add support for RPi4 with 2G/4G/8G of memory 08/25108/2 9.99.3 jellyfish/9.99.3 jellyfish_9.99.3
authorJakub Luzny <jakub@luzny.cz>
Wed, 12 Aug 2020 10:57:57 +0000 (12:57 +0200)
committerJakub Luzny <jakub@luzny.cz>
Tue, 18 Aug 2020 15:45:34 +0000 (17:45 +0200)
The Jailhouse configuration files had to be modified to append the additional
memory regions present on the higher mem variants of the RPi4.

To avoid the use of mem= kernel parameter to fix the memory that can be used
by the root cell, a device tree overlay with reserved-memory nodes is used
instead.

To avoid conflict with the GPU memory, the memory region used for Jailhouse
and the non-root cells was moved from 0x30000000 to 0x20000000.

Bug-AGL: SPEC-3507

Signed-off-by: Jakub Luzny <jakub@luzny.cz>
Change-Id: Iabd67504c3df0349dd62e45f12d1019de14328f1

meta-agl-jailhouse/README.md
meta-agl-jailhouse/dynamic-layers/raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend
meta-agl-jailhouse/dynamic-layers/raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-dt-dtoverlays-Add-jailhouse-memory-DT-overlay.patch [new file with mode: 0644]
meta-agl-jailhouse/dynamic-layers/raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend [deleted file]
meta-agl-jailhouse/dynamic-layers/raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4%.bbappend
meta-agl-jailhouse/recipes-extended/jailhouse/jailhouse/0001-configs-arm64-Add-support-for-RPi4-with-more-than-1G.patch [new file with mode: 0644]
meta-agl-jailhouse/recipes-extended/jailhouse/jailhouse_git.bb
templates/feature/agl-jailhouse/50_local.conf.inc

index fb0a3d4..c4a32bf 100644 (file)
@@ -33,8 +33,7 @@ This layer depends on:
 ## Supported targets
 
 * Raspberry Pi 4
-    * Currently only the 1 GB RAM variant. The other ones will work too,
-    but will be limited to 1 GB of memory.
+    * All (1G-8G) memory variants. But note that there is 256M reserved for Jailhouse and 256MiB for GPU in AGL, so the smaller variants are not recommended.
 
 * QEMU x86-64
     * Work in progress. Requires KVM. Nested virtualization must be enabled on the host. Currently, the right configuration of QEMU and Jailhouse to work out-of-box is being worked on.
index 178c982..687980c 100644 (file)
@@ -21,6 +21,10 @@ do_deploy_append_raspberrypi4() {
     echo "# Enable CAN (Waveshare RS485 CAN HAT)" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
     echo "dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25,spimaxfrequency=1000000" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
 
+    # memory reserved for Jailhouse
+    echo "dtoverlay=jailhouse-memory" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
+    echo "dtoverlay=jailhouse-memory,start=0xe0000000,size=0x200000" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
+
 
 }
 
diff --git a/meta-agl-jailhouse/dynamic-layers/raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-dt-dtoverlays-Add-jailhouse-memory-DT-overlay.patch b/meta-agl-jailhouse/dynamic-layers/raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-dt-dtoverlays-Add-jailhouse-memory-DT-overlay.patch
new file mode 100644 (file)
index 0000000..1b6373c
--- /dev/null
@@ -0,0 +1,87 @@
+From c6319fb59e0cd5b6d3d4e3401abd9c2057059a74 Mon Sep 17 00:00:00 2001
+From: Jakub Luzny <jakub@luzny.cz>
+Date: Tue, 11 Aug 2020 10:40:18 +0200
+Subject: [PATCH] dt/dtoverlays: Add jailhouse-memory DT overlay
+
+It is meant to reserve memory that can be used by the Jailhouse partitioning
+hypervisor. More regions can be reserved.
+
+Upstream-Status: Inappropriate [Jailhouse specific]
+
+Signed-off-by: Jakub Luzny <jakub@luzny.cz>
+---
+ arch/arm/boot/dts/overlays/Makefile                |  1 +
+ arch/arm/boot/dts/overlays/README                  |  7 +++++
+ .../boot/dts/overlays/jailhouse-memory-overlay.dts | 30 ++++++++++++++++++++++
+ 3 files changed, 38 insertions(+)
+ create mode 100644 arch/arm/boot/dts/overlays/jailhouse-memory-overlay.dts
+
+diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
+index fa6db6eed3e2..38c61c67606d 100644
+--- a/arch/arm/boot/dts/overlays/Makefile
++++ b/arch/arm/boot/dts/overlays/Makefile
+@@ -92,6 +92,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
+       iqaudio-dacplus.dtbo \
+       iqaudio-digi-wm8804-audio.dtbo \
+       irs1125.dtbo \
++      jailhouse-memory.dtbo \
+       jedec-spi-nor.dtbo \
+       justboom-both.dtbo \
+       justboom-dac.dtbo \
+diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
+index 69892d01faae..4a62f204b4f9 100644
+--- a/arch/arm/boot/dts/overlays/README
++++ b/arch/arm/boot/dts/overlays/README
+@@ -1528,6 +1528,13 @@ Load:   dtoverlay=irs1125
+ Params: <None>
++Name:   jailhouse-memory
++Info:   Reserves memory for use by the Jailhouse hypervisor
++Load:   dtoverlay=jailhouse-memory,<param>=<val>
++Params: start                   Start of the reserved memory area (default 0x20000000)
++        size                    Size of the reserved memory area (default 0x10000000)
++
++
+ Name:   jedec-spi-nor
+ Info:   Adds support for JEDEC-compliant SPI NOR flash devices.  (Note: The
+         "jedec,spi-nor" kernel driver was formerly known as "m25p80".)
+diff --git a/arch/arm/boot/dts/overlays/jailhouse-memory-overlay.dts b/arch/arm/boot/dts/overlays/jailhouse-memory-overlay.dts
+new file mode 100644
+index 000000000000..26c3ce6b9e3d
+--- /dev/null
++++ b/arch/arm/boot/dts/overlays/jailhouse-memory-overlay.dts
+@@ -0,0 +1,30 @@
++// Reserves memory for use by the Jailhouse hypervisor
++/dts-v1/;
++/plugin/;
++
++/ {
++      compatible = "brcm,bcm2835";
++
++      fragment@0 {
++              target-path = "/";
++              __overlay__ {
++
++                      reserved-memory {
++                              #address-cells = <2>;
++                              #size-cells = <1>;
++
++                              ranges;
++
++                              jailhouse_memory: jailhouse@20000000 {
++                                      reg = <0x0 0x20000000 0x10000000>;
++                                      no-map;
++                              };
++                      };
++              };
++      };
++
++      __overrides__ {
++        start = <&jailhouse_memory>,"reg#0";
++              size  = <&jailhouse_memory>,"reg:8";
++    };
++};
+-- 
+2.11.0
+
diff --git a/meta-agl-jailhouse/dynamic-layers/raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend b/meta-agl-jailhouse/dynamic-layers/raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend
deleted file mode 100644 (file)
index 0616c06..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-# required for Jailhouse to work with the supplied cell confiugrations
-CMDLINE_append = " mem=768M"
\ No newline at end of file
index 7e37d21..1456fdc 100644 (file)
@@ -1,3 +1,8 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += "file://0001-dt-dtoverlays-Add-jailhouse-memory-DT-overlay.patch"
+
+
 LINUX_VERSION = "5.4.51"
 SRCREV = "2c8ec3bb4403a7c76c22ec6d3d5fc4b2a366024e"
 
diff --git a/meta-agl-jailhouse/recipes-extended/jailhouse/jailhouse/0001-configs-arm64-Add-support-for-RPi4-with-more-than-1G.patch b/meta-agl-jailhouse/recipes-extended/jailhouse/jailhouse/0001-configs-arm64-Add-support-for-RPi4-with-more-than-1G.patch
new file mode 100644 (file)
index 0000000..21d5f2f
--- /dev/null
@@ -0,0 +1,290 @@
+From 4f86ca866119669a75f02ea10fa502f051f8240c Mon Sep 17 00:00:00 2001
+From: Jakub Luzny <jakub@luzny.cz>
+Date: Tue, 11 Aug 2020 11:45:02 +0200
+Subject: [PATCH] configs: arm64: Add support for RPi4 with more than 1G of
+ memory
+
+Add the required memory regions to support 2G, 4G and 8G RAM variants
+of the Raspberry Pi 4. Tested on all the bigger variants, not on 1G, as I don't
+have one on hand and it's not available anymore.
+
+Also moved the memory used by Jailhouse for the hypervisor and cells from
+0x30000000 to 0x20000000 to avoid conflict with GPU memory. That is fine for
+gpu_mem setting of up to 256. The memory is supposed to be reserved using
+reserved-memory node in the device tree. To support variants with >2G RAM,
+another region for PCI MMIO space has to be also reserved.
+
+Upstream-Status: Submitted [jailhouse-dev@googlegroups.com]
+
+Signed-off-by: Jakub Luzny <jakub@luzny.cz>
+---
+ configs/arm64/rpi4-inmate-demo.c | 22 ++++++------
+ configs/arm64/rpi4-linux-demo.c  | 28 +++++++--------
+ configs/arm64/rpi4.c             | 62 +++++++++++++++++++++++---------
+ 3 files changed, 71 insertions(+), 41 deletions(-)
+
+diff --git a/configs/arm64/rpi4-inmate-demo.c b/configs/arm64/rpi4-inmate-demo.c
+index 62442e7c..09dfc1f0 100644
+--- a/configs/arm64/rpi4-inmate-demo.c
++++ b/configs/arm64/rpi4-inmate-demo.c
+@@ -51,34 +51,34 @@ struct {
+       .mem_regions = {
+               /* IVSHMEM shared memory regions (demo) */
+               {
+-                      .phys_start = 0x3faf0000,
+-                      .virt_start = 0x3faf0000,
++                      .phys_start = 0x2faf0000,
++                      .virt_start = 0x2faf0000,
+                       .size = 0x1000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED,
+               },
+               {
+-                      .phys_start = 0x3faf1000,
+-                      .virt_start = 0x3faf1000,
++                      .phys_start = 0x2faf1000,
++                      .virt_start = 0x2faf1000,
+                       .size = 0x9000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
+                               JAILHOUSE_MEM_ROOTSHARED,
+               },
+               {
+-                      .phys_start = 0x3fafa000,
+-                      .virt_start = 0x3fafa000,
++                      .phys_start = 0x2fafa000,
++                      .virt_start = 0x2fafa000,
+                       .size = 0x2000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED,
+               },
+               {
+-                      .phys_start = 0x3fafc000,
+-                      .virt_start = 0x3fafc000,
++                      .phys_start = 0x2fafc000,
++                      .virt_start = 0x2fafc000,
+                       .size = 0x2000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
+                               JAILHOUSE_MEM_ROOTSHARED,
+               },
+               {
+-                      .phys_start = 0x3fafe000,
+-                      .virt_start = 0x3fafe000,
++                      .phys_start = 0x2fafe000,
++                      .virt_start = 0x2fafe000,
+                       .size = 0x2000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED,
+               },
+@@ -91,7 +91,7 @@ struct {
+                               JAILHOUSE_MEM_IO_32 | JAILHOUSE_MEM_ROOTSHARED,
+               },
+               /* RAM */ {
+-                      .phys_start = 0x3fa00000,
++                      .phys_start = 0x2fa00000,
+                       .virt_start = 0,
+                       .size = 0x00010000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
+diff --git a/configs/arm64/rpi4-linux-demo.c b/configs/arm64/rpi4-linux-demo.c
+index 9e7fad26..cf36fa22 100644
+--- a/configs/arm64/rpi4-linux-demo.c
++++ b/configs/arm64/rpi4-linux-demo.c
+@@ -52,39 +52,39 @@ struct {
+       .mem_regions = {
+               /* IVSHMEM shared memory regions (demo) */
+               {
+-                      .phys_start = 0x3faf0000,
+-                      .virt_start = 0x3faf0000,
++                      .phys_start = 0x2faf0000,
++                      .virt_start = 0x2faf0000,
+                       .size = 0x1000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED,
+               },
+               {
+-                      .phys_start = 0x3faf1000,
+-                      .virt_start = 0x3faf1000,
++                      .phys_start = 0x2faf1000,
++                      .virt_start = 0x2faf1000,
+                       .size = 0x9000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
+                               JAILHOUSE_MEM_ROOTSHARED,
+               },
+               {
+-                      .phys_start = 0x3fafa000,
+-                      .virt_start = 0x3fafa000,
++                      .phys_start = 0x2fafa000,
++                      .virt_start = 0x2fafa000,
+                       .size = 0x2000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED,
+               },
+               {
+-                      .phys_start = 0x3fafc000,
+-                      .virt_start = 0x3fafc000,
++                      .phys_start = 0x2fafc000,
++                      .virt_start = 0x2fafc000,
+                       .size = 0x2000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED,
+               },
+               {
+-                      .phys_start = 0x3fafe000,
+-                      .virt_start = 0x3fafe000,
++                      .phys_start = 0x2fafe000,
++                      .virt_start = 0x2fafe000,
+                       .size = 0x2000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
+                               JAILHOUSE_MEM_ROOTSHARED,
+               },
+               /* IVSHMEM shared memory region */
+-              JAILHOUSE_SHMEM_NET_REGIONS(0x3fb00000, 1),
++              JAILHOUSE_SHMEM_NET_REGIONS(0x2fb00000, 1),
+               /* UART */ {
+                       .phys_start = 0xfe215040,
+                       .virt_start = 0xfe215040,
+@@ -94,15 +94,15 @@ struct {
+                               JAILHOUSE_MEM_IO_32 | JAILHOUSE_MEM_ROOTSHARED,
+               },
+               /* RAM */ {
+-                      .phys_start = 0x3f900000,
++                      .phys_start = 0x2f900000,
+                       .virt_start = 0,
+                       .size = 0x10000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
+                               JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_LOADABLE,
+               },
+               /* RAM */ {
+-                      .phys_start = 0x30000000,
+-                      .virt_start = 0x30000000,
++                      .phys_start = 0x20000000,
++                      .virt_start = 0x20000000,
+                       .size = 0x8000000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
+                               JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA |
+diff --git a/configs/arm64/rpi4.c b/configs/arm64/rpi4.c
+index 92463184..c25bd8d2 100644
+--- a/configs/arm64/rpi4.c
++++ b/configs/arm64/rpi4.c
+@@ -1,7 +1,7 @@
+ /*
+  * Jailhouse, a Linux-based partitioning hypervisor
+  *
+- * Test configuration for Raspberry Pi 4 (32-bit, quad-core Cortex-A72, 1GB RAM)
++ * Test configuration for Raspberry Pi 4 (32-bit, quad-core Cortex-A72, 1GB, 2GB, 4GB or 8GB RAM)
+  *
+  * Copyright (c) Siemens AG, 2020
+  *
+@@ -10,6 +10,9 @@
+  *
+  * This work is licensed under the terms of the GNU GPL, version 2.  See
+  * the COPYING file in the top-level directory.
++ *
++ * Reservation via device tree: reg = <0x0 0x20000000 0x10000000>;
++ *                              reg = <0x0 0xe0000000 0x200000>;
+  */
+ #include <jailhouse/types.h>
+@@ -18,7 +21,7 @@
+ struct {
+       struct jailhouse_system header;
+       __u64 cpus[1];
+-      struct jailhouse_memory mem_regions[12];
++      struct jailhouse_memory mem_regions[15];
+       struct jailhouse_irqchip irqchips[2];
+       struct jailhouse_pci_device pci_devices[2];
+ } __attribute__((packed)) config = {
+@@ -27,7 +30,7 @@ struct {
+               .revision = JAILHOUSE_CONFIG_REVISION,
+               .flags = JAILHOUSE_SYS_VIRTUAL_DEBUG_CONSOLE,
+               .hypervisor_memory = {
+-                      .phys_start = 0x3fc00000,
++                      .phys_start = 0x2fc00000,
+                       .size       = 0x00400000,
+               },
+               .debug_console = {
+@@ -70,37 +73,37 @@ struct {
+       .mem_regions = {
+               /* IVSHMEM shared memory regions for 00:00.0 (demo) */
+               {
+-                      .phys_start = 0x3faf0000,
+-                      .virt_start = 0x3faf0000,
++                      .phys_start = 0x2faf0000,
++                      .virt_start = 0x2faf0000,
+                       .size = 0x1000,
+                       .flags = JAILHOUSE_MEM_READ,
+               },
+               {
+-                      .phys_start = 0x3faf1000,
+-                      .virt_start = 0x3faf1000,
++                      .phys_start = 0x2faf1000,
++                      .virt_start = 0x2faf1000,
+                       .size = 0x9000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
+               },
+               {
+-                      .phys_start = 0x3fafa000,
+-                      .virt_start = 0x3fafa000,
++                      .phys_start = 0x2fafa000,
++                      .virt_start = 0x2fafa000,
+                       .size = 0x2000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
+               },
+               {
+-                      .phys_start = 0x3fafc000,
+-                      .virt_start = 0x3fafc000,
++                      .phys_start = 0x2fafc000,
++                      .virt_start = 0x2fafc000,
+                       .size = 0x2000,
+                       .flags = JAILHOUSE_MEM_READ,
+               },
+               {
+-                      .phys_start = 0x3fafe000,
+-                      .virt_start = 0x3fafe000,
++                      .phys_start = 0x2fafe000,
++                      .virt_start = 0x2fafe000,
+                       .size = 0x2000,
+                       .flags = JAILHOUSE_MEM_READ,
+               },
+               /* IVSHMEM shared memory regions for 00:01.0 (networking) */
+-              JAILHOUSE_SHMEM_NET_REGIONS(0x3fb00000, 0),
++              JAILHOUSE_SHMEM_NET_REGIONS(0x2fb00000, 0),
+               /* MMIO 1 (permissive) */ {
+                       .phys_start = 0xfd500000,
+                       .virt_start = 0xfd500000,
+@@ -115,10 +118,37 @@ struct {
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
+                               JAILHOUSE_MEM_IO,
+               },
+-              /* RAM */ {
++              /* RAM (0M-~762M) */ {
+                       .phys_start = 0x0,
+                       .virt_start = 0x0,
+-                      .size = 0x3fa10000,
++                      .size = 0x2fa10000,
++                      .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
++                              JAILHOUSE_MEM_EXECUTE,
++              },
++
++              /* ~6M reserved for the hypervisor and the shared memory regions */
++
++              /* RAM (768M-3584M) */ {
++                      .phys_start = 0x30000000,
++                      .virt_start = 0x30000000,
++                      .size = 0xb0000000,
++                      .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
++                              JAILHOUSE_MEM_EXECUTE,
++              },
++
++        /* 2M reserved for PCI MMIO space */
++
++        /* RAM (3586M-4032M) */ {
++                      .phys_start = 0xe0200000,
++                      .virt_start = 0xe0200000,
++                      .size = 0x1be00000,
++                      .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
++                              JAILHOUSE_MEM_EXECUTE,
++              },
++              /* RAM (4096M-8192M) */ {
++                      .phys_start = 0x100000000,
++                      .virt_start = 0x100000000,
++                      .size = 0x100000000,
+                       .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
+                               JAILHOUSE_MEM_EXECUTE,
+               },
+-- 
+2.27.0
+
index c17e5f4..2fbd68e 100644 (file)
@@ -13,7 +13,11 @@ LIC_FILES_CHKSUM = " \
 SRCREV = "4ce7658dddfd5a1682a379d5ac46657e93fe1ff0"
 PV = "0.12+git${SRCPV}"
 
-SRC_URI = "git://github.com/siemens/jailhouse"
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI = "git://github.com/siemens/jailhouse \
+           file://0001-configs-arm64-Add-support-for-RPi4-with-more-than-1G.patch \
+           "
 
 DEPENDS = "virtual/kernel dtc-native python3-mako-native make-native"
 
index 89e2521..7c5b329 100644 (file)
@@ -1,3 +1,5 @@
 #### JAILHOUSE 
 IMAGE_INSTALL_append = " jailhouse jailhouse-demos"
 PREFERRED_VERSION_linux-raspberrypi = "5.4%"
+
+RPI_KERNEL_DEVICETREE_OVERLAYS_append = " overlays/jailhouse-memory.dtbo"