blob: 0d9d16e3da07596444341875b90fe89a6f7825ae [file] [log] [blame] [view]
David Brazdil0dbb41f2019-09-09 18:03:35 +01001# Hafnium Manifest
2
Andrew Walbranb7849972019-11-15 15:23:43 +00003[TOC]
4
David Brazdil0dbb41f2019-09-09 18:03:35 +01005## Format
6
7The format of the manifest is a simple DeviceTree overlay:
8
9```
10/dts-v1/;
David Brazdil0dbb41f2019-09-09 18:03:35 +010011
David Brazdila2358d42020-01-27 18:51:38 +000012/ {
David Brazdil0dbb41f2019-09-09 18:03:35 +010013 hypervisor {
David Brazdilea707d62019-11-06 10:10:17 +000014 compatible = "hafnium,hafnium";
15
David Brazdil0dbb41f2019-09-09 18:03:35 +010016 vm1 {
17 debug_name = "name";
Andrew Scull72b43c02019-09-18 13:53:45 +010018 kernel_filename = "vmlinuz";
David Brazdile6f83222019-09-23 14:47:37 +010019 ramdisk_filename = "initrd.img";
David Brazdil0dbb41f2019-09-09 18:03:35 +010020 };
21
22 vm2 {
23 debug_name = "name";
24 kernel_filename = "filename";
25 vcpu_count = <N>;
26 mem_size = <M>;
27 };
28 ...
29 };
30};
31```
32
David Brazdil0dbb41f2019-09-09 18:03:35 +010033## Example
34
Andrew Scull72b43c02019-09-18 13:53:45 +010035The following manifest defines a primary VM with two secondary VMs. The first
36secondary VM has 1MB of memory, 2 CPUs and kernel image called `kernel0`
37(matches filename in Hafnium's [ramdisk](HafniumRamDisk.md)). The second has 2MB
38of memory, 4 CPUs and, by omitting the `kernel_filename` property, a kernel
39preloaded into memory. The primary VM is given all remaining memory, the same
David Brazdile6f83222019-09-23 14:47:37 +010040number of CPUs as the hardware, a kernel image called `vmlinuz` and a ramdisk
41`initrd.img`. Secondaries cannot have a ramdisk.
David Brazdil0dbb41f2019-09-09 18:03:35 +010042
43```
44/dts-v1/;
David Brazdil0dbb41f2019-09-09 18:03:35 +010045
David Brazdila2358d42020-01-27 18:51:38 +000046/ {
David Brazdil0dbb41f2019-09-09 18:03:35 +010047 hypervisor {
David Brazdilea707d62019-11-06 10:10:17 +000048 compatible = "hafnium,hafnium";
49
David Brazdil0dbb41f2019-09-09 18:03:35 +010050 vm1 {
51 debug_name = "primary VM";
Andrew Scull72b43c02019-09-18 13:53:45 +010052 kernel_filename = "vmlinuz";
David Brazdile6f83222019-09-23 14:47:37 +010053 ramdisk_filename = "initrd.img";
Andrew Scullae9962e2019-10-03 16:51:16 +010054
55 smc_whitelist = <
56 0x04000000
57 0x3200ffff
58 >;
David Brazdil0dbb41f2019-09-09 18:03:35 +010059 };
60
61 vm2 {
62 debug_name = "secondary VM 1";
63 kernel_filename = "kernel0";
64 vcpu_count = <2>;
65 mem_size = <0x100000>;
Andrew Scullae9962e2019-10-03 16:51:16 +010066
Andrew Scull5dc089e2019-11-04 13:21:03 +000067 smc_whitelist_permissive;
David Brazdil0dbb41f2019-09-09 18:03:35 +010068 };
69
70 vm3 {
71 debug_name = "secondary VM 2";
David Brazdil0dbb41f2019-09-09 18:03:35 +010072 vcpu_count = <4>;
73 mem_size = <0x200000>;
74 };
75 };
76};
77```
78
79## Compiling
80
David Brazdila2358d42020-01-27 18:51:38 +000081Hafnium expects the manifest inside its [RAM disk](HafniumRamDisk.md),
82in DeviceTree's binary format (DTB).
David Brazdil0dbb41f2019-09-09 18:03:35 +010083
David Brazdila2358d42020-01-27 18:51:38 +000084Compile the manifest's source file into a DTB with:
David Brazdil0dbb41f2019-09-09 18:03:35 +010085```shell
David Brazdila2358d42020-01-27 18:51:38 +000086prebuilts/linux-x64/dtc/dtc -I dts -O dtb --out-version 17 -o manifest.dtb <manifest_source_file>
David Brazdil0dbb41f2019-09-09 18:03:35 +010087```