Release hardware validation

The completed 2026-09-05 qualification applies to candidate c4e9a605f540dcf6d0f7882627a82765b4207e94 on release/readiness-20260905. These results describe that candidate and the specified board images; rerun affected checks when the code or boot artifacts change.

Verified scope

Board

Completed checks

Required environment

AD9371 / ZC706

Six overlay tests; 20 reload cycles with JESD DATA and DMA on each cycle, followed by removal

Patched modular kernel and matching modules

ADRV9009 / ZC706

Six overlay tests; 20 reload cycles, plus a six-test rerun after the radio DMA-selection fix

Patched modular kernel and matching modules

FMCDAQ3 / VCU118

Six overlay tests; 20 reload cycles with JESD DATA and DMA on each cycle, followed by removal

Matching MicroBlaze runtime image and embedded modules; TX-first initialization

ADRV9009-ZU11EG / ADRV2CRR-FMC

Full XSA pipeline and generated-DTB boot; RAM CRC and boot markers; four CPUs; two PHYs; two RX/observation and one TX JESD links in DATA; 4,096 samples on eight RX channels

Production JTAG boot artifacts, stock SD kernel/rootfs, serial console and a connected Ethernet port

All four places were powered off and released. See runtime overlay validation for reproducible kernel builds, artifact overrides, and ADIDT_OVERLAY_RELOAD_CYCLES=20.

Overlay qualification covers the tested 20-cycle sequence. The pinned kernel reports possible property leaks on removal, so reboot after that sequence; unlimited cycling remains unqualified. AD9081 was excluded from this follow-up and has no generated-tree hardware qualification in this evidence set. Other profiles’ presence in the package does not extend this hardware coverage.

ZU11EG generated-tree test

The adrv9009_zu11eg profile describes the dual-radio SoM and its carrier HMC7044 clock tree, including the 245.76 MSPS reference profile. Its JSON records the ADI Linux source revision and license. The builder preserves 64-bit DDR ranges and selects radio DMA engines deterministically, excluding audio DMA engines that coexist in the XSA.

test/hw/test_adrv9009zu11eg_adrv2crr-fmc_hw.py generates and compiles a device tree from the committed XSA. BootZynqMPJTAG reaches production U-Boot; the helper transfers the DTB to RAM with the serial S-record loader and verifies its complete CRC. A second JTAG transfer was observed to strand CPU1 even with the reference DTB, so the DTB transfer uses serial. The helper retains the stock cpuidle.off=1 boot argument and writes no SD files or persistent U-Boot settings.

From a Bash shell at the repository root, set LG_ENV to an existing private configuration for the ZU11EG place, then run:

export VENV_DIR="$HOME/.cache/adidt-ci/adidt-venv"
export LG_COORDINATOR=10.0.0.41:20408
export BOARD=adrv9009zu11eg CARRIER=adrv2crr-fmc
export ADI_XSA_BUILD_KERNEL=0
source .github/scripts/prepare-hardware-env.sh
"$VENV_DIR/bin/labgrid-client" -p tron acquire
trap '"$VENV_DIR/bin/labgrid-client" -p tron release' EXIT
"$VENV_DIR/bin/python" -m pytest -p no:genalyzer -v -s -o addopts='' \
    test/hw/test_adrv9009zu11eg_adrv2crr-fmc_hw.py \
    --junitxml=/tmp/zu11eg.xml
"$VENV_DIR/bin/python" .github/scripts/check_hardware_results.py /tmp/zu11eg.xml

The runner needs sdtgen, dtc, the pinned labgrid plugin, and the production boot artifacts advertised by the place. Either Ethernet port can provide IIO. If an exporter alias resolves incorrectly, set ADIDT_JTAG_HOST to its verified hostname before running the test. This override is local to the test process. The final qualified test took about seven minutes.

Software and packaging evidence

The local Python 3.12 suite passed 933 tests, with 14 skips, one network test excluded, and no expected failures. For the same candidate:

  • Release dry run: Python 3.10–3.14, wheel/source builds, metadata, checksums, and distribution validation passed.

  • Native packages: macOS 14 installer, Debian 12 DEB, and Fedora 42 RPM build/install checks passed.

These were validation runs; no release tag or package publication was performed. The release runbook describes publication separately.

The lab evidence archive is at ~/.cache/adidt/release-validation/2026-09-05/non-ad9081-evidence/. It contains validation-summary.json, the committed candidate source, tested source hashes, passing and failed logs, JUnit reports, booted DTBs, hosted artifacts, and SHA256SUMS. Private labgrid configurations are excluded. The readiness audit retains the investigation history and individual fixes.