Signed-off-by: Imanol Allende <ialle...@ikerlan.es>
---
 Documentation/setup-on-zynqmp-zcu102.md | 172 ++++++++++++++++++++++++++++++++
 1 file changed, 172 insertions(+)
 create mode 100644 Documentation/setup-on-zynqmp-zcu102.md

diff --git a/Documentation/setup-on-zynqmp-zcu102.md 
b/Documentation/setup-on-zynqmp-zcu102.md
new file mode 100644
index 0000000..ec4bb50
--- /dev/null
+++ b/Documentation/setup-on-zynqmp-zcu102.md
@@ -0,0 +1,172 @@
+Setup on ZCU102 ZynqMP Ultrascale+
+============================================
+The ZCU102 target is a Xilinx target based on ZynqMP Ultrascale+. The SoC is a 
quad-core Cortex-A53 and a dual-core R5 real-time processor. Further 
information can be found on 
https://www.xilinx.com/products/boards-and-kits/ek-u1-zcu102-g.html
+
+The Linux Image which runs Jailhouse has been built with Petalinux 2017.4. 
Petalinux uses linux-xlnx repository, and in this case it uses the 
xilinx-v2017.4 one, which is based on 4.9 kernel.
+
+
+Image build
+-------------------------------------------
+In order to build the Linux image with Petalinux it is necessary to set all 
the environmental variables. 
+
+    $ source /opt/pkg/settings.sh
+
+Once petalinux environments are set, the Petalinux project is created with the 
name lnx_jailhouse. The bsp has to be downloaded.
+
+    $ petalinux-create -t project --template zynqMP -s 
../xilinx-zcu102-v2017.4-final.bsp -n lnx_jailhouse
+
+The Linux project is configured by:
+
+    $ petalinux-config 
+
+A menuconfig window is opened and just enable `Root filesystem type (SD card)`:
+
+    Image Packaging Configuration--->Root filesystem type-->SD card
+
+Save project and exit. It will take some to time to configure the project. 
Once it has finished configuring, the Linux kenel needs to be configured 
enabling `CONFIG_OF_OVERLAY` and `CONFIG_KALLSYMS_ALL`
+
+    $ petalinux-config -c kernel
+
+Once modified, save the changes and build the project.
+
+    $ petalinux-build
+    $ petalinux-package --boot --u-boot
+
+
+Jailhouse build
+-------------------------------------------
+In the Jailhouse source directory, create a file include/jailhouse/config.h 
with the following lines:
+
+#define CONFIG_MACH_ZYNQMP_ZCU102      1
+
+For debugging and for obtaining more information it is also possible to add:
+#define CONFIG_TRACE_ERROR             1
+
+
+After that, it is possible to build the project. It is necessary to set the 
variables `ARCH=` with arm64, `KDIR=` with the kernel directory inside the 
Petalinux project, `CROSS_COMPILE=` with the compiler and `DESTDIR=` with the 
rootfs directory.
+
+    $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- 
KDIR=../lnx_jailhouse/build/tmp/work/plnx_aarch64-xilinx-linux/linux-xlnx/4.9-xilinx-v2017.4+gitAUTOINC+b450e900fd-r0/linux-plnx_aarch64-standard-build/
 DESTDIR=/media/user/rootfs install
+
+This command will add the jailhouse module and its binary. 
+
+
+U-Boot
+------------------------------------------
+Jailhouse needs the Linux kernel boot parameters `mem=`  to be set in order to 
reserve memory for other cells.
+In this case we chose `mem=1536M`. This can be done through U-Boot:
+
+    ZynqMP> setenv bootargs "earlycon clk_ignore_unused earlyprintk mem=1536M 
root=/dev/mmcblk0p2 rw rootwait"
+    ZynqMP> setenv uenvcmd "fatload mmc 0 0x3000000 Image && fatload mmc 0 
0x2A00000 system.dtb && booti 0x3000000 - 0x2A00000"
+    ZynqMP> setenv bootcmd "run uenvcmd"
+    ZynqMP> saveenv
+    ZynqMP> boot
+
+
+Testing Jailhouse GIC Demo
+-------------------------------------------
+Copy the `configs/arm64/zynqmp-zcu102*.cell` to the rootfs. To test Jailhouse 
it is also interesting to copy `inmates/demos/arm64/gic-demo.bin`. This demo 
creates a periodic timer interrupt and calculates its jitter. Once Linux is 
running:
+
+    # modprobe jailhouse
+    [   24.309597] jailhouse: loading out-of-tree module taints kernel.
+    
+    # jailhouse enable zynqmp-zcu102.cell
+    Initializing Jailhouse hypervisor v0.8 on CPU 2
+    Code location: 0x0000ffffc0200060
+    Page pool usage after early setup: mem 33/993, remap 64/131072
+    Initializing processors:
+     CPU 2... OK
+     CPU 0... OK
+     CPU 3... OK
+     CPU 1... OK
+    Initializing unit: irqchip
+    Initializing unit: PCI
+    Adding virtual PCI device 00:00.0 to cell "ZynqMP-ZCU102"
+    Adding virtual PCI device 00:01.0 to cell "ZynqMP-ZCU102"
+    Page pool usage after late setup: mem 42/993, remap 69/131072
+    Activating hypervisor
+    [   39.844953] The Jailhouse is opening.
+
+    # jailhouse cell create zynqmp-zcu102-gic-demo.cell
+    [   55.351670] CPU3: shutdown
+    [   55.354303] psci: CPU3 killed.
+    Created cell "gic-demo"
+    Page pool usage after cell creation: mem 56/993, remap 69/131072
+    [   55.388029] Created Jailhouse cell "gic-demo"
+    
+    # jailhouse cell load 1 gic-demo.bin
+    Cell "gic-demo" can be loaded
+    # jailhouse cell start 1
+
+Second UART starts showing jitter data:
+
+    Timer fired, jitter:   2212 ns, min:   2101 ns, max:   2585 ns
+    Timer fired, jitter:   2171 ns, min:   2101 ns, max:   2585 ns
+    Timer fired, jitter:   2454 ns, min:   2101 ns, max:   2585 ns
+    Timer fired, jitter:   2444 ns, min:   2101 ns, max:   2585 ns
+    Timer fired, jitter:   2181 ns, min:   2101 ns, max:   2585 ns
+    Timer fired, jitter:   2181 ns, min:   2101 ns, max:   2585 ns
+    Timer fired, jitter:   2212 ns, min:   2101 ns, max:   2585 ns
+
+If second UART does not show anything, the problem can be between the DTB and 
Jailhouse. Jailhouse is not still compatible with the last Xilinx DTBs. 
Therefore, it is recommendable to use a 2016 repository DTB, such as, 
https://github.com/Xilinx/linux-xlnx/blob/xilinx-v2016.4/arch/arm64/boot/dts/xilinx/zynqmp-zcu102.dts
+
+Testing Jailhouse Linux
+-------------------------------------------
+It is possible to load a Linux image in a guest cell. In order to do that, it 
is essential to do a new Linux image but with `Image Packaging 
Configuration--->Root filesystem type-->INITRAMFS`. 
+
+The files `image/linux/Image` and `image/linux/rootfs.cpio` have to be copied 
from the Petalinux project to the rootfs. Besides, 
`configs/arm64/dts/inmate-zynqmp-zcu102.dtb` file has to be copied from 
Jailhouse project. 
+
+To load Linux in the guest cell:
+
+    # modprobe jailhouse
+    [   24.309597] jailhouse: loading out-of-tree module taints kernel.
+    
+    # jailhouse enable zynqmp-zcu102.cell
+    Initializing Jailhouse hypervisor v0.8 on CPU 2
+    Code location: 0x0000ffffc0200060
+    Page pool usage after early setup: mem 33/993, remap 64/131072
+    Initializing processors:
+     CPU 2... OK
+     CPU 0... OK
+     CPU 3... OK
+     CPU 1... OK
+    Initializing unit: irqchip
+    Initializing unit: PCI
+    Adding virtual PCI device 00:00.0 to cell "ZynqMP-ZCU102"
+    Adding virtual PCI device 00:01.0 to cell "ZynqMP-ZCU102"
+    Page pool usage after late setup: mem 42/993, remap 69/131072
+    Activating hypervisor
+    [   39.844953] The Jailhouse is opening.
+    
+    # jailhouse cell linux zynqmp-zcu102-linux-demo.cell Image -d 
inmate-zynqmp-zcu102.dtb -i rootfs.cpio -c "console=ttyPS0,115200"
+    [   81.967652] CPU2: shutdown
+    [   81.970285] psci: CPU2 killed.
+    [   82.015619] CPU3: shutdown
+    [   82.018242] psci: CPU3 killed.
+    Adding virtual PCI device 00:00.0 to cell "ZynqMP-linux-demo"
+    Shared memory connection established: "ZynqMP-linux-demo" <--> 
"ZynqMP-ZCU102"
+    Adding virtual PCI device 00:02.0 to cell "ZynqMP-linux-demo"
+    Created cell "ZynqMP-linux-demo"
+    Page pool usage after cell creation: mem 61/993, remap 69/131072
+    [   82.062667] Created Jailhouse cell "ZynqMP-linux-demo"
+    Cell "ZynqMP-linux-demo" can be loaded
+    Started cell "ZynqMP-linux-demo"
+    
+Guest Linux booting will appear in the second UART. It possible to see the 
state of each cell:
+
+    root@xilinx-zcu102-2017_4:/# jailhouse cell list
+    ID      Name                    State             Assigned CPUs           
Failed CPUs
+    0       ZynqMP-ZCU102           running           0-1
+    1       ZynqMP-linux-demo       running           2-3
+
+Debug in ZCU102
+-------------------------------------------
+The debug console is supposed to help with early cell boot issues and/or when 
a UART is not available or not working. Add `JAILHOUSE_CELL_DEBUG_CONSOLE` to 
the cell config (see e.g.
+configs/arm64/qemu-arm64-linux-demo.c). 
+
+As an example, the gic-demo can be debugged. Just add the following info in 
the cell load. It will print all the data through the principal UART instead of 
from the second one. 
+
+    # jailhouse cell load 1 gic-demo.bin -s "con-type=JAILHOUSE" -a 0x1000
+    
+The output can be seen in:
+
+    # jailhouse console -f
-- 
2.7.4

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jailhouse-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to