* Various fixes and improvements for the functional tests
* Refresh CI container files with the latest changes from libvirt-ci * Clean up keyboard code of the next-cube machine to get rid of a legacy API -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmct48QRHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbUAzw//fOgAe+rNX10KIEWaHzTlw6EPRUHbKEo+ yvy9mZ4CYiK3PfojuW6u9Mt32RIGFjLRUPC+ljZggjbxY2DUjzAUGx/kSwf0bzwE 8eRKRvd+l3ZFKklwDd7YQh+/O38P/uAq+T0AZQv/9h7rr0wPD6O+sVpKjVN4akuh 66Ekz974bDFaVJi8iIix0WCPCUFMZwWQqxaQrnoBH3wN8Ibc6Ermchs7aa1e6KNh DoX519JVNofXbugONNnqEjp43tbx/hzPZFyWf9tyX8ehp6+8po0zcZZwqdRkWhuv BkESKPz8rHuQOGMjm8rAnjmDEsbpJ+vOfn/ShdyAERv78mTNWwSvYVwq5zfpcTCt 9gpCNhhFzFLKlbDeIfgy9ky4R8Gzrww3icLzCsLlat6YCK547YkSr57BsYXJzLX4 /NUYsaJ1RPdutwgNnmSzhBhObtUik3rFYH5aD0ETWZBdVY8ig5OqGpJ29P5zo860 ROVFn4RX/XpmODOpYez4dwKVetR5SLHNG1aqduWKOwhAxPzLxK5OghjYkGf0bsel gA9t7A1TafgneYxJARKi7esD39xeUzhfzdzCOIOLXJga5kD2/bvZnQ4tkoLPl8QR iQEp1z758XmSFTYfzGUDA7SgIOzi9JG5dqtzcqJklr9wYurxwMYmqicJqA4ImoQt fZV/axe8Em0= =YRCB -----END PGP SIGNATURE----- Merge tag 'pull-request-2024-11-08' of https://gitlab.com/thuth/qemu into staging * Various fixes and improvements for the functional tests * Refresh CI container files with the latest changes from libvirt-ci * Clean up keyboard code of the next-cube machine to get rid of a legacy API # -----BEGIN PGP SIGNATURE----- # # iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmct48QRHHRodXRoQHJl # ZGhhdC5jb20ACgkQLtnXdP5wLbUAzw//fOgAe+rNX10KIEWaHzTlw6EPRUHbKEo+ # yvy9mZ4CYiK3PfojuW6u9Mt32RIGFjLRUPC+ljZggjbxY2DUjzAUGx/kSwf0bzwE # 8eRKRvd+l3ZFKklwDd7YQh+/O38P/uAq+T0AZQv/9h7rr0wPD6O+sVpKjVN4akuh # 66Ekz974bDFaVJi8iIix0WCPCUFMZwWQqxaQrnoBH3wN8Ibc6Ermchs7aa1e6KNh # DoX519JVNofXbugONNnqEjp43tbx/hzPZFyWf9tyX8ehp6+8po0zcZZwqdRkWhuv # BkESKPz8rHuQOGMjm8rAnjmDEsbpJ+vOfn/ShdyAERv78mTNWwSvYVwq5zfpcTCt # 9gpCNhhFzFLKlbDeIfgy9ky4R8Gzrww3icLzCsLlat6YCK547YkSr57BsYXJzLX4 # /NUYsaJ1RPdutwgNnmSzhBhObtUik3rFYH5aD0ETWZBdVY8ig5OqGpJ29P5zo860 # ROVFn4RX/XpmODOpYez4dwKVetR5SLHNG1aqduWKOwhAxPzLxK5OghjYkGf0bsel # gA9t7A1TafgneYxJARKi7esD39xeUzhfzdzCOIOLXJga5kD2/bvZnQ4tkoLPl8QR # iQEp1z758XmSFTYfzGUDA7SgIOzi9JG5dqtzcqJklr9wYurxwMYmqicJqA4ImoQt # fZV/axe8Em0= # =YRCB # -----END PGP SIGNATURE----- # gpg: Signature made Fri 08 Nov 2024 10:11:16 GMT # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * tag 'pull-request-2024-11-08' of https://gitlab.com/thuth/qemu: ui/input-legacy.c: remove unused legacy qemu_add_kbd_event_handler() function next-kbd: convert to use qemu_input_handler_register() tests: refresh package lists with latest libvirt-ci tests/functional: Split the test_aarch64_sbsaref test tests/functional: Bump timeouts of functional tests tests/functional: Provide the user with hints where to find more log files tests/functional: Fix the ppc64_hv and the ppc_40p test for read-only assets test/functional: Fix Aspeed buildroot tests tests/functional: Convert the riscv_opensbi avocado test into a standalone test scripts/checkpatch.pl: Ignore ObjC #import lines for operator spacing Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
134b443512
@ -10,7 +10,7 @@ CROSS_PKGS=''
|
||||
MAKE='/usr/local/bin/gmake'
|
||||
NINJA='/usr/local/bin/ninja'
|
||||
PACKAGING_COMMAND='pkg'
|
||||
PIP3='/usr/local/bin/pip-3.8'
|
||||
PIP3='/usr/local/bin/pip'
|
||||
PKGS='alsa-lib bash bison bzip2 ca_root_nss capstone4 ccache cmocka ctags curl cyrus-sasl dbus diffutils dtc flex fusefs-libs3 gettext git glib gmake gnutls gsed gtk-vnc gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libslirp libspice-server libssh libtasn1 llvm lzo2 meson mtools ncurses nettle ninja opencv pixman pkgconf png py311-numpy py311-pillow py311-pip py311-pyyaml py311-sphinx py311-sphinx_rtd_theme py311-tomli python3 rpm2cpio rust rust-bindgen-cli sdl2 sdl2_image snappy sndio socat spice-protocol tesseract usbredir virglrenderer vte3 xorriso zstd'
|
||||
PYPI_PKGS=''
|
||||
PYTHON='/usr/local/bin/python3'
|
||||
|
@ -329,6 +329,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
|
||||
@ -923,7 +924,7 @@ F: hw/misc/sbsa_ec.c
|
||||
F: hw/watchdog/sbsa_gwdt.c
|
||||
F: include/hw/watchdog/sbsa_gwdt.h
|
||||
F: docs/system/arm/sbsa.rst
|
||||
F: tests/functional/test_aarch64_sbsaref.py
|
||||
F: tests/functional/test_aarch64_sbsaref*.py
|
||||
|
||||
Sharp SL-5500 (Collie) PDA
|
||||
M: Peter Maydell <peter.maydell@linaro.org>
|
||||
|
@ -68,7 +68,6 @@ struct NextKBDState {
|
||||
uint16_t shift;
|
||||
};
|
||||
|
||||
static void queue_code(void *opaque, int code);
|
||||
|
||||
/* lots of magic numbers here */
|
||||
static uint32_t kbd_read_byte(void *opaque, hwaddr addr)
|
||||
@ -166,68 +165,70 @@ static const MemoryRegionOps kbd_ops = {
|
||||
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||
};
|
||||
|
||||
static void nextkbd_event(void *opaque, int ch)
|
||||
{
|
||||
/*
|
||||
* Will want to set vars for caps/num lock
|
||||
* if (ch & 0x80) -> key release
|
||||
* there's also e0 escaped scancodes that might need to be handled
|
||||
*/
|
||||
queue_code(opaque, ch);
|
||||
}
|
||||
static const int qcode_to_nextkbd_keycode[] = {
|
||||
[Q_KEY_CODE_ESC] = 0x49,
|
||||
[Q_KEY_CODE_1] = 0x4a,
|
||||
[Q_KEY_CODE_2] = 0x4b,
|
||||
[Q_KEY_CODE_3] = 0x4c,
|
||||
[Q_KEY_CODE_4] = 0x4d,
|
||||
[Q_KEY_CODE_5] = 0x50,
|
||||
[Q_KEY_CODE_6] = 0x4f,
|
||||
[Q_KEY_CODE_7] = 0x4e,
|
||||
[Q_KEY_CODE_8] = 0x1e,
|
||||
[Q_KEY_CODE_9] = 0x1f,
|
||||
[Q_KEY_CODE_0] = 0x20,
|
||||
[Q_KEY_CODE_MINUS] = 0x1d,
|
||||
[Q_KEY_CODE_EQUAL] = 0x1c,
|
||||
[Q_KEY_CODE_BACKSPACE] = 0x1b,
|
||||
|
||||
static const unsigned char next_keycodes[128] = {
|
||||
0x00, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x50, 0x4F,
|
||||
0x4E, 0x1E, 0x1F, 0x20, 0x1D, 0x1C, 0x1B, 0x00,
|
||||
0x42, 0x43, 0x44, 0x45, 0x48, 0x47, 0x46, 0x06,
|
||||
0x07, 0x08, 0x00, 0x00, 0x2A, 0x00, 0x39, 0x3A,
|
||||
0x3B, 0x3C, 0x3D, 0x40, 0x3F, 0x3E, 0x2D, 0x2C,
|
||||
0x2B, 0x26, 0x00, 0x00, 0x31, 0x32, 0x33, 0x34,
|
||||
0x35, 0x37, 0x36, 0x2e, 0x2f, 0x30, 0x00, 0x00,
|
||||
0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
[Q_KEY_CODE_Q] = 0x42,
|
||||
[Q_KEY_CODE_W] = 0x43,
|
||||
[Q_KEY_CODE_E] = 0x44,
|
||||
[Q_KEY_CODE_R] = 0x45,
|
||||
[Q_KEY_CODE_T] = 0x48,
|
||||
[Q_KEY_CODE_Y] = 0x47,
|
||||
[Q_KEY_CODE_U] = 0x46,
|
||||
[Q_KEY_CODE_I] = 0x06,
|
||||
[Q_KEY_CODE_O] = 0x07,
|
||||
[Q_KEY_CODE_P] = 0x08,
|
||||
[Q_KEY_CODE_RET] = 0x2a,
|
||||
[Q_KEY_CODE_A] = 0x39,
|
||||
[Q_KEY_CODE_S] = 0x3a,
|
||||
|
||||
[Q_KEY_CODE_D] = 0x3b,
|
||||
[Q_KEY_CODE_F] = 0x3c,
|
||||
[Q_KEY_CODE_G] = 0x3d,
|
||||
[Q_KEY_CODE_H] = 0x40,
|
||||
[Q_KEY_CODE_J] = 0x3f,
|
||||
[Q_KEY_CODE_K] = 0x3e,
|
||||
[Q_KEY_CODE_L] = 0x2d,
|
||||
[Q_KEY_CODE_SEMICOLON] = 0x2c,
|
||||
[Q_KEY_CODE_APOSTROPHE] = 0x2b,
|
||||
[Q_KEY_CODE_GRAVE_ACCENT] = 0x26,
|
||||
[Q_KEY_CODE_Z] = 0x31,
|
||||
[Q_KEY_CODE_X] = 0x32,
|
||||
[Q_KEY_CODE_C] = 0x33,
|
||||
[Q_KEY_CODE_V] = 0x34,
|
||||
|
||||
[Q_KEY_CODE_B] = 0x35,
|
||||
[Q_KEY_CODE_N] = 0x37,
|
||||
[Q_KEY_CODE_M] = 0x36,
|
||||
[Q_KEY_CODE_COMMA] = 0x2e,
|
||||
[Q_KEY_CODE_DOT] = 0x2f,
|
||||
[Q_KEY_CODE_SLASH] = 0x30,
|
||||
|
||||
[Q_KEY_CODE_SPC] = 0x38,
|
||||
};
|
||||
|
||||
static void queue_code(void *opaque, int code)
|
||||
static void nextkbd_put_keycode(NextKBDState *s, int keycode)
|
||||
{
|
||||
NextKBDState *s = NEXTKBD(opaque);
|
||||
KBDQueue *q = &s->queue;
|
||||
int key = code & KD_KEYMASK;
|
||||
int release = code & 0x80;
|
||||
static int ext;
|
||||
|
||||
if (code == 0xE0) {
|
||||
ext = 1;
|
||||
}
|
||||
|
||||
if (code == 0x2A || code == 0x1D || code == 0x36) {
|
||||
if (code == 0x2A) {
|
||||
s->shift = KD_LSHIFT;
|
||||
} else if (code == 0x36) {
|
||||
s->shift = KD_RSHIFT;
|
||||
ext = 0;
|
||||
} else if (code == 0x1D && !ext) {
|
||||
s->shift = KD_LCOMM;
|
||||
} else if (code == 0x1D && ext) {
|
||||
ext = 0;
|
||||
s->shift = KD_RCOMM;
|
||||
}
|
||||
return;
|
||||
} else if (code == (0x2A | 0x80) || code == (0x1D | 0x80) ||
|
||||
code == (0x36 | 0x80)) {
|
||||
s->shift = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (q->count >= KBD_QUEUE_SIZE) {
|
||||
return;
|
||||
}
|
||||
|
||||
q->data[q->wptr] = next_keycodes[key] | release;
|
||||
|
||||
q->data[q->wptr] = keycode;
|
||||
if (++q->wptr == KBD_QUEUE_SIZE) {
|
||||
q->wptr = 0;
|
||||
}
|
||||
@ -241,6 +242,53 @@ static void queue_code(void *opaque, int code)
|
||||
/* s->update_irq(s->update_arg, 1); */
|
||||
}
|
||||
|
||||
static void nextkbd_event(DeviceState *dev, QemuConsole *src, InputEvent *evt)
|
||||
{
|
||||
NextKBDState *s = NEXTKBD(dev);
|
||||
int qcode, keycode;
|
||||
bool key_down = evt->u.key.data->down;
|
||||
|
||||
qcode = qemu_input_key_value_to_qcode(evt->u.key.data->key);
|
||||
if (qcode >= ARRAY_SIZE(qcode_to_nextkbd_keycode)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Shift key currently has no keycode, so handle separately */
|
||||
if (qcode == Q_KEY_CODE_SHIFT) {
|
||||
if (key_down) {
|
||||
s->shift |= KD_LSHIFT;
|
||||
} else {
|
||||
s->shift &= ~KD_LSHIFT;
|
||||
}
|
||||
}
|
||||
|
||||
if (qcode == Q_KEY_CODE_SHIFT_R) {
|
||||
if (key_down) {
|
||||
s->shift |= KD_RSHIFT;
|
||||
} else {
|
||||
s->shift &= ~KD_RSHIFT;
|
||||
}
|
||||
}
|
||||
|
||||
keycode = qcode_to_nextkbd_keycode[qcode];
|
||||
if (!keycode) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* If key release event, create keyboard break code */
|
||||
if (!key_down) {
|
||||
keycode |= 0x80;
|
||||
}
|
||||
|
||||
nextkbd_put_keycode(s, keycode);
|
||||
}
|
||||
|
||||
static const QemuInputHandler nextkbd_handler = {
|
||||
.name = "QEMU NeXT Keyboard",
|
||||
.mask = INPUT_EVENT_MASK_KEY,
|
||||
.event = nextkbd_event,
|
||||
};
|
||||
|
||||
static void nextkbd_reset(DeviceState *dev)
|
||||
{
|
||||
NextKBDState *nks = NEXTKBD(dev);
|
||||
@ -256,7 +304,7 @@ static void nextkbd_realize(DeviceState *dev, Error **errp)
|
||||
memory_region_init_io(&s->mr, OBJECT(dev), &kbd_ops, s, "next.kbd", 0x1000);
|
||||
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->mr);
|
||||
|
||||
qemu_add_kbd_event_handler(nextkbd_event, s);
|
||||
qemu_input_handler_register(dev, &nextkbd_handler);
|
||||
}
|
||||
|
||||
static const VMStateDescription nextkbd_vmstate = {
|
||||
|
@ -70,8 +70,6 @@ typedef struct QEMUPutMouseEntry QEMUPutMouseEntry;
|
||||
typedef struct QEMUPutKbdEntry QEMUPutKbdEntry;
|
||||
typedef struct QEMUPutLEDEntry QEMUPutLEDEntry;
|
||||
|
||||
QEMUPutKbdEntry *qemu_add_kbd_event_handler(QEMUPutKBDEvent *func,
|
||||
void *opaque);
|
||||
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
|
||||
void *opaque, int absolute,
|
||||
const char *name);
|
||||
|
@ -2246,7 +2246,7 @@ sub process {
|
||||
}
|
||||
}
|
||||
# Check operator spacing.
|
||||
if (!($line=~/\#\s*include/)) {
|
||||
if (!($line=~/\#\s*(include|import)/)) {
|
||||
my $ops = qr{
|
||||
<<=|>>=|<=|>=|==|!=|
|
||||
\+=|-=|\*=|\/=|%=|\^=|\|=|&=|
|
||||
|
@ -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()
|
@ -31,10 +31,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
git \
|
||||
hostname \
|
||||
libglib2.0-dev \
|
||||
libgtk-vnc-2.0-dev \
|
||||
libpcre2-dev \
|
||||
libsndio-dev \
|
||||
libspice-protocol-dev \
|
||||
llvm \
|
||||
locales \
|
||||
make \
|
||||
@ -109,6 +105,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libglusterfs-dev:amd64 \
|
||||
libgnutls28-dev:amd64 \
|
||||
libgtk-3-dev:amd64 \
|
||||
libgtk-vnc-2.0-dev:amd64 \
|
||||
libibverbs-dev:amd64 \
|
||||
libiscsi-dev:amd64 \
|
||||
libjemalloc-dev:amd64 \
|
||||
@ -120,6 +117,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libnfs-dev:amd64 \
|
||||
libnuma-dev:amd64 \
|
||||
libpam0g-dev:amd64 \
|
||||
libpcre2-dev:amd64 \
|
||||
libpipewire-0.3-dev:amd64 \
|
||||
libpixman-1-dev:amd64 \
|
||||
libpmem-dev:amd64 \
|
||||
@ -134,6 +132,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libselinux1-dev:amd64 \
|
||||
libslirp-dev:amd64 \
|
||||
libsnappy-dev:amd64 \
|
||||
libsndio-dev:amd64 \
|
||||
libspice-protocol-dev:amd64 \
|
||||
libspice-server-dev:amd64 \
|
||||
libssh-gcrypt-dev:amd64 \
|
||||
libsystemd-dev:amd64 \
|
||||
|
@ -31,10 +31,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
git \
|
||||
hostname \
|
||||
libglib2.0-dev \
|
||||
libgtk-vnc-2.0-dev \
|
||||
libpcre2-dev \
|
||||
libsndio-dev \
|
||||
libspice-protocol-dev \
|
||||
llvm \
|
||||
locales \
|
||||
make \
|
||||
@ -109,6 +105,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libglusterfs-dev:arm64 \
|
||||
libgnutls28-dev:arm64 \
|
||||
libgtk-3-dev:arm64 \
|
||||
libgtk-vnc-2.0-dev:arm64 \
|
||||
libibverbs-dev:arm64 \
|
||||
libiscsi-dev:arm64 \
|
||||
libjemalloc-dev:arm64 \
|
||||
@ -120,6 +117,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libnfs-dev:arm64 \
|
||||
libnuma-dev:arm64 \
|
||||
libpam0g-dev:arm64 \
|
||||
libpcre2-dev:arm64 \
|
||||
libpipewire-0.3-dev:arm64 \
|
||||
libpixman-1-dev:arm64 \
|
||||
libpng-dev:arm64 \
|
||||
@ -133,6 +131,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libselinux1-dev:arm64 \
|
||||
libslirp-dev:arm64 \
|
||||
libsnappy-dev:arm64 \
|
||||
libsndio-dev:arm64 \
|
||||
libspice-protocol-dev:arm64 \
|
||||
libspice-server-dev:arm64 \
|
||||
libssh-gcrypt-dev:arm64 \
|
||||
libsystemd-dev:arm64 \
|
||||
|
@ -31,10 +31,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
git \
|
||||
hostname \
|
||||
libglib2.0-dev \
|
||||
libgtk-vnc-2.0-dev \
|
||||
libpcre2-dev \
|
||||
libsndio-dev \
|
||||
libspice-protocol-dev \
|
||||
llvm \
|
||||
locales \
|
||||
make \
|
||||
@ -109,6 +105,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libglusterfs-dev:armhf \
|
||||
libgnutls28-dev:armhf \
|
||||
libgtk-3-dev:armhf \
|
||||
libgtk-vnc-2.0-dev:armhf \
|
||||
libibverbs-dev:armhf \
|
||||
libiscsi-dev:armhf \
|
||||
libjemalloc-dev:armhf \
|
||||
@ -120,6 +117,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libnfs-dev:armhf \
|
||||
libnuma-dev:armhf \
|
||||
libpam0g-dev:armhf \
|
||||
libpcre2-dev:armhf \
|
||||
libpipewire-0.3-dev:armhf \
|
||||
libpixman-1-dev:armhf \
|
||||
libpng-dev:armhf \
|
||||
@ -133,6 +131,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libselinux1-dev:armhf \
|
||||
libslirp-dev:armhf \
|
||||
libsnappy-dev:armhf \
|
||||
libsndio-dev:armhf \
|
||||
libspice-protocol-dev:armhf \
|
||||
libspice-server-dev:armhf \
|
||||
libssh-gcrypt-dev:armhf \
|
||||
libsystemd-dev:armhf \
|
||||
|
@ -31,10 +31,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
git \
|
||||
hostname \
|
||||
libglib2.0-dev \
|
||||
libgtk-vnc-2.0-dev \
|
||||
libpcre2-dev \
|
||||
libsndio-dev \
|
||||
libspice-protocol-dev \
|
||||
llvm \
|
||||
locales \
|
||||
make \
|
||||
@ -109,6 +105,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libglusterfs-dev:i386 \
|
||||
libgnutls28-dev:i386 \
|
||||
libgtk-3-dev:i386 \
|
||||
libgtk-vnc-2.0-dev:i386 \
|
||||
libibverbs-dev:i386 \
|
||||
libiscsi-dev:i386 \
|
||||
libjemalloc-dev:i386 \
|
||||
@ -120,6 +117,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libnfs-dev:i386 \
|
||||
libnuma-dev:i386 \
|
||||
libpam0g-dev:i386 \
|
||||
libpcre2-dev:i386 \
|
||||
libpipewire-0.3-dev:i386 \
|
||||
libpixman-1-dev:i386 \
|
||||
libpng-dev:i386 \
|
||||
@ -133,6 +131,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libselinux1-dev:i386 \
|
||||
libslirp-dev:i386 \
|
||||
libsnappy-dev:i386 \
|
||||
libsndio-dev:i386 \
|
||||
libspice-protocol-dev:i386 \
|
||||
libspice-server-dev:i386 \
|
||||
libssh-gcrypt-dev:i386 \
|
||||
libsystemd-dev:i386 \
|
||||
|
@ -31,10 +31,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
git \
|
||||
hostname \
|
||||
libglib2.0-dev \
|
||||
libgtk-vnc-2.0-dev \
|
||||
libpcre2-dev \
|
||||
libsndio-dev \
|
||||
libspice-protocol-dev \
|
||||
llvm \
|
||||
locales \
|
||||
make \
|
||||
@ -115,6 +111,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libnfs-dev:mips64el \
|
||||
libnuma-dev:mips64el \
|
||||
libpam0g-dev:mips64el \
|
||||
libpcre2-dev:mips64el \
|
||||
libpipewire-0.3-dev:mips64el \
|
||||
libpixman-1-dev:mips64el \
|
||||
libpng-dev:mips64el \
|
||||
@ -126,6 +123,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libselinux1-dev:mips64el \
|
||||
libslirp-dev:mips64el \
|
||||
libsnappy-dev:mips64el \
|
||||
libsndio-dev:mips64el \
|
||||
libspice-protocol-dev:mips64el \
|
||||
libspice-server-dev:mips64el \
|
||||
libssh-gcrypt-dev:mips64el \
|
||||
libsystemd-dev:mips64el \
|
||||
|
@ -31,10 +31,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
git \
|
||||
hostname \
|
||||
libglib2.0-dev \
|
||||
libgtk-vnc-2.0-dev \
|
||||
libpcre2-dev \
|
||||
libsndio-dev \
|
||||
libspice-protocol-dev \
|
||||
llvm \
|
||||
locales \
|
||||
make \
|
||||
@ -108,6 +104,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libglusterfs-dev:mipsel \
|
||||
libgnutls28-dev:mipsel \
|
||||
libgtk-3-dev:mipsel \
|
||||
libgtk-vnc-2.0-dev:mipsel \
|
||||
libibverbs-dev:mipsel \
|
||||
libiscsi-dev:mipsel \
|
||||
libjemalloc-dev:mipsel \
|
||||
@ -119,6 +116,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libnfs-dev:mipsel \
|
||||
libnuma-dev:mipsel \
|
||||
libpam0g-dev:mipsel \
|
||||
libpcre2-dev:mipsel \
|
||||
libpipewire-0.3-dev:mipsel \
|
||||
libpixman-1-dev:mipsel \
|
||||
libpng-dev:mipsel \
|
||||
@ -132,6 +130,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libselinux1-dev:mipsel \
|
||||
libslirp-dev:mipsel \
|
||||
libsnappy-dev:mipsel \
|
||||
libsndio-dev:mipsel \
|
||||
libspice-protocol-dev:mipsel \
|
||||
libspice-server-dev:mipsel \
|
||||
libssh-gcrypt-dev:mipsel \
|
||||
libsystemd-dev:mipsel \
|
||||
|
@ -31,10 +31,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
git \
|
||||
hostname \
|
||||
libglib2.0-dev \
|
||||
libgtk-vnc-2.0-dev \
|
||||
libpcre2-dev \
|
||||
libsndio-dev \
|
||||
libspice-protocol-dev \
|
||||
llvm \
|
||||
locales \
|
||||
make \
|
||||
@ -109,6 +105,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libglusterfs-dev:ppc64el \
|
||||
libgnutls28-dev:ppc64el \
|
||||
libgtk-3-dev:ppc64el \
|
||||
libgtk-vnc-2.0-dev:ppc64el \
|
||||
libibverbs-dev:ppc64el \
|
||||
libiscsi-dev:ppc64el \
|
||||
libjemalloc-dev:ppc64el \
|
||||
@ -120,6 +117,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libnfs-dev:ppc64el \
|
||||
libnuma-dev:ppc64el \
|
||||
libpam0g-dev:ppc64el \
|
||||
libpcre2-dev:ppc64el \
|
||||
libpipewire-0.3-dev:ppc64el \
|
||||
libpixman-1-dev:ppc64el \
|
||||
libpng-dev:ppc64el \
|
||||
@ -133,6 +131,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libselinux1-dev:ppc64el \
|
||||
libslirp-dev:ppc64el \
|
||||
libsnappy-dev:ppc64el \
|
||||
libsndio-dev:ppc64el \
|
||||
libspice-protocol-dev:ppc64el \
|
||||
libspice-server-dev:ppc64el \
|
||||
libssh-gcrypt-dev:ppc64el \
|
||||
libsystemd-dev:ppc64el \
|
||||
|
@ -31,10 +31,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
git \
|
||||
hostname \
|
||||
libglib2.0-dev \
|
||||
libgtk-vnc-2.0-dev \
|
||||
libpcre2-dev \
|
||||
libsndio-dev \
|
||||
libspice-protocol-dev \
|
||||
llvm \
|
||||
locales \
|
||||
make \
|
||||
@ -109,6 +105,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libglusterfs-dev:s390x \
|
||||
libgnutls28-dev:s390x \
|
||||
libgtk-3-dev:s390x \
|
||||
libgtk-vnc-2.0-dev:s390x \
|
||||
libibverbs-dev:s390x \
|
||||
libiscsi-dev:s390x \
|
||||
libjemalloc-dev:s390x \
|
||||
@ -120,6 +117,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libnfs-dev:s390x \
|
||||
libnuma-dev:s390x \
|
||||
libpam0g-dev:s390x \
|
||||
libpcre2-dev:s390x \
|
||||
libpipewire-0.3-dev:s390x \
|
||||
libpixman-1-dev:s390x \
|
||||
libpng-dev:s390x \
|
||||
@ -133,6 +131,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
libselinux1-dev:s390x \
|
||||
libslirp-dev:s390x \
|
||||
libsnappy-dev:s390x \
|
||||
libsndio-dev:s390x \
|
||||
libspice-protocol-dev:s390x \
|
||||
libssh-gcrypt-dev:s390x \
|
||||
libsystemd-dev:s390x \
|
||||
libtasn1-6-dev:s390x \
|
||||
|
@ -35,7 +35,6 @@ exec "$@"\n' > /usr/bin/nosync && \
|
||||
git \
|
||||
glib2-devel \
|
||||
glibc-langpack-en \
|
||||
gtk-vnc2-devel \
|
||||
hostname \
|
||||
llvm \
|
||||
make \
|
||||
@ -44,7 +43,6 @@ exec "$@"\n' > /usr/bin/nosync && \
|
||||
ninja-build \
|
||||
nmap-ncat \
|
||||
openssh-clients \
|
||||
pcre-static \
|
||||
python3 \
|
||||
python3-PyYAML \
|
||||
python3-numpy \
|
||||
@ -58,7 +56,6 @@ exec "$@"\n' > /usr/bin/nosync && \
|
||||
sed \
|
||||
socat \
|
||||
sparse \
|
||||
spice-protocol \
|
||||
swtpm \
|
||||
tar \
|
||||
tesseract \
|
||||
@ -89,6 +86,7 @@ RUN nosync dnf install -y \
|
||||
mingw64-gettext \
|
||||
mingw64-glib2 \
|
||||
mingw64-gnutls \
|
||||
mingw64-gtk-vnc2 \
|
||||
mingw64-gtk3 \
|
||||
mingw64-libepoxy \
|
||||
mingw64-libgcrypt \
|
||||
|
@ -11,24 +11,27 @@ endif
|
||||
|
||||
# Timeouts for individual tests that can be slow e.g. with debugging enabled
|
||||
test_timeouts = {
|
||||
'aarch64_raspi4' : 120,
|
||||
'aarch64_sbsaref' : 600,
|
||||
'aarch64_virt' : 360,
|
||||
'acpi_bits' : 240,
|
||||
'aarch64_raspi4' : 480,
|
||||
'aarch64_sbsaref_alpine' : 720,
|
||||
'aarch64_sbsaref_freebsd' : 720,
|
||||
'aarch64_virt' : 720,
|
||||
'acpi_bits' : 420,
|
||||
'arm_aspeed' : 600,
|
||||
'arm_bpim2u' : 360,
|
||||
'arm_bpim2u' : 500,
|
||||
'arm_collie' : 180,
|
||||
'arm_orangepi' : 540,
|
||||
'arm_raspi2' : 120,
|
||||
'arm_tuxrun' : 120,
|
||||
'arm_tuxrun' : 240,
|
||||
'arm_sx1' : 360,
|
||||
'mips_malta' : 120,
|
||||
'netdev_ethtool' : 180,
|
||||
'ppc_40p' : 240,
|
||||
'ppc64_hv' : 1000,
|
||||
'ppc64_powernv' : 240,
|
||||
'ppc64_pseries' : 240,
|
||||
'ppc64_tuxrun' : 240,
|
||||
's390x_ccw_virtio' : 240,
|
||||
'ppc64_powernv' : 480,
|
||||
'ppc64_pseries' : 480,
|
||||
'ppc64_tuxrun' : 420,
|
||||
'riscv64_tuxrun' : 120,
|
||||
's390x_ccw_virtio' : 420,
|
||||
}
|
||||
|
||||
tests_generic_system = [
|
||||
@ -47,6 +50,8 @@ tests_aarch64_system_thorough = [
|
||||
'aarch64_raspi3',
|
||||
'aarch64_raspi4',
|
||||
'aarch64_sbsaref',
|
||||
'aarch64_sbsaref_alpine',
|
||||
'aarch64_sbsaref_freebsd',
|
||||
'aarch64_virt',
|
||||
'multiprocess',
|
||||
]
|
||||
@ -146,18 +151,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',
|
||||
@ -273,8 +286,8 @@ foreach speed : ['quick', 'thorough']
|
||||
env: test_env,
|
||||
args: [testpath],
|
||||
protocol: 'tap',
|
||||
timeout: test_timeouts.get(test, 60),
|
||||
priority: test_timeouts.get(test, 60),
|
||||
timeout: test_timeouts.get(test, 90),
|
||||
priority: test_timeouts.get(test, 90),
|
||||
suite: suites)
|
||||
endforeach
|
||||
endforeach
|
||||
|
@ -45,10 +45,10 @@ class QemuBaseTest(unittest.TestCase):
|
||||
os.makedirs(self.workdir, exist_ok=True)
|
||||
|
||||
self.logdir = self.workdir
|
||||
self.log_filename = os.path.join(self.logdir, 'base.log')
|
||||
self.log = logging.getLogger('qemu-test')
|
||||
self.log.setLevel(logging.DEBUG)
|
||||
self._log_fh = logging.FileHandler(os.path.join(self.logdir,
|
||||
'base.log'), mode='w')
|
||||
self._log_fh = logging.FileHandler(self.log_filename, mode='w')
|
||||
self._log_fh.setLevel(logging.DEBUG)
|
||||
fileFormatter = logging.Formatter(
|
||||
'%(asctime)s - %(levelname)s: %(message)s')
|
||||
@ -68,7 +68,14 @@ class QemuBaseTest(unittest.TestCase):
|
||||
|
||||
tr = pycotap.TAPTestRunner(message_log = pycotap.LogMode.LogToError,
|
||||
test_output_log = pycotap.LogMode.LogToError)
|
||||
unittest.main(module = None, testRunner = tr, argv=["__dummy__", path])
|
||||
res = unittest.main(module = None, testRunner = tr, exit = False,
|
||||
argv=["__dummy__", path])
|
||||
for (test, message) in res.result.errors + res.result.failures:
|
||||
print('More information on ' + test.id() + ' could be found here:'
|
||||
'\n %s' % test.log_filename, file=sys.stderr)
|
||||
if hasattr(test, 'console_log_name'):
|
||||
print(' %s' % test.console_log_name, file=sys.stderr)
|
||||
sys.exit(not res.result.wasSuccessful())
|
||||
|
||||
|
||||
class QemuUserTest(QemuBaseTest):
|
||||
@ -101,8 +108,9 @@ class QemuSystemTest(QemuBaseTest):
|
||||
|
||||
console_log = logging.getLogger('console')
|
||||
console_log.setLevel(logging.DEBUG)
|
||||
self._console_log_fh = logging.FileHandler(os.path.join(self.workdir,
|
||||
'console.log'), mode='w')
|
||||
self.console_log_name = os.path.join(self.workdir, 'console.log')
|
||||
self._console_log_fh = logging.FileHandler(self.console_log_name,
|
||||
mode='w')
|
||||
self._console_log_fh.setLevel(logging.DEBUG)
|
||||
fileFormatter = logging.Formatter('%(asctime)s: %(message)s')
|
||||
self._console_log_fh.setFormatter(fileFormatter)
|
||||
|
@ -16,6 +16,42 @@ from qemu_test import interrupt_interactive_console_until_pattern
|
||||
from qemu_test.utils import lzma_uncompress
|
||||
from unittest import skipUnless
|
||||
|
||||
def fetch_firmware(test):
|
||||
"""
|
||||
Flash volumes generated using:
|
||||
|
||||
Toolchain from Debian:
|
||||
aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0
|
||||
|
||||
Used components:
|
||||
|
||||
- Trusted Firmware v2.11.0
|
||||
- Tianocore EDK2 4d4f569924
|
||||
- Tianocore EDK2-platforms 3f08401
|
||||
|
||||
"""
|
||||
|
||||
# Secure BootRom (TF-A code)
|
||||
fs0_xz_path = Aarch64SbsarefMachine.ASSET_FLASH0.fetch()
|
||||
fs0_path = os.path.join(test.workdir, "SBSA_FLASH0.fd")
|
||||
lzma_uncompress(fs0_xz_path, fs0_path)
|
||||
|
||||
# Non-secure rom (UEFI and EFI variables)
|
||||
fs1_xz_path = Aarch64SbsarefMachine.ASSET_FLASH1.fetch()
|
||||
fs1_path = os.path.join(test.workdir, "SBSA_FLASH1.fd")
|
||||
lzma_uncompress(fs1_xz_path, fs1_path)
|
||||
|
||||
for path in [fs0_path, fs1_path]:
|
||||
with open(path, "ab+") as fd:
|
||||
fd.truncate(256 << 20) # Expand volumes to 256MiB
|
||||
|
||||
test.set_machine('sbsa-ref')
|
||||
test.vm.set_console()
|
||||
test.vm.add_args(
|
||||
"-drive", f"if=pflash,file={fs0_path},format=raw",
|
||||
"-drive", f"if=pflash,file={fs1_path},format=raw",
|
||||
)
|
||||
|
||||
|
||||
class Aarch64SbsarefMachine(QemuSystemTest):
|
||||
"""
|
||||
@ -35,45 +71,9 @@ class Aarch64SbsarefMachine(QemuSystemTest):
|
||||
'20240619-148232/edk2/SBSA_FLASH1.fd.xz'),
|
||||
'c6ec39374c4d79bb9e9cdeeb6db44732d90bb4a334cec92002b3f4b9cac4b5ee')
|
||||
|
||||
def fetch_firmware(self):
|
||||
"""
|
||||
Flash volumes generated using:
|
||||
|
||||
Toolchain from Debian:
|
||||
aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0
|
||||
|
||||
Used components:
|
||||
|
||||
- Trusted Firmware v2.11.0
|
||||
- Tianocore EDK2 4d4f569924
|
||||
- Tianocore EDK2-platforms 3f08401
|
||||
|
||||
"""
|
||||
|
||||
# Secure BootRom (TF-A code)
|
||||
fs0_xz_path = self.ASSET_FLASH0.fetch()
|
||||
fs0_path = os.path.join(self.workdir, "SBSA_FLASH0.fd")
|
||||
lzma_uncompress(fs0_xz_path, fs0_path)
|
||||
|
||||
# Non-secure rom (UEFI and EFI variables)
|
||||
fs1_xz_path = self.ASSET_FLASH1.fetch()
|
||||
fs1_path = os.path.join(self.workdir, "SBSA_FLASH1.fd")
|
||||
lzma_uncompress(fs1_xz_path, fs1_path)
|
||||
|
||||
for path in [fs0_path, fs1_path]:
|
||||
with open(path, "ab+") as fd:
|
||||
fd.truncate(256 << 20) # Expand volumes to 256MiB
|
||||
|
||||
self.set_machine('sbsa-ref')
|
||||
self.vm.set_console()
|
||||
self.vm.add_args(
|
||||
"-drive", f"if=pflash,file={fs0_path},format=raw",
|
||||
"-drive", f"if=pflash,file={fs1_path},format=raw",
|
||||
)
|
||||
|
||||
def test_sbsaref_edk2_firmware(self):
|
||||
|
||||
self.fetch_firmware()
|
||||
fetch_firmware(self)
|
||||
|
||||
self.vm.add_args('-cpu', 'cortex-a57')
|
||||
self.vm.launch()
|
||||
@ -101,90 +101,5 @@ class Aarch64SbsarefMachine(QemuSystemTest):
|
||||
wait_for_console_pattern(self, "UEFI firmware (version 1.0")
|
||||
interrupt_interactive_console_until_pattern(self, "QEMU SBSA-REF Machine")
|
||||
|
||||
|
||||
ASSET_ALPINE_ISO = Asset(
|
||||
('https://dl-cdn.alpinelinux.org/'
|
||||
'alpine/v3.17/releases/aarch64/alpine-standard-3.17.2-aarch64.iso'),
|
||||
'5a36304ecf039292082d92b48152a9ec21009d3a62f459de623e19c4bd9dc027')
|
||||
|
||||
# This tests the whole boot chain from EFI to Userspace
|
||||
# We only boot a whole OS for the current top level CPU and GIC
|
||||
# Other test profiles should use more minimal boots
|
||||
def boot_alpine_linux(self, cpu=None):
|
||||
self.fetch_firmware()
|
||||
|
||||
iso_path = self.ASSET_ALPINE_ISO.fetch()
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args(
|
||||
"-drive", f"file={iso_path},media=cdrom,format=raw",
|
||||
)
|
||||
if cpu:
|
||||
self.vm.add_args("-cpu", cpu)
|
||||
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, "Welcome to Alpine Linux 3.17")
|
||||
|
||||
def test_sbsaref_alpine_linux_cortex_a57(self):
|
||||
self.boot_alpine_linux("cortex-a57")
|
||||
|
||||
def test_sbsaref_alpine_linux_default_cpu(self):
|
||||
self.boot_alpine_linux()
|
||||
|
||||
def test_sbsaref_alpine_linux_max_pauth_off(self):
|
||||
self.boot_alpine_linux("max,pauth=off")
|
||||
|
||||
def test_sbsaref_alpine_linux_max_pauth_impdef(self):
|
||||
self.boot_alpine_linux("max,pauth-impdef=on")
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_TIMEOUT_EXPECTED'),
|
||||
'Test might timeout due to PAuth emulation')
|
||||
def test_sbsaref_alpine_linux_max(self):
|
||||
self.boot_alpine_linux("max")
|
||||
|
||||
|
||||
ASSET_FREEBSD_ISO = Asset(
|
||||
('https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/'
|
||||
'14.1/FreeBSD-14.1-RELEASE-arm64-aarch64-bootonly.iso'),
|
||||
'44cdbae275ef1bb6dab1d5fbb59473d4f741e1c8ea8a80fd9e906b531d6ad461')
|
||||
|
||||
# This tests the whole boot chain from EFI to Userspace
|
||||
# We only boot a whole OS for the current top level CPU and GIC
|
||||
# Other test profiles should use more minimal boots
|
||||
def boot_freebsd14(self, cpu=None):
|
||||
self.fetch_firmware()
|
||||
|
||||
img_path = self.ASSET_FREEBSD_ISO.fetch()
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args(
|
||||
"-drive", f"file={img_path},format=raw,snapshot=on",
|
||||
)
|
||||
if cpu:
|
||||
self.vm.add_args("-cpu", cpu)
|
||||
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, 'Welcome to FreeBSD!')
|
||||
|
||||
def test_sbsaref_freebsd14_cortex_a57(self):
|
||||
self.boot_freebsd14("cortex-a57")
|
||||
|
||||
def test_sbsaref_freebsd14_default_cpu(self):
|
||||
self.boot_freebsd14()
|
||||
|
||||
def test_sbsaref_freebsd14_max_pauth_off(self):
|
||||
self.boot_freebsd14("max,pauth=off")
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_TIMEOUT_EXPECTED'),
|
||||
'Test might timeout due to PAuth emulation')
|
||||
def test_sbsaref_freebsd14_max_pauth_impdef(self):
|
||||
self.boot_freebsd14("max,pauth-impdef=on")
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_TIMEOUT_EXPECTED'),
|
||||
'Test might timeout due to PAuth emulation')
|
||||
def test_sbsaref_freebsd14_max(self):
|
||||
self.boot_freebsd14("max")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
||||
|
64
tests/functional/test_aarch64_sbsaref_alpine.py
Executable file
64
tests/functional/test_aarch64_sbsaref_alpine.py
Executable file
@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a kernel and checks the console
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023-2024 Linaro Ltd.
|
||||
# SPDX-FileContributor: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
# SPDX-FileContributor: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from qemu_test import QemuSystemTest, Asset
|
||||
from qemu_test import wait_for_console_pattern
|
||||
from qemu_test import interrupt_interactive_console_until_pattern
|
||||
from unittest import skipUnless
|
||||
from test_aarch64_sbsaref import fetch_firmware
|
||||
|
||||
|
||||
class Aarch64SbsarefAlpine(QemuSystemTest):
|
||||
|
||||
ASSET_ALPINE_ISO = Asset(
|
||||
('https://dl-cdn.alpinelinux.org/'
|
||||
'alpine/v3.17/releases/aarch64/alpine-standard-3.17.2-aarch64.iso'),
|
||||
'5a36304ecf039292082d92b48152a9ec21009d3a62f459de623e19c4bd9dc027')
|
||||
|
||||
# This tests the whole boot chain from EFI to Userspace
|
||||
# We only boot a whole OS for the current top level CPU and GIC
|
||||
# Other test profiles should use more minimal boots
|
||||
def boot_alpine_linux(self, cpu=None):
|
||||
fetch_firmware(self)
|
||||
|
||||
iso_path = self.ASSET_ALPINE_ISO.fetch()
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args(
|
||||
"-drive", f"file={iso_path},media=cdrom,format=raw",
|
||||
)
|
||||
if cpu:
|
||||
self.vm.add_args("-cpu", cpu)
|
||||
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, "Welcome to Alpine Linux 3.17")
|
||||
|
||||
def test_sbsaref_alpine_linux_cortex_a57(self):
|
||||
self.boot_alpine_linux("cortex-a57")
|
||||
|
||||
def test_sbsaref_alpine_linux_default_cpu(self):
|
||||
self.boot_alpine_linux()
|
||||
|
||||
def test_sbsaref_alpine_linux_max_pauth_off(self):
|
||||
self.boot_alpine_linux("max,pauth=off")
|
||||
|
||||
def test_sbsaref_alpine_linux_max_pauth_impdef(self):
|
||||
self.boot_alpine_linux("max,pauth-impdef=on")
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_TIMEOUT_EXPECTED'),
|
||||
'Test might timeout due to PAuth emulation')
|
||||
def test_sbsaref_alpine_linux_max(self):
|
||||
self.boot_alpine_linux("max")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
66
tests/functional/test_aarch64_sbsaref_freebsd.py
Executable file
66
tests/functional/test_aarch64_sbsaref_freebsd.py
Executable file
@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a kernel and checks the console
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023-2024 Linaro Ltd.
|
||||
# SPDX-FileContributor: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
# SPDX-FileContributor: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from qemu_test import QemuSystemTest, Asset
|
||||
from qemu_test import wait_for_console_pattern
|
||||
from qemu_test import interrupt_interactive_console_until_pattern
|
||||
from unittest import skipUnless
|
||||
from test_aarch64_sbsaref import fetch_firmware
|
||||
|
||||
|
||||
class Aarch64SbsarefFreeBSD(QemuSystemTest):
|
||||
|
||||
ASSET_FREEBSD_ISO = Asset(
|
||||
('https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/'
|
||||
'14.1/FreeBSD-14.1-RELEASE-arm64-aarch64-bootonly.iso'),
|
||||
'44cdbae275ef1bb6dab1d5fbb59473d4f741e1c8ea8a80fd9e906b531d6ad461')
|
||||
|
||||
# This tests the whole boot chain from EFI to Userspace
|
||||
# We only boot a whole OS for the current top level CPU and GIC
|
||||
# Other test profiles should use more minimal boots
|
||||
def boot_freebsd14(self, cpu=None):
|
||||
fetch_firmware(self)
|
||||
|
||||
img_path = self.ASSET_FREEBSD_ISO.fetch()
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args(
|
||||
"-drive", f"file={img_path},format=raw,snapshot=on",
|
||||
)
|
||||
if cpu:
|
||||
self.vm.add_args("-cpu", cpu)
|
||||
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, 'Welcome to FreeBSD!')
|
||||
|
||||
def test_sbsaref_freebsd14_cortex_a57(self):
|
||||
self.boot_freebsd14("cortex-a57")
|
||||
|
||||
def test_sbsaref_freebsd14_default_cpu(self):
|
||||
self.boot_freebsd14()
|
||||
|
||||
def test_sbsaref_freebsd14_max_pauth_off(self):
|
||||
self.boot_freebsd14("max,pauth=off")
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_TIMEOUT_EXPECTED'),
|
||||
'Test might timeout due to PAuth emulation')
|
||||
def test_sbsaref_freebsd14_max_pauth_impdef(self):
|
||||
self.boot_freebsd14("max,pauth-impdef=on")
|
||||
|
||||
@skipUnless(os.getenv('QEMU_TEST_TIMEOUT_EXPECTED'),
|
||||
'Test might timeout due to PAuth emulation')
|
||||
def test_sbsaref_freebsd14_max(self):
|
||||
self.boot_freebsd14("max")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
2
tests/functional/test_arm_aspeed.py
Normal file → Executable file
2
tests/functional/test_arm_aspeed.py
Normal file → Executable file
@ -125,7 +125,7 @@ class AST2x00Machine(LinuxKernelTest):
|
||||
def do_test_arm_aspeed_buildroot_start(self, image, cpu_id, pattern='Aspeed EVB'):
|
||||
self.require_netdev('user')
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-drive', 'file=' + image + ',if=mtd,format=raw',
|
||||
self.vm.add_args('-drive', 'file=' + image + ',if=mtd,format=raw,read-only=true',
|
||||
'-net', 'nic', '-net', 'user')
|
||||
self.vm.launch()
|
||||
|
||||
|
@ -99,7 +99,8 @@ class HypervisorTest(QemuSystemTest):
|
||||
self.vm.add_args("-kernel", self.vmlinuz)
|
||||
self.vm.add_args("-initrd", self.initramfs)
|
||||
self.vm.add_args("-smp", "4", "-m", "2g")
|
||||
self.vm.add_args("-drive", f"file={self.iso_path},format=raw,if=none,id=drive0")
|
||||
self.vm.add_args("-drive", f"file={self.iso_path},format=raw,if=none,"
|
||||
"id=drive0,read-only=true")
|
||||
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, 'Welcome to Alpine Linux 3.18')
|
||||
|
@ -46,7 +46,8 @@ class IbmPrep40pMachine(QemuSystemTest):
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-bios', bios_path,
|
||||
'-fda', drive_path)
|
||||
'-drive',
|
||||
f"file={drive_path},format=raw,if=floppy,read-only=true")
|
||||
self.vm.launch()
|
||||
os_banner = 'NetBSD 4.0 (GENERIC) #0: Sun Dec 16 00:49:40 PST 2007'
|
||||
wait_for_console_pattern(self, os_banner)
|
||||
|
36
tests/functional/test_riscv_opensbi.py
Executable file
36
tests/functional/test_riscv_opensbi.py
Executable file
@ -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()
|
@ -1 +1 @@
|
||||
Subproject commit 6b19006b2cbe01adea6a857c71860a8e7ba7ddd7
|
||||
Subproject commit 9ad3f70bde9865d5ad18f36d256d472e72b5cbf3
|
@ -17,6 +17,9 @@ mappings:
|
||||
libepoxy:
|
||||
mips64el-deb:
|
||||
|
||||
gtk-vnc:
|
||||
mips64el-deb:
|
||||
|
||||
mesa-libgbm:
|
||||
mips64el-deb:
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
"make": "/usr/local/bin/gmake",
|
||||
"ninja": "/usr/local/bin/ninja",
|
||||
"packaging_command": "pkg",
|
||||
"pip3": "/usr/local/bin/pip-3.8",
|
||||
"pip3": "/usr/local/bin/pip",
|
||||
"pkgs": [
|
||||
"alsa-lib",
|
||||
"bash",
|
||||
|
@ -109,43 +109,6 @@ void qmp_send_key(KeyValueList *keys, bool has_hold_time, int64_t hold_time,
|
||||
g_free(up);
|
||||
}
|
||||
|
||||
static void legacy_kbd_event(DeviceState *dev, QemuConsole *src,
|
||||
InputEvent *evt)
|
||||
{
|
||||
QEMUPutKbdEntry *entry = (QEMUPutKbdEntry *)dev;
|
||||
int scancodes[3], i, count;
|
||||
InputKeyEvent *key = evt->u.key.data;
|
||||
|
||||
if (!entry || !entry->put_kbd) {
|
||||
return;
|
||||
}
|
||||
count = qemu_input_key_value_to_scancode(key->key,
|
||||
key->down,
|
||||
scancodes);
|
||||
for (i = 0; i < count; i++) {
|
||||
entry->put_kbd(entry->opaque, scancodes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static const QemuInputHandler legacy_kbd_handler = {
|
||||
.name = "legacy-kbd",
|
||||
.mask = INPUT_EVENT_MASK_KEY,
|
||||
.event = legacy_kbd_event,
|
||||
};
|
||||
|
||||
QEMUPutKbdEntry *qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
|
||||
{
|
||||
QEMUPutKbdEntry *entry;
|
||||
|
||||
entry = g_new0(QEMUPutKbdEntry, 1);
|
||||
entry->put_kbd = func;
|
||||
entry->opaque = opaque;
|
||||
entry->s = qemu_input_handler_register((DeviceState *)entry,
|
||||
&legacy_kbd_handler);
|
||||
qemu_input_handler_activate(entry->s);
|
||||
return entry;
|
||||
}
|
||||
|
||||
static void legacy_mouse_event(DeviceState *dev, QemuConsole *src,
|
||||
InputEvent *evt)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user