From 39872b4742c0f3868a9a4b1b16e2be66f0e754a5 Mon Sep 17 00:00:00 2001 From: Jakub Luzny Date: Wed, 12 Aug 2020 12:57:57 +0200 Subject: meta-agl-jailhouse: Add support for RPi4 with 2G/4G/8G of memory 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 Change-Id: Iabd67504c3df0349dd62e45f12d1019de14328f1 --- ...64-Add-support-for-RPi4-with-more-than-1G.patch | 290 +++++++++++++++++++++ .../recipes-extended/jailhouse/jailhouse_git.bb | 6 +- 2 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 meta-agl-jailhouse/recipes-extended/jailhouse/jailhouse/0001-configs-arm64-Add-support-for-RPi4-with-more-than-1G.patch (limited to 'meta-agl-jailhouse/recipes-extended/jailhouse') 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 index 00000000..21d5f2f1 --- /dev/null +++ b/meta-agl-jailhouse/recipes-extended/jailhouse/jailhouse/0001-configs-arm64-Add-support-for-RPi4-with-more-than-1G.patch @@ -0,0 +1,290 @@ +From 4f86ca866119669a75f02ea10fa502f051f8240c Mon Sep 17 00:00:00 2001 +From: Jakub Luzny +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 +--- + 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 +@@ -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 + diff --git a/meta-agl-jailhouse/recipes-extended/jailhouse/jailhouse_git.bb b/meta-agl-jailhouse/recipes-extended/jailhouse/jailhouse_git.bb index c17e5f48..2fbd68e3 100644 --- a/meta-agl-jailhouse/recipes-extended/jailhouse/jailhouse_git.bb +++ b/meta-agl-jailhouse/recipes-extended/jailhouse/jailhouse_git.bb @@ -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" -- cgit 1.2.3-korg