* [PULL 00/14] Misc patches (functional tests, next-cube machine, ...)
@ 2024-10-31 17:48 Thomas Huth
2024-10-31 17:48 ` [PULL 01/14] .gitlab-ci.d/cirrus: Remove the macos-15 job Thomas Huth
` (14 more replies)
0 siblings, 15 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell
The following changes since commit 58d49b5895f2e0b5cfe4b2901bf24f3320b74f29:
Merge tag 'net-pull-request' of https://github.com/jasowang/qemu into staging (2024-10-29 14:00:43 +0000)
are available in the Git repository at:
https://gitlab.com/thuth/qemu.git tags/pull-request-2024-10-31
for you to fetch changes up to d73ad1b1c0e62976d4790606ee29725a0d8a8906:
tests/functional: Convert the riscv_opensbi avocado test into a standalone test (2024-10-31 07:57:47 +0100)
----------------------------------------------------------------
* Remove the redundant macOS-15 CI job
* Various fixes, improvements and additions for the functional test suite
* Restore the sh4eb target
* Fix the OpenBSD VM test
* Re-enable the pci-bridge device on s390x
* Minor clean-ups / fixes for the next-cube machine
----------------------------------------------------------------
Daniel P. Berrangé (2):
tests/functional: make tuxrun disk images writable
tests/functional: make cached asset files read-only
Mark Cave-Ayland (2):
next-cube: fix up compilation when DEBUG_NEXT is enabled
next-cube: remove cpu parameter from next_scsi_init()
Thomas Huth (10):
.gitlab-ci.d/cirrus: Remove the macos-15 job
Revert "Remove the unused sh4eb target"
tests/functional: Add a test for sh4eb
tests/vm/openbsd: Remove the "Time appears wrong" workaround
tests/functional: Fix the s390x and ppc64 tuxrun tests
hw/s390x: Re-enable the pci-bridge device on s390x
tests/functional: Convert the tcg_plugins test
tests/functional: Convert BananaPi tests to the functional framework
tests/functional: Convert the OrangePi tests to the functional framework
tests/functional: Convert the riscv_opensbi avocado test into a standalone test
MAINTAINERS | 4 +-
configs/devices/sh4eb-softmmu/default.mak | 3 +
configs/targets/sh4eb-softmmu.mak | 2 +
qapi/machine.json | 2 +-
hw/m68k/next-cube.c | 14 +-
tests/qtest/endianness-test.c | 1 +
tests/qtest/machine-none-test.c | 1 +
.gitlab-ci.d/buildtest.yml | 2 +-
.gitlab-ci.d/cirrus.yml | 22 +-
.gitlab-ci.d/cirrus/macos-15.vars | 16 -
.gitlab-ci.d/crossbuilds.yml | 2 +-
.travis.yml | 2 +-
hw/s390x/Kconfig | 1 +
tests/avocado/boot_linux_console.py | 411 ---------------------
tests/avocado/riscv_opensbi.py | 63 ----
tests/functional/meson.build | 22 +-
tests/functional/qemu_test/asset.py | 3 +
tests/functional/qemu_test/tuxruntest.py | 10 +-
tests/functional/qemu_test/utils.py | 21 ++
.../test_aarch64_tcg_plugins.py} | 37 +-
tests/functional/test_arm_bpim2u.py | 206 +++++++++++
tests/functional/test_arm_orangepi.py | 270 ++++++++++++++
tests/functional/test_ppc64_tuxrun.py | 4 +-
tests/functional/test_riscv_opensbi.py | 36 ++
tests/functional/test_sh4eb_r2d.py | 33 ++
tests/lcitool/refresh | 1 -
tests/qemu-iotests/testenv.py | 1 +
tests/qtest/meson.build | 1 +
tests/vm/openbsd | 1 -
29 files changed, 641 insertions(+), 551 deletions(-)
create mode 100644 configs/devices/sh4eb-softmmu/default.mak
create mode 100644 configs/targets/sh4eb-softmmu.mak
delete mode 100644 .gitlab-ci.d/cirrus/macos-15.vars
delete mode 100644 tests/avocado/riscv_opensbi.py
rename tests/{avocado/tcg_plugins.py => functional/test_aarch64_tcg_plugins.py} (78%)
mode change 100644 => 100755
create mode 100755 tests/functional/test_arm_bpim2u.py
create mode 100755 tests/functional/test_arm_orangepi.py
create mode 100755 tests/functional/test_riscv_opensbi.py
create mode 100755 tests/functional/test_sh4eb_r2d.py
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PULL 01/14] .gitlab-ci.d/cirrus: Remove the macos-15 job
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 02/14] tests/functional: make tuxrun disk images writable Thomas Huth
` (13 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Daniel P. Berrangé,
Philippe Mathieu-Daudé
Cirrus-CI stopped providing the possibility to run macOS 15 jobs.
Quoting https://cirrus-ci.org/guide/macOS/ :
"Cirrus CI Cloud only allows ghcr.io/cirruslabs/macos-runner:sonoma image ..."
If you still try to run a Sequoia image, it gets automatically "upgraded"
to Sonoma instead. So the macos-15 job in the QEMU CI now does not
make sense anymore, thus let's remove it.
Message-ID: <20241021124722.139348-1-thuth@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Acked-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
.gitlab-ci.d/cirrus.yml | 20 ++------------------
.gitlab-ci.d/cirrus/macos-15.vars | 16 ----------------
tests/lcitool/refresh | 1 -
3 files changed, 2 insertions(+), 35 deletions(-)
delete mode 100644 .gitlab-ci.d/cirrus/macos-15.vars
diff --git a/.gitlab-ci.d/cirrus.yml b/.gitlab-ci.d/cirrus.yml
index 5708c2bbab..6a7bafac7b 100644
--- a/.gitlab-ci.d/cirrus.yml
+++ b/.gitlab-ci.d/cirrus.yml
@@ -60,13 +60,13 @@ x64-freebsd-14-build:
CONFIGURE_ARGS: --target-list-exclude=arm-softmmu,i386-softmmu,microblaze-softmmu,mips64el-softmmu,mipsel-softmmu,mips-softmmu,ppc-softmmu,xtensa-softmmu
TEST_TARGETS: check
-aarch64-macos-14-base-build:
+aarch64-macos-build:
extends: .cirrus_build_job
variables:
NAME: macos-14
CIRRUS_VM_INSTANCE_TYPE: macos_instance
CIRRUS_VM_IMAGE_SELECTOR: image
- CIRRUS_VM_IMAGE_NAME: ghcr.io/cirruslabs/macos-sonoma-base:latest
+ CIRRUS_VM_IMAGE_NAME: ghcr.io/cirruslabs/macos-runner:sonoma
CIRRUS_VM_CPUS: 12
CIRRUS_VM_RAM: 24G
UPDATE_COMMAND: brew update
@@ -75,19 +75,3 @@ aarch64-macos-14-base-build:
PKG_CONFIG_PATH: /opt/homebrew/curl/lib/pkgconfig:/opt/homebrew/ncurses/lib/pkgconfig:/opt/homebrew/readline/lib/pkgconfig
CONFIGURE_ARGS: --target-list-exclude=arm-softmmu,i386-softmmu,microblazeel-softmmu,mips64-softmmu,mipsel-softmmu,mips-softmmu,ppc-softmmu,sh4-softmmu,xtensaeb-softmmu
TEST_TARGETS: check-unit check-block check-qapi-schema check-softfloat check-qtest-x86_64
-
-aarch64-macos-15-base-build:
- extends: .cirrus_build_job
- variables:
- NAME: macos-15
- CIRRUS_VM_INSTANCE_TYPE: macos_instance
- CIRRUS_VM_IMAGE_SELECTOR: image
- CIRRUS_VM_IMAGE_NAME: ghcr.io/cirruslabs/macos-sequoia-base:latest
- CIRRUS_VM_CPUS: 12
- CIRRUS_VM_RAM: 24G
- UPDATE_COMMAND: brew update
- INSTALL_COMMAND: brew install
- PATH_EXTRA: /opt/homebrew/ccache/libexec:/opt/homebrew/gettext/bin
- PKG_CONFIG_PATH: /opt/homebrew/curl/lib/pkgconfig:/opt/homebrew/ncurses/lib/pkgconfig:/opt/homebrew/readline/lib/pkgconfig
- TEST_TARGETS: check-unit check-block check-qapi-schema check-softfloat check-qtest-x86_64
- QEMU_JOB_OPTIONAL: 1
diff --git a/.gitlab-ci.d/cirrus/macos-15.vars b/.gitlab-ci.d/cirrus/macos-15.vars
deleted file mode 100644
index 23b2c1d22f..0000000000
--- a/.gitlab-ci.d/cirrus/macos-15.vars
+++ /dev/null
@@ -1,16 +0,0 @@
-# THIS FILE WAS AUTO-GENERATED
-#
-# $ lcitool variables macos-15 qemu
-#
-# https://gitlab.com/libvirt/libvirt-ci
-
-CCACHE='/opt/homebrew/bin/ccache'
-CPAN_PKGS=''
-CROSS_PKGS=''
-MAKE='/opt/homebrew/bin/gmake'
-NINJA='/opt/homebrew/bin/ninja'
-PACKAGING_COMMAND='brew'
-PIP3='/opt/homebrew/bin/pip3'
-PKGS='bash bc bison bzip2 capstone ccache cmocka ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 gtk-vnc jemalloc jpeg-turbo json-c libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson mtools ncurses nettle ninja pixman pkg-config python3 rpm2cpio sdl2 sdl2_image snappy socat sparse spice-protocol swtpm tesseract usbredir vde vte3 xorriso zlib zstd'
-PYPI_PKGS='PyYAML numpy pillow sphinx sphinx-rtd-theme tomli'
-PYTHON='/opt/homebrew/bin/python3'
diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
index 0f16f4d525..7cf882cda7 100755
--- a/tests/lcitool/refresh
+++ b/tests/lcitool/refresh
@@ -229,7 +229,6 @@ try:
#
generate_cirrus("freebsd-14")
generate_cirrus("macos-14")
- generate_cirrus("macos-15")
#
# VM packages lists
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 02/14] tests/functional: make tuxrun disk images writable
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
2024-10-31 17:48 ` [PULL 01/14] .gitlab-ci.d/cirrus: Remove the macos-15 job Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 03/14] tests/functional: make cached asset files read-only Thomas Huth
` (12 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Daniel P. Berrangé
From: Daniel P. Berrangé <berrange@redhat.com>
The zstd command will preserve the input archive permissions on the
output file. So when we decompress the readonly cached image, the
resulting per-test run private disk image will also be readonly.
We need it to be writable, so make it so.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20241025092659.2312118-2-berrange@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/functional/qemu_test/tuxruntest.py | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/tests/functional/qemu_test/tuxruntest.py b/tests/functional/qemu_test/tuxruntest.py
index 904da6f609..f05aa96ad7 100644
--- a/tests/functional/qemu_test/tuxruntest.py
+++ b/tests/functional/qemu_test/tuxruntest.py
@@ -10,6 +10,7 @@
# SPDX-License-Identifier: GPL-2.0-or-later
import os
+import stat
import time
from qemu_test import QemuSystemTest
@@ -77,12 +78,17 @@ def fetch_tuxrun_assets(self, kernel_asset, rootfs_asset, dtb_asset=None):
kernel_image = kernel_asset.fetch()
disk_image_zst = rootfs_asset.fetch()
+ disk_image = self.workdir + "/rootfs.ext4"
+
run_cmd([self.zstd, "-f", "-d", disk_image_zst,
- "-o", self.workdir + "/rootfs.ext4"])
+ "-o", disk_image])
+ # zstd copies source archive permissions for the output
+ # file, so must make this writable for QEMU
+ os.chmod(disk_image, stat.S_IRUSR | stat.S_IWUSR)
dtb = dtb_asset.fetch() if dtb_asset is not None else None
- return (kernel_image, self.workdir + "/rootfs.ext4", dtb)
+ return (kernel_image, disk_image, dtb)
def prepare_run(self, kernel, disk, drive, dtb=None, console_index=0):
"""
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 03/14] tests/functional: make cached asset files read-only
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
2024-10-31 17:48 ` [PULL 01/14] .gitlab-ci.d/cirrus: Remove the macos-15 job Thomas Huth
2024-10-31 17:48 ` [PULL 02/14] tests/functional: make tuxrun disk images writable Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 04/14] Revert "Remove the unused sh4eb target" Thomas Huth
` (11 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Daniel P. Berrangé,
Philippe Mathieu-Daudé
From: Daniel P. Berrangé <berrange@redhat.com>
This ensures that if a functional test runs QEMU with a writable
disk pointing to a cached asset, an error will be reported, rather
than silently modifying the cache file.
As an example, tweaking test_sbsaref.py to set snapshot=off,
results in a clear error:
Command: ./build/qemu-system-aarch64 ...snip... -drive file=/var/home/berrange/.cache/qemu/download/44cdbae275ef1bb6dab1d5fbb59473d4f741e1c8ea8a80fd9e906b531d6ad461,format=raw,snapshot=off -cpu max,pauth=off
Output: qemu-system-aarch64: Could not open '/var/home/berrange/.cache/qemu/download/44cdbae275ef1bb6dab1d5fbb59473d4f741e1c8ea8a80fd9e906b531d6ad461': Permission denied
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Tested-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20241025092659.2312118-3-berrange@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/functional/qemu_test/asset.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tests/functional/qemu_test/asset.py b/tests/functional/qemu_test/asset.py
index e47bfac035..f126cd5863 100644
--- a/tests/functional/qemu_test/asset.py
+++ b/tests/functional/qemu_test/asset.py
@@ -8,6 +8,7 @@
import hashlib
import logging
import os
+import stat
import subprocess
import sys
import unittest
@@ -143,6 +144,8 @@ def fetch(self):
raise Exception("Hash of %s does not match %s" %
(self.url, self.hash))
tmp_cache_file.replace(self.cache_file)
+ # Remove write perms to stop tests accidentally modifying them
+ os.chmod(self.cache_file, stat.S_IRUSR | stat.S_IRGRP)
self.log.info("Cached %s at %s" % (self.url, self.cache_file))
return str(self.cache_file)
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 04/14] Revert "Remove the unused sh4eb target"
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (2 preceding siblings ...)
2024-10-31 17:48 ` [PULL 03/14] tests/functional: make cached asset files read-only Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 05/14] tests/functional: Add a test for sh4eb Thomas Huth
` (10 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Daniel P. Berrangé, Rob Landley
This reverts commit 73ceb12960e686b763415f0880cc5171ccce01cf.
The "r2d" machine can work in big endian mode, see:
https://lore.kernel.org/qemu-devel/d6755445-1060-48a8-82b6-2f392c21f9b9@landley.net/
So the reasoning for removing sh4eb was wrong.
Message-ID: <20241024082735.42324-2-thuth@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Rob Landley <rob@landley.net>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
configs/devices/sh4eb-softmmu/default.mak | 3 +++
configs/targets/sh4eb-softmmu.mak | 2 ++
qapi/machine.json | 2 +-
tests/qtest/endianness-test.c | 1 +
tests/qtest/machine-none-test.c | 1 +
.gitlab-ci.d/buildtest.yml | 2 +-
.gitlab-ci.d/cirrus.yml | 2 +-
.gitlab-ci.d/crossbuilds.yml | 2 +-
.travis.yml | 2 +-
tests/qemu-iotests/testenv.py | 1 +
tests/qtest/meson.build | 1 +
11 files changed, 14 insertions(+), 5 deletions(-)
create mode 100644 configs/devices/sh4eb-softmmu/default.mak
create mode 100644 configs/targets/sh4eb-softmmu.mak
diff --git a/configs/devices/sh4eb-softmmu/default.mak b/configs/devices/sh4eb-softmmu/default.mak
new file mode 100644
index 0000000000..f18d1f6519
--- /dev/null
+++ b/configs/devices/sh4eb-softmmu/default.mak
@@ -0,0 +1,3 @@
+# Default configuration for sh4eb-softmmu
+
+include ../sh4-softmmu/default.mak
diff --git a/configs/targets/sh4eb-softmmu.mak b/configs/targets/sh4eb-softmmu.mak
new file mode 100644
index 0000000000..226b1fc698
--- /dev/null
+++ b/configs/targets/sh4eb-softmmu.mak
@@ -0,0 +1,2 @@
+TARGET_ARCH=sh4
+TARGET_BIG_ENDIAN=y
diff --git a/qapi/machine.json b/qapi/machine.json
index 3cc055b6ff..a6b8795b09 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -37,7 +37,7 @@
'loongarch64', 'm68k', 'microblaze', 'microblazeel', 'mips', 'mips64',
'mips64el', 'mipsel', 'or1k', 'ppc',
'ppc64', 'riscv32', 'riscv64', 'rx', 's390x', 'sh4',
- 'sparc', 'sparc64', 'tricore',
+ 'sh4eb', 'sparc', 'sparc64', 'tricore',
'x86_64', 'xtensa', 'xtensaeb' ] }
##
diff --git a/tests/qtest/endianness-test.c b/tests/qtest/endianness-test.c
index f4872b0283..222d116fae 100644
--- a/tests/qtest/endianness-test.c
+++ b/tests/qtest/endianness-test.c
@@ -41,6 +41,7 @@ static const TestCase test_cases[] = {
{ "ppc64", "pseries-2.7", 0x10080000000ULL,
.bswap = true, .superio = "i82378" },
{ "sh4", "r2d", 0xfe240000, .superio = "i82378" },
+ { "sh4eb", "r2d", 0xfe240000, .bswap = true, .superio = "i82378" },
{ "sparc64", "sun4u", 0x1fe02000000LL, .bswap = true },
{ "x86_64", "pc", -1 },
{}
diff --git a/tests/qtest/machine-none-test.c b/tests/qtest/machine-none-test.c
index 9cf95bea1e..159b2a705a 100644
--- a/tests/qtest/machine-none-test.c
+++ b/tests/qtest/machine-none-test.c
@@ -42,6 +42,7 @@ static struct arch2cpu cpus_map[] = {
{ "ppc64", "power8e_v2.1" },
{ "s390x", "qemu" },
{ "sh4", "sh7750r" },
+ { "sh4eb", "sh7751r" },
{ "sparc", "LEON2" },
{ "sparc64", "Fujitsu Sparc64" },
{ "tricore", "tc1796" },
diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index f0cbdf1992..4e92a56180 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -72,7 +72,7 @@ build-system-debian:
variables:
IMAGE: debian
CONFIGURE_ARGS: --with-coroutine=sigaltstack
- TARGETS: arm-softmmu i386-softmmu riscv64-softmmu sh4-softmmu
+ TARGETS: arm-softmmu i386-softmmu riscv64-softmmu sh4eb-softmmu
sparc-softmmu xtensa-softmmu
MAKE_CHECK_ARGS: check-build
diff --git a/.gitlab-ci.d/cirrus.yml b/.gitlab-ci.d/cirrus.yml
index 6a7bafac7b..9427302383 100644
--- a/.gitlab-ci.d/cirrus.yml
+++ b/.gitlab-ci.d/cirrus.yml
@@ -57,7 +57,7 @@ x64-freebsd-14-build:
CIRRUS_VM_RAM: 8G
UPDATE_COMMAND: pkg update; pkg upgrade -y
INSTALL_COMMAND: pkg install -y
- CONFIGURE_ARGS: --target-list-exclude=arm-softmmu,i386-softmmu,microblaze-softmmu,mips64el-softmmu,mipsel-softmmu,mips-softmmu,ppc-softmmu,xtensa-softmmu
+ CONFIGURE_ARGS: --target-list-exclude=arm-softmmu,i386-softmmu,microblaze-softmmu,mips64el-softmmu,mipsel-softmmu,mips-softmmu,ppc-softmmu,sh4eb-softmmu,xtensa-softmmu
TEST_TARGETS: check
aarch64-macos-build:
diff --git a/.gitlab-ci.d/crossbuilds.yml b/.gitlab-ci.d/crossbuilds.yml
index 178f62869d..95dfc39224 100644
--- a/.gitlab-ci.d/crossbuilds.yml
+++ b/.gitlab-ci.d/crossbuilds.yml
@@ -176,7 +176,7 @@ cross-win64-system:
EXTRA_CONFIGURE_OPTS: --enable-fdt=internal --disable-plugins
CROSS_SKIP_TARGETS: alpha-softmmu avr-softmmu hppa-softmmu
m68k-softmmu microblazeel-softmmu
- or1k-softmmu rx-softmmu sh4-softmmu sparc64-softmmu
+ or1k-softmmu rx-softmmu sh4eb-softmmu sparc64-softmmu
tricore-softmmu xtensaeb-softmmu
artifacts:
when: on_success
diff --git a/.travis.yml b/.travis.yml
index ad81bc5e1b..8fc1ae0cf2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -223,7 +223,7 @@ jobs:
- genisoimage
env:
- CONFIG="--disable-containers --audio-drv-list=sdl --disable-user
- --target-list=arm-softmmu,avr-softmmu,microblaze-softmmu,sh4-softmmu,sparc64-softmmu,xtensaeb-softmmu"
+ --target-list=arm-softmmu,avr-softmmu,microblaze-softmmu,sh4eb-softmmu,sparc64-softmmu,xtensaeb-softmmu"
- name: "[s390x] GCC (user)"
arch: s390x
diff --git a/tests/qemu-iotests/testenv.py b/tests/qemu-iotests/testenv.py
index 8cd620c202..6326e46b7b 100644
--- a/tests/qemu-iotests/testenv.py
+++ b/tests/qemu-iotests/testenv.py
@@ -245,6 +245,7 @@ def __init__(self, source_dir: str, build_dir: str,
('riscv64', 'virt'),
('rx', 'gdbsim-r5f562n8'),
('sh4', 'r2d'),
+ ('sh4eb', 'r2d'),
('tricore', 'tricore_testboard')
)
for suffix, machine in machine_map:
diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
index f7a19032f7..d4460586d1 100644
--- a/tests/qtest/meson.build
+++ b/tests/qtest/meson.build
@@ -186,6 +186,7 @@ qtests_ppc64 = \
qtests_pci + ['migration-test', 'cpu-plug-test', 'drive_del-test']
qtests_sh4 = (config_all_devices.has_key('CONFIG_ISA_TESTDEV') ? ['endianness-test'] : [])
+qtests_sh4eb = (config_all_devices.has_key('CONFIG_ISA_TESTDEV') ? ['endianness-test'] : [])
qtests_sparc = ['prom-env-test', 'm48t59-test', 'boot-serial-test'] + \
qtests_filter
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 05/14] tests/functional: Add a test for sh4eb
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (3 preceding siblings ...)
2024-10-31 17:48 ` [PULL 04/14] Revert "Remove the unused sh4eb target" Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 06/14] tests/vm/openbsd: Remove the "Time appears wrong" workaround Thomas Huth
` (9 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Philippe Mathieu-Daudé
Now that we are aware of binaries that are available for sh4eb,
we should make sure that there are no regressions with this
target and test it regularly in our CI.
Message-ID: <20241024082735.42324-3-thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/functional/meson.build | 3 +++
tests/functional/test_sh4eb_r2d.py | 33 ++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+)
create mode 100755 tests/functional/test_sh4eb_r2d.py
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index 97c1c597e8..a9f1addf77 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -159,6 +159,9 @@ tests_sh4_system_thorough = [
'sh4_tuxrun',
]
+tests_sh4eb_system_thorough = [
+ 'sh4eb_r2d',
+]
tests_sparc_system_thorough = [
'sparc_sun4m',
diff --git a/tests/functional/test_sh4eb_r2d.py b/tests/functional/test_sh4eb_r2d.py
new file mode 100755
index 0000000000..d9c022c8b8
--- /dev/null
+++ b/tests/functional/test_sh4eb_r2d.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python3
+#
+# Boot a Linux kernel on a r2d sh4eb machine and check the console
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import os
+import shutil
+
+from qemu_test import LinuxKernelTest, Asset
+from qemu_test import exec_command_and_wait_for_pattern
+from qemu_test.utils import archive_extract
+from unittest import skipUnless
+
+class R2dEBTest(LinuxKernelTest):
+
+ ASSET_TGZ = Asset(
+ 'https://landley.net/bin/mkroot/0.8.11/sh4eb.tgz',
+ 'be8c6cb5aef8406899dc5aa5e22b6aa45840eb886cdd3ced51555c10577ada2c')
+
+ def test_sh4eb_r2d(self):
+ self.set_machine('r2d')
+ file_path = self.ASSET_TGZ.fetch()
+ archive_extract(file_path, self.workdir)
+ self.vm.add_args('-append', 'console=ttySC1 noiotrap')
+ self.launch_kernel(os.path.join(self.workdir, 'sh4eb/linux-kernel'),
+ initrd=os.path.join(self.workdir, 'sh4eb/initramfs.cpio.gz'),
+ console_index=1, wait_for='Type exit when done')
+ exec_command_and_wait_for_pattern(self, 'exit', 'Restarting system')
+ shutil.rmtree(os.path.join(self.workdir, 'sh4eb'))
+
+if __name__ == '__main__':
+ LinuxKernelTest.main()
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 06/14] tests/vm/openbsd: Remove the "Time appears wrong" workaround
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (4 preceding siblings ...)
2024-10-31 17:48 ` [PULL 05/14] tests/functional: Add a test for sh4eb Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 07/14] tests/functional: Fix the s390x and ppc64 tuxrun tests Thomas Huth
` (8 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell
Seems like the server now reports the right time again, so we have
to drop the workaround to get the installer working again.
Message-ID: <20241023072414.827732-1-thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/vm/openbsd | 1 -
1 file changed, 1 deletion(-)
diff --git a/tests/vm/openbsd b/tests/vm/openbsd
index dfd11c93f0..5e4f76f398 100755
--- a/tests/vm/openbsd
+++ b/tests/vm/openbsd
@@ -159,7 +159,6 @@ class OpenBSDVM(basevm.BaseVM):
self.print_step("Installation started now, this will take a while")
self.console_wait_send("Location of sets", "done\n")
- self.console_wait_send("Time appears wrong. Set to", "\n")
self.console_wait("successfully completed")
self.print_step("Installation finished, rebooting")
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 07/14] tests/functional: Fix the s390x and ppc64 tuxrun tests
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (5 preceding siblings ...)
2024-10-31 17:48 ` [PULL 06/14] tests/vm/openbsd: Remove the "Time appears wrong" workaround Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 08/14] hw/s390x: Re-enable the pci-bridge device on s390x Thomas Huth
` (7 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell
I forgot to add the tests to the meson.build file and looks
like I even managed to somehow mix up the hashsums in the
ppc64 test!
Message-ID: <20241023141919.930689-1-thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/functional/meson.build | 3 +++
tests/functional/test_ppc64_tuxrun.py | 4 ++--
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index a9f1addf77..2ae4e415ce 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -24,6 +24,7 @@ test_timeouts = {
'ppc64_hv' : 1000,
'ppc64_powernv' : 240,
'ppc64_pseries' : 240,
+ 'ppc64_tuxrun' : 240,
's390x_ccw_virtio' : 240,
}
@@ -135,6 +136,7 @@ tests_ppc64_system_thorough = [
'ppc64_hv',
'ppc64_powernv',
'ppc64_pseries',
+ 'ppc64_tuxrun',
]
tests_rx_system_thorough = [
@@ -152,6 +154,7 @@ tests_riscv64_system_thorough = [
tests_s390x_system_thorough = [
's390x_ccw_virtio',
's390x_topology',
+ 's390x_tuxrun',
]
tests_sh4_system_thorough = [
diff --git a/tests/functional/test_ppc64_tuxrun.py b/tests/functional/test_ppc64_tuxrun.py
index 552b53c97a..03b47e07f2 100755
--- a/tests/functional/test_ppc64_tuxrun.py
+++ b/tests/functional/test_ppc64_tuxrun.py
@@ -83,10 +83,10 @@ def ppc64_common_tuxrun(self, kernel_asset, rootfs_asset, prefix):
ASSET_PPC64_KERNEL = Asset(
'https://storage.tuxboot.com/20230331/ppc64/vmlinux',
- '1d953e81a4379e537fc8e41e05a0a59d9b453eef97aa03d47866c6c45b00bdff')
+ 'f22a9b9e924174a4c199f4c7e5d91a2339fcfe51c6eafd0907dc3e09b64ab728')
ASSET_PPC64_ROOTFS = Asset(
'https://storage.tuxboot.com/20230331/ppc64/rootfs.ext4.zst',
- 'f22a9b9e924174a4c199f4c7e5d91a2339fcfe51c6eafd0907dc3e09b64ab728')
+ '1d953e81a4379e537fc8e41e05a0a59d9b453eef97aa03d47866c6c45b00bdff')
def test_ppc64(self):
self.ppc64_common_tuxrun(kernel_asset=self.ASSET_PPC64_KERNEL,
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 08/14] hw/s390x: Re-enable the pci-bridge device on s390x
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (6 preceding siblings ...)
2024-10-31 17:48 ` [PULL 07/14] tests/functional: Fix the s390x and ppc64 tuxrun tests Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 09/14] next-cube: fix up compilation when DEBUG_NEXT is enabled Thomas Huth
` (6 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Cédric Le Goater, Boris Fiuczynski,
Philippe Mathieu-Daudé
Commit e779e5c05a ("hw/pci-bridge: Add a Kconfig switch for the
normal PCI bridge") added a config switch for the pci-bridge, so
that the device is not included in the s390x target anymore (since
the pci-bridge is not really useful on s390x).
However, it seems like libvirt is still adding pci-bridge devices
automatically to the guests' XML definitions (when adding a PCI
device to a non-zero PCI bus), so these guests are now broken due
to the missing pci-bridge in the QEMU binary.
To avoid disruption of the users, let's re-enable the pci-bridge
device on s390x for the time being.
Message-ID: <20241024130405.62134-1-thuth@redhat.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
hw/s390x/Kconfig | 1 +
1 file changed, 1 insertion(+)
diff --git a/hw/s390x/Kconfig b/hw/s390x/Kconfig
index 3bbf4ae56e..82afdaa9dc 100644
--- a/hw/s390x/Kconfig
+++ b/hw/s390x/Kconfig
@@ -7,6 +7,7 @@ config S390_CCW_VIRTIO
imply VFIO_AP
imply VFIO_CCW
imply WDT_DIAG288
+ imply PCI_BRIDGE
imply PCIE_DEVICES
imply IOMMUFD
select PCI_EXPRESS
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 09/14] next-cube: fix up compilation when DEBUG_NEXT is enabled
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (7 preceding siblings ...)
2024-10-31 17:48 ` [PULL 08/14] hw/s390x: Re-enable the pci-bridge device on s390x Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 10/14] next-cube: remove cpu parameter from next_scsi_init() Thomas Huth
` (5 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Mark Cave-Ayland, Thomas Huth
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
These were accidentally introduced by my last series.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Thomas Huth <huth@tuxfamily.org>
Message-ID: <20241023085852.1061031-2-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
hw/m68k/next-cube.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c
index 9832213e7e..7a503e0707 100644
--- a/hw/m68k/next-cube.c
+++ b/hw/m68k/next-cube.c
@@ -404,7 +404,7 @@ static void next_scr_writefn(void *opaque, hwaddr addr, uint64_t val,
switch (addr) {
case 0x14108:
- DPRINTF("FDCSR Write: %x\n", value);
+ DPRINTF("FDCSR Write: %"PRIx64 "\n", val);
if (val == 0x0) {
/* qemu_irq_raise(s->fd_irq[0]); */
}
@@ -468,15 +468,15 @@ static void next_scr_writefn(void *opaque, hwaddr addr, uint64_t val,
/* int_mask |= 0x1000; */
/* s->scsi_csr_1 |= 0x80; */
}
- DPRINTF("SCSICSR Write: %x\n", val);
+ DPRINTF("SCSICSR Write: %"PRIx64 "\n", val);
/* s->scsi_csr_1 = val; */
break;
/* Hardware timer latch - not implemented yet */
case 0x1a000:
default:
- DPRINTF("BMAP Write @ 0x%x with 0x%x size %u\n", (unsigned int)addr,
- val, size);
+ DPRINTF("BMAP Write @ 0x%x with 0x%"PRIx64 " size %u\n",
+ (unsigned int)addr, val, size);
}
}
@@ -585,7 +585,7 @@ static void next_dma_write(void *opaque, hwaddr addr, uint64_t val,
break;
default:
- DPRINTF("DMA write @ %x w/ %x\n", (unsigned)addr, (unsigned)value);
+ DPRINTF("DMA write @ %x w/ %x\n", (unsigned)addr, (unsigned)val);
}
}
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 10/14] next-cube: remove cpu parameter from next_scsi_init()
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (8 preceding siblings ...)
2024-10-31 17:48 ` [PULL 09/14] next-cube: fix up compilation when DEBUG_NEXT is enabled Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 11/14] tests/functional: Convert the tcg_plugins test Thomas Huth
` (4 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Mark Cave-Ayland, Thomas Huth
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
The parameter is not used.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Thomas Huth <huth@tuxfamily.org>
Message-ID: <20241023085852.1061031-5-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
hw/m68k/next-cube.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c
index 7a503e0707..08886d432c 100644
--- a/hw/m68k/next-cube.c
+++ b/hw/m68k/next-cube.c
@@ -828,7 +828,7 @@ static void nextscsi_write(void *opaque, uint8_t *buf, int size)
nextdma_write(opaque, buf, size, NEXTDMA_SCSI);
}
-static void next_scsi_init(DeviceState *pcdev, M68kCPU *cpu)
+static void next_scsi_init(DeviceState *pcdev)
{
struct NeXTPC *next_pc = NEXT_PC(pcdev);
DeviceState *dev;
@@ -1050,7 +1050,7 @@ static void next_cube_init(MachineState *machine)
/* TODO: */
/* Network */
/* SCSI */
- next_scsi_init(pcdev, cpu);
+ next_scsi_init(pcdev);
/* DMA */
memory_region_init_io(&m->dmamem, NULL, &next_dma_ops, machine,
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 11/14] tests/functional: Convert the tcg_plugins test
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (9 preceding siblings ...)
2024-10-31 17:48 ` [PULL 10/14] next-cube: remove cpu parameter from next_scsi_init() Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 12/14] tests/functional: Convert BananaPi tests to the functional framework Thomas Huth
` (3 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell
A straight forward conversion, only the usual changes were required
here (i.e. adjustment for asset downloading, machine selection).
Message-ID: <20241023051754.813412-1-thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
MAINTAINERS | 2 +-
.../test_aarch64_tcg_plugins.py} | 37 ++++++++-----------
2 files changed, 16 insertions(+), 23 deletions(-)
rename tests/{avocado/tcg_plugins.py => functional/test_aarch64_tcg_plugins.py} (78%)
mode change 100644 => 100755
diff --git a/MAINTAINERS b/MAINTAINERS
index f48d9142b8..6fa4d89ca1 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3717,7 +3717,7 @@ S: Maintained
F: docs/devel/tcg-plugins.rst
F: plugins/
F: tests/tcg/plugins/
-F: tests/avocado/tcg_plugins.py
+F: tests/functional/test_aarch64_tcg_plugins.py
F: contrib/plugins/
AArch64 TCG target
diff --git a/tests/avocado/tcg_plugins.py b/tests/functional/test_aarch64_tcg_plugins.py
old mode 100644
new mode 100755
similarity index 78%
rename from tests/avocado/tcg_plugins.py
rename to tests/functional/test_aarch64_tcg_plugins.py
index a6ff457e27..01660eb090
--- a/tests/avocado/tcg_plugins.py
+++ b/tests/functional/test_aarch64_tcg_plugins.py
@@ -1,3 +1,5 @@
+#!/usr/bin/env python3
+#
# TCG Plugins tests
#
# These are a little more involved than the basic tests run by check-tcg.
@@ -13,7 +15,7 @@
import mmap
import re
-from boot_linux_console import LinuxKernelTest
+from qemu_test import LinuxKernelTest, Asset
class PluginKernelBase(LinuxKernelTest):
@@ -53,22 +55,14 @@ def run_vm(self, kernel_path, kernel_command_line,
class PluginKernelNormal(PluginKernelBase):
- def _grab_aarch64_kernel(self):
- kernel_url = ('https://storage.tuxboot.com/20230331/arm64/Image')
- kernel_sha256 = 'ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7'
- kernel_path = self.fetch_asset(kernel_url,
- asset_hash=kernel_sha256,
- algorithm = "sha256")
- return kernel_path
+ ASSET_KERNEL = Asset(
+ ('https://storage.tuxboot.com/20230331/arm64/Image'),
+ 'ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7')
def test_aarch64_virt_insn(self):
- """
- :avocado: tags=accel:tcg
- :avocado: tags=arch:aarch64
- :avocado: tags=machine:virt
- :avocado: tags=cpu:cortex-a53
- """
- kernel_path = self._grab_aarch64_kernel()
+ self.set_machine('virt')
+ self.cpu='cortex-a53'
+ kernel_path = self.ASSET_KERNEL.fetch()
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
'console=ttyAMA0')
console_pattern = 'Kernel panic - not syncing: VFS:'
@@ -92,13 +86,9 @@ def test_aarch64_virt_insn(self):
def test_aarch64_virt_insn_icount(self):
- """
- :avocado: tags=accel:tcg
- :avocado: tags=arch:aarch64
- :avocado: tags=machine:virt
- :avocado: tags=cpu:cortex-a53
- """
- kernel_path = self._grab_aarch64_kernel()
+ self.set_machine('virt')
+ self.cpu='cortex-a53'
+ kernel_path = self.ASSET_KERNEL.fetch()
kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
'console=ttyAMA0')
console_pattern = 'Kernel panic - not syncing: VFS:'
@@ -120,3 +110,6 @@ def test_aarch64_virt_insn_icount(self):
else:
count = int(m.group("count"))
self.log.info(f"Counted: {count} instructions")
+
+if __name__ == '__main__':
+ LinuxKernelTest.main()
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 12/14] tests/functional: Convert BananaPi tests to the functional framework
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (10 preceding siblings ...)
2024-10-31 17:48 ` [PULL 11/14] tests/functional: Convert the tcg_plugins test Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-11-01 19:07 ` Peter Maydell
2024-10-31 17:48 ` [PULL 13/14] tests/functional: Convert the OrangePi " Thomas Huth
` (2 subsequent siblings)
14 siblings, 1 reply; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell
Move the BananaPi tests from tests/avocado/boot_linux_console.py into
a new file dedicated for Banana Pi tests in the functional framework.
Update the hash sums of the assets to sha256 along the way and fix the
broken link for the buildroot image from storage.kernelci.org.
(Note: The test_arm_bpim2u_openwrt_22_03_3 test is currently broken
due to a regression in commit 4c2c047469 ("target/arm: Fix usage of MMU
indexes when EL3 is AArch32") - it works if that commit gets reverted)
Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20241029092440.25021-2-thuth@redhat.com>
---
tests/avocado/boot_linux_console.py | 176 ------------------------
tests/functional/meson.build | 2 +
tests/functional/qemu_test/utils.py | 21 +++
tests/functional/test_arm_bpim2u.py | 206 ++++++++++++++++++++++++++++
4 files changed, 229 insertions(+), 176 deletions(-)
create mode 100755 tests/functional/test_arm_bpim2u.py
diff --git a/tests/avocado/boot_linux_console.py b/tests/avocado/boot_linux_console.py
index 23d1b3587b..d05abf0d1a 100644
--- a/tests/avocado/boot_linux_console.py
+++ b/tests/avocado/boot_linux_console.py
@@ -471,182 +471,6 @@ def test_arm_quanta_gsj_initrd(self):
self.wait_for_console_pattern(
'Give root password for system maintenance')
- def test_arm_bpim2u(self):
- """
- :avocado: tags=arch:arm
- :avocado: tags=machine:bpim2u
- :avocado: tags=accel:tcg
- """
- deb_url = ('https://apt.armbian.com/pool/main/l/'
- 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
- deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
- deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-6.6.16-current-sunxi')
- dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
- 'sun8i-r40-bananapi-m2-ultra.dtb')
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
-
- self.vm.set_console()
- kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
- 'console=ttyS0,115200n8 '
- 'earlycon=uart,mmio32,0x1c28000')
- self.vm.add_args('-kernel', kernel_path,
- '-dtb', dtb_path,
- '-append', kernel_command_line)
- self.vm.launch()
- console_pattern = 'Kernel command line: %s' % kernel_command_line
- self.wait_for_console_pattern(console_pattern)
-
- def test_arm_bpim2u_initrd(self):
- """
- :avocado: tags=arch:arm
- :avocado: tags=accel:tcg
- :avocado: tags=machine:bpim2u
- """
- deb_url = ('https://apt.armbian.com/pool/main/l/'
- 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
- deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
- deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-6.6.16-current-sunxi')
- dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
- 'sun8i-r40-bananapi-m2-ultra.dtb')
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
- initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
- '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
- 'arm/rootfs-armv7a.cpio.gz')
- initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c'
- initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
- initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
- archive.gzip_uncompress(initrd_path_gz, initrd_path)
-
- self.vm.set_console()
- kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
- 'console=ttyS0,115200 '
- 'panic=-1 noreboot')
- self.vm.add_args('-kernel', kernel_path,
- '-dtb', dtb_path,
- '-initrd', initrd_path,
- '-append', kernel_command_line,
- '-no-reboot')
- self.vm.launch()
- self.wait_for_console_pattern('Boot successful.')
-
- exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
- 'Allwinner sun8i Family')
- exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
- 'system-control@1c00000')
- exec_command_and_wait_for_pattern(self, 'reboot',
- 'reboot: Restarting system')
- # Wait for VM to shut down gracefully
- self.vm.wait()
-
- def test_arm_bpim2u_gmac(self):
- """
- :avocado: tags=arch:arm
- :avocado: tags=accel:tcg
- :avocado: tags=machine:bpim2u
- :avocado: tags=device:sd
- """
- self.require_netdev('user')
-
- deb_url = ('https://apt.armbian.com/pool/main/l/'
- 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
- deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
- deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-6.6.16-current-sunxi')
- dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
- 'sun8i-r40-bananapi-m2-ultra.dtb')
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
- rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/'
- 'buildroot-baseline/20221116.0/armel/rootfs.ext2.xz')
- rootfs_hash = 'fae32f337c7b87547b10f42599acf109da8b6d9a'
- rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash)
- rootfs_path = os.path.join(self.workdir, 'rootfs.cpio')
- archive.lzma_uncompress(rootfs_path_xz, rootfs_path)
- image_pow2ceil_expand(rootfs_path)
-
- self.vm.set_console()
- kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
- 'console=ttyS0,115200 '
- 'root=b300 rootwait rw '
- 'panic=-1 noreboot')
- self.vm.add_args('-kernel', kernel_path,
- '-dtb', dtb_path,
- '-drive', 'file=' + rootfs_path + ',if=sd,format=raw',
- '-net', 'nic,model=gmac,netdev=host_gmac',
- '-netdev', 'user,id=host_gmac',
- '-append', kernel_command_line,
- '-no-reboot')
- self.vm.launch()
- shell_ready = "/bin/sh: can't access tty; job control turned off"
- self.wait_for_console_pattern(shell_ready)
-
- exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
- 'Allwinner sun8i Family')
- exec_command_and_wait_for_pattern(self, 'cat /proc/partitions',
- 'mmcblk')
- exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up',
- 'eth0: Link is Up')
- exec_command_and_wait_for_pattern(self, 'udhcpc eth0',
- 'udhcpc: lease of 10.0.2.15 obtained')
- exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2',
- '3 packets transmitted, 3 packets received, 0% packet loss')
- exec_command_and_wait_for_pattern(self, 'reboot',
- 'reboot: Restarting system')
- # Wait for VM to shut down gracefully
- self.vm.wait()
-
- @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited')
- def test_arm_bpim2u_openwrt_22_03_3(self):
- """
- :avocado: tags=arch:arm
- :avocado: tags=machine:bpim2u
- :avocado: tags=device:sd
- """
-
- # This test download a 8.9 MiB compressed image and expand it
- # to 127 MiB.
- image_url = ('https://downloads.openwrt.org/releases/22.03.3/targets/'
- 'sunxi/cortexa7/openwrt-22.03.3-sunxi-cortexa7-'
- 'sinovoip_bananapi-m2-ultra-ext4-sdcard.img.gz')
- image_hash = ('5b41b4e11423e562c6011640f9a7cd3b'
- 'dd0a3d42b83430f7caa70a432e6cd82c')
- image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash,
- algorithm='sha256')
- image_path = archive.extract(image_path_gz, self.workdir)
- image_pow2ceil_expand(image_path)
-
- self.vm.set_console()
- self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw',
- '-nic', 'user',
- '-no-reboot')
- self.vm.launch()
-
- kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
- 'usbcore.nousb '
- 'noreboot')
-
- self.wait_for_console_pattern('U-Boot SPL')
-
- interrupt_interactive_console_until_pattern(
- self, 'Hit any key to stop autoboot:', '=>')
- exec_command_and_wait_for_pattern(self, "setenv extraargs '" +
- kernel_command_line + "'", '=>')
- exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...');
-
- self.wait_for_console_pattern(
- 'Please press Enter to activate this console.')
-
- exec_command_and_wait_for_pattern(self, ' ', 'root@')
-
- exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
- 'Allwinner sun8i Family')
- exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
- 'system-control@1c00000')
-
def test_arm_orangepi(self):
"""
:avocado: tags=arch:arm
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index 2ae4e415ce..e7cac3aeee 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -16,6 +16,7 @@ test_timeouts = {
'aarch64_virt' : 360,
'acpi_bits' : 240,
'arm_aspeed' : 600,
+ 'arm_bpim2u' : 360,
'arm_raspi2' : 120,
'arm_tuxrun' : 120,
'mips_malta' : 120,
@@ -54,6 +55,7 @@ tests_alpha_system_thorough = [
tests_arm_system_thorough = [
'arm_aspeed',
+ 'arm_bpim2u',
'arm_canona1100',
'arm_integratorcp',
'arm_raspi2',
diff --git a/tests/functional/qemu_test/utils.py b/tests/functional/qemu_test/utils.py
index 2a1cb60d38..1bf1c410d5 100644
--- a/tests/functional/qemu_test/utils.py
+++ b/tests/functional/qemu_test/utils.py
@@ -15,6 +15,27 @@
import subprocess
import tarfile
+"""
+Round up to next power of 2
+"""
+def pow2ceil(x):
+ return 1 if x == 0 else 2**(x - 1).bit_length()
+
+def file_truncate(path, size):
+ if size != os.path.getsize(path):
+ with open(path, 'ab+') as fd:
+ fd.truncate(size)
+
+"""
+Expand file size to next power of 2
+"""
+def image_pow2ceil_expand(path):
+ size = os.path.getsize(path)
+ size_aligned = pow2ceil(size)
+ if size != size_aligned:
+ with open(path, 'ab+') as fd:
+ fd.truncate(size_aligned)
+
def archive_extract(archive, dest_dir, member=None):
with tarfile.open(archive) as tf:
if hasattr(tarfile, 'data_filter'):
diff --git a/tests/functional/test_arm_bpim2u.py b/tests/functional/test_arm_bpim2u.py
new file mode 100755
index 0000000000..2f9fa145e3
--- /dev/null
+++ b/tests/functional/test_arm_bpim2u.py
@@ -0,0 +1,206 @@
+#!/usr/bin/env python3
+#
+# Functional test that boots a Linux kernel on a Banana Pi machine
+# and checks the console
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import os
+
+from qemu_test import LinuxKernelTest, exec_command_and_wait_for_pattern
+from qemu_test import Asset, interrupt_interactive_console_until_pattern
+from qemu_test.utils import archive_extract, gzip_uncompress, lzma_uncompress
+from qemu_test.utils import image_pow2ceil_expand
+from unittest import skipUnless
+
+class BananaPiMachine(LinuxKernelTest):
+
+ ASSET_DEB = Asset(
+ ('https://apt.armbian.com/pool/main/l/linux-6.6.16/'
+ 'linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb'),
+ '3d968c15b121ede871dce49d13ee7644d6f74b6b121b84c9a40f51b0c80d6d22')
+
+ ASSET_INITRD = Asset(
+ ('https://github.com/groeck/linux-build-test/raw/'
+ '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
+ 'arm/rootfs-armv7a.cpio.gz'),
+ '2c8dbdb16ea7af2dfbcbea96044dde639fb07d09fd3c4fb31f2027ef71e55ddd')
+
+ ASSET_ROOTFS = Asset(
+ ('http://storage.kernelci.org/images/rootfs/buildroot/'
+ 'buildroot-baseline/20230703.0/armel/rootfs.ext2.xz'),
+ '42b44a12965ac0afe9a88378527fb698a7dc76af50495efc2361ee1595b4e5c6')
+
+ ASSET_SD_IMAGE = Asset(
+ ('https://downloads.openwrt.org/releases/22.03.3/targets/sunxi/cortexa7/'
+ 'openwrt-22.03.3-sunxi-cortexa7-sinovoip_bananapi-m2-ultra-ext4-sdcard.img.gz'),
+ '5b41b4e11423e562c6011640f9a7cd3bdd0a3d42b83430f7caa70a432e6cd82c')
+
+ def test_arm_bpim2u(self):
+ """
+ :avocado: tags=arch:arm
+ :avocado: tags=machine:bpim2u
+ :avocado: tags=accel:tcg
+ """
+ self.set_machine('bpim2u')
+ deb_path = self.ASSET_DEB.fetch()
+ kernel_path = self.extract_from_deb(deb_path,
+ '/boot/vmlinuz-6.6.16-current-sunxi')
+ dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
+ 'sun8i-r40-bananapi-m2-ultra.dtb')
+ dtb_path = self.extract_from_deb(deb_path, dtb_path)
+
+ self.vm.set_console()
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'console=ttyS0,115200n8 '
+ 'earlycon=uart,mmio32,0x1c28000')
+ self.vm.add_args('-kernel', kernel_path,
+ '-dtb', dtb_path,
+ '-append', kernel_command_line)
+ self.vm.launch()
+ console_pattern = 'Kernel command line: %s' % kernel_command_line
+ self.wait_for_console_pattern(console_pattern)
+ os.remove(kernel_path)
+ os.remove(dtb_path)
+
+ def test_arm_bpim2u_initrd(self):
+ """
+ :avocado: tags=arch:arm
+ :avocado: tags=accel:tcg
+ :avocado: tags=machine:bpim2u
+ """
+ self.set_machine('bpim2u')
+ deb_path = self.ASSET_DEB.fetch()
+ kernel_path = self.extract_from_deb(deb_path,
+ '/boot/vmlinuz-6.6.16-current-sunxi')
+ dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
+ 'sun8i-r40-bananapi-m2-ultra.dtb')
+ dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ initrd_path_gz = self.ASSET_INITRD.fetch()
+ initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
+ gzip_uncompress(initrd_path_gz, initrd_path)
+
+ self.vm.set_console()
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'console=ttyS0,115200 '
+ 'panic=-1 noreboot')
+ self.vm.add_args('-kernel', kernel_path,
+ '-dtb', dtb_path,
+ '-initrd', initrd_path,
+ '-append', kernel_command_line,
+ '-no-reboot')
+ self.vm.launch()
+ self.wait_for_console_pattern('Boot successful.')
+
+ exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
+ 'Allwinner sun8i Family')
+ exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
+ 'system-control@1c00000')
+ exec_command_and_wait_for_pattern(self, 'reboot',
+ 'reboot: Restarting system')
+ # Wait for VM to shut down gracefully
+ self.vm.wait()
+ os.remove(kernel_path)
+ os.remove(dtb_path)
+ os.remove(initrd_path)
+
+ def test_arm_bpim2u_gmac(self):
+ """
+ :avocado: tags=arch:arm
+ :avocado: tags=machine:bpim2u
+ :avocado: tags=device:sd
+ """
+ self.set_machine('bpim2u')
+ self.require_netdev('user')
+
+ deb_path = self.ASSET_DEB.fetch()
+ kernel_path = self.extract_from_deb(deb_path,
+ '/boot/vmlinuz-6.6.16-current-sunxi')
+ dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/'
+ 'sun8i-r40-bananapi-m2-ultra.dtb')
+ dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ rootfs_path_xz = self.ASSET_ROOTFS.fetch()
+ rootfs_path = os.path.join(self.workdir, 'rootfs.cpio')
+ lzma_uncompress(rootfs_path_xz, rootfs_path)
+ image_pow2ceil_expand(rootfs_path)
+
+ self.vm.set_console()
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'console=ttyS0,115200 '
+ 'root=b300 rootwait rw '
+ 'panic=-1 noreboot')
+ self.vm.add_args('-kernel', kernel_path,
+ '-dtb', dtb_path,
+ '-drive', 'file=' + rootfs_path + ',if=sd,format=raw',
+ '-net', 'nic,model=gmac,netdev=host_gmac',
+ '-netdev', 'user,id=host_gmac',
+ '-append', kernel_command_line,
+ '-no-reboot')
+ self.vm.launch()
+ shell_ready = "/bin/sh: can't access tty; job control turned off"
+ self.wait_for_console_pattern(shell_ready)
+
+ exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
+ 'Allwinner sun8i Family')
+ exec_command_and_wait_for_pattern(self, 'cat /proc/partitions',
+ 'mmcblk')
+ exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up',
+ 'eth0: Link is Up')
+ exec_command_and_wait_for_pattern(self, 'udhcpc eth0',
+ 'udhcpc: lease of 10.0.2.15 obtained')
+ exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2',
+ '3 packets transmitted, 3 packets received, 0% packet loss')
+ exec_command_and_wait_for_pattern(self, 'reboot',
+ 'reboot: Restarting system')
+ # Wait for VM to shut down gracefully
+ self.vm.wait()
+ os.remove(kernel_path)
+ os.remove(dtb_path)
+ os.remove(rootfs_path)
+
+ @skipUnless(os.getenv('QEMU_TEST_ALLOW_LARGE_STORAGE'), 'storage limited')
+ def test_arm_bpim2u_openwrt_22_03_3(self):
+ """
+ :avocado: tags=arch:arm
+ :avocado: tags=machine:bpim2u
+ :avocado: tags=device:sd
+ """
+ self.set_machine('bpim2u')
+ # This test download a 8.9 MiB compressed image and expand it
+ # to 127 MiB.
+ image_path_gz = self.ASSET_SD_IMAGE.fetch()
+ image_path = os.path.join(self.workdir, 'sdcard.img')
+ gzip_uncompress(image_path_gz, image_path)
+ image_pow2ceil_expand(image_path)
+
+ self.vm.set_console()
+ self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw',
+ '-nic', 'user',
+ '-no-reboot')
+ self.vm.launch()
+
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'usbcore.nousb '
+ 'noreboot')
+
+ self.wait_for_console_pattern('U-Boot SPL')
+
+ interrupt_interactive_console_until_pattern(
+ self, 'Hit any key to stop autoboot:', '=>')
+ exec_command_and_wait_for_pattern(self, "setenv extraargs '" +
+ kernel_command_line + "'", '=>')
+ exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...');
+
+ self.wait_for_console_pattern(
+ 'Please press Enter to activate this console.')
+
+ exec_command_and_wait_for_pattern(self, ' ', 'root@')
+
+ exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
+ 'Allwinner sun8i Family')
+ exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
+ 'system-control@1c00000')
+ os.remove(image_path)
+
+if __name__ == '__main__':
+ LinuxKernelTest.main()
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 13/14] tests/functional: Convert the OrangePi tests to the functional framework
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (11 preceding siblings ...)
2024-10-31 17:48 ` [PULL 12/14] tests/functional: Convert BananaPi tests to the functional framework Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-10-31 17:48 ` [PULL 14/14] tests/functional: Convert the riscv_opensbi avocado test into a standalone test Thomas Huth
2024-11-04 12:31 ` [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Peter Maydell
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell
Move the OrangePi tests from tests/avocado/boot_linux_console.py into
a new file dedicated for OrangePi tests in the functional framework
and update the hash sums of the assets to sha256 along the way.
For the buildroot image and the Armbian image, we've got to switch to
a newer version since the old images have been removed from the server,
and the NetBSD image has been moved to the archive, so we need to update
this URL as well.
Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20241029092440.25021-3-thuth@redhat.com>
---
MAINTAINERS | 1 +
tests/avocado/boot_linux_console.py | 235 ----------------------
tests/functional/meson.build | 2 +
tests/functional/test_arm_orangepi.py | 270 ++++++++++++++++++++++++++
4 files changed, 273 insertions(+), 235 deletions(-)
create mode 100755 tests/functional/test_arm_orangepi.py
diff --git a/MAINTAINERS b/MAINTAINERS
index 6fa4d89ca1..5837e4bf74 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -640,6 +640,7 @@ F: hw/*/allwinner-h3*
F: include/hw/*/allwinner-h3*
F: hw/arm/orangepi.c
F: docs/system/arm/orangepi.rst
+F: tests/functional/test_arm_orangepi.py
ARM PrimeCell and CMSDK devices
M: Peter Maydell <peter.maydell@linaro.org>
diff --git a/tests/avocado/boot_linux_console.py b/tests/avocado/boot_linux_console.py
index d05abf0d1a..12e24bb05a 100644
--- a/tests/avocado/boot_linux_console.py
+++ b/tests/avocado/boot_linux_console.py
@@ -471,241 +471,6 @@ def test_arm_quanta_gsj_initrd(self):
self.wait_for_console_pattern(
'Give root password for system maintenance')
- def test_arm_orangepi(self):
- """
- :avocado: tags=arch:arm
- :avocado: tags=machine:orangepi-pc
- :avocado: tags=accel:tcg
- """
- deb_url = ('https://apt.armbian.com/pool/main/l/'
- 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
- deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
- deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-6.6.16-current-sunxi')
- dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
-
- self.vm.set_console()
- kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
- 'console=ttyS0,115200n8 '
- 'earlycon=uart,mmio32,0x1c28000')
- self.vm.add_args('-kernel', kernel_path,
- '-dtb', dtb_path,
- '-append', kernel_command_line)
- self.vm.launch()
- console_pattern = 'Kernel command line: %s' % kernel_command_line
- self.wait_for_console_pattern(console_pattern)
-
- def test_arm_orangepi_initrd(self):
- """
- :avocado: tags=arch:arm
- :avocado: tags=accel:tcg
- :avocado: tags=machine:orangepi-pc
- """
- deb_url = ('https://apt.armbian.com/pool/main/l/'
- 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
- deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
- deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-6.6.16-current-sunxi')
- dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
- initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
- '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
- 'arm/rootfs-armv7a.cpio.gz')
- initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c'
- initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
- initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
- archive.gzip_uncompress(initrd_path_gz, initrd_path)
-
- self.vm.set_console()
- kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
- 'console=ttyS0,115200 '
- 'panic=-1 noreboot')
- self.vm.add_args('-kernel', kernel_path,
- '-dtb', dtb_path,
- '-initrd', initrd_path,
- '-append', kernel_command_line,
- '-no-reboot')
- self.vm.launch()
- self.wait_for_console_pattern('Boot successful.')
-
- exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
- 'Allwinner sun8i Family')
- exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
- 'system-control@1c00000')
- exec_command_and_wait_for_pattern(self, 'reboot',
- 'reboot: Restarting system')
- # Wait for VM to shut down gracefully
- self.vm.wait()
-
- def test_arm_orangepi_sd(self):
- """
- :avocado: tags=arch:arm
- :avocado: tags=accel:tcg
- :avocado: tags=machine:orangepi-pc
- :avocado: tags=device:sd
- """
- self.require_netdev('user')
-
- deb_url = ('https://apt.armbian.com/pool/main/l/'
- 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
- deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
- deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- kernel_path = self.extract_from_deb(deb_path,
- '/boot/vmlinuz-6.6.16-current-sunxi')
- dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
- dtb_path = self.extract_from_deb(deb_path, dtb_path)
- rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/'
- 'buildroot-baseline/20221116.0/armel/rootfs.ext2.xz')
- rootfs_hash = 'fae32f337c7b87547b10f42599acf109da8b6d9a'
- rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash)
- rootfs_path = os.path.join(self.workdir, 'rootfs.cpio')
- archive.lzma_uncompress(rootfs_path_xz, rootfs_path)
- image_pow2ceil_expand(rootfs_path)
-
- self.vm.set_console()
- kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
- 'console=ttyS0,115200 '
- 'root=/dev/mmcblk0 rootwait rw '
- 'panic=-1 noreboot')
- self.vm.add_args('-kernel', kernel_path,
- '-dtb', dtb_path,
- '-drive', 'file=' + rootfs_path + ',if=sd,format=raw',
- '-append', kernel_command_line,
- '-no-reboot')
- self.vm.launch()
- shell_ready = "/bin/sh: can't access tty; job control turned off"
- self.wait_for_console_pattern(shell_ready)
-
- exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
- 'Allwinner sun8i Family')
- exec_command_and_wait_for_pattern(self, 'cat /proc/partitions',
- 'mmcblk0')
- exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up',
- 'eth0: Link is Up')
- exec_command_and_wait_for_pattern(self, 'udhcpc eth0',
- 'udhcpc: lease of 10.0.2.15 obtained')
- exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2',
- '3 packets transmitted, 3 packets received, 0% packet loss')
- exec_command_and_wait_for_pattern(self, 'reboot',
- 'reboot: Restarting system')
- # Wait for VM to shut down gracefully
- self.vm.wait()
-
- @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited')
- def test_arm_orangepi_bionic_20_08(self):
- """
- :avocado: tags=arch:arm
- :avocado: tags=machine:orangepi-pc
- :avocado: tags=device:sd
- """
-
- # This test download a 275 MiB compressed image and expand it
- # to 1036 MiB, but the underlying filesystem is 1552 MiB...
- # As we expand it to 2 GiB we are safe.
-
- image_url = ('https://archive.armbian.com/orangepipc/archive/'
- 'Armbian_20.08.1_Orangepipc_bionic_current_5.8.5.img.xz')
- image_hash = ('b4d6775f5673486329e45a0586bf06b6'
- 'dbe792199fd182ac6b9c7bb6c7d3e6dd')
- image_path_xz = self.fetch_asset(image_url, asset_hash=image_hash,
- algorithm='sha256')
- image_path = archive.extract(image_path_xz, self.workdir)
- image_pow2ceil_expand(image_path)
-
- self.vm.set_console()
- self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw',
- '-nic', 'user',
- '-no-reboot')
- self.vm.launch()
-
- kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
- 'console=ttyS0,115200 '
- 'loglevel=7 '
- 'nosmp '
- 'systemd.default_timeout_start_sec=9000 '
- 'systemd.mask=armbian-zram-config.service '
- 'systemd.mask=armbian-ramlog.service')
-
- self.wait_for_console_pattern('U-Boot SPL')
- self.wait_for_console_pattern('Autoboot in ')
- exec_command_and_wait_for_pattern(self, ' ', '=>')
- exec_command_and_wait_for_pattern(self, "setenv extraargs '" +
- kernel_command_line + "'", '=>')
- exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...');
-
- self.wait_for_console_pattern('systemd[1]: Set hostname ' +
- 'to <orangepipc>')
- self.wait_for_console_pattern('Starting Load Kernel Modules...')
-
- @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited')
- def test_arm_orangepi_uboot_netbsd9(self):
- """
- :avocado: tags=arch:arm
- :avocado: tags=machine:orangepi-pc
- :avocado: tags=device:sd
- :avocado: tags=os:netbsd
- """
- # This test download a 304MB compressed image and expand it to 2GB
- deb_url = ('http://snapshot.debian.org/archive/debian/'
- '20200108T145233Z/pool/main/u/u-boot/'
- 'u-boot-sunxi_2020.01%2Bdfsg-1_armhf.deb')
- deb_hash = 'f67f404a80753ca3d1258f13e38f2b060e13db99'
- deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
- # We use the common OrangePi PC 'plus' build of U-Boot for our secondary
- # program loader (SPL). We will then set the path to the more specific
- # OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt,
- # before to boot NetBSD.
- uboot_path = '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin'
- uboot_path = self.extract_from_deb(deb_path, uboot_path)
- image_url = ('https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/'
- 'evbarm-earmv7hf/binary/gzimg/armv7.img.gz')
- image_hash = '2babb29d36d8360adcb39c09e31060945259917a'
- image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash)
- image_path = os.path.join(self.workdir, 'armv7.img')
- archive.gzip_uncompress(image_path_gz, image_path)
- image_pow2ceil_expand(image_path)
- image_drive_args = 'if=sd,format=raw,snapshot=on,file=' + image_path
-
- # dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc
- with open(uboot_path, 'rb') as f_in:
- with open(image_path, 'r+b') as f_out:
- f_out.seek(8 * 1024)
- shutil.copyfileobj(f_in, f_out)
-
- self.vm.set_console()
- self.vm.add_args('-nic', 'user',
- '-drive', image_drive_args,
- '-global', 'allwinner-rtc.base-year=2000',
- '-no-reboot')
- self.vm.launch()
- wait_for_console_pattern(self, 'U-Boot 2020.01+dfsg-1')
- interrupt_interactive_console_until_pattern(self,
- 'Hit any key to stop autoboot:',
- 'switch to partitions #0, OK')
-
- exec_command_and_wait_for_pattern(self, '', '=>')
- cmd = 'setenv bootargs root=ld0a'
- exec_command_and_wait_for_pattern(self, cmd, '=>')
- cmd = 'setenv kernel netbsd-GENERIC.ub'
- exec_command_and_wait_for_pattern(self, cmd, '=>')
- cmd = 'setenv fdtfile dtb/sun8i-h3-orangepi-pc.dtb'
- exec_command_and_wait_for_pattern(self, cmd, '=>')
- cmd = ("setenv bootcmd 'fatload mmc 0:1 ${kernel_addr_r} ${kernel}; "
- "fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}; "
- "fdt addr ${fdt_addr_r}; "
- "bootm ${kernel_addr_r} - ${fdt_addr_r}'")
- exec_command_and_wait_for_pattern(self, cmd, '=>')
-
- exec_command_and_wait_for_pattern(self, 'boot',
- 'Booting kernel from Legacy Image')
- wait_for_console_pattern(self, 'Starting kernel ...')
- wait_for_console_pattern(self, 'NetBSD 9.0 (GENERIC)')
- # Wait for user-space
- wait_for_console_pattern(self, 'Starting root file system check')
-
def test_arm_ast2600_debian(self):
"""
:avocado: tags=arch:arm
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index e7cac3aeee..1336d941ea 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -17,6 +17,7 @@ test_timeouts = {
'acpi_bits' : 240,
'arm_aspeed' : 600,
'arm_bpim2u' : 360,
+ 'arm_orangepi' : 540,
'arm_raspi2' : 120,
'arm_tuxrun' : 120,
'mips_malta' : 120,
@@ -58,6 +59,7 @@ tests_arm_system_thorough = [
'arm_bpim2u',
'arm_canona1100',
'arm_integratorcp',
+ 'arm_orangepi',
'arm_raspi2',
'arm_vexpress',
'arm_tuxrun',
diff --git a/tests/functional/test_arm_orangepi.py b/tests/functional/test_arm_orangepi.py
new file mode 100755
index 0000000000..d2ed5fcc82
--- /dev/null
+++ b/tests/functional/test_arm_orangepi.py
@@ -0,0 +1,270 @@
+#!/usr/bin/env python3
+#
+# Functional test that boots a Linux kernel on an Orange Pi machine
+# and checks the console
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import os
+import shutil
+
+from qemu_test import LinuxKernelTest, exec_command_and_wait_for_pattern
+from qemu_test import Asset, interrupt_interactive_console_until_pattern
+from qemu_test import wait_for_console_pattern
+from qemu_test.utils import archive_extract, gzip_uncompress, lzma_uncompress
+from qemu_test.utils import image_pow2ceil_expand
+from unittest import skipUnless
+
+class BananaPiMachine(LinuxKernelTest):
+
+ ASSET_DEB = Asset(
+ ('https://apt.armbian.com/pool/main/l/linux-6.6.16/'
+ 'linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb'),
+ '3d968c15b121ede871dce49d13ee7644d6f74b6b121b84c9a40f51b0c80d6d22')
+
+ ASSET_INITRD = Asset(
+ ('https://github.com/groeck/linux-build-test/raw/'
+ '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
+ 'arm/rootfs-armv7a.cpio.gz'),
+ '2c8dbdb16ea7af2dfbcbea96044dde639fb07d09fd3c4fb31f2027ef71e55ddd')
+
+ ASSET_ROOTFS = Asset(
+ ('http://storage.kernelci.org/images/rootfs/buildroot/'
+ 'buildroot-baseline/20230703.0/armel/rootfs.ext2.xz'),
+ '42b44a12965ac0afe9a88378527fb698a7dc76af50495efc2361ee1595b4e5c6')
+
+ ASSET_ARMBIAN = Asset(
+ ('https://k-space.ee.armbian.com/archive/orangepipc/archive/'
+ 'Armbian_23.8.1_Orangepipc_jammy_current_6.1.47.img.xz'),
+ 'b386dff6552513b5f164ea00f94814a6b0f1da9fb90b83725e949cf797e11afb')
+
+ ASSET_UBOOT = Asset(
+ ('http://snapshot.debian.org/archive/debian/20200108T145233Z/pool/'
+ 'main/u/u-boot/u-boot-sunxi_2020.01%2Bdfsg-1_armhf.deb'),
+ '9223d94dc283ab54df41ce9d6f69025a5b47fece29fb67a714e23aa0cdf3bdfa')
+
+ ASSET_NETBSD = Asset(
+ ('https://archive.netbsd.org/pub/NetBSD-archive/NetBSD-9.0/'
+ 'evbarm-earmv7hf/binary/gzimg/armv7.img.gz'),
+ '20d3e07dc057e15c12452620e90ecab2047f0f7940d9cba8182ebc795927177f')
+
+ def test_arm_orangepi(self):
+ """
+ :avocado: tags=arch:arm
+ :avocado: tags=machine:orangepi-pc
+ :avocado: tags=accel:tcg
+ """
+ self.set_machine('orangepi-pc')
+ deb_path = self.ASSET_DEB.fetch()
+ kernel_path = self.extract_from_deb(deb_path,
+ '/boot/vmlinuz-6.6.16-current-sunxi')
+ dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
+ dtb_path = self.extract_from_deb(deb_path, dtb_path)
+
+ self.vm.set_console()
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'console=ttyS0,115200n8 '
+ 'earlycon=uart,mmio32,0x1c28000')
+ self.vm.add_args('-kernel', kernel_path,
+ '-dtb', dtb_path,
+ '-append', kernel_command_line)
+ self.vm.launch()
+ console_pattern = 'Kernel command line: %s' % kernel_command_line
+ self.wait_for_console_pattern(console_pattern)
+ os.remove(kernel_path)
+ os.remove(dtb_path)
+
+ def test_arm_orangepi_initrd(self):
+ """
+ :avocado: tags=arch:arm
+ :avocado: tags=accel:tcg
+ :avocado: tags=machine:orangepi-pc
+ """
+ self.set_machine('orangepi-pc')
+ deb_path = self.ASSET_DEB.fetch()
+ kernel_path = self.extract_from_deb(deb_path,
+ '/boot/vmlinuz-6.6.16-current-sunxi')
+ dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
+ dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ initrd_path_gz = self.ASSET_INITRD.fetch()
+ initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
+ gzip_uncompress(initrd_path_gz, initrd_path)
+
+ self.vm.set_console()
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'console=ttyS0,115200 '
+ 'panic=-1 noreboot')
+ self.vm.add_args('-kernel', kernel_path,
+ '-dtb', dtb_path,
+ '-initrd', initrd_path,
+ '-append', kernel_command_line,
+ '-no-reboot')
+ self.vm.launch()
+ self.wait_for_console_pattern('Boot successful.')
+
+ exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
+ 'Allwinner sun8i Family')
+ exec_command_and_wait_for_pattern(self, 'cat /proc/iomem',
+ 'system-control@1c00000')
+ exec_command_and_wait_for_pattern(self, 'reboot',
+ 'reboot: Restarting system')
+ # Wait for VM to shut down gracefully
+ self.vm.wait()
+ os.remove(kernel_path)
+ os.remove(dtb_path)
+ os.remove(initrd_path)
+
+ def test_arm_orangepi_sd(self):
+ """
+ :avocado: tags=arch:arm
+ :avocado: tags=accel:tcg
+ :avocado: tags=machine:orangepi-pc
+ :avocado: tags=device:sd
+ """
+ self.set_machine('orangepi-pc')
+ self.require_netdev('user')
+ deb_path = self.ASSET_DEB.fetch()
+ kernel_path = self.extract_from_deb(deb_path,
+ '/boot/vmlinuz-6.6.16-current-sunxi')
+ dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb'
+ dtb_path = self.extract_from_deb(deb_path, dtb_path)
+ rootfs_path_xz = self.ASSET_ROOTFS.fetch()
+ rootfs_path = os.path.join(self.workdir, 'rootfs.cpio')
+ lzma_uncompress(rootfs_path_xz, rootfs_path)
+ image_pow2ceil_expand(rootfs_path)
+
+ self.vm.set_console()
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'console=ttyS0,115200 '
+ 'root=/dev/mmcblk0 rootwait rw '
+ 'panic=-1 noreboot')
+ self.vm.add_args('-kernel', kernel_path,
+ '-dtb', dtb_path,
+ '-drive', 'file=' + rootfs_path + ',if=sd,format=raw',
+ '-append', kernel_command_line,
+ '-no-reboot')
+ self.vm.launch()
+ shell_ready = "/bin/sh: can't access tty; job control turned off"
+ self.wait_for_console_pattern(shell_ready)
+
+ exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo',
+ 'Allwinner sun8i Family')
+ exec_command_and_wait_for_pattern(self, 'cat /proc/partitions',
+ 'mmcblk0')
+ exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up',
+ 'eth0: Link is Up')
+ exec_command_and_wait_for_pattern(self, 'udhcpc eth0',
+ 'udhcpc: lease of 10.0.2.15 obtained')
+ exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2',
+ '3 packets transmitted, 3 packets received, 0% packet loss')
+ exec_command_and_wait_for_pattern(self, 'reboot',
+ 'reboot: Restarting system')
+ # Wait for VM to shut down gracefully
+ self.vm.wait()
+ os.remove(kernel_path)
+ os.remove(dtb_path)
+ os.remove(rootfs_path)
+
+ @skipUnless(os.getenv('QEMU_TEST_ALLOW_LARGE_STORAGE'), 'storage limited')
+ def test_arm_orangepi_armbian(self):
+ """
+ :avocado: tags=arch:arm
+ :avocado: tags=machine:orangepi-pc
+ :avocado: tags=device:sd
+ """
+ self.set_machine('orangepi-pc')
+ # This test download a 275 MiB compressed image and expand it
+ # to 1036 MiB, but the underlying filesystem is 1552 MiB...
+ # As we expand it to 2 GiB we are safe.
+ image_path_xz = self.ASSET_ARMBIAN.fetch()
+ image_path = os.path.join(self.workdir, 'armbian.img')
+ lzma_uncompress(image_path_xz, image_path)
+ image_pow2ceil_expand(image_path)
+
+ self.vm.set_console()
+ self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw',
+ '-nic', 'user',
+ '-no-reboot')
+ self.vm.launch()
+
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'console=ttyS0,115200 '
+ 'loglevel=7 '
+ 'nosmp '
+ 'systemd.default_timeout_start_sec=9000 '
+ 'systemd.mask=armbian-zram-config.service '
+ 'systemd.mask=armbian-ramlog.service')
+
+ self.wait_for_console_pattern('U-Boot SPL')
+ self.wait_for_console_pattern('Autoboot in ')
+ exec_command_and_wait_for_pattern(self, ' ', '=>')
+ exec_command_and_wait_for_pattern(self, "setenv extraargs '" +
+ kernel_command_line + "'", '=>')
+ exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...');
+
+ self.wait_for_console_pattern('systemd[1]: Hostname set ' +
+ 'to <orangepipc>')
+ self.wait_for_console_pattern('Starting Load Kernel Modules...')
+
+ @skipUnless(os.getenv('QEMU_TEST_ALLOW_LARGE_STORAGE'), 'storage limited')
+ def test_arm_orangepi_uboot_netbsd9(self):
+ """
+ :avocado: tags=arch:arm
+ :avocado: tags=machine:orangepi-pc
+ :avocado: tags=device:sd
+ :avocado: tags=os:netbsd
+ """
+ self.set_machine('orangepi-pc')
+ # This test download a 304MB compressed image and expand it to 2GB
+ deb_path = self.ASSET_UBOOT.fetch()
+ # We use the common OrangePi PC 'plus' build of U-Boot for our secondary
+ # program loader (SPL). We will then set the path to the more specific
+ # OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt,
+ # before to boot NetBSD.
+ uboot_path = '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin'
+ uboot_path = self.extract_from_deb(deb_path, uboot_path)
+ image_path_gz = self.ASSET_NETBSD.fetch()
+ image_path = os.path.join(self.workdir, 'armv7.img')
+ gzip_uncompress(image_path_gz, image_path)
+ image_pow2ceil_expand(image_path)
+ image_drive_args = 'if=sd,format=raw,snapshot=on,file=' + image_path
+
+ # dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc
+ with open(uboot_path, 'rb') as f_in:
+ with open(image_path, 'r+b') as f_out:
+ f_out.seek(8 * 1024)
+ shutil.copyfileobj(f_in, f_out)
+
+ self.vm.set_console()
+ self.vm.add_args('-nic', 'user',
+ '-drive', image_drive_args,
+ '-global', 'allwinner-rtc.base-year=2000',
+ '-no-reboot')
+ self.vm.launch()
+ wait_for_console_pattern(self, 'U-Boot 2020.01+dfsg-1')
+ interrupt_interactive_console_until_pattern(self,
+ 'Hit any key to stop autoboot:',
+ 'switch to partitions #0, OK')
+
+ exec_command_and_wait_for_pattern(self, '', '=>')
+ cmd = 'setenv bootargs root=ld0a'
+ exec_command_and_wait_for_pattern(self, cmd, '=>')
+ cmd = 'setenv kernel netbsd-GENERIC.ub'
+ exec_command_and_wait_for_pattern(self, cmd, '=>')
+ cmd = 'setenv fdtfile dtb/sun8i-h3-orangepi-pc.dtb'
+ exec_command_and_wait_for_pattern(self, cmd, '=>')
+ cmd = ("setenv bootcmd 'fatload mmc 0:1 ${kernel_addr_r} ${kernel}; "
+ "fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}; "
+ "fdt addr ${fdt_addr_r}; "
+ "bootm ${kernel_addr_r} - ${fdt_addr_r}'")
+ exec_command_and_wait_for_pattern(self, cmd, '=>')
+
+ exec_command_and_wait_for_pattern(self, 'boot',
+ 'Booting kernel from Legacy Image')
+ wait_for_console_pattern(self, 'Starting kernel ...')
+ wait_for_console_pattern(self, 'NetBSD 9.0 (GENERIC)')
+ # Wait for user-space
+ wait_for_console_pattern(self, 'Starting root file system check')
+
+if __name__ == '__main__':
+ LinuxKernelTest.main()
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PULL 14/14] tests/functional: Convert the riscv_opensbi avocado test into a standalone test
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (12 preceding siblings ...)
2024-10-31 17:48 ` [PULL 13/14] tests/functional: Convert the OrangePi " Thomas Huth
@ 2024-10-31 17:48 ` Thomas Huth
2024-11-04 12:31 ` [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Peter Maydell
14 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-10-31 17:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Alistair Francis, Philippe Mathieu-Daudé
The avocado test defined test functions for both, riscv32 and riscv64.
Since we can run the whole file with multiple targets in the new
framework, we can now consolidate the functions so we have to only
define one function per machine now.
Message-ID: <20240821082748.65853-23-thuth@redhat.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
MAINTAINERS | 1 +
tests/avocado/riscv_opensbi.py | 63 --------------------------
tests/functional/meson.build | 12 ++++-
tests/functional/test_riscv_opensbi.py | 36 +++++++++++++++
4 files changed, 47 insertions(+), 65 deletions(-)
delete mode 100644 tests/avocado/riscv_opensbi.py
create mode 100755 tests/functional/test_riscv_opensbi.py
diff --git a/MAINTAINERS b/MAINTAINERS
index 5837e4bf74..00810d2434 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -328,6 +328,7 @@ F: hw/intc/riscv*
F: include/hw/riscv/
F: linux-user/host/riscv32/
F: linux-user/host/riscv64/
+F: tests/functional/test_riscv*
F: tests/tcg/riscv64/
RISC-V XThead* extensions
diff --git a/tests/avocado/riscv_opensbi.py b/tests/avocado/riscv_opensbi.py
deleted file mode 100644
index bfff9cc3c3..0000000000
--- a/tests/avocado/riscv_opensbi.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# OpenSBI boot test for RISC-V machines
-#
-# Copyright (c) 2022, Ventana Micro
-#
-# This work is licensed under the terms of the GNU GPL, version 2 or
-# later. See the COPYING file in the top-level directory.
-
-from avocado_qemu import QemuSystemTest
-from avocado_qemu import wait_for_console_pattern
-
-class RiscvOpenSBI(QemuSystemTest):
- """
- :avocado: tags=accel:tcg
- """
- timeout = 5
-
- def boot_opensbi(self):
- self.vm.set_console()
- self.vm.launch()
- wait_for_console_pattern(self, 'Platform Name')
- wait_for_console_pattern(self, 'Boot HART MEDELEG')
-
- def test_riscv32_spike(self):
- """
- :avocado: tags=arch:riscv32
- :avocado: tags=machine:spike
- """
- self.boot_opensbi()
-
- def test_riscv64_spike(self):
- """
- :avocado: tags=arch:riscv64
- :avocado: tags=machine:spike
- """
- self.boot_opensbi()
-
- def test_riscv32_sifive_u(self):
- """
- :avocado: tags=arch:riscv32
- :avocado: tags=machine:sifive_u
- """
- self.boot_opensbi()
-
- def test_riscv64_sifive_u(self):
- """
- :avocado: tags=arch:riscv64
- :avocado: tags=machine:sifive_u
- """
- self.boot_opensbi()
-
- def test_riscv32_virt(self):
- """
- :avocado: tags=arch:riscv32
- :avocado: tags=machine:virt
- """
- self.boot_opensbi()
-
- def test_riscv64_virt(self):
- """
- :avocado: tags=arch:riscv64
- :avocado: tags=machine:virt
- """
- self.boot_opensbi()
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index 1336d941ea..8663d65c7a 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -143,18 +143,26 @@ tests_ppc64_system_thorough = [
'ppc64_tuxrun',
]
-tests_rx_system_thorough = [
- 'rx_gdbsim',
+tests_riscv32_system_quick = [
+ 'riscv_opensbi',
]
tests_riscv32_system_thorough = [
'riscv32_tuxrun',
]
+tests_riscv64_system_quick = [
+ 'riscv_opensbi',
+]
+
tests_riscv64_system_thorough = [
'riscv64_tuxrun',
]
+tests_rx_system_thorough = [
+ 'rx_gdbsim',
+]
+
tests_s390x_system_thorough = [
's390x_ccw_virtio',
's390x_topology',
diff --git a/tests/functional/test_riscv_opensbi.py b/tests/functional/test_riscv_opensbi.py
new file mode 100755
index 0000000000..d077e40f42
--- /dev/null
+++ b/tests/functional/test_riscv_opensbi.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python3
+#
+# OpenSBI boot test for RISC-V machines
+#
+# Copyright (c) 2022, Ventana Micro
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or
+# later. See the COPYING file in the top-level directory.
+
+from qemu_test import QemuSystemTest
+from qemu_test import wait_for_console_pattern
+
+class RiscvOpenSBI(QemuSystemTest):
+
+ timeout = 5
+
+ def boot_opensbi(self):
+ self.vm.set_console()
+ self.vm.launch()
+ wait_for_console_pattern(self, 'Platform Name')
+ wait_for_console_pattern(self, 'Boot HART MEDELEG')
+
+ def test_riscv_spike(self):
+ self.set_machine('spike')
+ self.boot_opensbi()
+
+ def test_riscv_sifive_u(self):
+ self.set_machine('sifive_u')
+ self.boot_opensbi()
+
+ def test_riscv_virt(self):
+ self.set_machine('virt')
+ self.boot_opensbi()
+
+if __name__ == '__main__':
+ QemuSystemTest.main()
--
2.47.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PULL 12/14] tests/functional: Convert BananaPi tests to the functional framework
2024-10-31 17:48 ` [PULL 12/14] tests/functional: Convert BananaPi tests to the functional framework Thomas Huth
@ 2024-11-01 19:07 ` Peter Maydell
2024-11-04 8:11 ` Thomas Huth
0 siblings, 1 reply; 19+ messages in thread
From: Peter Maydell @ 2024-11-01 19:07 UTC (permalink / raw)
To: Thomas Huth; +Cc: qemu-devel
On Thu, 31 Oct 2024 at 17:49, Thomas Huth <thuth@redhat.com> wrote:
>
> Move the BananaPi tests from tests/avocado/boot_linux_console.py into
> a new file dedicated for Banana Pi tests in the functional framework.
> Update the hash sums of the assets to sha256 along the way and fix the
> broken link for the buildroot image from storage.kernelci.org.
>
> (Note: The test_arm_bpim2u_openwrt_22_03_3 test is currently broken
> due to a regression in commit 4c2c047469 ("target/arm: Fix usage of MMU
> indexes when EL3 is AArch32") - it works if that commit gets reverted)
I think that the patchset
https://patchew.org/QEMU/20241101142845.1712482-1-peter.maydell@linaro.org/
should fix that regression.
thanks
-- PMM
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PULL 12/14] tests/functional: Convert BananaPi tests to the functional framework
2024-11-01 19:07 ` Peter Maydell
@ 2024-11-04 8:11 ` Thomas Huth
0 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-11-04 8:11 UTC (permalink / raw)
To: Peter Maydell; +Cc: qemu-devel
On 01/11/2024 20.07, Peter Maydell wrote:
> On Thu, 31 Oct 2024 at 17:49, Thomas Huth <thuth@redhat.com> wrote:
>>
>> Move the BananaPi tests from tests/avocado/boot_linux_console.py into
>> a new file dedicated for Banana Pi tests in the functional framework.
>> Update the hash sums of the assets to sha256 along the way and fix the
>> broken link for the buildroot image from storage.kernelci.org.
>>
>> (Note: The test_arm_bpim2u_openwrt_22_03_3 test is currently broken
>> due to a regression in commit 4c2c047469 ("target/arm: Fix usage of MMU
>> indexes when EL3 is AArch32") - it works if that commit gets reverted)
>
> I think that the patchset
> https://patchew.org/QEMU/20241101142845.1712482-1-peter.maydell@linaro.org/
> should fix that regression.
Yes, that fixes the problem, thanks!
Thomas
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PULL 00/14] Misc patches (functional tests, next-cube machine, ...)
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
` (13 preceding siblings ...)
2024-10-31 17:48 ` [PULL 14/14] tests/functional: Convert the riscv_opensbi avocado test into a standalone test Thomas Huth
@ 2024-11-04 12:31 ` Peter Maydell
2024-11-04 13:14 ` Thomas Huth
14 siblings, 1 reply; 19+ messages in thread
From: Peter Maydell @ 2024-11-04 12:31 UTC (permalink / raw)
To: Thomas Huth; +Cc: qemu-devel
On Thu, 31 Oct 2024 at 17:48, Thomas Huth <thuth@redhat.com> wrote:
>
> The following changes since commit 58d49b5895f2e0b5cfe4b2901bf24f3320b74f29:
>
> Merge tag 'net-pull-request' of https://github.com/jasowang/qemu into staging (2024-10-29 14:00:43 +0000)
>
> are available in the Git repository at:
>
> https://gitlab.com/thuth/qemu.git tags/pull-request-2024-10-31
>
> for you to fetch changes up to d73ad1b1c0e62976d4790606ee29725a0d8a8906:
>
> tests/functional: Convert the riscv_opensbi avocado test into a standalone test (2024-10-31 07:57:47 +0100)
>
> ----------------------------------------------------------------
> * Remove the redundant macOS-15 CI job
> * Various fixes, improvements and additions for the functional test suite
> * Restore the sh4eb target
> * Fix the OpenBSD VM test
> * Re-enable the pci-bridge device on s390x
> * Minor clean-ups / fixes for the next-cube machine
>
> ----------------------------------------------------------------
> Daniel P. Berrangé (2):
> tests/functional: make tuxrun disk images writable
> tests/functional: make cached asset files read-only
>
> Mark Cave-Ayland (2):
> next-cube: fix up compilation when DEBUG_NEXT is enabled
> next-cube: remove cpu parameter from next_scsi_init()
>
> Thomas Huth (10):
> .gitlab-ci.d/cirrus: Remove the macos-15 job
> Revert "Remove the unused sh4eb target"
> tests/functional: Add a test for sh4eb
> tests/vm/openbsd: Remove the "Time appears wrong" workaround
> tests/functional: Fix the s390x and ppc64 tuxrun tests
> hw/s390x: Re-enable the pci-bridge device on s390x
> tests/functional: Convert the tcg_plugins test
> tests/functional: Convert BananaPi tests to the functional framework
> tests/functional: Convert the OrangePi tests to the functional framework
> tests/functional: Convert the riscv_opensbi avocado test into a standalone test
Hi; the opensbi test seems to consistently time out on the s390 CI job:
https://gitlab.com/qemu-project/qemu/-/jobs/8260596592
https://gitlab.com/qemu-project/qemu/-/jobs/8260043983
789/972 qemu:func-quick+func-riscv32 / func-riscv32-riscv_opensbi
TIMEOUT 60.04s killed by signal 15 SIGTERM
791/972 qemu:func-quick+func-riscv64 / func-riscv64-riscv_opensbi
TIMEOUT 60.04s killed by signal 15 SIGTERM
thanks
-- PMM
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PULL 00/14] Misc patches (functional tests, next-cube machine, ...)
2024-11-04 12:31 ` [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Peter Maydell
@ 2024-11-04 13:14 ` Thomas Huth
0 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-11-04 13:14 UTC (permalink / raw)
To: Peter Maydell; +Cc: qemu-devel, QEMU RISC-V
On 04/11/2024 13.31, Peter Maydell wrote:
> On Thu, 31 Oct 2024 at 17:48, Thomas Huth <thuth@redhat.com> wrote:
>>
>> The following changes since commit 58d49b5895f2e0b5cfe4b2901bf24f3320b74f29:
>>
>> Merge tag 'net-pull-request' of https://github.com/jasowang/qemu into staging (2024-10-29 14:00:43 +0000)
>>
>> are available in the Git repository at:
>>
>> https://gitlab.com/thuth/qemu.git tags/pull-request-2024-10-31
>>
>> for you to fetch changes up to d73ad1b1c0e62976d4790606ee29725a0d8a8906:
>>
>> tests/functional: Convert the riscv_opensbi avocado test into a standalone test (2024-10-31 07:57:47 +0100)
>>
>> ----------------------------------------------------------------
>> * Remove the redundant macOS-15 CI job
>> * Various fixes, improvements and additions for the functional test suite
>> * Restore the sh4eb target
>> * Fix the OpenBSD VM test
>> * Re-enable the pci-bridge device on s390x
>> * Minor clean-ups / fixes for the next-cube machine
>>
>> ----------------------------------------------------------------
>> Daniel P. Berrangé (2):
>> tests/functional: make tuxrun disk images writable
>> tests/functional: make cached asset files read-only
>>
>> Mark Cave-Ayland (2):
>> next-cube: fix up compilation when DEBUG_NEXT is enabled
>> next-cube: remove cpu parameter from next_scsi_init()
>>
>> Thomas Huth (10):
>> .gitlab-ci.d/cirrus: Remove the macos-15 job
>> Revert "Remove the unused sh4eb target"
>> tests/functional: Add a test for sh4eb
>> tests/vm/openbsd: Remove the "Time appears wrong" workaround
>> tests/functional: Fix the s390x and ppc64 tuxrun tests
>> hw/s390x: Re-enable the pci-bridge device on s390x
>> tests/functional: Convert the tcg_plugins test
>> tests/functional: Convert BananaPi tests to the functional framework
>> tests/functional: Convert the OrangePi tests to the functional framework
>> tests/functional: Convert the riscv_opensbi avocado test into a standalone test
>
> Hi; the opensbi test seems to consistently time out on the s390 CI job:
>
> https://gitlab.com/qemu-project/qemu/-/jobs/8260596592
> https://gitlab.com/qemu-project/qemu/-/jobs/8260043983
>
> 789/972 qemu:func-quick+func-riscv32 / func-riscv32-riscv_opensbi
> TIMEOUT 60.04s killed by signal 15 SIGTERM
> 791/972 qemu:func-quick+func-riscv64 / func-riscv64-riscv_opensbi
> TIMEOUT 60.04s killed by signal 15 SIGTERM
Oh, interesting, that looks like a recent regression - running riscv on
s390x hosts used to work last week, but with the current master it seems to
be broken.
I'll respin the pull request without this patch (so that the other fixes are
not blocked by this), while trying to find out where riscv breaks on big
endian hosts...
Thomas
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2024-11-04 13:16 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-31 17:48 [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Thomas Huth
2024-10-31 17:48 ` [PULL 01/14] .gitlab-ci.d/cirrus: Remove the macos-15 job Thomas Huth
2024-10-31 17:48 ` [PULL 02/14] tests/functional: make tuxrun disk images writable Thomas Huth
2024-10-31 17:48 ` [PULL 03/14] tests/functional: make cached asset files read-only Thomas Huth
2024-10-31 17:48 ` [PULL 04/14] Revert "Remove the unused sh4eb target" Thomas Huth
2024-10-31 17:48 ` [PULL 05/14] tests/functional: Add a test for sh4eb Thomas Huth
2024-10-31 17:48 ` [PULL 06/14] tests/vm/openbsd: Remove the "Time appears wrong" workaround Thomas Huth
2024-10-31 17:48 ` [PULL 07/14] tests/functional: Fix the s390x and ppc64 tuxrun tests Thomas Huth
2024-10-31 17:48 ` [PULL 08/14] hw/s390x: Re-enable the pci-bridge device on s390x Thomas Huth
2024-10-31 17:48 ` [PULL 09/14] next-cube: fix up compilation when DEBUG_NEXT is enabled Thomas Huth
2024-10-31 17:48 ` [PULL 10/14] next-cube: remove cpu parameter from next_scsi_init() Thomas Huth
2024-10-31 17:48 ` [PULL 11/14] tests/functional: Convert the tcg_plugins test Thomas Huth
2024-10-31 17:48 ` [PULL 12/14] tests/functional: Convert BananaPi tests to the functional framework Thomas Huth
2024-11-01 19:07 ` Peter Maydell
2024-11-04 8:11 ` Thomas Huth
2024-10-31 17:48 ` [PULL 13/14] tests/functional: Convert the OrangePi " Thomas Huth
2024-10-31 17:48 ` [PULL 14/14] tests/functional: Convert the riscv_opensbi avocado test into a standalone test Thomas Huth
2024-11-04 12:31 ` [PULL 00/14] Misc patches (functional tests, next-cube machine, ...) Peter Maydell
2024-11-04 13:14 ` Thomas Huth
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).