Hi Alex, On Thu, Sep 3, 2026 at 10:38 PM Alex Bennée <[email protected]> wrote: > > Bin Meng <[email protected]> writes: > > > The Phytium Pi machine supports both the board firmware flow from SD > > and direct Linux boot. Exercise both paths with an SDK image bundle so > > firmware handoff and kernel loading regressions are caught. > > > > Verify U-Boot, PBF relocation, the Linux handoff, and login for the > > firmware path. The Linux test loads the bundled kernel, DTB, and > > initramfs and waits for the same login prompt. > > > > Signed-off-by: Bin Meng <[email protected]> > > --- > > > > tests/functional/aarch64/meson.build | 2 + > > tests/functional/aarch64/test_phytium_pi.py | 77 +++++++++++++++++++++ > > 2 files changed, 79 insertions(+) > > create mode 100644 tests/functional/aarch64/test_phytium_pi.py > > > > diff --git a/tests/functional/aarch64/meson.build > > b/tests/functional/aarch64/meson.build > > index f0881bed16..71bf45e4ea 100644 > > --- a/tests/functional/aarch64/meson.build > > +++ b/tests/functional/aarch64/meson.build > > @@ -7,6 +7,7 @@ test_aarch64_timeouts = { > > 'device_passthrough' : 720, > > 'imx8mm_evk' : 240, > > 'imx8mp_evk' : 240, > > + 'phytium_pi' : 600, > > 'raspi4' : 480, > > 'reverse_debug' : 180, > > 'rme_virt' : 1200, > > @@ -39,6 +40,7 @@ tests_aarch64_system_thorough = [ > > 'imx8mp_evk', > > 'kvm', > > 'multiprocess', > > + 'phytium_pi', > > 'raspi3', > > 'raspi4', > > 'replay', > > diff --git a/tests/functional/aarch64/test_phytium_pi.py > > b/tests/functional/aarch64/test_phytium_pi.py > > new file mode 100644 > > index 0000000000..4ae0392bdd > > --- /dev/null > > +++ b/tests/functional/aarch64/test_phytium_pi.py > > @@ -0,0 +1,77 @@ > > +#!/usr/bin/env python3 > > +# > > +# Functional tests for the Phytium Pi machine > > +# > > +# Copyright (c) 2026 Process Mission > > +# > > +# Author: > > +# Bin Meng <[email protected]> > > +# > > +# SPDX-License-Identifier: GPL-2.0-or-later > > + > > +from qemu_test import Asset, LinuxKernelTest > > +from qemu_test import skipBigDataTest, skipIfMissingCommands > > + > > + > > +class PhytiumPiMachine(LinuxKernelTest): > > + > > + ASSET_BUILDROOT = Asset( > > + ('https://github.com/processmission/qemu-machine-images/releases/' > > + 'download/v1.0.0/aarch64-phytium-pi-v1.0.0.tar.zst'), > > + > > '5219d52b862e1245b12f79ba72e9a6144f5e0cf1a50061f8fda2db0aeeb92428') > > Nice ;-) > > I've been looking into something similar to make it easy to set up > github projects that can build and host test assets: > > https://github.com/stsquad/buildroot-asset
This is actually very close to what I have been doing with https://github.com/processmission/qemu-machine-images. It is intended to be a common repository for QEMU machine test assets. Each machine has a small description under: machine/<architecture>/<machine>/ It selects the independently built components, required images and machine-specific QEMU launcher. The container builders, packaging, checksums, release manifest and GitHub Actions workflow are shared. The workflow also distinguishes between the main repository and forks. A fork can build selected machines and upload run-scoped Actions artifacts without publishing a release. It can optionally publish its own development prerelease, while the main repository publishes frozen, versioned assets. > > although my builds seem to take quite a bit longer that yours. Yeah, as I only built the minimal busybox-based buildroot configuration, which is enough for QEMU boot testing :) > > I wonder if there is a way to have a common repository set up but in a > way that the forks can just build their own images. Either that or a > core repository which everyone just forks adds their device and merges. So perhaps qemu-machine-images could serve as a starting point for the common repository you describe. I would be happy to accept machine definitions from other contributors and make the add-a-machine workflow simpler. Your buildroot-asset project also has useful ideas, particularly including enough Buildroot configuration and source metadata to reproduce an image manually. It would be good to align the two efforts instead of growing separate repositories for each maintainer or board. > > Anyway, test looks sane: > > Reviewed-by: Alex Bennée <[email protected]> Thanks for the review! > > > + > > + def _prepare_images(self): > > + self.set_machine('phytium-pi') > > + > > + archive_path = self.uncompress( > > + self.ASSET_BUILDROOT, > > + target='aarch64-phytium-pi-v1.0.0.tar', > > + format='zstd') > > + self.archive_extract(archive_path, format='tar') > > + > > + self.vm.set_console(console_index=1) > > + self.vm.add_args('-smp', '4', > > + '-m', '4G', > > + '-display', 'none', > > + '-nic', 'none', > > + '-no-reboot') > > + > > + @skipIfMissingCommands('zstd') > > + @skipBigDataTest() > > + def test_firmware_boot(self): > > + self._prepare_images() > > + sdcard = self.scratch_file('images', 'sdcard.img') > > + > > + self.vm.add_args( > > + '-snapshot', > > + '-drive', f'file={sdcard},format=raw,if=sd,index=0') > > + self.vm.launch() > > + > > + self.wait_for_console_pattern('U-Boot 2022.01') > > + self.wait_for_console_pattern('PBF relocate done') > > + self.wait_for_console_pattern('Starting kernel ...') > > + self.wait_for_console_pattern('Phytium login:') > > + > > + @skipIfMissingCommands('zstd') > > + @skipBigDataTest() > > + def test_linux_boot(self): > > + self._prepare_images() > > + kernel = self.scratch_file('images', 'Image.gz') > > + dtb = self.scratch_file('images', 'phytiumpi_firefly.dtb') > > + initrd = self.scratch_file('images', 'rootfs.cpio.gz') > > + > > + self.vm.add_args( > > + '-kernel', kernel, > > + '-dtb', dtb, > > + '-initrd', initrd, > > + '-append', 'console=ttyAMA1,115200 ' > > + 'earlycon=pl011,mmio32,0x2800d000 rdinit=/init') > > + self.vm.launch() > > + > > + self.wait_for_console_pattern('Booting Linux on physical CPU') > > + self.wait_for_console_pattern('Machine model: Phytium Pi Board') > > + self.wait_for_console_pattern('Phytium login:') > > + > > + > > +if __name__ == '__main__': > > + LinuxKernelTest.main() > > -- Regards, Bin
