All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
Cc: "Radoslaw Biernacki" <rad@semihalf.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Leif Lindholm" <quic_llindhol@quicinc.com>,
	qemu-arm@nongnu.org, qemu-devel@nongnu.org,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: Re: [PATCH 2/3] tests/avocado: Add set of boot tests on SBSA-ref
Date: Fri, 03 Mar 2023 11:27:16 +0000	[thread overview]
Message-ID: <87fsam9ifb.fsf@linaro.org> (raw)
In-Reply-To: <20230302191146.1790560-2-marcin.juszkiewicz@linaro.org>


Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> writes:

> From: Philippe Mathieu-Daudé <philmd@linaro.org>
>
> This change adds set of boot tests on SBSA-ref machine:
>
> 1. boot TF-A up to the EDK2 banner
> 2. boot Linux kernel/initrd up to Busybox shell
>
> Prebuilt flash volumes are included, built using upstream documentation.
> EDK2 and TF-A are updated to have SVE/SME properly enabled for 'max'
> cpu.
>
> Linux kernel/initrd are from Debian 'bookworm' installer with
> "init=/bin/sh" kernel argument.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
> ---
>  MAINTAINERS                              |   1 +
>  tests/avocado/machine_aarch64_sbsaref.py | 150 +++++++++++++++++++++++
>  2 files changed, 151 insertions(+)
>  create mode 100644 tests/avocado/machine_aarch64_sbsaref.py
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 76662969d7..df0dfd4bc3 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -916,6 +916,7 @@ L: qemu-arm@nongnu.org
>  S: Maintained
>  F: hw/arm/sbsa-ref.c
>  F: docs/system/arm/sbsa.rst
> +F: tests/avocado/machine_aarch64_sbsaref.py
>  
>  Sharp SL-5500 (Collie) PDA
>  M: Peter Maydell <peter.maydell@linaro.org>
> diff --git a/tests/avocado/machine_aarch64_sbsaref.py b/tests/avocado/machine_aarch64_sbsaref.py
> new file mode 100644
> index 0000000000..e36e53d4d5
> --- /dev/null
> +++ b/tests/avocado/machine_aarch64_sbsaref.py
> @@ -0,0 +1,150 @@
> +# Functional test that boots a Linux kernel and checks the console
> +#
> +# SPDX-FileCopyrightText: 2023 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
> +import shutil
> +
> +from avocado.utils import archive
> +
> +from avocado_qemu import QemuSystemTest
> +from avocado_qemu import wait_for_console_pattern
> +from avocado_qemu import interrupt_interactive_console_until_pattern
> +
> +
> +class Aarch64SbsarefMachine(QemuSystemTest):
> +    """
> +    :avocado: tags=arch:aarch64
> +    :avocado: tags=machine:sbsa-ref
> +    """
> +
> +    def fetch_firmware(self):
> +        """
> +        Flash volumes generated using:
> +
> +        - Fedora GNU Toolchain version 12.2.1 20220819 (Red Hat Cross 12.2.1-2)
> +
> +        - Trusted Firmware-A
> +          https://github.com/ARM-software/arm-trusted-firmware/tree/6264643a
> +
> +        - Tianocore EDK II
> +          https://github.com/tianocore/edk2/tree/f6ce1a5c
> +          https://github.com/tianocore/edk2-non-osi/tree/74d4da60
> +          https://github.com/tianocore/edk2-platforms/tree/0540e1a2
> +        """
> +
> +        # Secure BootRom (TF-A code)
> +        fs0_xz_url = ('https://fileserver.linaro.org/s/sZay4ZCCfHSXPKj/'
> +                      'download/SBSA_FLASH0.fd.xz')
> +        fs0_xz_hash = 'e74778cbb8e1aa0b77f8883565b9a18db638f6bb'
> +        tar_xz_path = self.fetch_asset(fs0_xz_url, asset_hash=fs0_xz_hash)
> +        archive.extract(tar_xz_path, self.workdir)
> +        fs0_path = os.path.join(self.workdir, 'SBSA_FLASH0.fd')
> +
> +        # Non-secure rom (UEFI and EFI variables)
> +        fs1_xz_url = ('https://fileserver.linaro.org/s/osHNaypByLa9xDK/'
> +                      'download/SBSA_FLASH1.fd.xz')
> +        fs1_xz_hash = '7d9f1a6b8964b8b99144f7e905a4083f31e31ad3'
> +        tar_xz_path = self.fetch_asset(fs1_xz_url, asset_hash=fs1_xz_hash)
> +        archive.extract(tar_xz_path, self.workdir)
> +        fs1_path = os.path.join(self.workdir, 'SBSA_FLASH1.fd')
> +
> +        for path in [fs0_path, fs1_path]:
> +            with open(path, 'ab+') as fd:
> +                fd.truncate(256 << 20)  # Expand volumes to 256MiB
> +
> +        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_tfa_v2_8(self):
> +        """
> +        :avocado: tags=cpu:cortex-a57
> +        """
> +
> +        self.fetch_firmware()
> +        self.vm.launch()
> +
> +        # TF-A boot sequence:
> +        #
> +        # https://github.com/ARM-software/arm-trusted-firmware/blob/v2.8.0/\
> +        #     docs/design/trusted-board-boot.rst#trusted-board-boot-sequence
> +        # https://trustedfirmware-a.readthedocs.io/en/v2.8/\
> +        #     design/firmware-design.html#cold-boot
> +
> +        # AP Trusted ROM
> +        wait_for_console_pattern(self, 'Booting Trusted Firmware')
> +        wait_for_console_pattern(self, 'BL1: v2.8(release):v2.8')
> +        wait_for_console_pattern(self, 'BL1: Booting BL2')
> +
> +        # Trusted Boot Firmware
> +        wait_for_console_pattern(self, 'BL2: v2.8(release)')
> +        wait_for_console_pattern(self, 'Booting BL31')
> +
> +        # EL3 Runtime Software
> +        wait_for_console_pattern(self, 'BL31: v2.8(release)')
> +
> +        # Non-trusted Firmware
> +        wait_for_console_pattern(self, 'UEFI firmware (version 1.0')
> +        interrupt_interactive_console_until_pattern(self,
> +                                                    'QEMU SBSA-REF Machine')
> +
> +    def boot_linux(self, cpu='cortex-a57'):
> +        """
> +        :avocado: tags=cpu:cortex-a57
> +        """
> +        self.fetch_firmware()
> +
> +        os.makedirs(f'{self.workdir}/vfat/efi/boot')
> +
> +        # UEFI shell binary
> +        shell_url = ('https://fileserver.linaro.org/s/SGoyRrEzkmW8C8Y/'
> +                     'download/bootaa64.efi')
> +        shell_sha1 = '5a8791eb130406d1a659e538b1a194a604a29a78'
> +        shell_path = self.fetch_asset(shell_url, shell_sha1)
> +        shutil.copyfile(shell_path,
> +                        f'{self.workdir}/vfat/efi/boot/bootaa64.efi')
> +
> +        # Debian 'bookworm' d-i kernel from 8th Feb 2023
> +        linux_url = ('https://fileserver.linaro.org/s/L8JMwEZQK8SDR39/'
> +                     'download/linux')
> +        linux_sha1 = '39a75284783ab63626642228fbac1863492d30b5'
> +        linux_path = self.fetch_asset(linux_url, linux_sha1)
> +        shutil.copyfile(linux_path, f'{self.workdir}/vfat/linux')
> +
> +        # Debian 'bookworm' d-i initrd.gz from 8th Feb 2023
> +        initrd_url = ('https://fileserver.linaro.org/s/NmYTxezZNKGF5P4/'
> +                      'download/initrd.gz')
> +        initrd_sha1 = '1404d0129cbd0bff7aaa589ddbea3cdb7c0d4c1d'
> +        initrd_path = self.fetch_asset(initrd_url, initrd_sha1)
> +        shutil.copyfile(initrd_path, f'{self.workdir}/vfat/initrd.gz')
> +
> +        with open(f'{self.workdir}/vfat/startup.nsh', 'w') as script:
> +            script.write('fs0:\\linux initrd=\\initrd.gz init=/bin/sh')
> +
> +        self.vm.add_args('-cpu', cpu,
> +                         '-drive',
> +                         f'file=fat:rw:{self.workdir}/vfat/,format=raw')
> +        self.vm.launch()
> +
> +        # Exit UEFI
> +        wait_for_console_pattern(self, 'EFI stub: Exiting boot services...')
> +
> +        # init=/bin/sh started
> +        wait_for_console_pattern(self, 'BusyBox v1.35.0 (Debian')
> +
> +    def test_sbsaref_linux_a57(self):
> +        """
> +        :avocado: tags=cpu:cortex-a57
> +        """
> +        self.boot_linux('cortex-a57')
> +
> +    def test_sbsaref_linux_max(self):
> +        """
> +        :avocado: tags=cpu:max
> +        """
> +        self.boot_linux('max')

You probably want to encode the pauth-impef here so we don't spend all
our time on the cryptography. e.g.

     self.boot_linux('max,pauth-impdef=on')

but even with that it seems to be timing out for me:

  2023-03-03 11:32:30,573 __init__         L0153 DEBUG| NOTICE:  BL1: Booting BL31
  2023-03-03 11:32:30,578 __init__         L0153 DEBUG| NOTICE:  BL31: v2.8(release):v2.8-335-g6264643a0
  2023-03-03 11:32:30,578 __init__         L0153 DEBUG| NOTICE:  BL31: Built : 17:51:50, Feb  8 2023
  2023-03-03 11:32:30,583 __init__         L0153 DEBUG| UEFI firmware (version 1.0 built at 16:17:37 on Feb  9 2023)
  2023-03-03 11:32:34,698 __init__         L0153 DEBUG| ESC[2JESC[04DESC[=3hESC[2JESC[09DESC[2JESC[04DUEFI Interactive Shell v2.2
  2023-03-03 11:32:34,699 __init__         L0153 DEBUG| EDK II
  2023-03-03 11:32:34,702 __init__         L0153 DEBUG| UEFI v2.70 (EFI Development Kit II / SbsaQemu, 0x00010000)
  2023-03-03 11:32:34,708 __init__         L0153 DEBUG| ESC[1mESC[33mESC[40mMapping tableESC[0mESC[37mESC[40m
  2023-03-03 11:32:34,716 __init__         L0153 DEBUG| ESC[1mESC[33mESC[40m      FS0:ESC[0mESC[37mESC[40m ESC[1mESC[37mESC[40mAlias(s):ESC[0mESC[37mESC[40mHD0a65535a1:;BLK1:
  2023-03-03 11:32:34,716 __init__         L0153 DEBUG| VenHw(0D51905B-B77E-452A-A2C0-ECA0CC8D514A,000010600000000000)/Sata(0x
  2023-03-03 11:32:34,716 __init__         L0153 DEBUG| 0,0xFFFF,0x0)/HD(1,MBR,0xBE1AFDFA,0x3F,0xFBFC1)
  2023-03-03 11:32:34,722 __init__         L0153 DEBUG| ESC[1mESC[33mESC[40m     BLK0:ESC[0mESC[37mESC[40m ESC[1mESC[37mESC[40mAlias(s):ESC[0mESC[37mESC[40m
  2023-03-03 11:32:34,722 __init__         L0153 DEBUG| VenHw(0D51905B-B77E-452A-A2C0-ECA0CC8D514A,000010600000000000)/Sata(0x
  2023-03-03 11:32:34,722 __init__         L0153 DEBUG| 0,0xFFFF,0x0)
  2023-03-03 11:32:39,749 __init__         L0153 DEBUG| Press ESC[1mESC[37mESC[40mESCESC[0mESC[37mESC[40m in 5 seconds to skip ESC[1mESC[33mESC[40mstartup.nshESC[0mESC[37mESC[40m or any other key to continue.ESC[72DPress ESC[1mESC[37mESC[40mESCESC[0mESC[37mESC[40m in 4 seconds to skip ESC[1mESC[33mESC[40mstartup.nshESC[0mESC[37mESC[40m or any other key to continue.ESC[72DPress ESC[1mESC[37mESC[40mESCESC[0mESC[37mESC[40m in 3 seconds to skip ESC[1mESC[33mESC[40mstartup.nshESC[0mESC[37mESC[40m or any other key to continue.ESC[72DPress ESC[1mESC[37mESC[40mESCESC[0mESC[37mESC[40m in 2 seconds to skip ESC[1mESC[33mESC[40mstartup.nshESC[0mESC[37mESC[40m or any other key to continue.ESC[72DPress ESC[1mESC[37mESC[40mESCESC[0mESC[37mESC[40m in 1 seconds to skip ESC[1mESC[33mESC[40mstartup.nshESC[0mESC[37mESC[40m or any other key to continue.
  2023-03-03 11:32:39,766 __init__         L0153 DEBUG| ESC[1mESC[33mESC[40mShell> ESC[0mESC[37mESC[40mfs0:\linux initrd=\initrd.gz init=/bin/sh
  2023-03-03 11:32:40,432 __init__         L0153 DEBUG| EFI stub: Booting Linux Kernel...
  2023-03-03 11:32:40,434 __init__         L0153 DEBUG| EFI stub: EFI_RNG_PROTOCOL unavailable
  2023-03-03 11:32:41,051 __init__         L0153 DEBUG| EFI stub: Loaded initrd from command line option
  2023-03-03 11:32:41,053 __init__         L0153 DEBUG| EFI stub: Generating empty DTB
  2023-03-03 11:32:41,054 __init__         L0153 DEBUG| EFI stub: Exiting boot services...
  2023-03-03 11:34:27,869 stacktrace       L0039 ERROR| 
  2023-03-03 11:34:27,870 stacktrace       L0041 ERROR| Reproduced traceback from: /home/alex/lsrc/qemu.git/builds/arm.all/tests/venv/lib/python3.9/site-packages/avocado/core/test.py:770
  2023-03-03 11:34:27,871 stacktrace       L0045 ERROR| Traceback (most recent call last):
  2023-03-03 11:34:27,871 stacktrace       L0045 ERROR|   File "/home/alex/lsrc/qemu.git/builds/arm.all/tests/avocado/machine_aarch64_sbsaref.py", line 150, in test_sbsaref_linux_max
  2023-03-03 11:34:27,871 stacktrace       L0045 ERROR|     self.boot_linux('max,pauth-impdef=on')

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro

  reply	other threads:[~2023-03-03 11:35 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-02 19:11 [PATCH 1/3] tests/avocado: update AArch64 tests to Alpine 3.17.2 Marcin Juszkiewicz
2023-03-02 19:11 ` [PATCH 2/3] tests/avocado: Add set of boot tests on SBSA-ref Marcin Juszkiewicz
2023-03-03 11:27   ` Alex Bennée [this message]
2023-03-03 15:24     ` Marcin Juszkiewicz
2023-03-02 19:11 ` [PATCH 3/3] tests/avocado: add Alpine Linux boot on AArch64/sbsa-ref Marcin Juszkiewicz
2023-03-03 11:38   ` Alex Bennée
2023-03-03 11:24 ` [PATCH 1/3] tests/avocado: update AArch64 tests to Alpine 3.17.2 Alex Bennée
2023-03-03 15:24   ` Marcin Juszkiewicz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87fsam9ifb.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=marcin.juszkiewicz@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quic_llindhol@quicinc.com \
    --cc=rad@semihalf.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.