Revision History

2025.2 Changes: Yocto flow, NVMe in the second M.2 slot, display and camera fixes

New

  • Yocto / EDF flow for all targets (./build.sh yocto --target <target>), next to PetaLinux. It produces a full SD-card image (rootfs.wic.xz) with the same Hailo stack (HailoRT, hailo-pci driver and firmware 4.23.0, Hailo GStreamer elements), the same demo scripts and the YOLOv5m HEF. See Yocto.

  • New page Run and test the design: PCIe link check, Hailo-8 driver and firmware, hailortcli inference (about 150 FPS for the bundled YOLOv5m), camera capture, a camera-to-Hailo pipeline without a monitor, the multi-camera demo, an NVMe SSD in the second M.2 slot, and the ISP controls.

  • PYNQ-ZU (Yocto): the on-board WILC3000 Wi-Fi works as a station (wlan0) — kernel driver with WILC3000 support, firmware, wpa_supplicant and the wifi-sta-setup helper. No credentials are included in the image. A login prompt is started on the console UART only.

  • Yocto images: hostname <board>-hailo-2025-2, the design’s kernel arguments (cma=1536M — cma=1000M on uzev — and xlnx_mixer.connect_drm_bridge=1), and the tools the demo scripts need (modetest, GStreamer v4l2src/kmssink and friends).

  • New block diagrams generated by docs/source/images/gen_block_diagram.py: architecture, end-to-end pipeline and the PCIe / M.2 connection of each target.

Fixed

  • NVMe SSD in the second M.2 slot could not be enumerated (zcu106_hpc0, uzev). The SSD trained its link but its BAR0 was never assigned, so there was no /dev/nvme*. The root-port memory windows are now placed in the 32-bit address space (0xB000_0000, 128 MB per root port), so devices with non-prefetchable BARs (NVMe) enumerate. Requires a new XSA and Linux image. See PCIe address map.

  • Display: kernel crash at the first mode set (Yocto). The device-tree overrides of the misc_clk_0 / misc_clk_1 fixed clocks used the PetaLinux numbering, which is the reverse of the numbering of the Yocto (SDT) flow. The display Clocking Wizard was told its 250 MHz input ran at 100 MHz and did not lock when the mode was set. The Yocto BSPs now use the SDT numbering.

  • Magenta tint on every camera picture. The ISP pipeline driver wrote the red, green and blue gamma tables to the wrong colour planes, and its default green curve differed from red and blue. A kernel patch puts each table on its own plane and makes the default gamma 2.0 on all three channels (PetaLinux and Yocto).

  • ISP gains and white-balance threshold from the device tree were ignored. A second kernel patch makes xlnx,rgain, xlnx,bgain and xlnx,pawb the defaults of the red_gain, blue_gain and threshold controls (PetaLinux and Yocto).

  • hailodemo.sh drove the monitor’s preferred mode (for example 2560x1440, or a refresh rate above 60 Hz) that the display pipeline cannot produce. It now sets 1920x1080 at 60 Hz and shows each camera in a 960x540 quadrant (PetaLinux and Yocto).

  • Yocto: Ethernet passed no traffic on ZCU104 / ZCU106. The device tree now describes the DP83867 PHY with its RGMII delays, and gives the port a fixed MAC address.

  • Yocto: the board’s kernel arguments and hostname were not applied (the EDF boot script does not read APPEND, and the EDF distribution overrode the hostname). They are now set through BSP_EXTRA_BOOTARGS and a forcevariable hostname.

  • The Yocto images now include the three DRM patches for the Video Mixer in DRM-bridge mode and the hailo-pci find_vma() locking patch, as the PetaLinux images already did.

  • build.sh package now rewrites a boot-image zip when the images it contains were rebuilt after the zip was written (it used to keep the old zip).

Earlier 2025.2 changes

  • Migrated all designs and PetaLinux projects to Vivado / Vitis / PetaLinux 2025.2

  • Moved to the SDT (System Device Tree) flow for PetaLinux configuration

  • HailoRT and hailo_pci updated to 4.23.0; backported the find_vma() / mmap_read_lock fix as a kernel ≥ 6.5 hotfix for the v4.23 driver

  • Added three Xilinx DRM kernel patches required when v_mix runs in DRM-bridge mode (mixer NULL-deref, double-cleanup on unbind, vblank shutdown ordering); kernel cmdline now passes xlnx_mixer.connect_drm_bridge=1

  • meta-hailo is now consumed as a git submodule tracking the hailo8-scarthgap branch and copied into each project at configure time; packagegroup-hailo-tappas no longer pulls in the removed tappas-apps legacy recipe

  • LICENSE_PATH is rewritten from = to += in the project-local copy of meta-hailo-tappas/conf/layer.conf so meta-qt5’s licenses survive (qtbase otherwise fails do_create_spdx)

  • Added a check_ca_workaround Make target that fails fast with the one-time sudo symlink fix for the PetaLinux 2025.2 eSDK git-native CA-bundle relocation issue

  • ZCU104 BSP adds an explicit sdhci1 device-tree override (Opsero ZynqMP designs export a minimal sdhci1 node; without the override SD init fails with -110)

  • UltraZed-EV BSP forces PMUFW/FSBL/TF-A/Linux serial to PSU_UART_0 (gen-machine-conf defaults to UART_1 on this carrier in 2025.2)

2024.1 Changes

  • Removed VVAS multiscaler accelerator from all designs (Xilinx has no support for 2024.1)

  • Added AXI4-Streaming Data FIFO to MIPI video pipes, between MIPI CSI2 RX and ISP Pipeline IPs

  • Improved documentation, centralized target design info to JSON file

  • RPi camera IOs are properly driven

  • ISP Pipeline IP updated to version v2023.2_update1 of the Vitis_Libraries repo

  • ISP Pipeline now uses built-in Linux driver (linux-xlnx/drivers/media/platform/xilinx/xilinx-isppipeline.c)

  • Removed all Vitis-AI and VVAS recipes from BSPs

  • Improved example scripts: use max res of connected display, display only connected cameras

2022.1 Changes

  • First revision