blob: 70a56f4247771c5910368473fec5deae5ed24a0b [file] [log] [blame] [view]
David Brazdil0dbb41f2019-09-09 18:03:35 +01001# Hafnium Manifest
2
3## Format
4
5The format of the manifest is a simple DeviceTree overlay:
6
7```
8/dts-v1/;
9/plugin/;
10
11&{/} {
12 hypervisor {
13 vm1 {
14 debug_name = "name";
Andrew Scull72b43c02019-09-18 13:53:45 +010015 kernel_filename = "vmlinuz";
David Brazdile6f83222019-09-23 14:47:37 +010016 ramdisk_filename = "initrd.img";
David Brazdil0dbb41f2019-09-09 18:03:35 +010017 };
18
19 vm2 {
20 debug_name = "name";
21 kernel_filename = "filename";
22 vcpu_count = <N>;
23 mem_size = <M>;
24 };
25 ...
26 };
27};
28```
29
30Note: `&{/}` is a syntactic sugar expanded by the DTC compiler. Make sure to
31use the DTC in `prebuilts/` as the version packaged with your OS may not support
32it yet.
33
34## Example
35
Andrew Scull72b43c02019-09-18 13:53:45 +010036The following manifest defines a primary VM with two secondary VMs. The first
37secondary VM has 1MB of memory, 2 CPUs and kernel image called `kernel0`
38(matches filename in Hafnium's [ramdisk](HafniumRamDisk.md)). The second has 2MB
39of memory, 4 CPUs and, by omitting the `kernel_filename` property, a kernel
40preloaded into memory. The primary VM is given all remaining memory, the same
David Brazdile6f83222019-09-23 14:47:37 +010041number of CPUs as the hardware, a kernel image called `vmlinuz` and a ramdisk
42`initrd.img`. Secondaries cannot have a ramdisk.
David Brazdil0dbb41f2019-09-09 18:03:35 +010043
44```
45/dts-v1/;
46/plugin/;
47
48&{/} {
49 hypervisor {
50 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
67 smc_whitelist_permissive = <1>;
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
81Hafnium expects the manifest as part of the board FDT, i.e. DeviceTree in binary
82format (DTB).
83
84First, compile the manifest into a DTBO (binary overlay):
85```shell
86prebuilts/linux-x64/dtc/dtc -I dts -O dtb --out-version 17 -o manifest.dtbo <manifest_source_file>
87```
88
89Then overlay it with the DTB of your board:
90```shell
91prebuilts/linux-x64/dtc/fdtoverlay -i <board DTB> -o <output DTB> manifest.dtbo
92```