xilinx ARM MPSoc+ultrascale software run in QEMU

Many vendors are shipping ARMv8 SoC including NXP/Freescale, Marvell, Broadcom, xilinx. xilinx MPSoC is one of impressive one, with Cortex-53, integrated with xilinx FPGA.

xilinx MPSoC

I’m impressed with xilinx’s rich document for software developers to reference. In this post I share what I have done in order to boot linux in QEMU which simulates xilinx ARM MPSoC+ultrascale.

xilinx MPSoC is a well designed and feature rich SoC. See following picture to see what is inside. Further you can refer to https://www.xilinx.com/support/documentation/selection-guides/zynq-ultrascale-plus-product-selection-guide.pdf.

xilinx MPSoC block diag

From hardware prspective, it can have two or four cortex-53 cores/APU, up to 2 RPU for realtime OS, one GPU etc…

For software development, in general, xilinx provides petalinux package, which wraps up eveything inside, very much like Eclipse IDE for Java development. That is good, but for experienced developers, they might be wondering what is exactly happened inside. This is important especially when it comes to integrate into like Cisco’s build enviroment. Only after you understand what is happenning, you will be able to debug the issue if there is problem encountered in the future. This is a vey general rule in software engineering.

petalinux installation

As a first step, petelinux needs to be installed because it has toolchain like cross compiler, bootgen to create BOOT.BIN etc. I did it in Redhat 6.6 box. Before start, it is good idea to go through xilinx docs:

  • UG1209: Zynq UltraScale+MPSoC: embedded Design tutorial.
  • UG1137: Zynq UltraScale+MPSoC: Software Developer Guide.
  • UG1144: petalinux tool document reference guide.
  • UG1169: Zynq UltraScale+MPSoC: QEMU user guide
  • petalinux can be downloaded from https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html. I used version “2016.3”. At least these two files are to be downloaded: petalinux installer and ZCU102 BSP.

    bash-4.1$ ls -l /opt/xilinx-download/
    total 7472452
    -rwxr-xr-x 1 root root  113517046 Dec  5 17:30 Xilinx-ZCU102-v2016.3-final.bsp
    -rwxr-xr-x 1 root root 7538258720 Dec  5 17:30 petalinux-v2016.3-final-installer.run
    bash-4.1$

    After donwloaded complete, they need to be installed:

    bash-4.1$ /opt/xilinx-download/petalinux-v2016.3-final-installer.run /opt/petalinux-v2016.3-final

    After installation we can create a petlinux project as a reference as following:

    sg-ucs-2:/nobackup/weweng> mkdir my-peta-project && cd my-peta-project
    sg-ucs-2:/nobackup/weweng/my-peta-project> bash
    bash-4.1$ source /opt/petalinux-v2016.3-final/settings.sh
    WARNING: '.' detected in PATH - fixing it.
    PetaLinux environment set to '/opt/petalinux-v2016.3-final'
    INFO: Checking free disk space
    INFO: Checking installed tools
    INFO: Checking installed development libraries
    INFO: Checking network and other services
    WARNING: No tftp server found - please refer to "PetaLinux SDK Installation Guide" for its impact and solution
    bash-4.1$ pwd
    /nobackup/weweng/my-peta-project
    bash-4.1$ petalinux-create -t project -s /opt/xilinx-download/Xilinx-ZCU102-v2016.3-final.bsp
    INFO: Create project:
    INFO: Projects:
    INFO:   * Xilinx-ZCU102-2016.3
    INFO: has been successfully installed to /nobackup/weweng/my-peta-project/
    INFO: New project successfully created in /nobackup/weweng/my-peta-project/
    bash-4.1$ ls
    Xilinx-ZCU102-2016.3
    bash-4.1$

    Inside petalinux project, it includes FSBL, u-boot, PFM, Linux kernel, Linux rootfs components.

    “petalinux-build” will build system image. “petalinux-package” will package the desired image. “petalinux-boot” can boot qemu to run built image. “petzlinux-config” can be used to configure linux, kernel “-c kernel”, rootfs etc. For more details check petalinux reference document.

    As said, the created petalinux project is for reference only,we will download needed components from GITHUB https://github.com/Xilinx, and build them, then package.

    FSBL: First stage Boot Loader

    See below steps to set up enviroment, and download source code, and build fsbl binary.

    bash-4.1$ mkdir cisco-qemu-deploy
    bash-4.1$ export PETALINUXHOME="/opt/petalinux-v2016.3-final/"
    bash-4.1$ export HTTP_PROXY="http://proxy.esl.cisco.com:8080"
    bash-4.1$ export HTTPS_PROXY="https://proxy.esl.cisco.com:8080"
    bash-4.1$ mkdir cisco-xilinx-mpsoc && cd cisco-xilinx-mpsoc
    bash-4.1$ source $PETALINUXHOME/settings.sh
    bash-4.1$ export PATH=$PETALINUXHOME/tools/linux-i386/aarch64-none-elf/bin/:$PATH
    bash-4.1$ git clone https://github.com/Xilinx/embeddedsw.git
    Cloning into 'embeddedsw'...
    remote: Counting objects: 63470, done.
    remote: Total 63470 (delta 0), reused 0 (delta 0), pack-reused 63470
    Receiving objects: 100% (63470/63470), 65.87 MiB | 784.00 KiB/s, done.
    Resolving deltas: 100% (38654/38654), done.
    bash-4.1$ cd embeddedsw
    bash-4.1$ git checkout xilinx-v2016.3
    bash-4.1$ cd lib/sw_apps/zynqmp_fsbl/src
    bash-4.1$ make "BOARD=zcu102" "PROC=a53" "A53_STATE=64"
    ...
    <command-line>:0:0: note: this is the location of the previous definition
    aarch64-none-elf-gcc -o fsbl.elf  xfsbl_authentication.o  xfsbl_board.o  xfsbl_bs.o  xfsbl_csu_dma.o  xfsbl_handoff.o  xfsbl_hooks.o  xfsbl_image_header.o  xfsbl_initialization.o  xfsbl_main.o  xfsbl_misc.o  xfsbl_misc_drivers.o  xfsbl_nand.o  xfsbl_partition_load.o  xfsbl_qspi.o  xfsbl_rsa_sha.o  xfsbl_sd.o  psu_init.o  xfsbl_exit.o  xfsbl_translation_table_a53_64.o  -DXPS_BOARD_ZCU102  -MMD -MP -Wall -fmessage-length=0 -DARMA53_64 -Wl,--start-group,-lxil,-lgcc,-lc,--end-group -Wl,--start-group,-lxilffs,-lxil,-lgcc,-lc,--end-group -Wl,--start-group,-lxilsecure,-lxil,-lgcc,-lc,--end-group  -Wl,--gc-sections -L../misc//zynqmp_fsbl_bsp//psu_cortexa53_0/lib -Tlscript_a53.ld
    rm -rf  xfsbl_authentication.o  xfsbl_board.o  xfsbl_bs.o  xfsbl_csu_dma.o  xfsbl_handoff.o  xfsbl_hooks.o  xfsbl_image_header.o  xfsbl_initialization.o  xfsbl_main.o  xfsbl_misc.o  xfsbl_misc_drivers.o  xfsbl_nand.o  xfsbl_partition_load.o  xfsbl_qspi.o  xfsbl_rsa_sha.o  xfsbl_sd.o  psu_init.o  xfsbl_exit.o  xfsbl_translation_table_a53_64.o  *.d
    bash-4.1$ ls -l fsbl.elf
    -rwxr-xr-x 1 weweng eng 609960 Jan 19 12:05 fsbl.elf
    bash-4.1$ # copy to deployment directory to create BOOT.BIN
    bash-4.1$ cp fsbl.elf ../cisco-qemu-deploy/zynqmp_fsbl.elf

    ARM Trust Firmware

    bash-4.1$ git clone https://github.com/Xilinx/arm-trusted-firmware.git
    Cloning into 'arm-trusted-firmware'...
    remote: Counting objects: 19526, done.
    remote: Total 19526 (delta 0), reused 0 (delta 0), pack-reused 19526
    Receiving objects: 100% (19526/19526), 8.05 MiB | 809.00 KiB/s, done.
    Resolving deltas: 100% (12098/12098), done.
    bash-4.1$ ls
    arm-trusted-firmware  cisco-qemu-deploy  embeddedsw  u-boot-xlnx
    bash-4.1$ cd arm-trusted-firmware
    bash-4.1$ pwd
    /nobackup/weweng/cisco-xilinx-mpsoc/arm-trusted-firmware
    bash-4.1$ git checkout xilinx-v2016.3
    bash-4.1$ make CROSS_COMPILE=aarch64-linux-gnu- PLAT=zynqmp RESET_TO_BL31=1 bl31
    .......
      AS      plat/arm/common/aarch64/arm_helpers.S
      AS      plat/xilinx/zynqmp/aarch64/zynqmp_helpers.S
      AS      drivers/cadence/uart/cdns_console.S
      PP      bl31/bl31.ld.S
      LD      build/zynqmp/release/bl31/bl31.elf
      BIN     build/zynqmp/release/bl31.bin
    
    Built build/zynqmp/release/bl31.bin successfully
    
      OD      build/zynqmp/release/bl31/bl31.dump
    bash-4.1$
    bash-4.1$ ls -l build/zynqmp/release/bl31/bl31.elf
    -rwxr-xr-x 1 weweng eng 93400 Jan 19 12:44 build/zynqmp/release/bl31/bl31.elf
    bash-4.1$ # copy to deployment directory to create BOOT.BIN
    bash-4.1$ cp build/zynqmp/release/bl31/bl31.elf ../cisco-qemu-deploy/bl31.elf
    bash-4.1$

    u-boot

    (reference: http://www.wiki.xilinx.com/Build+U-Boot)

    bash-4.1$ pwd
    /nobackup/weweng/cisco-xilinx-mpsoc
    bash-4.1$ git clone https://github.com/Xilinx/u-boot-xlnx.git
    Cloning into 'u-boot-xlnx'...
    remote: Counting objects: 455682, done.
    remote: Compressing objects: 100% (37206/37206), done.
    remote: Total 455682 (delta 29128), reused 0 (delta 0), pack-reused 418161
    Receiving objects: 100% (455682/455682), 120.42 MiB | 788.00 KiB/s, done.
    Resolving deltas: 100% (360771/360771), done.
    bash-4.1$
    bash-4.1$ cd u-boot-xlnx/
    bash-4.1$ git checkout xilinx-v2016.3
    bash-4.1$ which mkimage
    /auto/mssbu-swtools/bin/mkimage
    bash-4.1$ export PATH=$PETALINUXHOME/tools/linux-i386/petalinux/bin/unexport/:$PATH
    bash-4.1$ which mkimage
    /opt/petalinux-v2016.3-final/tools/linux-i386/petalinux/bin/unexport/mkimage
    bash-4.1$ make xilinx_zynqmp_zcu102_config
      HOSTCC  scripts/basic/fixdep
      HOSTCC  scripts/kconfig/conf.o
      SHIPPED scripts/kconfig/zconf.tab.c
      SHIPPED scripts/kconfig/zconf.lex.c
      SHIPPED scripts/kconfig/zconf.hash.c
      HOSTCC  scripts/kconfig/zconf.tab.o
      HOSTLD  scripts/kconfig/conf
    #
    # configuration written to .config
    #
    bash-4.1$ export CROSS_COMPILE=aarch64-none-elf-
    bash-4.1$ export ARCH=arm
    bash-4.1$ make
    ...
      CC      spl/lib/panic.o
      CC      spl/lib/strto.o
      CC      spl/lib/strmhz.o
      LD      spl/lib/built-in.o
      LDS     spl/u-boot-spl.lds
      LD      spl/u-boot-spl
      OBJCOPY spl/u-boot-spl-nodtb.bin
      COPY    spl/u-boot-spl.bin
      CFG     spl/u-boot-spl.cfg
      MKIMAGE spl/boot.bin
      MKIMAGE u-boot.img
    bash-4.1$
    bash-4.1$ ls -l u-boot.bin u-boot.elf u-boot.img
    -rwxr-xr-x 1 weweng eng 569400 Jan 19 12:27 u-boot.bin
    -rwxr-xr-x 1 weweng eng 635832 Jan 19 12:27 u-boot.elf
    -rw-r--r-- 1 weweng eng 599364 Jan 19 12:27 u-boot.img
    bash-4.1$ # copy to deployment directory to create BOOT.BIN
    bash-4.1$ cp u-boot.elf ../cisco-qemu-deploy/

    Create BOOT.BIN

    bash-4.1$ pwd
    /nobackup/weweng/cisco-xilinx-mpsoc/cisco-qemu-deploy
    
    bash-4.1$ #take prebuilt pmufw.elf from petalinux project, we don't need to change this one at all
    
    bash-4.1$ cp /nobackup/weweng/my-peta-project/Xilinx-ZCU102-2016.3/pre-built/linux/images/pmufw.elf .
    
    bash-4.1$ ls -l
    total 1448
    -rwxr-xr-x 1 weweng eng  93400 Jan 19 12:56 bl31.elf
    -rw-r--r-- 1 weweng eng    202 Jan 19 13:02 cisco-img.bif
    -rwxr-xr-x 1 weweng eng 198323 Jan 19 12:59 pmufw.elf
    -rwxr-xr-x 1 weweng eng 635832 Jan 19 12:56 u-boot.elf
    -rwxr-xr-x 1 weweng eng 609960 Jan 19 12:57 zynqmp_fsbl.elf
    bash-4.1$ cat cisco-img.bif
    the_ROM_image:
    {
      [fsbl_config] a53_x64
      [bootloader] zynqmp_fsbl.elf
      [destination_cpu=a53-0, exception_level=el-3, trustzone] bl31.elf
      [destination_cpu=a53-0, exception_level=el-2] u-boot.elf
    }
    bash-4.1$
    
    bash-4.1$ cat sparrow-img.bif
    the_ROM_image:
    {
      [fsbl_config] a53_x64
      [bootloader] build/zynqmp_fsbl.elf
      [pmufw_image] pmufw.elf
      [destination_cpu=a53-0, exception_level=el-3, trustzone] bl31.elf
      [destination_cpu=a53-0, exception_level=el-2] u-boot.elf
    }
    bash-4.1$ $PETALINUXHOME/tools/hsm/bin/bootgen -image cisco-img.bif -r -w -o i BOOT.BIN
    bash-4.1$ ls -l BOOT.BIN
    -rw-r--r-- 1 weweng eng 732152 Jan 19 13:04 BOOT.BIN
    bash-4.1$

    At this point we have BOOT.BIN file ready to boot.

    xilinx-kernel

    It can get from GITHUB, for now we use the prebuilt one from petzlinux project

    bash-4.1$ pwd
    /nobackup/weweng/cisco-xilinx-mpsoc/cisco-qemu-deploy
    bash-4.1$ cp /nobackup/weweng/my-peta-project/Xilinx-ZCU102-2016.3/pre-built/linux/images/Image .
    bash-4.1$

    Now we are ready to create a SD card for qemu to boot:

    bash-4.1$ dd if=/dev/zero of=qemu_sd.img bs=256M count=1 ; sync
    bash-4.1$ mkfs.vfat -F 32 qemu_sd.img
    bash-4.1$ mcopy -i qemu_sd.img BOOT.BIN ::/
    bash-4.1$ mcopy -i qemu_sd.img Image ::/
    bash-4.1$ mcopy -i qemu_sd.img zynqmp-qemu-arm.dtb ::/
    bash-4.1$ mcopy -i qemu_sd.img system.dtb ::/

    Note that zynqmp-qemu-arm.dtb is for QEMU, system.dtb is for MPSoC running inside QEMU use.

    xilinx-qemu

    We can use build one from GITHUB, or QEMU from petalinux tool, to save time, we use one from petalinux installation: $PETALINUXHOME/tools/linux-i386/petalinux/bin/qemu-system-aarch64.

    $PETALINUXHOME/tools/linux-i386/petalinux/bin/qemu-system-aarch64 -m 2048 -M arm-generic-fdt -nographic -serial mon:stdio -serial /dev/null -device loader,file=zynqmp_fsbl.elf,cpu=0 -hw-dtb ./zynqmp-qemu-arm.dtb -device loader,addr=0xfd1a0104,data=0x8000000e,data-len=4 -drive file=qemu_sd.img,if=sd,format=raw,index=1 -boot mode=5
    --------------------------------------------------------------------
    Xilinx QEMU Oct 16 2016 13:44:59.
    --------------------------------------------------------------------
    Xilinx Zynq MP First Stage Boot Loader
    Release 2016.3   Nov 17 2016  -  13:02:28
    NOTICE:  ATF running on XCZUUNKN/QEMU v1/RTL0.0 at 0xfffea000
    NOTICE:  BL31: Secure code at 0x0
    NOTICE:  BL31: Non secure code at 0x8000000
    NOTICE:  BL31: v1.2(release):
    NOTICE:  BL31: Built : 13:25:44, Nov 15 2016
    
    
    U-Boot 2016.07 (Nov 17 2016 - 17:02:02 -0800) Xilinx ZynqMP ZCU102
    
    I2C:   ready
    DRAM:  4 GiB
    EL Level:       EL2
    Chip ID:        xczuunknown
    MMC:   sdhci@ff170000: 0
    Using default environment
    
    In:    serial@ff000000
    Out:   serial@ff000000
    Err:   serial@ff000000
    Bootmode: SD_MODE1
    SCSI:  SATA link 0 timeout.
    SATA link 1 timeout.
    AHCI 0001.0000 32 slots 2 ports 1.5 Gbps 0x3 impl SATA mode
    flags: ncq only
    scanning bus for devices...
    Found 0 device(s).
    Net:   ZYNQ GEM: ff0e0000, phyaddr 21, interface rgmii-id
    I2C EEPROM MAC address read failed
    
    Warning: ethernet@ff0e0000 (eth0) using random MAC address - 92:7a:fb:6c:6f:68
    eth0: ethernet@ff0e0000
    Hit any key to stop autoboot:  0
    switch to partitions #0, OK
    mmc0 is current device
    Device: sdhci@ff170000
    Manufacturer ID: aa
    OEM: 5859
    Name: QEMU!
    Tran Speed: 25000000
    Rd Block Len: 512
    SD version 1.0
    High Capacity: No
    Capacity: 256 MiB
    Bus Width: 4-bit
    Erase Group Size: 512 Bytes
    reading system.dtb
    32645 bytes read in 35 ms (910.2 KiB/s)
    reading Image
    37524480 bytes read in 9668 ms (3.7 MiB/s)
    ## Flattened Device Tree blob at 04000000
       Booting using the fdt blob at 0x4000000
       Loading Device Tree to 000000000fff5000, end 000000000fffff84 ... OK
    
    Starting kernel ...
    
    [    0.000000] Booting Linux on physical CPU 0x0
    [    0.000000] Linux version 4.6.0 (xbrbbot@xcoengvm229115) (gcc version 5.2.1 20151005 (Linaro GCC 5.2-2015.11-2) ) #2 SMP Sun Oct 16 20:45:00 MDT 2016
    [    0.000000] Boot CPU: AArch64 Processor [410fd032]
    [    0.000000] efi: Getting EFI parameters from FDT:
    [    0.000000] efi: UEFI not found.
    [    0.000000] cma: Reserved 128 MiB at 0x0000000078000000
    [    0.000000] psci: probing for conduit method from DT.
    [    0.000000] psci: PSCIv1.0 detected in firmware.
    [    0.000000] psci: Using standard PSCI v0.2 function IDs
    [    0.000000] psci: MIGRATE_INFO_TYPE not supported.
    [    0.000000] percpu: Embedded 20 pages/cpu @ffffffc87ff48000 s42496 r8192 d31232 u81920
    [    0.000000] Detected VIPT I-cache on CPU0
    [    0.000000] CPU features: enabling workaround for ARM errata 826319, 827319, 824069
    [    0.000000] CPU features: enabling workaround for ARM erratum 845719
    [    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 1034240
    [    0.000000] Kernel command line: root=/dev/mmcblk0p2 rw rootwait
    [    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
    [    0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes)
    [    0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
    [    0.000000] software IO TLB [mem 0x73fff000-0x77fff000] (64MB) mapped at [ffffffc073fff000-ffffffc077ffefff]
    [    0.000000] Memory: 3895960K/4194304K available (7528K kernel code, 541K rwdata, 2656K rodata, 25912K init, 363K bss, 167272K reserved, 131072K cma-reserved)
    [    0.000000] Virtual kernel memory layout:
    [    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
    [    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdffff0000   (   247 GB)
    [    0.000000]       .text : 0xffffff8008080000 - 0xffffff80087d8000   (  7520 KB)
    [    0.000000]     .rodata : 0xffffff80087d8000 - 0xffffff8008a74000   (  2672 KB)
    [    0.000000]       .init : 0xffffff8008a74000 - 0xffffff800a3c2000   ( 25912 KB)
    [    0.000000]       .data : 0xffffff800a3c2000 - 0xffffff800a449400   (   541 KB)
    [    0.000000]     vmemmap : 0xffffffbe00000000 - 0xffffffbfc0000000   (     7 GB maximum)
    [    0.000000]               0xffffffbe00000000 - 0xffffffbe1dc00000   (   476 MB actual)
    [    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
    [    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
    [    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc880000000   ( 34816 MB)
    [    0.000000] Hierarchical RCU implementation.
    [    0.000000]  Build-time adjustment of leaf fanout to 64.
    [    0.000000]  RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
    [    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=4
    [    0.000000] NR_IRQS:64 nr_irqs:64 0
    [    0.000000] GIC: Adjusting CPU interface base to 0x00000000f902f000
    [    0.000000] GIC: Using split EOI/Deactivate mode
    [    0.000000] Architected cp15 timer(s) running at 50.00MHz (phys).
    [    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0xb8812736b, max_idle_ns: 440795202655 ns
    [    0.000165] sched_clock: 56 bits at 50MHz, resolution 20ns, wraps every 4398046511100ns
    [    0.008439] Console: colour dummy device 80x25
    [    0.011299] console [tty0] enabled
    [    0.011892] Calibrating delay loop (skipped), value calculated using timer frequency.. 100.00 BogoMIPS (lpj=200000)
    [    0.012150] pid_max: default: 32768 minimum: 301
    [    0.014438] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes)
    [    0.014528] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes)
    [    0.036291] ASID allocator initialised with 65536 entries
    [    0.045716] zynqmp_plat_init power management API version error. Expected: v0.2 - Found: v0.0
    [    0.045814] zynqmp_plat_init Power management API v0.2
    [    0.046439] EFI services will not be available.
    [    0.054894] Detected VIPT I-cache on CPU1
    [    0.062708] CPU1: Booted secondary processor [410fd032]
    [    0.093955] Detected VIPT I-cache on CPU2
    [    0.097514] CPU2: Booted secondary processor [410fd032]
    [    0.123794] Detected VIPT I-cache on CPU3
    [    0.127502] CPU3: Booted secondary processor [410fd032]
    [    0.138586] Brought up 4 CPUs
    [    0.140494] SMP: Total of 4 processors activated.
    [    0.140819] CPU: All CPU(s) started at EL2
    [    0.141905] alternatives: patching kernel code
    [    0.168184] devtmpfs: initialized
    [    0.202612] DMI not present or invalid.
    [    0.203897] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
    [    0.228145] xor: measuring software checksum speed
    [    0.266872]    8regs     :  1203.000 MB/sec
    [    0.307625]    8regs_prefetch:  1200.000 MB/sec
    [    0.348877]    32regs    :  1151.000 MB/sec
    [    0.390088]    32regs_prefetch:   568.000 MB/sec
    [    0.390193] xor: using function: 8regs (1203.000 MB/sec)
    [    0.401979] NET: Registered protocol family 16
    [    0.426307] cpuidle: using governor ladder
    [    0.438405] cpuidle: using governor menu
    [    0.438876] vdso: 2 pages (1 code @ ffffff80087de000, 1 data @ ffffff800a3c8000)
    [    0.439359] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
    [    0.446256] DMA: preallocated 256 KiB pool for atomic allocations
    [    0.466276] ARM CCI_400_r1 PMU driver probed
    [    0.660759] HugeTLB registered 2 MB page size, pre-allocated 0 pages
    [    0.753907] raid6: int64x1  gen()   614 MB/s
    [    0.871308] raid6: int64x1  xor()   609 MB/s
    [    0.966038] raid6: int64x2  gen()  1064 MB/s
    [    1.059956] raid6: int64x2  xor()   199 MB/s
    [    1.141748] raid6: int64x4  gen()  1222 MB/s
    [    1.292747] raid6: int64x4  xor()  1312 MB/s
    [    1.367243] raid6: int64x8  gen()   798 MB/s
    [    1.477405] raid6: int64x8  xor()   754 MB/s
    [    1.568605] raid6: neonx1   gen()   416 MB/s
    [    1.703542] raid6: neonx1   xor()   335 MB/s
    [    1.804982] raid6: neonx2   gen()   574 MB/s
    [    1.899188] raid6: neonx2   xor()   287 MB/s
    [    2.037408] raid6: neonx4   gen()   759 MB/s
    [    2.164138] raid6: neonx4   xor()   344 MB/s
    [    2.250018] raid6: neonx8   gen()   508 MB/s
    [    2.380570] raid6: neonx8   xor()   385 MB/s
    [    2.380645] raid6: using algorithm int64x4 gen() 1222 MB/s
    [    2.380708] raid6: .... xor() 1312 MB/s, rmw enabled
    [    2.380808] raid6: using intx1 recovery algorithm
    [    2.382203] ACPI: Interpreter disabled.
    [    2.385784] arm-smmu fd800000.smmu: probing hardware configuration...
    [    2.385892] arm-smmu fd800000.smmu: SMMUv2 with:
    [    2.385995] arm-smmu fd800000.smmu:  stage 1 translation
    [    2.386067] arm-smmu fd800000.smmu:  stage 2 translation
    [    2.386134] arm-smmu fd800000.smmu:  nested translation
    [    2.386292] arm-smmu fd800000.smmu:  stream matching with 48 register groups, mask 0x7fff
    [    2.386420] arm-smmu fd800000.smmu:  16 context banks (0 stage-2 only)
    [    2.386673] arm-smmu fd800000.smmu:  Supported page sizes: 0x60211000
    [    2.386747] arm-smmu fd800000.smmu:  Stage-1: 48-bit VA -> 48-bit IPA
    [    2.386821] arm-smmu fd800000.smmu:  Stage-2: 48-bit IPA -> 48-bit PA
    [    2.392489] arm-smmu fd800000.smmu: registered 26 master devices
    [    2.397506] iommu: Adding device fd500000.dma to group 0
    [    2.397735] iommu: Adding device fd510000.dma to group 1
    [    2.397940] iommu: Adding device fd520000.dma to group 2
    [    2.398101] iommu: Adding device fd530000.dma to group 3
    [    2.398257] iommu: Adding device fd540000.dma to group 4
    [    2.398412] iommu: Adding device fd550000.dma to group 5
    [    2.399474] iommu: Adding device fd560000.dma to group 6
    [    2.399642] iommu: Adding device fd570000.dma to group 7
    [    2.399876] iommu: Adding device ffa80000.dma to group 8
    [    2.400068] iommu: Adding device ffa90000.dma to group 9
    [    2.400226] iommu: Adding device ffaa0000.dma to group 10
    [    2.400399] iommu: Adding device ffab0000.dma to group 11
    [    2.400559] iommu: Adding device ffac0000.dma to group 12
    [    2.400731] iommu: Adding device ffad0000.dma to group 13
    [    2.400889] iommu: Adding device ffae0000.dma to group 14
    [    2.401045] iommu: Adding device ffaf0000.dma to group 15
    [    2.401278] iommu: Adding device ff0e0000.ethernet to group 16
    [    2.401795] iommu: Adding device ff0f0000.spi to group 17
    [    2.402192] iommu: Adding device ff170000.sdhci to group 18
    [    2.402603] iommu: Adding device amba:usb@fe200000 to group 19
    [    2.406066] SCSI subsystem initialized
    [    2.409841] usbcore: registered new interface driver usbfs
    [    2.410280] usbcore: registered new interface driver hub
    [    2.410620] usbcore: registered new device driver usb
    [    2.414239] media: Linux media interface: v0.10
    [    2.414541] Linux video capture interface: v2.00
    [    2.414831] pps_core: LinuxPPS API ver. 1 registered
    [    2.414894] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
    [    2.415126] PTP clock support registered
    [    2.415528] EDAC MC: Ver: 3.0.0
    [    2.418203] dmi: Firmware registration failed.
    [    2.423680] Advanced Linux Sound Architecture Driver Initialized.
    [    2.435610] clocksource: Switched to clocksource arch_sys_counter
    [    2.437750] VFS: Disk quotas dquot_6.6.0
    [    2.438404] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
    [    2.442061] pnp: PnP ACPI: disabled
    [    2.512388] NET: Registered protocol family 2
    [    2.521202] TCP established hash table entries: 32768 (order: 6, 262144 bytes)
    [    2.522032] TCP bind hash table entries: 32768 (order: 7, 524288 bytes)
    [    2.523324] TCP: Hash tables configured (established 32768 bind 32768)
    [    2.524249] UDP hash table entries: 2048 (order: 4, 65536 bytes)
    [    2.524604] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes)
    [    2.527661] NET: Registered protocol family 1
    [    2.532836] RPC: Registered named UNIX socket transport module.
    [    2.532957] RPC: Registered udp transport module.
    [    2.533025] RPC: Registered tcp transport module.
    [    2.533083] RPC: Registered tcp NFSv4.1 backchannel transport module.
    [    5.548214] hw perfevents: enabled with armv8_pmuv3 PMU driver, 1 counters available
    [    5.557262] futex hash table entries: 1024 (order: 5, 131072 bytes)
    [    5.558364] audit: initializing netlink subsys (disabled)
    [    5.560843] audit: type=2000 audit(4.740:1): initialized
    [    5.569157] workingset: timestamp_bits=60 max_order=20 bucket_order=0
    [    5.580490] NFS: Registering the id_resolver key type
    [    5.581417] Key type id_resolver registered
    [    5.581504] Key type id_legacy registered
    [    5.581707] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
    [    5.582278] jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
    [    5.605415] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
    [    5.605699] io scheduler noop registered
    [    5.605828] io scheduler deadline registered
    [    5.606375] io scheduler cfq registered (default)
    [    5.611027] nwl-pcie fd0e0000.pcie: BREG is not present
    [    5.611171] PCI host bridge /amba/pcie@fd0e0000 ranges:
    [    5.611422]   No bus range found for /amba/pcie@fd0e0000, using [bus 00-ff]
    [    5.611917]   MEM 0xe0000000..0xefffffff -> 0xe0000000
    [    5.612100]   MEM 0x600000000..0x7ffffffff -> 0x600000000
    [    5.613427] nwl-pcie fd0e0000.pcie: PCI host bridge to bus 0000:00
    [    5.613710] pci_bus 0000:00: root bus resource [bus 00-ff]
    [    5.613884] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xefffffff]
    [    5.613971] pci_bus 0000:00: root bus resource [mem 0x600000000-0x7ffffffff pref]
    [    5.614297] nwl-pcie fd0e0000.pcie: MSI not present
    [    5.614405] nwl-pcie fd0e0000.pcie: failed to enable MSI support: -5
    [    5.615665] nwl-pcie: probe of fd0e0000.pcie failed with error -5
    [    5.629060] xilinx-dpdma fd4c0000.dma: Xilinx DPDMA engine is probed
    [    5.631014] xilinx-zynqmp-dma fd500000.dma: ZynqMP DMA driver Probe success
    [    5.631907] xilinx-zynqmp-dma fd510000.dma: ZynqMP DMA driver Probe success
    [    5.632716] xilinx-zynqmp-dma fd520000.dma: ZynqMP DMA driver Probe success
    [    5.633562] xilinx-zynqmp-dma fd530000.dma: ZynqMP DMA driver Probe success
    [    5.634367] xilinx-zynqmp-dma fd540000.dma: ZynqMP DMA driver Probe success
    [    5.635430] xilinx-zynqmp-dma fd550000.dma: ZynqMP DMA driver Probe success
    [    5.636262] xilinx-zynqmp-dma fd560000.dma: ZynqMP DMA driver Probe success
    [    5.637089] xilinx-zynqmp-dma fd570000.dma: ZynqMP DMA driver Probe success
    [    5.637693] xilinx-zynqmp-dma ffa80000.dma: main clock not found.
    [    5.637780] xilinx-zynqmp-dma ffa80000.dma: Probing channel failed
    [    5.642269] xilinx-zynqmp-dma: probe of ffa80000.dma failed with error -2
    [    5.643265] xilinx-zynqmp-dma ffa90000.dma: main clock not found.
    [    5.643342] xilinx-zynqmp-dma ffa90000.dma: Probing channel failed
    [    5.643487] xilinx-zynqmp-dma: probe of ffa90000.dma failed with error -2
    [    5.643874] xilinx-zynqmp-dma ffaa0000.dma: main clock not found.
    [    5.643946] xilinx-zynqmp-dma ffaa0000.dma: Probing channel failed
    [    5.644084] xilinx-zynqmp-dma: probe of ffaa0000.dma failed with error -2
    [    5.644479] xilinx-zynqmp-dma ffab0000.dma: main clock not found.
    [    5.644550] xilinx-zynqmp-dma ffab0000.dma: Probing channel failed
    [    5.644689] xilinx-zynqmp-dma: probe of ffab0000.dma failed with error -2
    [    5.645065] xilinx-zynqmp-dma ffac0000.dma: main clock not found.
    [    5.645136] xilinx-zynqmp-dma ffac0000.dma: Probing channel failed
    [    5.645276] xilinx-zynqmp-dma: probe of ffac0000.dma failed with error -2
    [    5.645650] xilinx-zynqmp-dma ffad0000.dma: main clock not found.
    [    5.645720] xilinx-zynqmp-dma ffad0000.dma: Probing channel failed
    [    5.645862] xilinx-zynqmp-dma: probe of ffad0000.dma failed with error -2
    [    5.646245] xilinx-zynqmp-dma ffae0000.dma: main clock not found.
    [    5.646315] xilinx-zynqmp-dma ffae0000.dma: Probing channel failed
    [    5.646514] xilinx-zynqmp-dma: probe of ffae0000.dma failed with error -2
    [    5.647474] xilinx-zynqmp-dma ffaf0000.dma: main clock not found.
    [    5.647545] xilinx-zynqmp-dma ffaf0000.dma: Probing channel failed
    [    5.647686] xilinx-zynqmp-dma: probe of ffaf0000.dma failed with error -2
    [    5.648791] xenfs: not registering filesystem on non-xen platform
    [    6.133190] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
    [    6.147110] ff000000.serial: ttyPS0 at MMIO 0xff000000 (irq = 220, base_baud = 6250000) is a xuartps
    [    6.194427] console [ttyPS0] enabled
    [    6.196796] ff010000.serial: ttyPS1 at MMIO 0xff010000 (irq = 221, base_baud = 6250000) is a xuartps
    [    6.199730] [drm] Initialized drm 1.1.0 20060810
    [    6.278223] brd: module loaded
    [    6.316143] loop: module loaded
    [    6.326207] ahci-ceva fd0c0000.ahci: AHCI 0001.0000 32 slots 2 ports 1.5 Gbps 0x3 impl platform mode
    [    6.327042] ahci-ceva fd0c0000.ahci: flags: ncq only
    [    6.339776] scsi host0: ahci-ceva
    [    6.343797] scsi host1: ahci-ceva
    [    6.345032] ata1: SATA max UDMA/133 mmio [mem 0xfd0c0000-0xfd0c1fff] port 0x100 irq 217
    [    6.345559] ata2: SATA max UDMA/133 mmio [mem 0xfd0c0000-0xfd0c1fff] port 0x180 irq 217
    [    6.351502] mtdoops: mtd device (mtddev=name/number) must be supplied
    [    6.367754] m25p80 spi0.0: found n25q512a, expected m25p80
    [    6.371471] m25p80 spi0.0: Controller not in SPI_TX_QUAD mode, just use extended SPI mode
    [    6.372882] m25p80 spi0.0: n25q512a (131072 Kbytes)
    [    6.373984] 8 ofpart partitions found on MTD device spi0.0
    [    6.374364] Creating 8 MTD partitions on "spi0.0":
    [    6.375502] 0x000000000000-0x000001e00000 : "boot"
    [    6.383639] 0x000001e00000-0x000001e40000 : "bootenv"
    [    6.390148] 0x000001e40000-0x000004240000 : "kernel"
    [    6.397053] 0x000004240000-0x000008000000 : "spare"
    [    6.403935] 0x000000000000-0x000000100000 : "qspi-fsbl-uboot"
    [    6.410408] 0x000000100000-0x000000600000 : "qspi-linux"
    [    6.417533] 0x000000600000-0x000000620000 : "qspi-device-tree"
    [    6.424282] 0x000000620000-0x000000c00000 : "qspi-rootfs"
    [    6.452311] libphy: Fixed MDIO Bus: probed
    [    6.454606] hrtimer: interrupt took 11889400 ns
    [    6.461270] CAN device driver interface
    [    6.482765] gpiod_set_value: invalid GPIO
    [    6.486323] libphy: MACB_mii_bus: probed
    [    6.643407] macb ff0e0000.ethernet eth0: Cadence GEM rev 0x40070106 at 0xff0e0000 irq 30 (00:0a:35:00:02:90)
    [    6.644034] Marvell 88E1118 ff0e0000.etherne:0c: attached PHY driver [Marvell 88E1118] (mii_bus:phy_addr=ff0e0000.etherne:0c, irq=-1)
    [    6.652783] dwc3 fe200000.dwc3: this is not a DesignWare USB3 DRD Core
    [    6.653170] dwc3 fe200000.dwc3: failed to initialize core
    [    6.653910] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
    [    6.654322] ehci-pci: EHCI PCI platform driver
    [    6.660339] usbcore: registered new interface driver uas
    [    6.662177] usbcore: registered new interface driver usb-storage
    [    6.668015] ata1: SATA link down (SStatus 0 SControl 300)
    [    6.671017] mousedev: PS/2 mouse device common for all mice
    [    6.678445] ata2: SATA link down (SStatus 0 SControl 300)
    [    6.679802] rtc_zynqmp ffa60000.rtc: rtc core: registered ffa60000.rtc as rtc0
    [    7.682904] cdns-i2c ff020000.i2c: timeout waiting on completion
    [    7.683487] pca953x 0-0020: failed reading register
    [    7.683886] pca953x: probe of 0-0020 failed with error -110
    [    8.682846] cdns-i2c ff020000.i2c: timeout waiting on completion
    [    8.683281] pca953x 0-0021: failed reading register
    [    8.683660] pca953x: probe of 0-0021 failed with error -110
    [    8.684718] cdns-i2c ff020000.i2c: 400 kHz mmio ff020000 irq 206
    [    8.687234] cdns-i2c ff030000.i2c: 400 kHz mmio ff030000 irq 207
    [    9.690824] cdns-i2c ff020000.i2c: timeout waiting on completion
    [    9.691299] pca954x 0-0075: probe failed
    [    9.697308] at24 2-0054: 1024 byte 24c08 EEPROM, writable, 1 bytes/write
    [    9.697807] i2c i2c-2: Failed to register i2c client 24c08 at 0x55 (-16)
    [    9.698228] i2c i2c-2: of_i2c: Failure registering /amba/i2c@ff030000/i2cswitch@74/i2c@0/eeprom@55
    [    9.699666] i2c i2c-2: Failed to register i2c client 24c08 at 0x56 (-16)
    [    9.700054] i2c i2c-2: of_i2c: Failure registering /amba/i2c@ff030000/i2cswitch@74/i2c@0/eeprom@56
    [    9.700547] i2c i2c-2: Failed to register i2c client 24c08 at 0x57 (-16)
    [    9.700925] i2c i2c-2: of_i2c: Failure registering /amba/i2c@ff030000/i2cswitch@74/i2c@0/eeprom@57
    [    9.701507] i2c i2c-1: Added multiplexed i2c bus 2
    [    9.704083] i2c i2c-1: Added multiplexed i2c bus 3
    [    9.705043] i2c i2c-1: Added multiplexed i2c bus 4
    [    9.705977] i2c i2c-1: Added multiplexed i2c bus 5
    [    9.707779] i2c i2c-1: Added multiplexed i2c bus 6
    [    9.708423] i2c i2c-1: Added multiplexed i2c bus 7
    [    9.709008] i2c i2c-1: Added multiplexed i2c bus 8
    [    9.709604] i2c i2c-1: Added multiplexed i2c bus 9
    [    9.709911] pca954x 1-0074: registered 8 multiplexed busses for I2C switch pca9548
    [    9.714031] pca954x 1-0075: probe failed
    [    9.722100] cdns-wdt fd4d0000.watchdog: input clock not found
    [    9.723125] cdns-wdt: probe of fd4d0000.watchdog failed with error -2
    [    9.724774] EDAC MC: ECC not enabled
    [    9.725653] sdhci: Secure Digital Host Controller Interface driver
    [    9.725987] sdhci: Copyright(c) Pierre Ossman
    [    9.726265] sdhci-pltfm: SDHCI platform and OF driver helper
    [    9.778875] mmc0: SDHCI controller on ff170000.sdhci [ff170000.sdhci] using ADMA
    [    9.781279] usbcore: registered new interface driver usbhid
    [    9.781596] usbhid: USB HID core driver
    [    9.789742] Mali: ERR: /proj/petalinux/petalinux-v2016.3_1016_1/petalinux-v2016.3-final/components/linux-kernel/xlnx-4.6/drivers/staging/mali/DX910-SW-99002-r5p1-01rel0/driver/src/devicedrv/mali/common/mali_pp.c
    [    9.790869]            mali_pp_reset_wait() 267
               Mali PP: Failed to reset core Mali_PP0, rawstat: 0x00000000
    [    9.791496]
    [    9.791725] Mali: ERR: /proj/petalinux/petalinux-v2016.3_1016_1/petalinux-v2016.3-final/components/linux-kernel/xlnx-4.6/drivers/staging/mali/DX910-SW-99002-r5p1-01rel0/driver/src/devicedrv/mali/common/mali_kernel_core.c
    [    9.792630]            mali_parse_product_info() 164
               Failed to create initial PP object
    [    9.793121]
    [    9.795333] Mali: ERR: /proj/petalinux/petalinux-v2016.3_1016_1/petalinux-v2016.3-final/components/linux-kernel/xlnx-4.6/drivers/staging/mali/DX910-SW-99002-r5p1-01rel0/driver/src/devicedrv/mali/linux/mali_kernel_linux.c
    [    9.796249]            mali_probe() 503
               mali_probe(): Failed to initialize Mali device driver.
    [    9.796942] mali-utgard: probe of fd4b0000.gpu failed with error -14
    [    9.797705] Mali: Mali device driver loaded
    [    9.814204] si570 4-005d: registered, current frequency 300000000 Hz
    [    9.824106] mmc0: new SD card at address 4567
    [    9.828593] mmcblk0: mmc0:4567 QEMU! 256 MiB
    [    9.830812] si570 5-005d: registered, current frequency 148500000 Hz
    [    9.839790] pktgen: Packet Generator for packet performance testing. Version: 2.75
    [    9.851179]  mmcblk0:
    [    9.855338] Initializing XFRM netlink socket
    [    9.856979] NET: Registered protocol family 10
    [    9.866086] sit: IPv6 over IPv4 tunneling driver
    [    9.869852] NET: Registered protocol family 17
    [    9.870363] NET: Registered protocol family 15
    [    9.872048] can: controller area network core (rev 20120528 abi 9)
    [    9.872780] NET: Registered protocol family 29
    [    9.873239] can: raw protocol (rev 20120528)
    [    9.873582] can: broadcast manager protocol (rev 20120528 t)
    [    9.873975] can: netlink gateway (rev 20130117) max_hops=1
    [    9.875647] Key type dns_resolver registered
    [    9.879426] registered taskstats version 1
    [    9.886287] Btrfs loaded
    [    9.891849] rtc_zynqmp ffa60000.rtc: setting system clock to 2106-02-07 06:28:15 UTC (4294967295)
    [    9.893275] ALSA device list:
    [    9.893491]   No soundcards found.
    [    9.975658] Freeing unused kernel memory: 25912K (ffffff8008a74000 - ffffff800a3c2000)
    [    9.976401] This architecture does not have kernel memory protection.
    INIT: version 2.88 booting
    [   12.707694] FAT-fs (mmcblk0): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
    Creating /dev/flash/* device nodes
    [   25.994925] random: dd urandom read with 4 bits of entropy available
    Starting internet superserver: inetd.
    INIT: Entering runlevel: 5
    Configuring network interfaces... [   29.023716] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
    udhcpc (v1.24.1) started
    Sending discover...
    [   30.767855] macb ff0e0000.ethernet eth0: unable to generate target frequency: 25000000 Hz
    [   30.768484] macb ff0e0000.ethernet eth0: link up (100/Half)
    [   30.769303] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    Sending discover...
    Sending discover...
    No lease, forking to background
    done.
    Starting Dropbear SSH server: Generating key, this may take a while...
    Public key portion is:
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5c2KnormVHnPlOMddE1ea1cDmsoqUSIa779m5k1VNvAikoJ6iL/Q4W7idWwnql5GlbkRwvhtCZ4JnkESDOa7L7zFeaKBZOynNB9JVglV09Ot+qHcx+JB/DtlF1w+6dtbQkHMbDb+DFa5xt38fjIsLjkZUSm3rCq6TMcnDhNoBumvAkNa4ay8DXNNIj9LnaE3mQjCGYAhw1ECmTZUAPa492ZRJeuDYr8wd/KgWEECm66U0Uhm9FzrY32jtSD58sTcSa6UpG0sky+alW3hfjLhoSdHo2YFAerD3hG8DILFnS5YauO/L/zEns1ZNddlW1Wn8aJL3mgC8lnw43B0+HUIR root@Xilinx-ZCU102-2016_3
    Fingerprint: md5 98:fd:0b:52:9e:81:43:e2:5b:f4:6e:58:37:a8:64:d5
    dropbear.
    Warning unable to detect baudrate, use 115200!
    Use default dev ttyPS0
    Running dynamic getty on ttyPS0/115200
    
    PetaLinux 2016.3 Xilinx-ZCU102-2016_3 /dev/ttyPS0
    Xilinx-ZCU102-2016_3 login: root
    Password:
    login[1851]: root login on 'ttyPS0'
    root@Xilinx-ZCU102-2016_3:~#

    Enjoy!