On 05/03/2020 11:31, Jan Kiszka wrote:
> On 05.03.20 10:39, [email protected] wrote:
>> From: Peng Fan <[email protected]>
>>
>> This patchset tested on i.MX8MN arm64 with quad A53 cores
>>
>> Patch 1 is to align jailhouse_system. Since the loader not have
>> MMU enabled, unaligned access will cause abort.
>>
>> Patch 2 is not that well orgnized. It does GICv3 initialization,
>> SMP boot up. Then kick inmate cell and root cell.
>> Some code are hardcoding for now.
>>
>> The boot log as below, you could see root linux and gic demo both
>> running:
>> root cell not able to manage inmate cell for now. But I think it
>> could be supported. intercell communication not aded currently.
>>
>> From test log, linux root cell boot will cause large latency for
>> gic-demo
>> jitter.
>>
>> It maybe good to use cache color on ARMv8, but still have issues
>> for root cell DMA without SMMU.
>>
>> ## Loading kernel from FIT Image at 60000000 ...
>> Using 'config@1' configuration
>> Trying 'kernel' kernel subimage
>> Description: linux
>> Type: Kernel Image
>> Compression: uncompressed
>> Data Start: 0x60000650
>> Data Size: 6072 Bytes = 5.9 KiB
>> Architecture: AArch64
>> OS: Linux
>> Load Address: 0x40000000
>> Entry Point: 0x40000000
>> Verifying Hash Integrity ... OK
>> ## Loading fdt from FIT Image at 60000000 ...
>> Using 'config@1' configuration
>> Trying 'fdt' fdt subimage
>> Description: fdt
>> Type: Flat Device Tree
>> Compression: uncompressed
>> Data Start: 0x61a90f90
>> Data Size: 39890 Bytes = 39 KiB
>> Architecture: AArch64
>> Load Address: 0x43000000
>> Verifying Hash Integrity ... OK
>> Loading fdt from 0x61a90f90 to 0x43000000
>> Booting using the fdt blob at 0x43000000
>> ## Loading loadables from FIT Image at 60000000 ...
>> Trying 'hypervisor' loadables subimage
>> Description: Jailhouse hypervisor
>> Type: Standalone Program
>> Compression: uncompressed
>> Data Start: 0x60001e08
>> Data Size: 104456 Bytes = 102 KiB
>> Architecture: AArch64
>> Load Address: 0x40200000
>> Entry Point: unavailable
>> Verifying Hash Integrity ... OK
>> Loading loadables from 0x60001e08 to 0x40200000
>> ## Loading loadables from FIT Image at 60000000 ...
>> Trying 'cell@0' loadables subimage
>> Description: i.MX8MN cell
>> Type: Standalone Program
>> Compression: uncompressed
>> Data Start: 0x6001b610
>> Data Size: 1218 Bytes = 1.2 KiB
>> Architecture: AArch64
>> Load Address: 0x40300000
>> Entry Point: unavailable
>> Verifying Hash Integrity ... OK
>> Loading loadables from 0x6001b610 to 0x40300000
>> ## Loading loadables from FIT Image at 60000000 ...
>> Trying 'inmate@0' loadables subimage
>> Description: ROOT CELL image
>> Type: Standalone Program
>> Compression: uncompressed
>> Data Start: 0x6001bad4
>> Data Size: 27720192 Bytes = 26.4 MiB
>> Architecture: AArch64
>> Load Address: 0x40480000
>> Entry Point: unavailable
>> Verifying Hash Integrity ... OK
>> Loading loadables from 0x6001bad4 to 0x40480000
>> ## Loading loadables from FIT Image at 60000000 ...
>> Trying 'cell@1' loadables subimage
>> Description: i.MX8MN GIC-CELL
>> Type: Standalone Program
>> Compression: uncompressed
>> Data Start: 0x61a8b4d4
>> Data Size: 236 Bytes = 236 Bytes
>> Architecture: AArch64
>> Load Address: 0x40310000
>> Entry Point: unavailable
>> Verifying Hash Integrity ... OK
>> Loading loadables from 0x61a8b4d4 to 0x40310000
>> ## Loading loadables from FIT Image at 60000000 ...
>> Trying 'inmate@1' loadables subimage
>> Description: i.MX8MN GIC-DEMO
>> Type: Standalone Program
>> Compression: uncompressed
>> Data Start: 0x61a8b5c0
>> Data Size: 22992 Bytes = 22.5 KiB
>> Architecture: AArch64
>> Load Address: 0xb3c00000
>> Entry Point: unavailable
>> Verifying Hash Integrity ... OK
>> Loading loadables from 0x61a8b5c0 to 0xb3c00000
>> Loading Kernel Image ... OK
>> Using Device Tree in place at 0000000043000000, end 000000004300cbd1
>>
>> Starting kernel ...
>>
>>
>> Initializing Jailhouse hypervisor v0.12 (20-g40c6fd8f) on CPU 1
>> Code location: 0x0000ffffc0200800
>> Page pool usage after early setup: mem 39/993, remap 0/131072
>> Initializing processors:
>> CPU 1... OK
>> CPU 0... OK
>> CPU 3... OK
>> CPU 2... OK
>> Initializing unit: irqchip
>> Initializing unit: ARM SMMU v3
>> Initializing unit: PVU IOMMU
>> Initializing unit: PCI
>> Adding virtual PCI device 00:00.0 to cell "imx8mm"
>> Adding virtual PCI device 00:01.0 to cell "imx8mm"
>> Page pool usage after late setup: mem 60/993, remap 144/131072
>> Activating hypervisor
>> Created cell "gic-demo"
>> Page pool usage after cell creation: mem 72/993, remap 144/131072
>> Cell "gic-demo" can be loaded
>> Started cell "gic-demo"
>> Initializing the GIC...
>> Initializing the timer...
>> [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
>> [ 0.000000] Linux version 5.4.3-00028-g643910d36b96-dirty
>> (Freenix@linux-ljuv) (gcc version 9.2.0 (GCC)) #105 SMP PREEMPT Wed
>> Mar 4 15:21:58 CST 2020
>> [ 0.000000] Machine model: NXP i.MX8MNano DDR4 EVK board
>> [ 0.000000] earlycon: ec_imx6q0 at MMIO 0x0000000030890000 (options
>> '115200')
>> [ 0.000000] printk: bootconsole [ec_imx6q0] enabled
>> [ 0.000000] efi: Getting EFI parameters from FDT:
>> [ 0.000000] efi: UEFI not found.
>> [ 0.000000] Reserved memory: created CMA memory pool at
>> 0x000000006a000000, size 640 MiB
>> [ 0.000000] OF: reserved mem: initialized node linux,cma,
>> compatible id shared-dma-pool
>> Timer fired, jitter: 2999 ns, min: 2999 ns, max: 2999 ns
>> [ 0.000000] NUMA: No NUMA configuration found
>> [ 0.000000] NUMA: Faking a node at [mem
>> 0x0000000040000000-0x00000000bdffffff]
>> [ 0.000000] NUMA: NODE_DATA [mem 0xbdd04500-0xbdd05fff]
>> [ 0.000000] Zone ranges:
>> [ 0.000000] DMA32 [mem 0x0000000040000000-0x00000000bdffffff]
>> [ 0.000000] Normal empty
>> [ 0.000000] Movable zone start for each node
>> [ 0.000000] Early memory node ranges
>> [ 0.000000] node 0: [mem 0x0000000040000000-0x0000000093bfffff]
>> [ 0.000000] node 0: [mem 0x00000000b8000000-0x00000000bb6fffff]
>> [ 0.000000] node 0: [mem 0x00000000bbc00000-0x00000000bdffffff]
>> [ 0.000000] Zeroed struct page in unavailable ranges: 256 pages
>> [ 0.000000] Initmem setup node 0 [mem
>> 0x0000000040000000-0x00000000bdffffff]
>> Timer fired, jitter: 1624 ns, min: 1624 ns, max: 2999 ns
>> [ 0.000000] psci: probing for conduit method from DT.
>> [ 0.000000] psci: PSCIv1.1 detected in firmware.
>> [ 0.000000] psci: Using standard PSCI v0.2 function IDs
>> [ 0.000000] psci: MIGRATE_INFO_TYPE not supported.
>> [ 0.000000] psci: SMC Calling Convention v1.1
>> [ 0.000000] percpu: Embedded 24 pages/cpu s58904 r8192 d31208 u98304
>> [ 0.000000] Detected VIPT I-cache on CPU0
>> [ 0.000000] CPU features: detected: ARM erratum 845719
>> [ 0.000000] CPU features: detected: GIC system register CPU interface
>> [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages:
>> 360612
>> [ 0.000000] Policy zone: DMA32
>> [ 0.000000] Kernel command line: console=ttymxc1,115200
>> earlycon=ec_imx6q,0x30890000,115200 root=/dev/mmcblk1p2 rootwait rw
>> [ 0.000000] Dentry cache hash table entries: 262144 (order: 9,
>> 2097152 bytes, linear)
>> [ 0.000000] Inode-cache hash table entries: 131072 (order: 8,
>> 1048576 bytes, linear)
>> [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
>> Timer fired, jitter: 7999 ns, min: 1624 ns, max: 7999 ns
>> [ 0.000000] Memory: 742552K/1465344K available (16316K kernel code,
>> 1342K rwdata, 6380K rodata, 2944K init, 1015K bss, 67432K reserved,
>> 655360K cma-reserved)
>> [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
>> [ 0.000000] rcu: Preemptible hierarchical RCU implementation.
>> [ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=256 to
>> nr_cpu_ids=4.
>> [ 0.000000] Tasks RCU enabled.
>> [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay
>> is 25 jiffies.
>> [ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16,
>> nr_cpu_ids=4
>> [ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
>> [ 0.000000] GICv3: 128 SPIs implemented
>> [ 0.000000] GICv3: 0 Extended SPIs implemented
>> [ 0.000000] GICv3: Distributor has no Range Selector support
>> [ 0.000000] GICv3: 16 PPIs implemented
>> [ 0.000000] GICv3: no VLPI support, no direct LPI support
>> [ 0.000000] GICv3: CPU0: found redistributor 0 region
>> 0:0x0000000038880000
>> [ 0.000000] ITS: No ITS available, not enabling LPIs
>> [ 0.000000] random: get_random_bytes called from
>> start_kernel+0x2b8/0x44c with crng_init=0
>> [ 0.000000] arch_timer: cp15 timer(s) running at 8.00MHz (virt).
>> [ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff
>> max_cycles: 0x1d854df40, max_idle_ns: 440795202120 ns
>> [ 0.000004] sched_clock: 56 bits at 8MHz, resolution 125ns, wraps
>> every 2199023255500ns
>> [ 0.008448] Console: colour dummy device 80x25
>> [ 0.012571] Calibrating delay loop (skipped), value calculated
>> using timer frequency.. 16.00 BogoMIPS (lpj=32000)
>> [ 0.022844] pid_max: default: 32768 minimum: 301
>> [ 0.027546] LSM: Security Framework initializing
>> [ 0.032169] Mount-cache hash table entries: 4096 (order: 3, 32768
>> bytes, linear)
>> [ 0.039565] Mountpoint-cache hash table entries: 4096 (order: 3,
>> 32768 bytes, linear)
>> Timer fired, jitter: 2374 ns, min: 1624 ns, max: 7999 ns
>> [ 0.071508] ASID allocator initialised with 32768 entries
>> [ 0.079504] rcu: Hierarchical SRCU implementation.
>> [ 0.088337] EFI services will not be available.
>> [ 0.095538] smp: Bringing up secondary CPUs ...
>> Timer fired, jitter: 749 ns, min: 749 ns, max: 7999 ns
>> [ 0.127643] Detected VIPT I-cache on CPU1
>> [ 0.127671] GICv3: CPU1: found redistributor 1 region
>> 0:0x00000000388a0000
>> [ 0.127700] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
>> [ 0.159684] Detected VIPT I-cache on CPU2
>> [ 0.159700] GICv3: CPU2: found redistributor 2 region
>> 0:0x00000000388c0000
>> [ 0.159717] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
>> [ 0.191721] psci: failed to boot CPU3 (-1)
>> [ 0.227974] CPU3: failed to boot: -1
>> [ 0.231609] smp: Brought up 1 node, 3 CPUs
>> [ 0.235680] SMP: Total of 3 processors activated.
>> [ 0.240396] CPU features: detected: 32-bit EL0 Support
>> [ 0.245568] CPU features: detected: CRC32 instructions
>> [ 0.259436] CPU: All CPU(s) started at EL1
>> [ 0.260692] alternatives: patching kernel code
>> [ 0.266398] devtmpfs: initialized
>> Timer fired, jitter: 749 ns, min: [ 0.274443] clocksource:
>> jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns:
>> 7645041785100000 ns
>> [ 0.281523] futex hash table entries: 1024 (order: 4, 65536 bytes,
>> linear)
>>
>>
>> Peng Fan (2):
>> cell-config: reserve an entry to align jailhouse_system
>> support booting jailhouse before root cell linux
>>
>> Kbuild | 2 +-
>> hypervisor/arch/arm-common/include/asm/gic.h | 3 +
>> hypervisor/arch/arm-common/include/asm/gic_v3.h | 18 ++
>> include/jailhouse/cell-config.h | 1 +
>> loader/Makefile | 49 ++++
>> loader/configs.h | 30 +++
>> loader/fit.its | 85 ++++++
>> loader/gic-v3.c | 154 +++++++++++
>> loader/head.S | 327
>> ++++++++++++++++++++++++
>> loader/inmate.c | 63 +++++
>> loader/lib.c | 56 ++++
>> loader/loader.h | 15 ++
>> loader/loader.lds.S | 66 +++++
>> loader/main.c | 194 ++++++++++++++
>> loader/mmio.h | 21 ++
>> loader/psci.h | 119 +++++++++
>> 16 files changed, 1202 insertions(+), 1 deletion(-)
>> create mode 100644 loader/Makefile
>> create mode 100644 loader/configs.h
>> create mode 100644 loader/fit.its
>> create mode 100644 loader/gic-v3.c
>> create mode 100644 loader/head.S
>> create mode 100644 loader/inmate.c
>> create mode 100644 loader/lib.c
>> create mode 100644 loader/loader.h
>> create mode 100644 loader/loader.lds.S
>> create mode 100644 loader/main.c
>> create mode 100644 loader/mmio.h
>> create mode 100644 loader/psci.h
>>
>
> Nice work! Will try to play with it on other (GICv3) targets.
Yep, really nice work! I'll try to get my hands dirty on it soon. I
should be able to test it on the ESPRESSObin.
>
> There is a bit code duplication in the loader. I wonder if we couldn't
> reuse the inmate library for that as well. Inmates can already run
> without Jailhouse, Ralf once enabled that.
I already had a quick look on the code -- from my first look, I think
that should be possible. It should be able to compile loader/inmate.c
like any other regular inmate, and get rid of lib.c
Other than that, I'll have a look at PSCI support for the inmate
library, I still have something in the queue:
https://github.com/lfd/jailhouse/commits/arm-psci
Thanks
Ralf
>
> Regarding cache coloring: Now that we start Jailhouse before Linux, the
> plan would be to present a sliced (according to colors) memory map to
> Linux via the device tree, just like it was done for the non-root cells
> in the original coloring series. Still, we do want SMMU for all targets
> eventually...
>
> Jan
>
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jailhouse-dev/7ecdb38c-72d3-5198-bc11-91ec5c17a138%40oth-regensburg.de.