xref: /openbmc/qemu/tests/functional/test_riscv64_sifive_u.py (revision 30f830fa887ad3756419a7e92b3d22b29a7ac43f)
190fd1591SPhilippe Mathieu-Daudé#!/usr/bin/env python3
290fd1591SPhilippe Mathieu-Daudé#
390fd1591SPhilippe Mathieu-Daudé# Functional test that boots a Linux kernel on a Sifive U machine
490fd1591SPhilippe Mathieu-Daudé# and checks the console
590fd1591SPhilippe Mathieu-Daudé#
690fd1591SPhilippe Mathieu-Daudé# Copyright (c) Linaro Ltd.
790fd1591SPhilippe Mathieu-Daudé#
890fd1591SPhilippe Mathieu-Daudé# Author:
990fd1591SPhilippe Mathieu-Daudé#  Philippe Mathieu-Daudé
1090fd1591SPhilippe Mathieu-Daudé#
1190fd1591SPhilippe Mathieu-Daudé# SPDX-License-Identifier: GPL-2.0-or-later
1290fd1591SPhilippe Mathieu-Daudé
1390fd1591SPhilippe Mathieu-Daudéimport os
1490fd1591SPhilippe Mathieu-Daudé
1590fd1591SPhilippe Mathieu-Daudéfrom qemu_test import Asset, LinuxKernelTest
1690fd1591SPhilippe Mathieu-Daudéfrom qemu_test import skipIfMissingCommands
1790fd1591SPhilippe Mathieu-Daudé
1890fd1591SPhilippe Mathieu-Daudé
1990fd1591SPhilippe Mathieu-Daudéclass SifiveU(LinuxKernelTest):
2090fd1591SPhilippe Mathieu-Daudé
2190fd1591SPhilippe Mathieu-Daudé    ASSET_KERNEL = Asset(
2290fd1591SPhilippe Mathieu-Daudé        'https://storage.tuxboot.com/buildroot/20241119/riscv64/Image',
2390fd1591SPhilippe Mathieu-Daudé        '2bd8132a3bf21570290042324fff48c987f42f2a00c08de979f43f0662ebadba')
2490fd1591SPhilippe Mathieu-Daudé    ASSET_ROOTFS = Asset(
2590fd1591SPhilippe Mathieu-Daudé        ('https://github.com/groeck/linux-build-test/raw/'
2690fd1591SPhilippe Mathieu-Daudé         '9819da19e6eef291686fdd7b029ea00e764dc62f/rootfs/riscv64/'
2790fd1591SPhilippe Mathieu-Daudé         'rootfs.ext2.gz'),
2890fd1591SPhilippe Mathieu-Daudé        'b6ed95610310b7956f9bf20c4c9c0c05fea647900df441da9dfe767d24e8b28b')
2990fd1591SPhilippe Mathieu-Daudé
30*7db162faSPhilippe Mathieu-Daudé    def do_test_riscv64_sifive_u_mmc_spi(self, connect_card):
3190fd1591SPhilippe Mathieu-Daudé        self.set_machine('sifive_u')
3290fd1591SPhilippe Mathieu-Daudé        kernel_path = self.ASSET_KERNEL.fetch()
3390fd1591SPhilippe Mathieu-Daudé        rootfs_path = self.uncompress(self.ASSET_ROOTFS)
3490fd1591SPhilippe Mathieu-Daudé
3590fd1591SPhilippe Mathieu-Daudé        self.vm.set_console()
3690fd1591SPhilippe Mathieu-Daudé        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
3790fd1591SPhilippe Mathieu-Daudé                               'earlycon=sbi console=ttySIF0 '
38*7db162faSPhilippe Mathieu-Daudé                               'root=/dev/mmcblk0 ')
3990fd1591SPhilippe Mathieu-Daudé        self.vm.add_args('-kernel', kernel_path,
4090fd1591SPhilippe Mathieu-Daudé                         '-append', kernel_command_line,
4190fd1591SPhilippe Mathieu-Daudé                         '-no-reboot')
42*7db162faSPhilippe Mathieu-Daudé        if connect_card:
43*7db162faSPhilippe Mathieu-Daudé            kernel_command_line += 'panic=-1 noreboot rootwait '
44*7db162faSPhilippe Mathieu-Daudé            self.vm.add_args('-drive', f'file={rootfs_path},if=sd,format=raw')
45*7db162faSPhilippe Mathieu-Daudé            pattern = 'Boot successful.'
46*7db162faSPhilippe Mathieu-Daudé        else:
47*7db162faSPhilippe Mathieu-Daudé            kernel_command_line += 'panic=0 noreboot '
48*7db162faSPhilippe Mathieu-Daudé            pattern = 'Cannot open root device "mmcblk0" or unknown-block(0,0)'
49*7db162faSPhilippe Mathieu-Daudé
5090fd1591SPhilippe Mathieu-Daudé        self.vm.launch()
51*7db162faSPhilippe Mathieu-Daudé        self.wait_for_console_pattern(pattern)
5290fd1591SPhilippe Mathieu-Daudé
5390fd1591SPhilippe Mathieu-Daudé        os.remove(rootfs_path)
5490fd1591SPhilippe Mathieu-Daudé
55*7db162faSPhilippe Mathieu-Daudé    def test_riscv64_sifive_u_nommc_spi(self):
56*7db162faSPhilippe Mathieu-Daudé        self.do_test_riscv64_sifive_u_mmc_spi(False)
57*7db162faSPhilippe Mathieu-Daudé
58*7db162faSPhilippe Mathieu-Daudé    def test_riscv64_sifive_u_mmc_spi(self):
59*7db162faSPhilippe Mathieu-Daudé        self.do_test_riscv64_sifive_u_mmc_spi(True)
60*7db162faSPhilippe Mathieu-Daudé
6190fd1591SPhilippe Mathieu-Daudé
6290fd1591SPhilippe Mathieu-Daudéif __name__ == '__main__':
6390fd1591SPhilippe Mathieu-Daudé    LinuxKernelTest.main()
64