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