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é 120e854424SPhilippe Mathieu-Daudéfrom qemu_test import QemuSystemTest, LinuxKernelTest, Asset 13a4b60becSPhilippe Mathieu-Daudéfrom qemu_test import interrupt_interactive_console_until_pattern 14a4b60becSPhilippe Mathieu-Daudéfrom qemu_test import wait_for_console_pattern 150e854424SPhilippe Mathieu-Daudéfrom qemu_test.utils import lzma_uncompress 16a4b60becSPhilippe Mathieu-Daudé 17a4b60becSPhilippe Mathieu-Daudé 180e854424SPhilippe Mathieu-Daudéclass MaltaMachineConsole(LinuxKernelTest): 190e854424SPhilippe Mathieu-Daudé 200e854424SPhilippe Mathieu-Daudé ASSET_KERNEL_4K = Asset( 210e854424SPhilippe Mathieu-Daudé ('http://mipsdistros.mips.com/LinuxDistro/nanomips/' 220e854424SPhilippe Mathieu-Daudé 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 230e854424SPhilippe Mathieu-Daudé 'generic_nano32r6el_page4k.xz'), 240e854424SPhilippe Mathieu-Daudé '019e034094ac6cf3aa77df5e130fb023ce4dbc804b04bfcc560c6403e1ae6bdb') 250e854424SPhilippe Mathieu-Daudé ASSET_KERNEL_16K = Asset( 260e854424SPhilippe Mathieu-Daudé ('http://mipsdistros.mips.com/LinuxDistro/nanomips/' 270e854424SPhilippe Mathieu-Daudé 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 280e854424SPhilippe Mathieu-Daudé 'generic_nano32r6el_page16k_up.xz'), 290e854424SPhilippe Mathieu-Daudé '3a54a10b3108c16a448dca9ea3db378733a27423befc2a45a5bdf990bd85e12c') 300e854424SPhilippe Mathieu-Daudé ASSET_KERNEL_64K = Asset( 310e854424SPhilippe Mathieu-Daudé ('http://mipsdistros.mips.com/LinuxDistro/nanomips/' 320e854424SPhilippe Mathieu-Daudé 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 330e854424SPhilippe Mathieu-Daudé 'generic_nano32r6el_page64k_dbg.xz'), 340e854424SPhilippe Mathieu-Daudé 'ce21ff4b07a981ecb8a39db2876616f5a2473eb2ab459c6f67465b9914b0c6b6') 350e854424SPhilippe Mathieu-Daudé 360e854424SPhilippe Mathieu-Daudé def do_test_mips_malta32el_nanomips(self, kernel_path_xz): 37beaf88c8SDaniel P. Berrangé kernel_path = self.scratch_file('kernel') 380e854424SPhilippe Mathieu-Daudé lzma_uncompress(kernel_path_xz, kernel_path) 390e854424SPhilippe Mathieu-Daudé 400e854424SPhilippe Mathieu-Daudé self.set_machine('malta') 410e854424SPhilippe Mathieu-Daudé self.vm.set_console() 420e854424SPhilippe Mathieu-Daudé kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE 430e854424SPhilippe Mathieu-Daudé + 'mem=256m@@0x0 ' 440e854424SPhilippe Mathieu-Daudé + 'console=ttyS0') 450e854424SPhilippe Mathieu-Daudé self.vm.add_args('-cpu', 'I7200', 460e854424SPhilippe Mathieu-Daudé '-no-reboot', 470e854424SPhilippe Mathieu-Daudé '-kernel', kernel_path, 480e854424SPhilippe Mathieu-Daudé '-append', kernel_command_line) 490e854424SPhilippe Mathieu-Daudé self.vm.launch() 500e854424SPhilippe Mathieu-Daudé console_pattern = 'Kernel command line: %s' % kernel_command_line 510e854424SPhilippe Mathieu-Daudé self.wait_for_console_pattern(console_pattern) 520e854424SPhilippe Mathieu-Daudé 530e854424SPhilippe Mathieu-Daudé def test_mips_malta32el_nanomips_4k(self): 540e854424SPhilippe Mathieu-Daudé kernel_path_xz = self.ASSET_KERNEL_4K.fetch() 550e854424SPhilippe Mathieu-Daudé self.do_test_mips_malta32el_nanomips(kernel_path_xz) 560e854424SPhilippe Mathieu-Daudé 570e854424SPhilippe Mathieu-Daudé def test_mips_malta32el_nanomips_16k_up(self): 580e854424SPhilippe Mathieu-Daudé kernel_path_xz = self.ASSET_KERNEL_16K.fetch() 590e854424SPhilippe Mathieu-Daudé self.do_test_mips_malta32el_nanomips(kernel_path_xz) 600e854424SPhilippe Mathieu-Daudé 610e854424SPhilippe Mathieu-Daudé def test_mips_malta32el_nanomips_64k_dbg(self): 620e854424SPhilippe Mathieu-Daudé kernel_path_xz = self.ASSET_KERNEL_16K.fetch() 630e854424SPhilippe Mathieu-Daudé self.do_test_mips_malta32el_nanomips(kernel_path_xz) 640e854424SPhilippe Mathieu-Daudé 650e854424SPhilippe Mathieu-Daudé 66a4b60becSPhilippe Mathieu-Daudéclass MaltaMachineYAMON(QemuSystemTest): 67a4b60becSPhilippe Mathieu-Daudé 68a4b60becSPhilippe Mathieu-Daudé ASSET_YAMON_ROM = Asset( 69a4b60becSPhilippe Mathieu-Daudé ('https://s3-eu-west-1.amazonaws.com/downloads-mips/mips-downloads/' 70a4b60becSPhilippe Mathieu-Daudé 'YAMON/yamon-bin-02.22.zip'), 71a4b60becSPhilippe Mathieu-Daudé 'eef86f0eed0ef554f041dcd47b87eebea0e6f9f1184ed31f7e9e8b4a803860ab') 72a4b60becSPhilippe Mathieu-Daudé 73a4b60becSPhilippe Mathieu-Daudé def test_mipsel_malta_yamon(self): 74a4b60becSPhilippe Mathieu-Daudé yamon_bin = 'yamon-02.22.bin' 75*5831ed84SDaniel P. Berrangé self.archive_extract(self.ASSET_YAMON_ROM) 76beaf88c8SDaniel P. Berrangé yamon_path = self.scratch_file(yamon_bin) 77a4b60becSPhilippe Mathieu-Daudé 78a4b60becSPhilippe Mathieu-Daudé self.set_machine('malta') 79a4b60becSPhilippe Mathieu-Daudé self.vm.set_console() 80a4b60becSPhilippe Mathieu-Daudé self.vm.add_args('-bios', yamon_path) 81a4b60becSPhilippe Mathieu-Daudé self.vm.launch() 82a4b60becSPhilippe Mathieu-Daudé 83a4b60becSPhilippe Mathieu-Daudé prompt = 'YAMON>' 84a4b60becSPhilippe Mathieu-Daudé pattern = 'YAMON ROM Monitor' 85a4b60becSPhilippe Mathieu-Daudé interrupt_interactive_console_until_pattern(self, pattern, prompt) 86a4b60becSPhilippe Mathieu-Daudé wait_for_console_pattern(self, prompt) 87a4b60becSPhilippe Mathieu-Daudé self.vm.shutdown() 88a4b60becSPhilippe Mathieu-Daudé 89a4b60becSPhilippe Mathieu-Daudé 90a4b60becSPhilippe Mathieu-Daudéif __name__ == '__main__': 91a4b60becSPhilippe Mathieu-Daudé QemuSystemTest.main() 92