xref: /openbmc/qemu/tests/functional/test_mipsel_malta.py (revision 4b7ea33074450bc6148c8e1545d78f179e64adb4)
1a4b60becSPhilippe Mathieu-Daudé#!/usr/bin/env python3
2a4b60becSPhilippe Mathieu-Daudé#
3a4b60becSPhilippe Mathieu-Daudé# Functional tests for the little-endian 32-bit MIPS Malta board
4a4b60becSPhilippe Mathieu-Daudé#
5a4b60becSPhilippe Mathieu-Daudé# Copyright (c) Philippe Mathieu-Daudé <f4bug@amsat.org>
6a4b60becSPhilippe Mathieu-Daudé#
7a4b60becSPhilippe Mathieu-Daudé# This work is licensed under the terms of the GNU GPL, version 2 or later.
8a4b60becSPhilippe Mathieu-Daudé# See the COPYING file in the top-level directory.
9a4b60becSPhilippe Mathieu-Daudé#
10a4b60becSPhilippe Mathieu-Daudé# SPDX-License-Identifier: GPL-2.0-or-later
11a4b60becSPhilippe Mathieu-Daudé
12a4b60becSPhilippe Mathieu-Daudéimport os
13a4b60becSPhilippe Mathieu-Daudé
14*0e854424SPhilippe Mathieu-Daudéfrom qemu_test import QemuSystemTest, LinuxKernelTest, Asset
15a4b60becSPhilippe Mathieu-Daudéfrom qemu_test import interrupt_interactive_console_until_pattern
16a4b60becSPhilippe Mathieu-Daudéfrom qemu_test import wait_for_console_pattern
17*0e854424SPhilippe Mathieu-Daudéfrom qemu_test.utils import lzma_uncompress
18a4b60becSPhilippe Mathieu-Daudéfrom zipfile import ZipFile
19a4b60becSPhilippe Mathieu-Daudé
20a4b60becSPhilippe Mathieu-Daudé
21*0e854424SPhilippe Mathieu-Daudéclass MaltaMachineConsole(LinuxKernelTest):
22*0e854424SPhilippe Mathieu-Daudé
23*0e854424SPhilippe Mathieu-Daudé    ASSET_KERNEL_4K = Asset(
24*0e854424SPhilippe Mathieu-Daudé        ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
25*0e854424SPhilippe Mathieu-Daudé         'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
26*0e854424SPhilippe Mathieu-Daudé         'generic_nano32r6el_page4k.xz'),
27*0e854424SPhilippe Mathieu-Daudé        '019e034094ac6cf3aa77df5e130fb023ce4dbc804b04bfcc560c6403e1ae6bdb')
28*0e854424SPhilippe Mathieu-Daudé    ASSET_KERNEL_16K = Asset(
29*0e854424SPhilippe Mathieu-Daudé        ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
30*0e854424SPhilippe Mathieu-Daudé         'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
31*0e854424SPhilippe Mathieu-Daudé         'generic_nano32r6el_page16k_up.xz'),
32*0e854424SPhilippe Mathieu-Daudé        '3a54a10b3108c16a448dca9ea3db378733a27423befc2a45a5bdf990bd85e12c')
33*0e854424SPhilippe Mathieu-Daudé    ASSET_KERNEL_64K = Asset(
34*0e854424SPhilippe Mathieu-Daudé        ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
35*0e854424SPhilippe Mathieu-Daudé         'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
36*0e854424SPhilippe Mathieu-Daudé         'generic_nano32r6el_page64k_dbg.xz'),
37*0e854424SPhilippe Mathieu-Daudé        'ce21ff4b07a981ecb8a39db2876616f5a2473eb2ab459c6f67465b9914b0c6b6')
38*0e854424SPhilippe Mathieu-Daudé
39*0e854424SPhilippe Mathieu-Daudé    def do_test_mips_malta32el_nanomips(self, kernel_path_xz):
40*0e854424SPhilippe Mathieu-Daudé        kernel_path = os.path.join(self.workdir, 'kernel')
41*0e854424SPhilippe Mathieu-Daudé        lzma_uncompress(kernel_path_xz, kernel_path)
42*0e854424SPhilippe Mathieu-Daudé
43*0e854424SPhilippe Mathieu-Daudé        self.set_machine('malta')
44*0e854424SPhilippe Mathieu-Daudé        self.vm.set_console()
45*0e854424SPhilippe Mathieu-Daudé        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE
46*0e854424SPhilippe Mathieu-Daudé                               + 'mem=256m@@0x0 '
47*0e854424SPhilippe Mathieu-Daudé                               + 'console=ttyS0')
48*0e854424SPhilippe Mathieu-Daudé        self.vm.add_args('-cpu', 'I7200',
49*0e854424SPhilippe Mathieu-Daudé                         '-no-reboot',
50*0e854424SPhilippe Mathieu-Daudé                         '-kernel', kernel_path,
51*0e854424SPhilippe Mathieu-Daudé                         '-append', kernel_command_line)
52*0e854424SPhilippe Mathieu-Daudé        self.vm.launch()
53*0e854424SPhilippe Mathieu-Daudé        console_pattern = 'Kernel command line: %s' % kernel_command_line
54*0e854424SPhilippe Mathieu-Daudé        self.wait_for_console_pattern(console_pattern)
55*0e854424SPhilippe Mathieu-Daudé
56*0e854424SPhilippe Mathieu-Daudé    def test_mips_malta32el_nanomips_4k(self):
57*0e854424SPhilippe Mathieu-Daudé        kernel_path_xz = self.ASSET_KERNEL_4K.fetch()
58*0e854424SPhilippe Mathieu-Daudé        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
59*0e854424SPhilippe Mathieu-Daudé
60*0e854424SPhilippe Mathieu-Daudé    def test_mips_malta32el_nanomips_16k_up(self):
61*0e854424SPhilippe Mathieu-Daudé        kernel_path_xz = self.ASSET_KERNEL_16K.fetch()
62*0e854424SPhilippe Mathieu-Daudé        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
63*0e854424SPhilippe Mathieu-Daudé
64*0e854424SPhilippe Mathieu-Daudé    def test_mips_malta32el_nanomips_64k_dbg(self):
65*0e854424SPhilippe Mathieu-Daudé        kernel_path_xz = self.ASSET_KERNEL_16K.fetch()
66*0e854424SPhilippe Mathieu-Daudé        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
67*0e854424SPhilippe Mathieu-Daudé
68*0e854424SPhilippe Mathieu-Daudé
69a4b60becSPhilippe Mathieu-Daudéclass MaltaMachineYAMON(QemuSystemTest):
70a4b60becSPhilippe Mathieu-Daudé
71a4b60becSPhilippe Mathieu-Daudé    ASSET_YAMON_ROM = Asset(
72a4b60becSPhilippe Mathieu-Daudé        ('https://s3-eu-west-1.amazonaws.com/downloads-mips/mips-downloads/'
73a4b60becSPhilippe Mathieu-Daudé         'YAMON/yamon-bin-02.22.zip'),
74a4b60becSPhilippe Mathieu-Daudé        'eef86f0eed0ef554f041dcd47b87eebea0e6f9f1184ed31f7e9e8b4a803860ab')
75a4b60becSPhilippe Mathieu-Daudé
76a4b60becSPhilippe Mathieu-Daudé    def test_mipsel_malta_yamon(self):
77a4b60becSPhilippe Mathieu-Daudé        yamon_bin = 'yamon-02.22.bin'
78a4b60becSPhilippe Mathieu-Daudé        zip_path = self.ASSET_YAMON_ROM.fetch()
79a4b60becSPhilippe Mathieu-Daudé        with ZipFile(zip_path, 'r') as zf:
80a4b60becSPhilippe Mathieu-Daudé            zf.extract(yamon_bin, path=self.workdir)
81a4b60becSPhilippe Mathieu-Daudé        yamon_path = os.path.join(self.workdir, yamon_bin)
82a4b60becSPhilippe Mathieu-Daudé
83a4b60becSPhilippe Mathieu-Daudé        self.set_machine('malta')
84a4b60becSPhilippe Mathieu-Daudé        self.vm.set_console()
85a4b60becSPhilippe Mathieu-Daudé        self.vm.add_args('-bios', yamon_path)
86a4b60becSPhilippe Mathieu-Daudé        self.vm.launch()
87a4b60becSPhilippe Mathieu-Daudé
88a4b60becSPhilippe Mathieu-Daudé        prompt =  'YAMON>'
89a4b60becSPhilippe Mathieu-Daudé        pattern = 'YAMON ROM Monitor'
90a4b60becSPhilippe Mathieu-Daudé        interrupt_interactive_console_until_pattern(self, pattern, prompt)
91a4b60becSPhilippe Mathieu-Daudé        wait_for_console_pattern(self, prompt)
92a4b60becSPhilippe Mathieu-Daudé        self.vm.shutdown()
93a4b60becSPhilippe Mathieu-Daudé
94a4b60becSPhilippe Mathieu-Daudé
95a4b60becSPhilippe Mathieu-Daudéif __name__ == '__main__':
96a4b60becSPhilippe Mathieu-Daudé    QemuSystemTest.main()
97