1bbbd9b6eSWillian Rampazzo# Functional test that boots a Linux kernel and checks the console 2bbbd9b6eSWillian Rampazzo# 3bbbd9b6eSWillian Rampazzo# Copyright (c) 2018 Red Hat, Inc. 4bbbd9b6eSWillian Rampazzo# 5bbbd9b6eSWillian Rampazzo# Author: 6bbbd9b6eSWillian Rampazzo# Cleber Rosa <crosa@redhat.com> 7bbbd9b6eSWillian Rampazzo# 8bbbd9b6eSWillian Rampazzo# This work is licensed under the terms of the GNU GPL, version 2 or 9bbbd9b6eSWillian Rampazzo# later. See the COPYING file in the top-level directory. 10bbbd9b6eSWillian Rampazzo 11bbbd9b6eSWillian Rampazzoimport os 12bbbd9b6eSWillian Rampazzoimport lzma 13bbbd9b6eSWillian Rampazzoimport gzip 14bbbd9b6eSWillian Rampazzoimport shutil 15bbbd9b6eSWillian Rampazzo 16bbbd9b6eSWillian Rampazzofrom avocado import skip 17bbbd9b6eSWillian Rampazzofrom avocado import skipUnless 189b45cc99SAlex Bennéefrom avocado import skipUnless 192283b627SPhilippe Mathieu-Daudéfrom avocado_qemu import QemuSystemTest 20bbbd9b6eSWillian Rampazzofrom avocado_qemu import exec_command 21bbbd9b6eSWillian Rampazzofrom avocado_qemu import exec_command_and_wait_for_pattern 22bbbd9b6eSWillian Rampazzofrom avocado_qemu import interrupt_interactive_console_until_pattern 23bbbd9b6eSWillian Rampazzofrom avocado_qemu import wait_for_console_pattern 24bbbd9b6eSWillian Rampazzofrom avocado.utils import process 25bbbd9b6eSWillian Rampazzofrom avocado.utils import archive 26bbbd9b6eSWillian Rampazzo 27bbbd9b6eSWillian Rampazzo""" 28bbbd9b6eSWillian RampazzoRound up to next power of 2 29bbbd9b6eSWillian Rampazzo""" 30bbbd9b6eSWillian Rampazzodef pow2ceil(x): 31bbbd9b6eSWillian Rampazzo return 1 if x == 0 else 2**(x - 1).bit_length() 32bbbd9b6eSWillian Rampazzo 33ffd0cac7SPhilippe Mathieu-Daudédef file_truncate(path, size): 34ffd0cac7SPhilippe Mathieu-Daudé if size != os.path.getsize(path): 35ffd0cac7SPhilippe Mathieu-Daudé with open(path, 'ab+') as fd: 36ffd0cac7SPhilippe Mathieu-Daudé fd.truncate(size) 37ffd0cac7SPhilippe Mathieu-Daudé 38bbbd9b6eSWillian Rampazzo""" 39bbbd9b6eSWillian RampazzoExpand file size to next power of 2 40bbbd9b6eSWillian Rampazzo""" 41bbbd9b6eSWillian Rampazzodef image_pow2ceil_expand(path): 42bbbd9b6eSWillian Rampazzo size = os.path.getsize(path) 43bbbd9b6eSWillian Rampazzo size_aligned = pow2ceil(size) 44bbbd9b6eSWillian Rampazzo if size != size_aligned: 45bbbd9b6eSWillian Rampazzo with open(path, 'ab+') as fd: 46bbbd9b6eSWillian Rampazzo fd.truncate(size_aligned) 47bbbd9b6eSWillian Rampazzo 482283b627SPhilippe Mathieu-Daudéclass LinuxKernelTest(QemuSystemTest): 49bbbd9b6eSWillian Rampazzo KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 ' 50bbbd9b6eSWillian Rampazzo 51bbbd9b6eSWillian Rampazzo def wait_for_console_pattern(self, success_message, vm=None): 52bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, success_message, 53bbbd9b6eSWillian Rampazzo failure_message='Kernel panic - not syncing', 54bbbd9b6eSWillian Rampazzo vm=vm) 55bbbd9b6eSWillian Rampazzo 56bbbd9b6eSWillian Rampazzo def extract_from_deb(self, deb, path): 57bbbd9b6eSWillian Rampazzo """ 58bbbd9b6eSWillian Rampazzo Extracts a file from a deb package into the test workdir 59bbbd9b6eSWillian Rampazzo 60bbbd9b6eSWillian Rampazzo :param deb: path to the deb archive 61bbbd9b6eSWillian Rampazzo :param path: path within the deb archive of the file to be extracted 62bbbd9b6eSWillian Rampazzo :returns: path of the extracted file 63bbbd9b6eSWillian Rampazzo """ 64bbbd9b6eSWillian Rampazzo cwd = os.getcwd() 65bbbd9b6eSWillian Rampazzo os.chdir(self.workdir) 66bbbd9b6eSWillian Rampazzo file_path = process.run("ar t %s" % deb).stdout_text.split()[2] 67bbbd9b6eSWillian Rampazzo process.run("ar x %s %s" % (deb, file_path)) 68bbbd9b6eSWillian Rampazzo archive.extract(file_path, self.workdir) 69bbbd9b6eSWillian Rampazzo os.chdir(cwd) 70bbbd9b6eSWillian Rampazzo # Return complete path to extracted file. Because callers to 71bbbd9b6eSWillian Rampazzo # extract_from_deb() specify 'path' with a leading slash, it is 72bbbd9b6eSWillian Rampazzo # necessary to use os.path.relpath() as otherwise os.path.join() 73bbbd9b6eSWillian Rampazzo # interprets it as an absolute path and drops the self.workdir part. 74bbbd9b6eSWillian Rampazzo return os.path.normpath(os.path.join(self.workdir, 75bbbd9b6eSWillian Rampazzo os.path.relpath(path, '/'))) 76bbbd9b6eSWillian Rampazzo 77bbbd9b6eSWillian Rampazzo def extract_from_rpm(self, rpm, path): 78bbbd9b6eSWillian Rampazzo """ 79bbbd9b6eSWillian Rampazzo Extracts a file from an RPM package into the test workdir. 80bbbd9b6eSWillian Rampazzo 81bbbd9b6eSWillian Rampazzo :param rpm: path to the rpm archive 82bbbd9b6eSWillian Rampazzo :param path: path within the rpm archive of the file to be extracted 83bbbd9b6eSWillian Rampazzo needs to be a relative path (starting with './') because 84bbbd9b6eSWillian Rampazzo cpio(1), which is used to extract the file, expects that. 85bbbd9b6eSWillian Rampazzo :returns: path of the extracted file 86bbbd9b6eSWillian Rampazzo """ 87bbbd9b6eSWillian Rampazzo cwd = os.getcwd() 88bbbd9b6eSWillian Rampazzo os.chdir(self.workdir) 89bbbd9b6eSWillian Rampazzo process.run("rpm2cpio %s | cpio -id %s" % (rpm, path), shell=True) 90bbbd9b6eSWillian Rampazzo os.chdir(cwd) 91bbbd9b6eSWillian Rampazzo return os.path.normpath(os.path.join(self.workdir, path)) 92bbbd9b6eSWillian Rampazzo 93bbbd9b6eSWillian Rampazzoclass BootLinuxConsole(LinuxKernelTest): 94bbbd9b6eSWillian Rampazzo """ 95bbbd9b6eSWillian Rampazzo Boots a Linux kernel and checks that the console is operational and the 96bbbd9b6eSWillian Rampazzo kernel command line is properly passed from QEMU to the kernel 97bbbd9b6eSWillian Rampazzo """ 98bbbd9b6eSWillian Rampazzo timeout = 90 99bbbd9b6eSWillian Rampazzo 100bbbd9b6eSWillian Rampazzo def test_x86_64_pc(self): 101bbbd9b6eSWillian Rampazzo """ 102bbbd9b6eSWillian Rampazzo :avocado: tags=arch:x86_64 103bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc 104bbbd9b6eSWillian Rampazzo """ 105bbbd9b6eSWillian Rampazzo kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' 106bbbd9b6eSWillian Rampazzo '/linux/releases/29/Everything/x86_64/os/images/pxeboot' 107bbbd9b6eSWillian Rampazzo '/vmlinuz') 108bbbd9b6eSWillian Rampazzo kernel_hash = '23bebd2680757891cf7adedb033532163a792495' 109bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 110bbbd9b6eSWillian Rampazzo 111bbbd9b6eSWillian Rampazzo self.vm.set_console() 112bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 113bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 114bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 115bbbd9b6eSWillian Rampazzo self.vm.launch() 116bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 117bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 118bbbd9b6eSWillian Rampazzo 119bbbd9b6eSWillian Rampazzo def test_mips_malta(self): 120bbbd9b6eSWillian Rampazzo """ 121bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mips 122bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 123bbbd9b6eSWillian Rampazzo :avocado: tags=endian:big 124bbbd9b6eSWillian Rampazzo """ 125bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 126bbbd9b6eSWillian Rampazzo '20130217T032700Z/pool/main/l/linux-2.6/' 127bbbd9b6eSWillian Rampazzo 'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb') 128bbbd9b6eSWillian Rampazzo deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04' 129bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 130bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 131bbbd9b6eSWillian Rampazzo '/boot/vmlinux-2.6.32-5-4kc-malta') 132bbbd9b6eSWillian Rampazzo 133bbbd9b6eSWillian Rampazzo self.vm.set_console() 134bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 135bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 136bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 137bbbd9b6eSWillian Rampazzo self.vm.launch() 138bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 139bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 140bbbd9b6eSWillian Rampazzo 141bbbd9b6eSWillian Rampazzo def test_mips64el_malta(self): 142bbbd9b6eSWillian Rampazzo """ 143bbbd9b6eSWillian Rampazzo This test requires the ar tool to extract "data.tar.gz" from 144bbbd9b6eSWillian Rampazzo the Debian package. 145bbbd9b6eSWillian Rampazzo 146bbbd9b6eSWillian Rampazzo The kernel can be rebuilt using this Debian kernel source [1] and 147bbbd9b6eSWillian Rampazzo following the instructions on [2]. 148bbbd9b6eSWillian Rampazzo 149bbbd9b6eSWillian Rampazzo [1] http://snapshot.debian.org/package/linux-2.6/2.6.32-48/ 150bbbd9b6eSWillian Rampazzo #linux-source-2.6.32_2.6.32-48 151bbbd9b6eSWillian Rampazzo [2] https://kernel-team.pages.debian.net/kernel-handbook/ 152bbbd9b6eSWillian Rampazzo ch-common-tasks.html#s-common-official 153bbbd9b6eSWillian Rampazzo 154bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mips64el 155bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 156bbbd9b6eSWillian Rampazzo """ 157bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 158bbbd9b6eSWillian Rampazzo '20130217T032700Z/pool/main/l/linux-2.6/' 159bbbd9b6eSWillian Rampazzo 'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb') 160bbbd9b6eSWillian Rampazzo deb_hash = '1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5' 161bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 162bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 163bbbd9b6eSWillian Rampazzo '/boot/vmlinux-2.6.32-5-5kc-malta') 164bbbd9b6eSWillian Rampazzo 165bbbd9b6eSWillian Rampazzo self.vm.set_console() 166bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 167bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 168bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 169bbbd9b6eSWillian Rampazzo self.vm.launch() 170bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 171bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 172bbbd9b6eSWillian Rampazzo 173bbbd9b6eSWillian Rampazzo def test_mips64el_fuloong2e(self): 174bbbd9b6eSWillian Rampazzo """ 175bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mips64el 176bbbd9b6eSWillian Rampazzo :avocado: tags=machine:fuloong2e 177bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 178bbbd9b6eSWillian Rampazzo """ 179bbbd9b6eSWillian Rampazzo deb_url = ('http://archive.debian.org/debian/pool/main/l/linux/' 180bbbd9b6eSWillian Rampazzo 'linux-image-3.16.0-6-loongson-2e_3.16.56-1+deb8u1_mipsel.deb') 181bbbd9b6eSWillian Rampazzo deb_hash = 'd04d446045deecf7b755ef576551de0c4184dd44' 182bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 183bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 184bbbd9b6eSWillian Rampazzo '/boot/vmlinux-3.16.0-6-loongson-2e') 185bbbd9b6eSWillian Rampazzo 186bbbd9b6eSWillian Rampazzo self.vm.set_console() 187bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 188bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 189bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 190bbbd9b6eSWillian Rampazzo self.vm.launch() 191bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 192bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 193bbbd9b6eSWillian Rampazzo 194bbbd9b6eSWillian Rampazzo def test_mips_malta_cpio(self): 195bbbd9b6eSWillian Rampazzo """ 196bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mips 197bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 198bbbd9b6eSWillian Rampazzo :avocado: tags=endian:big 199bbbd9b6eSWillian Rampazzo """ 200bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 201bbbd9b6eSWillian Rampazzo '20160601T041800Z/pool/main/l/linux/' 202bbbd9b6eSWillian Rampazzo 'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb') 203bbbd9b6eSWillian Rampazzo deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8' 204bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 205bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 206bbbd9b6eSWillian Rampazzo '/boot/vmlinux-4.5.0-2-4kc-malta') 207bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 208bbbd9b6eSWillian Rampazzo '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/' 209bbbd9b6eSWillian Rampazzo 'mips/rootfs.cpio.gz') 210bbbd9b6eSWillian Rampazzo initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99' 211bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 212bbbd9b6eSWillian Rampazzo initrd_path = self.workdir + "rootfs.cpio" 213bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 214bbbd9b6eSWillian Rampazzo 215bbbd9b6eSWillian Rampazzo self.vm.set_console() 216bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE 217bbbd9b6eSWillian Rampazzo + 'console=ttyS0 console=tty ' 218bbbd9b6eSWillian Rampazzo + 'rdinit=/sbin/init noreboot') 219bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 220bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 221bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 222bbbd9b6eSWillian Rampazzo '-no-reboot') 223bbbd9b6eSWillian Rampazzo self.vm.launch() 224bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 225bbbd9b6eSWillian Rampazzo 226bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 227bbbd9b6eSWillian Rampazzo 'BogoMIPS') 228bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'uname -a', 229bbbd9b6eSWillian Rampazzo 'Debian') 230bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'reboot', 231bbbd9b6eSWillian Rampazzo 'reboot: Restarting system') 232bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 233bbbd9b6eSWillian Rampazzo self.vm.wait() 234bbbd9b6eSWillian Rampazzo 235bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code') 236bbbd9b6eSWillian Rampazzo def test_mips64el_malta_5KEc_cpio(self): 237bbbd9b6eSWillian Rampazzo """ 238bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mips64el 239bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 240bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 241bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:5KEc 242bbbd9b6eSWillian Rampazzo """ 243bbbd9b6eSWillian Rampazzo kernel_url = ('https://github.com/philmd/qemu-testing-blob/' 244bbbd9b6eSWillian Rampazzo 'raw/9ad2df38/mips/malta/mips64el/' 245bbbd9b6eSWillian Rampazzo 'vmlinux-3.19.3.mtoman.20150408') 246bbbd9b6eSWillian Rampazzo kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754' 247bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 248bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/' 249bbbd9b6eSWillian Rampazzo 'raw/8584a59e/rootfs/' 250bbbd9b6eSWillian Rampazzo 'mipsel64/rootfs.mipsel64r1.cpio.gz') 251bbbd9b6eSWillian Rampazzo initrd_hash = '1dbb8a396e916847325284dbe2151167' 252bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5', 253bbbd9b6eSWillian Rampazzo asset_hash=initrd_hash) 254bbbd9b6eSWillian Rampazzo initrd_path = self.workdir + "rootfs.cpio" 255bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 256bbbd9b6eSWillian Rampazzo 257bbbd9b6eSWillian Rampazzo self.vm.set_console() 258bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE 259bbbd9b6eSWillian Rampazzo + 'console=ttyS0 console=tty ' 260bbbd9b6eSWillian Rampazzo + 'rdinit=/sbin/init noreboot') 261bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 262bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 263bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 264bbbd9b6eSWillian Rampazzo '-no-reboot') 265bbbd9b6eSWillian Rampazzo self.vm.launch() 266bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'Boot successful.') 267bbbd9b6eSWillian Rampazzo 268bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 269bbbd9b6eSWillian Rampazzo 'MIPS 5KE') 270bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'uname -a', 271bbbd9b6eSWillian Rampazzo '3.19.3.mtoman.20150408') 272bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'reboot', 273bbbd9b6eSWillian Rampazzo 'reboot: Restarting system') 274bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 275bbbd9b6eSWillian Rampazzo self.vm.wait() 276bbbd9b6eSWillian Rampazzo 277085ea2b8SCleber Rosa def do_test_mips_malta32el_nanomips(self, kernel_path_xz): 278bbbd9b6eSWillian Rampazzo kernel_path = self.workdir + "kernel" 279bbbd9b6eSWillian Rampazzo with lzma.open(kernel_path_xz, 'rb') as f_in: 280bbbd9b6eSWillian Rampazzo with open(kernel_path, 'wb') as f_out: 281bbbd9b6eSWillian Rampazzo shutil.copyfileobj(f_in, f_out) 282bbbd9b6eSWillian Rampazzo 283bbbd9b6eSWillian Rampazzo self.vm.set_console() 284bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE 285bbbd9b6eSWillian Rampazzo + 'mem=256m@@0x0 ' 286bbbd9b6eSWillian Rampazzo + 'console=ttyS0') 287bbbd9b6eSWillian Rampazzo self.vm.add_args('-no-reboot', 288bbbd9b6eSWillian Rampazzo '-kernel', kernel_path, 289bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 290bbbd9b6eSWillian Rampazzo self.vm.launch() 291bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 292bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 293bbbd9b6eSWillian Rampazzo 294bbbd9b6eSWillian Rampazzo def test_mips_malta32el_nanomips_4k(self): 295bbbd9b6eSWillian Rampazzo """ 296bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mipsel 297bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 298bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 299bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:I7200 300bbbd9b6eSWillian Rampazzo """ 301b8f5932dSCleber Rosa kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/' 302bbbd9b6eSWillian Rampazzo 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 303bbbd9b6eSWillian Rampazzo 'generic_nano32r6el_page4k.xz') 304bbbd9b6eSWillian Rampazzo kernel_hash = '477456aafd2a0f1ddc9482727f20fe9575565dd6' 305085ea2b8SCleber Rosa kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 306085ea2b8SCleber Rosa self.do_test_mips_malta32el_nanomips(kernel_path_xz) 307bbbd9b6eSWillian Rampazzo 308bbbd9b6eSWillian Rampazzo def test_mips_malta32el_nanomips_16k_up(self): 309bbbd9b6eSWillian Rampazzo """ 310bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mipsel 311bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 312bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 313bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:I7200 314bbbd9b6eSWillian Rampazzo """ 315b8f5932dSCleber Rosa kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/' 316bbbd9b6eSWillian Rampazzo 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 317bbbd9b6eSWillian Rampazzo 'generic_nano32r6el_page16k_up.xz') 318bbbd9b6eSWillian Rampazzo kernel_hash = 'e882868f944c71c816e832e2303b7874d044a7bc' 319085ea2b8SCleber Rosa kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 320085ea2b8SCleber Rosa self.do_test_mips_malta32el_nanomips(kernel_path_xz) 321bbbd9b6eSWillian Rampazzo 322bbbd9b6eSWillian Rampazzo def test_mips_malta32el_nanomips_64k_dbg(self): 323bbbd9b6eSWillian Rampazzo """ 324bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mipsel 325bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 326bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 327bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:I7200 328bbbd9b6eSWillian Rampazzo """ 329b8f5932dSCleber Rosa kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/' 330bbbd9b6eSWillian Rampazzo 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 331bbbd9b6eSWillian Rampazzo 'generic_nano32r6el_page64k_dbg.xz') 332bbbd9b6eSWillian Rampazzo kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180' 333085ea2b8SCleber Rosa kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 334085ea2b8SCleber Rosa self.do_test_mips_malta32el_nanomips(kernel_path_xz) 335bbbd9b6eSWillian Rampazzo 336bbbd9b6eSWillian Rampazzo def test_aarch64_xlnx_versal_virt(self): 337bbbd9b6eSWillian Rampazzo """ 338bbbd9b6eSWillian Rampazzo :avocado: tags=arch:aarch64 339bbbd9b6eSWillian Rampazzo :avocado: tags=machine:xlnx-versal-virt 340bbbd9b6eSWillian Rampazzo :avocado: tags=device:pl011 341bbbd9b6eSWillian Rampazzo :avocado: tags=device:arm_gicv3 342bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 343bbbd9b6eSWillian Rampazzo """ 344bbbd9b6eSWillian Rampazzo images_url = ('http://ports.ubuntu.com/ubuntu-ports/dists/' 345bbbd9b6eSWillian Rampazzo 'bionic-updates/main/installer-arm64/' 3467fcc3f75SThomas Huth '20101020ubuntu543.19/images/') 347bbbd9b6eSWillian Rampazzo kernel_url = images_url + 'netboot/ubuntu-installer/arm64/linux' 3487fcc3f75SThomas Huth kernel_hash = 'e167757620640eb26de0972f578741924abb3a82' 349bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 350bbbd9b6eSWillian Rampazzo 351bbbd9b6eSWillian Rampazzo initrd_url = images_url + 'netboot/ubuntu-installer/arm64/initrd.gz' 3527fcc3f75SThomas Huth initrd_hash = 'cab5cb3fcefca8408aa5aae57f24574bfce8bdb9' 353bbbd9b6eSWillian Rampazzo initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 354bbbd9b6eSWillian Rampazzo 355bbbd9b6eSWillian Rampazzo self.vm.set_console() 356bbbd9b6eSWillian Rampazzo self.vm.add_args('-m', '2G', 357bbbd9b6eSWillian Rampazzo '-accel', 'tcg', 358bbbd9b6eSWillian Rampazzo '-kernel', kernel_path, 359bbbd9b6eSWillian Rampazzo '-initrd', initrd_path) 360bbbd9b6eSWillian Rampazzo self.vm.launch() 361bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Checked W+X mappings: passed') 362bbbd9b6eSWillian Rampazzo 363bbbd9b6eSWillian Rampazzo def test_arm_virt(self): 364bbbd9b6eSWillian Rampazzo """ 365bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 366bbbd9b6eSWillian Rampazzo :avocado: tags=machine:virt 367bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 368bbbd9b6eSWillian Rampazzo """ 369bbbd9b6eSWillian Rampazzo kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' 370bbbd9b6eSWillian Rampazzo '/linux/releases/29/Everything/armhfp/os/images/pxeboot' 371bbbd9b6eSWillian Rampazzo '/vmlinuz') 372bbbd9b6eSWillian Rampazzo kernel_hash = 'e9826d741b4fb04cadba8d4824d1ed3b7fb8b4d4' 373bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 374bbbd9b6eSWillian Rampazzo 375bbbd9b6eSWillian Rampazzo self.vm.set_console() 376bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 377bbbd9b6eSWillian Rampazzo 'console=ttyAMA0') 378bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 379bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 380bbbd9b6eSWillian Rampazzo self.vm.launch() 381bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 382bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 383bbbd9b6eSWillian Rampazzo 384bbbd9b6eSWillian Rampazzo def test_arm_emcraft_sf2(self): 385bbbd9b6eSWillian Rampazzo """ 386bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 387bbbd9b6eSWillian Rampazzo :avocado: tags=machine:emcraft-sf2 388bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 389bbbd9b6eSWillian Rampazzo :avocado: tags=u-boot 390bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 391bbbd9b6eSWillian Rampazzo """ 3920793fe01SPeter Maydell self.require_netdev('user') 3930793fe01SPeter Maydell 394bbbd9b6eSWillian Rampazzo uboot_url = ('https://raw.githubusercontent.com/' 395bbbd9b6eSWillian Rampazzo 'Subbaraya-Sundeep/qemu-test-binaries/' 396bbbd9b6eSWillian Rampazzo 'fe371d32e50ca682391e1e70ab98c2942aeffb01/u-boot') 397bbbd9b6eSWillian Rampazzo uboot_hash = 'cbb8cbab970f594bf6523b9855be209c08374ae2' 398bbbd9b6eSWillian Rampazzo uboot_path = self.fetch_asset(uboot_url, asset_hash=uboot_hash) 399bbbd9b6eSWillian Rampazzo spi_url = ('https://raw.githubusercontent.com/' 400bbbd9b6eSWillian Rampazzo 'Subbaraya-Sundeep/qemu-test-binaries/' 401bbbd9b6eSWillian Rampazzo 'fe371d32e50ca682391e1e70ab98c2942aeffb01/spi.bin') 402bbbd9b6eSWillian Rampazzo spi_hash = '65523a1835949b6f4553be96dec1b6a38fb05501' 403bbbd9b6eSWillian Rampazzo spi_path = self.fetch_asset(spi_url, asset_hash=spi_hash) 404*4ec88f16SCleber Rosa spi_path_rw = os.path.join(self.workdir, os.path.basename(spi_path)) 405*4ec88f16SCleber Rosa shutil.copy(spi_path, spi_path_rw) 406bbbd9b6eSWillian Rampazzo 407*4ec88f16SCleber Rosa file_truncate(spi_path_rw, 16 << 20) # Spansion S25FL128SDPBHICO is 16 MiB 408a7f16aedSPhilippe Mathieu-Daudé 409bbbd9b6eSWillian Rampazzo self.vm.set_console() 410bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE 411bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', uboot_path, 412bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 413*4ec88f16SCleber Rosa '-drive', 'file=' + spi_path_rw + ',if=mtd,format=raw', 414bbbd9b6eSWillian Rampazzo '-no-reboot') 415bbbd9b6eSWillian Rampazzo self.vm.launch() 416bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Enter \'help\' for a list') 417bbbd9b6eSWillian Rampazzo 418bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ifconfig eth0 10.0.2.15', 419bbbd9b6eSWillian Rampazzo 'eth0: link becomes ready') 420bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', 421bbbd9b6eSWillian Rampazzo '3 packets transmitted, 3 packets received, 0% packet loss') 422bbbd9b6eSWillian Rampazzo 423bbbd9b6eSWillian Rampazzo def do_test_arm_raspi2(self, uart_id): 424bbbd9b6eSWillian Rampazzo """ 425bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 426bbbd9b6eSWillian Rampazzo 427bbbd9b6eSWillian Rampazzo The kernel can be rebuilt using the kernel source referenced 428bbbd9b6eSWillian Rampazzo and following the instructions on the on: 429bbbd9b6eSWillian Rampazzo https://www.raspberrypi.org/documentation/linux/kernel/building.md 430bbbd9b6eSWillian Rampazzo """ 431bbbd9b6eSWillian Rampazzo serial_kernel_cmdline = { 432bbbd9b6eSWillian Rampazzo 0: 'earlycon=pl011,0x3f201000 console=ttyAMA0', 433bbbd9b6eSWillian Rampazzo } 434bbbd9b6eSWillian Rampazzo deb_url = ('http://archive.raspberrypi.org/debian/' 435bbbd9b6eSWillian Rampazzo 'pool/main/r/raspberrypi-firmware/' 436bbbd9b6eSWillian Rampazzo 'raspberrypi-kernel_1.20190215-1_armhf.deb') 437bbbd9b6eSWillian Rampazzo deb_hash = 'cd284220b32128c5084037553db3c482426f3972' 438bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 439bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img') 440bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb') 441bbbd9b6eSWillian Rampazzo 442bbbd9b6eSWillian Rampazzo self.vm.set_console() 443bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 444bbbd9b6eSWillian Rampazzo serial_kernel_cmdline[uart_id] + 445bbbd9b6eSWillian Rampazzo ' root=/dev/mmcblk0p2 rootwait ' + 446bbbd9b6eSWillian Rampazzo 'dwc_otg.fiq_fsm_enable=0') 447bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 448bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 449bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 450bbbd9b6eSWillian Rampazzo '-device', 'usb-kbd') 451bbbd9b6eSWillian Rampazzo self.vm.launch() 452bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 453bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 454bbbd9b6eSWillian Rampazzo console_pattern = 'Product: QEMU USB Keyboard' 455bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 456bbbd9b6eSWillian Rampazzo 457bbbd9b6eSWillian Rampazzo def test_arm_raspi2_uart0(self): 458bbbd9b6eSWillian Rampazzo """ 459bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 460bbbd9b6eSWillian Rampazzo :avocado: tags=machine:raspi2b 461bbbd9b6eSWillian Rampazzo :avocado: tags=device:pl011 462bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 463bbbd9b6eSWillian Rampazzo """ 464bbbd9b6eSWillian Rampazzo self.do_test_arm_raspi2(0) 465bbbd9b6eSWillian Rampazzo 466bbbd9b6eSWillian Rampazzo def test_arm_raspi2_initrd(self): 467bbbd9b6eSWillian Rampazzo """ 468bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 469bbbd9b6eSWillian Rampazzo :avocado: tags=machine:raspi2b 470bbbd9b6eSWillian Rampazzo """ 471bbbd9b6eSWillian Rampazzo deb_url = ('http://archive.raspberrypi.org/debian/' 472bbbd9b6eSWillian Rampazzo 'pool/main/r/raspberrypi-firmware/' 473bbbd9b6eSWillian Rampazzo 'raspberrypi-kernel_1.20190215-1_armhf.deb') 474bbbd9b6eSWillian Rampazzo deb_hash = 'cd284220b32128c5084037553db3c482426f3972' 475bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 476bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img') 477bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb') 478bbbd9b6eSWillian Rampazzo 479bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 480bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 481bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv7a.cpio.gz') 482bbbd9b6eSWillian Rampazzo initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' 483bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 484bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 485bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 486bbbd9b6eSWillian Rampazzo 487bbbd9b6eSWillian Rampazzo self.vm.set_console() 488bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 489bbbd9b6eSWillian Rampazzo 'earlycon=pl011,0x3f201000 console=ttyAMA0 ' 490bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot ' + 491bbbd9b6eSWillian Rampazzo 'dwc_otg.fiq_fsm_enable=0') 492bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 493bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 494bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 495bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 496bbbd9b6eSWillian Rampazzo '-no-reboot') 497bbbd9b6eSWillian Rampazzo self.vm.launch() 498bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 499bbbd9b6eSWillian Rampazzo 500bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 501bbbd9b6eSWillian Rampazzo 'BCM2835') 502bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 503bbbd9b6eSWillian Rampazzo '/soc/cprman@7e101000') 504cc45d25cSPeter Maydell exec_command_and_wait_for_pattern(self, 'halt', 'reboot: System halted') 505bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 506bbbd9b6eSWillian Rampazzo self.vm.wait() 507bbbd9b6eSWillian Rampazzo 5082f79d2edSPeter Maydell def test_arm_raspi4(self): 5092f79d2edSPeter Maydell """ 5102f79d2edSPeter Maydell :avocado: tags=arch:aarch64 5112f79d2edSPeter Maydell :avocado: tags=machine:raspi4b 5122f79d2edSPeter Maydell :avocado: tags=device:pl011 5132f79d2edSPeter Maydell :avocado: tags=accel:tcg 5142f79d2edSPeter Maydell :avocado: tags=rpi4b 5152f79d2edSPeter Maydell 5162f79d2edSPeter Maydell The kernel can be rebuilt using the kernel source referenced 5172f79d2edSPeter Maydell and following the instructions on the on: 5182f79d2edSPeter Maydell https://www.raspberrypi.org/documentation/linux/kernel/building.md 5192f79d2edSPeter Maydell """ 5202f79d2edSPeter Maydell 5212f79d2edSPeter Maydell deb_url = ('http://archive.raspberrypi.org/debian/' 5222f79d2edSPeter Maydell 'pool/main/r/raspberrypi-firmware/' 5232f79d2edSPeter Maydell 'raspberrypi-kernel_1.20230106-1_arm64.deb') 5242f79d2edSPeter Maydell deb_hash = '08dc55696535b18a6d4fe6fa10d4c0d905cbb2ed' 5252f79d2edSPeter Maydell deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 5262f79d2edSPeter Maydell kernel_path = self.extract_from_deb(deb_path, '/boot/kernel8.img') 5272f79d2edSPeter Maydell dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2711-rpi-4-b.dtb') 5282f79d2edSPeter Maydell 5292f79d2edSPeter Maydell self.vm.set_console() 5302f79d2edSPeter Maydell kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 5312f79d2edSPeter Maydell 'earlycon=pl011,mmio32,0xfe201000 ' + 5322f79d2edSPeter Maydell 'console=ttyAMA0,115200 ' + 5332f79d2edSPeter Maydell 'root=/dev/mmcblk1p2 rootwait ' + 5342f79d2edSPeter Maydell 'dwc_otg.fiq_fsm_enable=0') 5352f79d2edSPeter Maydell self.vm.add_args('-kernel', kernel_path, 5362f79d2edSPeter Maydell '-dtb', dtb_path, 5372f79d2edSPeter Maydell '-append', kernel_command_line) 5382f79d2edSPeter Maydell # When PCI is supported we can add a USB controller: 5392f79d2edSPeter Maydell # '-device', 'qemu-xhci,bus=pcie.1,id=xhci', 5402f79d2edSPeter Maydell # '-device', 'usb-kbd,bus=xhci.0', 5412f79d2edSPeter Maydell self.vm.launch() 5422f79d2edSPeter Maydell console_pattern = 'Kernel command line: %s' % kernel_command_line 5432f79d2edSPeter Maydell self.wait_for_console_pattern(console_pattern) 5442f79d2edSPeter Maydell # When USB is enabled we can look for this 5452f79d2edSPeter Maydell # console_pattern = 'Product: QEMU USB Keyboard' 5462f79d2edSPeter Maydell # self.wait_for_console_pattern(console_pattern) 5472f79d2edSPeter Maydell console_pattern = 'Waiting for root device' 5482f79d2edSPeter Maydell self.wait_for_console_pattern(console_pattern) 5492f79d2edSPeter Maydell 5502f79d2edSPeter Maydell 5512f79d2edSPeter Maydell def test_arm_raspi4_initrd(self): 5522f79d2edSPeter Maydell """ 5532f79d2edSPeter Maydell :avocado: tags=arch:aarch64 5542f79d2edSPeter Maydell :avocado: tags=machine:raspi4b 5552f79d2edSPeter Maydell :avocado: tags=device:pl011 5562f79d2edSPeter Maydell :avocado: tags=accel:tcg 5572f79d2edSPeter Maydell :avocado: tags=rpi4b 5582f79d2edSPeter Maydell 5592f79d2edSPeter Maydell The kernel can be rebuilt using the kernel source referenced 5602f79d2edSPeter Maydell and following the instructions on the on: 5612f79d2edSPeter Maydell https://www.raspberrypi.org/documentation/linux/kernel/building.md 5622f79d2edSPeter Maydell """ 5632f79d2edSPeter Maydell deb_url = ('http://archive.raspberrypi.org/debian/' 5642f79d2edSPeter Maydell 'pool/main/r/raspberrypi-firmware/' 5652f79d2edSPeter Maydell 'raspberrypi-kernel_1.20230106-1_arm64.deb') 5662f79d2edSPeter Maydell deb_hash = '08dc55696535b18a6d4fe6fa10d4c0d905cbb2ed' 5672f79d2edSPeter Maydell deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 5682f79d2edSPeter Maydell kernel_path = self.extract_from_deb(deb_path, '/boot/kernel8.img') 5692f79d2edSPeter Maydell dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2711-rpi-4-b.dtb') 5702f79d2edSPeter Maydell 5712f79d2edSPeter Maydell initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 5722f79d2edSPeter Maydell '86b2be1384d41c8c388e63078a847f1e1c4cb1de/rootfs/' 5732f79d2edSPeter Maydell 'arm64/rootfs.cpio.gz') 5742f79d2edSPeter Maydell initrd_hash = 'f3d4f9fa92a49aa542f1b44d34be77bbf8ca5b9d' 5752f79d2edSPeter Maydell initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 5762f79d2edSPeter Maydell initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 5772f79d2edSPeter Maydell archive.gzip_uncompress(initrd_path_gz, initrd_path) 5782f79d2edSPeter Maydell 5792f79d2edSPeter Maydell self.vm.set_console() 5802f79d2edSPeter Maydell kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 5812f79d2edSPeter Maydell 'earlycon=pl011,mmio32,0xfe201000 ' + 5822f79d2edSPeter Maydell 'console=ttyAMA0,115200 ' + 5832f79d2edSPeter Maydell 'panic=-1 noreboot ' + 5842f79d2edSPeter Maydell 'dwc_otg.fiq_fsm_enable=0') 5852f79d2edSPeter Maydell self.vm.add_args('-kernel', kernel_path, 5862f79d2edSPeter Maydell '-dtb', dtb_path, 5872f79d2edSPeter Maydell '-initrd', initrd_path, 5882f79d2edSPeter Maydell '-append', kernel_command_line, 5892f79d2edSPeter Maydell '-no-reboot') 5902f79d2edSPeter Maydell # When PCI is supported we can add a USB controller: 5912f79d2edSPeter Maydell # '-device', 'qemu-xhci,bus=pcie.1,id=xhci', 5922f79d2edSPeter Maydell # '-device', 'usb-kbd,bus=xhci.0', 5932f79d2edSPeter Maydell self.vm.launch() 5942f79d2edSPeter Maydell self.wait_for_console_pattern('Boot successful.') 5952f79d2edSPeter Maydell 5962f79d2edSPeter Maydell exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 5972f79d2edSPeter Maydell 'BCM2835') 5982f79d2edSPeter Maydell exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 5992f79d2edSPeter Maydell 'cprman@7e101000') 6002f79d2edSPeter Maydell exec_command_and_wait_for_pattern(self, 'halt', 'reboot: System halted') 6012f79d2edSPeter Maydell # TODO: Raspberry Pi4 doesn't shut down properly with recent kernels 6022f79d2edSPeter Maydell # Wait for VM to shut down gracefully 6032f79d2edSPeter Maydell #self.vm.wait() 6042f79d2edSPeter Maydell 605bbbd9b6eSWillian Rampazzo def test_arm_exynos4210_initrd(self): 606bbbd9b6eSWillian Rampazzo """ 607bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 608bbbd9b6eSWillian Rampazzo :avocado: tags=machine:smdkc210 609bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 610bbbd9b6eSWillian Rampazzo """ 611bbbd9b6eSWillian Rampazzo deb_url = ('https://snapshot.debian.org/archive/debian/' 612bbbd9b6eSWillian Rampazzo '20190928T224601Z/pool/main/l/linux/' 613bbbd9b6eSWillian Rampazzo 'linux-image-4.19.0-6-armmp_4.19.67-2+deb10u1_armhf.deb') 614bbbd9b6eSWillian Rampazzo deb_hash = 'fa9df4a0d38936cb50084838f2cb933f570d7d82' 615bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 616bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 617bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-4.19.0-6-armmp') 618bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-4.19.0-6-armmp/exynos4210-smdkv310.dtb' 619bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 620bbbd9b6eSWillian Rampazzo 621bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 622bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 623bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv5.cpio.gz') 624bbbd9b6eSWillian Rampazzo initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' 625bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 626bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 627bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 628bbbd9b6eSWillian Rampazzo 629bbbd9b6eSWillian Rampazzo self.vm.set_console() 630bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 631bbbd9b6eSWillian Rampazzo 'earlycon=exynos4210,0x13800000 earlyprintk ' + 632bbbd9b6eSWillian Rampazzo 'console=ttySAC0,115200n8 ' + 633bbbd9b6eSWillian Rampazzo 'random.trust_cpu=off cryptomgr.notests ' + 634bbbd9b6eSWillian Rampazzo 'cpuidle.off=1 panic=-1 noreboot') 635bbbd9b6eSWillian Rampazzo 636bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 637bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 638bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 639bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 640bbbd9b6eSWillian Rampazzo '-no-reboot') 641bbbd9b6eSWillian Rampazzo self.vm.launch() 642bbbd9b6eSWillian Rampazzo 643bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 644bbbd9b6eSWillian Rampazzo # TODO user command, for now the uart is stuck 645bbbd9b6eSWillian Rampazzo 646bbbd9b6eSWillian Rampazzo def test_arm_cubieboard_initrd(self): 647bbbd9b6eSWillian Rampazzo """ 648bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 649bbbd9b6eSWillian Rampazzo :avocado: tags=machine:cubieboard 650bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 651bbbd9b6eSWillian Rampazzo """ 652bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 653dcc5c018SPeter Maydell 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb') 654dcc5c018SPeter Maydell deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b' 655bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 656bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 657dcc5c018SPeter Maydell '/boot/vmlinuz-6.6.16-current-sunxi') 658dcc5c018SPeter Maydell dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun4i-a10-cubieboard.dtb' 659bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 660bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 661bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 662bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv5.cpio.gz') 663bbbd9b6eSWillian Rampazzo initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' 664bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 665bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 666bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 667bbbd9b6eSWillian Rampazzo 668bbbd9b6eSWillian Rampazzo self.vm.set_console() 669bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 670bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 671bbbd9b6eSWillian Rampazzo 'usbcore.nousb ' 672bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 673bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 674bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 675bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 676bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 677bbbd9b6eSWillian Rampazzo '-no-reboot') 678bbbd9b6eSWillian Rampazzo self.vm.launch() 679bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 680bbbd9b6eSWillian Rampazzo 681bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 682bbbd9b6eSWillian Rampazzo 'Allwinner sun4i/sun5i') 683bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 684bbbd9b6eSWillian Rampazzo 'system-control@1c00000') 685d784c5fbSStrahinja Jankovic exec_command_and_wait_for_pattern(self, 'reboot', 686d784c5fbSStrahinja Jankovic 'reboot: Restarting system') 687d784c5fbSStrahinja Jankovic # Wait for VM to shut down gracefully 688d784c5fbSStrahinja Jankovic self.vm.wait() 689bbbd9b6eSWillian Rampazzo 690bbbd9b6eSWillian Rampazzo def test_arm_cubieboard_sata(self): 691bbbd9b6eSWillian Rampazzo """ 692bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 693bbbd9b6eSWillian Rampazzo :avocado: tags=machine:cubieboard 694bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 695bbbd9b6eSWillian Rampazzo """ 696bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 697dcc5c018SPeter Maydell 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb') 698dcc5c018SPeter Maydell deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b' 699bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 700bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 701dcc5c018SPeter Maydell '/boot/vmlinuz-6.6.16-current-sunxi') 702dcc5c018SPeter Maydell dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun4i-a10-cubieboard.dtb' 703bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 704bbbd9b6eSWillian Rampazzo rootfs_url = ('https://github.com/groeck/linux-build-test/raw/' 705bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 706bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv5.ext2.gz') 707bbbd9b6eSWillian Rampazzo rootfs_hash = '093e89d2b4d982234bf528bc9fb2f2f17a9d1f93' 708bbbd9b6eSWillian Rampazzo rootfs_path_gz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) 709bbbd9b6eSWillian Rampazzo rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') 710bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(rootfs_path_gz, rootfs_path) 711bbbd9b6eSWillian Rampazzo 712bbbd9b6eSWillian Rampazzo self.vm.set_console() 713bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 714bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 715bbbd9b6eSWillian Rampazzo 'usbcore.nousb ' 716bbbd9b6eSWillian Rampazzo 'root=/dev/sda ro ' 717bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 718bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 719bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 720bbbd9b6eSWillian Rampazzo '-drive', 'if=none,format=raw,id=disk0,file=' 721bbbd9b6eSWillian Rampazzo + rootfs_path, 722bbbd9b6eSWillian Rampazzo '-device', 'ide-hd,bus=ide.0,drive=disk0', 723bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 724bbbd9b6eSWillian Rampazzo '-no-reboot') 725bbbd9b6eSWillian Rampazzo self.vm.launch() 726bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 727bbbd9b6eSWillian Rampazzo 728bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 729bbbd9b6eSWillian Rampazzo 'Allwinner sun4i/sun5i') 730bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', 731bbbd9b6eSWillian Rampazzo 'sda') 732d784c5fbSStrahinja Jankovic exec_command_and_wait_for_pattern(self, 'reboot', 733d784c5fbSStrahinja Jankovic 'reboot: Restarting system') 734d784c5fbSStrahinja Jankovic # Wait for VM to shut down gracefully 735d784c5fbSStrahinja Jankovic self.vm.wait() 736bbbd9b6eSWillian Rampazzo 73722bd244aSStrahinja Jankovic @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') 73822bd244aSStrahinja Jankovic def test_arm_cubieboard_openwrt_22_03_2(self): 73922bd244aSStrahinja Jankovic """ 74022bd244aSStrahinja Jankovic :avocado: tags=arch:arm 74122bd244aSStrahinja Jankovic :avocado: tags=machine:cubieboard 74222bd244aSStrahinja Jankovic :avocado: tags=device:sd 74322bd244aSStrahinja Jankovic """ 74422bd244aSStrahinja Jankovic 74522bd244aSStrahinja Jankovic # This test download a 7.5 MiB compressed image and expand it 74622bd244aSStrahinja Jankovic # to 126 MiB. 74722bd244aSStrahinja Jankovic image_url = ('https://downloads.openwrt.org/releases/22.03.2/targets/' 74822bd244aSStrahinja Jankovic 'sunxi/cortexa8/openwrt-22.03.2-sunxi-cortexa8-' 74922bd244aSStrahinja Jankovic 'cubietech_a10-cubieboard-ext4-sdcard.img.gz') 75022bd244aSStrahinja Jankovic image_hash = ('94b5ecbfbc0b3b56276e5146b899eafa' 75122bd244aSStrahinja Jankovic '2ac5dc2d08733d6705af9f144f39f554') 75222bd244aSStrahinja Jankovic image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash, 75322bd244aSStrahinja Jankovic algorithm='sha256') 75422bd244aSStrahinja Jankovic image_path = archive.extract(image_path_gz, self.workdir) 75522bd244aSStrahinja Jankovic image_pow2ceil_expand(image_path) 75622bd244aSStrahinja Jankovic 75722bd244aSStrahinja Jankovic self.vm.set_console() 75822bd244aSStrahinja Jankovic self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw', 75922bd244aSStrahinja Jankovic '-nic', 'user', 76022bd244aSStrahinja Jankovic '-no-reboot') 76122bd244aSStrahinja Jankovic self.vm.launch() 76222bd244aSStrahinja Jankovic 76322bd244aSStrahinja Jankovic kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 76422bd244aSStrahinja Jankovic 'usbcore.nousb ' 76522bd244aSStrahinja Jankovic 'noreboot') 76622bd244aSStrahinja Jankovic 76722bd244aSStrahinja Jankovic self.wait_for_console_pattern('U-Boot SPL') 76822bd244aSStrahinja Jankovic 76922bd244aSStrahinja Jankovic interrupt_interactive_console_until_pattern( 77022bd244aSStrahinja Jankovic self, 'Hit any key to stop autoboot:', '=>') 77122bd244aSStrahinja Jankovic exec_command_and_wait_for_pattern(self, "setenv extraargs '" + 77222bd244aSStrahinja Jankovic kernel_command_line + "'", '=>') 77322bd244aSStrahinja Jankovic exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...'); 77422bd244aSStrahinja Jankovic 77522bd244aSStrahinja Jankovic self.wait_for_console_pattern( 77622bd244aSStrahinja Jankovic 'Please press Enter to activate this console.') 77722bd244aSStrahinja Jankovic 77822bd244aSStrahinja Jankovic exec_command_and_wait_for_pattern(self, ' ', 'root@') 77922bd244aSStrahinja Jankovic 78022bd244aSStrahinja Jankovic exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 78122bd244aSStrahinja Jankovic 'Allwinner sun4i/sun5i') 782d784c5fbSStrahinja Jankovic exec_command_and_wait_for_pattern(self, 'reboot', 783d784c5fbSStrahinja Jankovic 'reboot: Restarting system') 784d784c5fbSStrahinja Jankovic # Wait for VM to shut down gracefully 785d784c5fbSStrahinja Jankovic self.vm.wait() 78622bd244aSStrahinja Jankovic 787bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') 788bbbd9b6eSWillian Rampazzo def test_arm_quanta_gsj(self): 789bbbd9b6eSWillian Rampazzo """ 790bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 791bbbd9b6eSWillian Rampazzo :avocado: tags=machine:quanta-gsj 792bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 793bbbd9b6eSWillian Rampazzo """ 794bbbd9b6eSWillian Rampazzo # 25 MiB compressed, 32 MiB uncompressed. 795bbbd9b6eSWillian Rampazzo image_url = ( 796bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 797bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/obmc-phosphor-image-gsj.static.mtd.gz') 798bbbd9b6eSWillian Rampazzo image_hash = '14895e634923345cb5c8776037ff7876df96f6b1' 799bbbd9b6eSWillian Rampazzo image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash) 800bbbd9b6eSWillian Rampazzo image_name = 'obmc.mtd' 801bbbd9b6eSWillian Rampazzo image_path = os.path.join(self.workdir, image_name) 802bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(image_path_gz, image_path) 803bbbd9b6eSWillian Rampazzo 804bbbd9b6eSWillian Rampazzo self.vm.set_console() 805bbbd9b6eSWillian Rampazzo drive_args = 'file=' + image_path + ',if=mtd,bus=0,unit=0' 806bbbd9b6eSWillian Rampazzo self.vm.add_args('-drive', drive_args) 807bbbd9b6eSWillian Rampazzo self.vm.launch() 808bbbd9b6eSWillian Rampazzo 809bbbd9b6eSWillian Rampazzo # Disable drivers and services that stall for a long time during boot, 810bbbd9b6eSWillian Rampazzo # to avoid running past the 90-second timeout. These may be removed 811bbbd9b6eSWillian Rampazzo # as the corresponding device support is added. 812bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + ( 813bbbd9b6eSWillian Rampazzo 'console=${console} ' 814bbbd9b6eSWillian Rampazzo 'mem=${mem} ' 815bbbd9b6eSWillian Rampazzo 'initcall_blacklist=npcm_i2c_bus_driver_init ' 816bbbd9b6eSWillian Rampazzo 'systemd.mask=systemd-random-seed.service ' 817bbbd9b6eSWillian Rampazzo 'systemd.mask=dropbearkey.service ' 818bbbd9b6eSWillian Rampazzo ) 819bbbd9b6eSWillian Rampazzo 820bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('> BootBlock by Nuvoton') 821bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('>Device: Poleg BMC NPCM730') 822bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('>Skip DDR init.') 823bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('U-Boot ') 824bbbd9b6eSWillian Rampazzo interrupt_interactive_console_until_pattern( 825bbbd9b6eSWillian Rampazzo self, 'Hit any key to stop autoboot:', 'U-Boot>') 826bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern( 827bbbd9b6eSWillian Rampazzo self, "setenv bootargs ${bootargs} " + kernel_command_line, 828bbbd9b6eSWillian Rampazzo 'U-Boot>') 829bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern( 830bbbd9b6eSWillian Rampazzo self, 'run romboot', 'Booting Kernel from flash') 831bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') 832bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') 833bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('OpenBMC Project Reference Distro') 834bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('gsj login:') 835bbbd9b6eSWillian Rampazzo 836bbbd9b6eSWillian Rampazzo def test_arm_quanta_gsj_initrd(self): 837bbbd9b6eSWillian Rampazzo """ 838bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 839bbbd9b6eSWillian Rampazzo :avocado: tags=machine:quanta-gsj 840bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 841bbbd9b6eSWillian Rampazzo """ 842bbbd9b6eSWillian Rampazzo initrd_url = ( 843bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 844bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/obmc-phosphor-initramfs-gsj.cpio.xz') 845bbbd9b6eSWillian Rampazzo initrd_hash = '98fefe5d7e56727b1eb17d5c00311b1b5c945300' 846bbbd9b6eSWillian Rampazzo initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 847bbbd9b6eSWillian Rampazzo kernel_url = ( 848bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 849bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/uImage-gsj.bin') 850bbbd9b6eSWillian Rampazzo kernel_hash = 'fa67b2f141d56d39b3c54305c0e8a899c99eb2c7' 851bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 852bbbd9b6eSWillian Rampazzo dtb_url = ( 853bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 854bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/nuvoton-npcm730-gsj.dtb') 855bbbd9b6eSWillian Rampazzo dtb_hash = '18315f7006d7b688d8312d5c727eecd819aa36a4' 856bbbd9b6eSWillian Rampazzo dtb_path = self.fetch_asset(dtb_url, asset_hash=dtb_hash) 857bbbd9b6eSWillian Rampazzo 858bbbd9b6eSWillian Rampazzo self.vm.set_console() 859bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 860bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200n8 ' 861bbbd9b6eSWillian Rampazzo 'earlycon=uart8250,mmio32,0xf0001000') 862bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 863bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 864bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 865bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 866bbbd9b6eSWillian Rampazzo self.vm.launch() 867bbbd9b6eSWillian Rampazzo 868bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') 869bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') 870bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern( 871bbbd9b6eSWillian Rampazzo 'Give root password for system maintenance') 872bbbd9b6eSWillian Rampazzo 8736c4f229aSqianfan Zhao def test_arm_bpim2u(self): 8746c4f229aSqianfan Zhao """ 8756c4f229aSqianfan Zhao :avocado: tags=arch:arm 8766c4f229aSqianfan Zhao :avocado: tags=machine:bpim2u 8776c4f229aSqianfan Zhao :avocado: tags=accel:tcg 8786c4f229aSqianfan Zhao """ 879dcc5c018SPeter Maydell deb_url = ('https://apt.armbian.com/pool/main/l/' 880dcc5c018SPeter Maydell 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb') 881dcc5c018SPeter Maydell deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b' 8826c4f229aSqianfan Zhao deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 8836c4f229aSqianfan Zhao kernel_path = self.extract_from_deb(deb_path, 884dcc5c018SPeter Maydell '/boot/vmlinuz-6.6.16-current-sunxi') 885dcc5c018SPeter Maydell dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/' 8866c4f229aSqianfan Zhao 'sun8i-r40-bananapi-m2-ultra.dtb') 8876c4f229aSqianfan Zhao dtb_path = self.extract_from_deb(deb_path, dtb_path) 8886c4f229aSqianfan Zhao 8896c4f229aSqianfan Zhao self.vm.set_console() 8906c4f229aSqianfan Zhao kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 8916c4f229aSqianfan Zhao 'console=ttyS0,115200n8 ' 8926c4f229aSqianfan Zhao 'earlycon=uart,mmio32,0x1c28000') 8936c4f229aSqianfan Zhao self.vm.add_args('-kernel', kernel_path, 8946c4f229aSqianfan Zhao '-dtb', dtb_path, 8956c4f229aSqianfan Zhao '-append', kernel_command_line) 8966c4f229aSqianfan Zhao self.vm.launch() 8976c4f229aSqianfan Zhao console_pattern = 'Kernel command line: %s' % kernel_command_line 8986c4f229aSqianfan Zhao self.wait_for_console_pattern(console_pattern) 8996c4f229aSqianfan Zhao 9006c4f229aSqianfan Zhao def test_arm_bpim2u_initrd(self): 9016c4f229aSqianfan Zhao """ 9026c4f229aSqianfan Zhao :avocado: tags=arch:arm 9036c4f229aSqianfan Zhao :avocado: tags=accel:tcg 9046c4f229aSqianfan Zhao :avocado: tags=machine:bpim2u 9056c4f229aSqianfan Zhao """ 906dcc5c018SPeter Maydell deb_url = ('https://apt.armbian.com/pool/main/l/' 907dcc5c018SPeter Maydell 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb') 908dcc5c018SPeter Maydell deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b' 9096c4f229aSqianfan Zhao deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 9106c4f229aSqianfan Zhao kernel_path = self.extract_from_deb(deb_path, 911dcc5c018SPeter Maydell '/boot/vmlinuz-6.6.16-current-sunxi') 912dcc5c018SPeter Maydell dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/' 9136c4f229aSqianfan Zhao 'sun8i-r40-bananapi-m2-ultra.dtb') 9146c4f229aSqianfan Zhao dtb_path = self.extract_from_deb(deb_path, dtb_path) 9156c4f229aSqianfan Zhao initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 9166c4f229aSqianfan Zhao '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 9176c4f229aSqianfan Zhao 'arm/rootfs-armv7a.cpio.gz') 9186c4f229aSqianfan Zhao initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' 9196c4f229aSqianfan Zhao initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 9206c4f229aSqianfan Zhao initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 9216c4f229aSqianfan Zhao archive.gzip_uncompress(initrd_path_gz, initrd_path) 9226c4f229aSqianfan Zhao 9236c4f229aSqianfan Zhao self.vm.set_console() 9246c4f229aSqianfan Zhao kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 9256c4f229aSqianfan Zhao 'console=ttyS0,115200 ' 9266c4f229aSqianfan Zhao 'panic=-1 noreboot') 9276c4f229aSqianfan Zhao self.vm.add_args('-kernel', kernel_path, 9286c4f229aSqianfan Zhao '-dtb', dtb_path, 9296c4f229aSqianfan Zhao '-initrd', initrd_path, 9306c4f229aSqianfan Zhao '-append', kernel_command_line, 9316c4f229aSqianfan Zhao '-no-reboot') 9326c4f229aSqianfan Zhao self.vm.launch() 9336c4f229aSqianfan Zhao self.wait_for_console_pattern('Boot successful.') 9346c4f229aSqianfan Zhao 9356c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 9366c4f229aSqianfan Zhao 'Allwinner sun8i Family') 9376c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 9386c4f229aSqianfan Zhao 'system-control@1c00000') 9396c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'reboot', 9406c4f229aSqianfan Zhao 'reboot: Restarting system') 9416c4f229aSqianfan Zhao # Wait for VM to shut down gracefully 9426c4f229aSqianfan Zhao self.vm.wait() 9436c4f229aSqianfan Zhao 9446c4f229aSqianfan Zhao def test_arm_bpim2u_gmac(self): 9456c4f229aSqianfan Zhao """ 9466c4f229aSqianfan Zhao :avocado: tags=arch:arm 9476c4f229aSqianfan Zhao :avocado: tags=accel:tcg 9486c4f229aSqianfan Zhao :avocado: tags=machine:bpim2u 9496c4f229aSqianfan Zhao :avocado: tags=device:sd 9506c4f229aSqianfan Zhao """ 9516c4f229aSqianfan Zhao self.require_netdev('user') 9526c4f229aSqianfan Zhao 953dcc5c018SPeter Maydell deb_url = ('https://apt.armbian.com/pool/main/l/' 954dcc5c018SPeter Maydell 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb') 955dcc5c018SPeter Maydell deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b' 9566c4f229aSqianfan Zhao deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 9576c4f229aSqianfan Zhao kernel_path = self.extract_from_deb(deb_path, 958dcc5c018SPeter Maydell '/boot/vmlinuz-6.6.16-current-sunxi') 959dcc5c018SPeter Maydell dtb_path = ('/usr/lib/linux-image-6.6.16-current-sunxi/' 9606c4f229aSqianfan Zhao 'sun8i-r40-bananapi-m2-ultra.dtb') 9616c4f229aSqianfan Zhao dtb_path = self.extract_from_deb(deb_path, dtb_path) 9626c4f229aSqianfan Zhao rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/' 9636c4f229aSqianfan Zhao 'buildroot-baseline/20221116.0/armel/rootfs.ext2.xz') 9646c4f229aSqianfan Zhao rootfs_hash = 'fae32f337c7b87547b10f42599acf109da8b6d9a' 9656c4f229aSqianfan Zhao rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) 9666c4f229aSqianfan Zhao rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') 9676c4f229aSqianfan Zhao archive.lzma_uncompress(rootfs_path_xz, rootfs_path) 9686c4f229aSqianfan Zhao image_pow2ceil_expand(rootfs_path) 9696c4f229aSqianfan Zhao 9706c4f229aSqianfan Zhao self.vm.set_console() 9716c4f229aSqianfan Zhao kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 9726c4f229aSqianfan Zhao 'console=ttyS0,115200 ' 9737ea47af3SThomas Huth 'root=b300 rootwait rw ' 9746c4f229aSqianfan Zhao 'panic=-1 noreboot') 9756c4f229aSqianfan Zhao self.vm.add_args('-kernel', kernel_path, 9766c4f229aSqianfan Zhao '-dtb', dtb_path, 9776c4f229aSqianfan Zhao '-drive', 'file=' + rootfs_path + ',if=sd,format=raw', 9786c4f229aSqianfan Zhao '-net', 'nic,model=gmac,netdev=host_gmac', 9796c4f229aSqianfan Zhao '-netdev', 'user,id=host_gmac', 9806c4f229aSqianfan Zhao '-append', kernel_command_line, 9816c4f229aSqianfan Zhao '-no-reboot') 9826c4f229aSqianfan Zhao self.vm.launch() 9836c4f229aSqianfan Zhao shell_ready = "/bin/sh: can't access tty; job control turned off" 9846c4f229aSqianfan Zhao self.wait_for_console_pattern(shell_ready) 9856c4f229aSqianfan Zhao 9866c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 9876c4f229aSqianfan Zhao 'Allwinner sun8i Family') 9886c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', 9897ea47af3SThomas Huth 'mmcblk') 9906c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up', 9916c4f229aSqianfan Zhao 'eth0: Link is Up') 9926c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'udhcpc eth0', 9936c4f229aSqianfan Zhao 'udhcpc: lease of 10.0.2.15 obtained') 9946c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', 9956c4f229aSqianfan Zhao '3 packets transmitted, 3 packets received, 0% packet loss') 9966c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'reboot', 9976c4f229aSqianfan Zhao 'reboot: Restarting system') 9986c4f229aSqianfan Zhao # Wait for VM to shut down gracefully 9996c4f229aSqianfan Zhao self.vm.wait() 10006c4f229aSqianfan Zhao 10016c4f229aSqianfan Zhao @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') 10026c4f229aSqianfan Zhao def test_arm_bpim2u_openwrt_22_03_3(self): 10036c4f229aSqianfan Zhao """ 10046c4f229aSqianfan Zhao :avocado: tags=arch:arm 10056c4f229aSqianfan Zhao :avocado: tags=machine:bpim2u 10066c4f229aSqianfan Zhao :avocado: tags=device:sd 10076c4f229aSqianfan Zhao """ 10086c4f229aSqianfan Zhao 10096c4f229aSqianfan Zhao # This test download a 8.9 MiB compressed image and expand it 10106c4f229aSqianfan Zhao # to 127 MiB. 10116c4f229aSqianfan Zhao image_url = ('https://downloads.openwrt.org/releases/22.03.3/targets/' 10126c4f229aSqianfan Zhao 'sunxi/cortexa7/openwrt-22.03.3-sunxi-cortexa7-' 10136c4f229aSqianfan Zhao 'sinovoip_bananapi-m2-ultra-ext4-sdcard.img.gz') 10146c4f229aSqianfan Zhao image_hash = ('5b41b4e11423e562c6011640f9a7cd3b' 10156c4f229aSqianfan Zhao 'dd0a3d42b83430f7caa70a432e6cd82c') 10166c4f229aSqianfan Zhao image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash, 10176c4f229aSqianfan Zhao algorithm='sha256') 10186c4f229aSqianfan Zhao image_path = archive.extract(image_path_gz, self.workdir) 10196c4f229aSqianfan Zhao image_pow2ceil_expand(image_path) 10206c4f229aSqianfan Zhao 10216c4f229aSqianfan Zhao self.vm.set_console() 10226c4f229aSqianfan Zhao self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw', 10236c4f229aSqianfan Zhao '-nic', 'user', 10246c4f229aSqianfan Zhao '-no-reboot') 10256c4f229aSqianfan Zhao self.vm.launch() 10266c4f229aSqianfan Zhao 10276c4f229aSqianfan Zhao kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 10286c4f229aSqianfan Zhao 'usbcore.nousb ' 10296c4f229aSqianfan Zhao 'noreboot') 10306c4f229aSqianfan Zhao 10316c4f229aSqianfan Zhao self.wait_for_console_pattern('U-Boot SPL') 10326c4f229aSqianfan Zhao 10336c4f229aSqianfan Zhao interrupt_interactive_console_until_pattern( 10346c4f229aSqianfan Zhao self, 'Hit any key to stop autoboot:', '=>') 10356c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, "setenv extraargs '" + 10366c4f229aSqianfan Zhao kernel_command_line + "'", '=>') 10376c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...'); 10386c4f229aSqianfan Zhao 10396c4f229aSqianfan Zhao self.wait_for_console_pattern( 10406c4f229aSqianfan Zhao 'Please press Enter to activate this console.') 10416c4f229aSqianfan Zhao 10426c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, ' ', 'root@') 10436c4f229aSqianfan Zhao 10446c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 10456c4f229aSqianfan Zhao 'Allwinner sun8i Family') 10466c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 10476c4f229aSqianfan Zhao 'system-control@1c00000') 10486c4f229aSqianfan Zhao 1049bbbd9b6eSWillian Rampazzo def test_arm_orangepi(self): 1050bbbd9b6eSWillian Rampazzo """ 1051bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1052bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 1053bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 1054bbbd9b6eSWillian Rampazzo """ 1055bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 1056dcc5c018SPeter Maydell 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb') 1057dcc5c018SPeter Maydell deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b' 1058bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 1059bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 1060dcc5c018SPeter Maydell '/boot/vmlinuz-6.6.16-current-sunxi') 1061dcc5c018SPeter Maydell dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb' 1062bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 1063bbbd9b6eSWillian Rampazzo 1064bbbd9b6eSWillian Rampazzo self.vm.set_console() 1065bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 1066bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200n8 ' 1067bbbd9b6eSWillian Rampazzo 'earlycon=uart,mmio32,0x1c28000') 1068bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1069bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 1070bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 1071bbbd9b6eSWillian Rampazzo self.vm.launch() 1072bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 1073bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1074bbbd9b6eSWillian Rampazzo 1075bbbd9b6eSWillian Rampazzo def test_arm_orangepi_initrd(self): 1076bbbd9b6eSWillian Rampazzo """ 1077bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1078bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 1079bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 1080bbbd9b6eSWillian Rampazzo """ 1081bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 1082dcc5c018SPeter Maydell 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb') 1083dcc5c018SPeter Maydell deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b' 1084bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 1085bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 1086dcc5c018SPeter Maydell '/boot/vmlinuz-6.6.16-current-sunxi') 1087dcc5c018SPeter Maydell dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb' 1088bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 1089bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 1090bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 1091bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv7a.cpio.gz') 1092bbbd9b6eSWillian Rampazzo initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' 1093bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 1094bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 1095bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 1096bbbd9b6eSWillian Rampazzo 1097bbbd9b6eSWillian Rampazzo self.vm.set_console() 1098bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 1099bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 1100bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 1101bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1102bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 1103bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 1104bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 1105bbbd9b6eSWillian Rampazzo '-no-reboot') 1106bbbd9b6eSWillian Rampazzo self.vm.launch() 1107bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 1108bbbd9b6eSWillian Rampazzo 1109bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 1110bbbd9b6eSWillian Rampazzo 'Allwinner sun8i Family') 1111bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 1112bbbd9b6eSWillian Rampazzo 'system-control@1c00000') 1113bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'reboot', 1114bbbd9b6eSWillian Rampazzo 'reboot: Restarting system') 1115bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 1116bbbd9b6eSWillian Rampazzo self.vm.wait() 1117bbbd9b6eSWillian Rampazzo 1118bbbd9b6eSWillian Rampazzo def test_arm_orangepi_sd(self): 1119bbbd9b6eSWillian Rampazzo """ 1120bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1121bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 1122bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 1123bbbd9b6eSWillian Rampazzo :avocado: tags=device:sd 1124bbbd9b6eSWillian Rampazzo """ 11250793fe01SPeter Maydell self.require_netdev('user') 11260793fe01SPeter Maydell 1127bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 1128dcc5c018SPeter Maydell 'linux-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb') 1129dcc5c018SPeter Maydell deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b' 1130bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 1131bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 1132dcc5c018SPeter Maydell '/boot/vmlinuz-6.6.16-current-sunxi') 1133dcc5c018SPeter Maydell dtb_path = '/usr/lib/linux-image-6.6.16-current-sunxi/sun8i-h3-orangepi-pc.dtb' 1134bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 1135bbbd9b6eSWillian Rampazzo rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/' 11364189af72SAlex Bennée 'buildroot-baseline/20221116.0/armel/rootfs.ext2.xz') 11374189af72SAlex Bennée rootfs_hash = 'fae32f337c7b87547b10f42599acf109da8b6d9a' 1138bbbd9b6eSWillian Rampazzo rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) 1139bbbd9b6eSWillian Rampazzo rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') 1140bbbd9b6eSWillian Rampazzo archive.lzma_uncompress(rootfs_path_xz, rootfs_path) 1141bbbd9b6eSWillian Rampazzo image_pow2ceil_expand(rootfs_path) 1142bbbd9b6eSWillian Rampazzo 1143bbbd9b6eSWillian Rampazzo self.vm.set_console() 1144bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 1145bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 1146bbbd9b6eSWillian Rampazzo 'root=/dev/mmcblk0 rootwait rw ' 1147bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 1148bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1149bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 1150bbbd9b6eSWillian Rampazzo '-drive', 'file=' + rootfs_path + ',if=sd,format=raw', 1151bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 1152bbbd9b6eSWillian Rampazzo '-no-reboot') 1153bbbd9b6eSWillian Rampazzo self.vm.launch() 1154bbbd9b6eSWillian Rampazzo shell_ready = "/bin/sh: can't access tty; job control turned off" 1155bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(shell_ready) 1156bbbd9b6eSWillian Rampazzo 1157bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 1158bbbd9b6eSWillian Rampazzo 'Allwinner sun8i Family') 1159bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', 1160bbbd9b6eSWillian Rampazzo 'mmcblk0') 1161bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up', 1162bbbd9b6eSWillian Rampazzo 'eth0: Link is Up') 1163bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'udhcpc eth0', 1164bbbd9b6eSWillian Rampazzo 'udhcpc: lease of 10.0.2.15 obtained') 1165bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', 1166bbbd9b6eSWillian Rampazzo '3 packets transmitted, 3 packets received, 0% packet loss') 1167bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'reboot', 1168bbbd9b6eSWillian Rampazzo 'reboot: Restarting system') 1169bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 1170bbbd9b6eSWillian Rampazzo self.vm.wait() 1171bbbd9b6eSWillian Rampazzo 1172bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') 1173bbbd9b6eSWillian Rampazzo def test_arm_orangepi_bionic_20_08(self): 1174bbbd9b6eSWillian Rampazzo """ 1175bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1176bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 1177bbbd9b6eSWillian Rampazzo :avocado: tags=device:sd 1178bbbd9b6eSWillian Rampazzo """ 1179bbbd9b6eSWillian Rampazzo 1180bbbd9b6eSWillian Rampazzo # This test download a 275 MiB compressed image and expand it 1181bbbd9b6eSWillian Rampazzo # to 1036 MiB, but the underlying filesystem is 1552 MiB... 1182bbbd9b6eSWillian Rampazzo # As we expand it to 2 GiB we are safe. 1183bbbd9b6eSWillian Rampazzo 1184bbbd9b6eSWillian Rampazzo image_url = ('https://archive.armbian.com/orangepipc/archive/' 1185bbbd9b6eSWillian Rampazzo 'Armbian_20.08.1_Orangepipc_bionic_current_5.8.5.img.xz') 1186bbbd9b6eSWillian Rampazzo image_hash = ('b4d6775f5673486329e45a0586bf06b6' 1187bbbd9b6eSWillian Rampazzo 'dbe792199fd182ac6b9c7bb6c7d3e6dd') 1188bbbd9b6eSWillian Rampazzo image_path_xz = self.fetch_asset(image_url, asset_hash=image_hash, 1189bbbd9b6eSWillian Rampazzo algorithm='sha256') 1190bbbd9b6eSWillian Rampazzo image_path = archive.extract(image_path_xz, self.workdir) 1191bbbd9b6eSWillian Rampazzo image_pow2ceil_expand(image_path) 1192bbbd9b6eSWillian Rampazzo 1193bbbd9b6eSWillian Rampazzo self.vm.set_console() 1194bbbd9b6eSWillian Rampazzo self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw', 1195bbbd9b6eSWillian Rampazzo '-nic', 'user', 1196bbbd9b6eSWillian Rampazzo '-no-reboot') 1197bbbd9b6eSWillian Rampazzo self.vm.launch() 1198bbbd9b6eSWillian Rampazzo 1199bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 1200bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 1201bbbd9b6eSWillian Rampazzo 'loglevel=7 ' 1202bbbd9b6eSWillian Rampazzo 'nosmp ' 1203bbbd9b6eSWillian Rampazzo 'systemd.default_timeout_start_sec=9000 ' 1204bbbd9b6eSWillian Rampazzo 'systemd.mask=armbian-zram-config.service ' 1205bbbd9b6eSWillian Rampazzo 'systemd.mask=armbian-ramlog.service') 1206bbbd9b6eSWillian Rampazzo 1207bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('U-Boot SPL') 1208bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Autoboot in ') 1209bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, ' ', '=>') 1210bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, "setenv extraargs '" + 1211bbbd9b6eSWillian Rampazzo kernel_command_line + "'", '=>') 1212bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...'); 1213bbbd9b6eSWillian Rampazzo 1214bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('systemd[1]: Set hostname ' + 1215bbbd9b6eSWillian Rampazzo 'to <orangepipc>') 1216bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Starting Load Kernel Modules...') 1217bbbd9b6eSWillian Rampazzo 1218bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') 1219bbbd9b6eSWillian Rampazzo def test_arm_orangepi_uboot_netbsd9(self): 1220bbbd9b6eSWillian Rampazzo """ 1221bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1222bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 1223bbbd9b6eSWillian Rampazzo :avocado: tags=device:sd 1224bbbd9b6eSWillian Rampazzo :avocado: tags=os:netbsd 1225bbbd9b6eSWillian Rampazzo """ 1226bbbd9b6eSWillian Rampazzo # This test download a 304MB compressed image and expand it to 2GB 1227bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 1228bbbd9b6eSWillian Rampazzo '20200108T145233Z/pool/main/u/u-boot/' 1229bbbd9b6eSWillian Rampazzo 'u-boot-sunxi_2020.01%2Bdfsg-1_armhf.deb') 1230bbbd9b6eSWillian Rampazzo deb_hash = 'f67f404a80753ca3d1258f13e38f2b060e13db99' 1231bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 1232bbbd9b6eSWillian Rampazzo # We use the common OrangePi PC 'plus' build of U-Boot for our secondary 1233bbbd9b6eSWillian Rampazzo # program loader (SPL). We will then set the path to the more specific 1234bbbd9b6eSWillian Rampazzo # OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt, 1235bbbd9b6eSWillian Rampazzo # before to boot NetBSD. 1236bbbd9b6eSWillian Rampazzo uboot_path = '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin' 1237bbbd9b6eSWillian Rampazzo uboot_path = self.extract_from_deb(deb_path, uboot_path) 1238bbbd9b6eSWillian Rampazzo image_url = ('https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/' 1239bbbd9b6eSWillian Rampazzo 'evbarm-earmv7hf/binary/gzimg/armv7.img.gz') 1240bbbd9b6eSWillian Rampazzo image_hash = '2babb29d36d8360adcb39c09e31060945259917a' 1241bbbd9b6eSWillian Rampazzo image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash) 1242bbbd9b6eSWillian Rampazzo image_path = os.path.join(self.workdir, 'armv7.img') 1243bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(image_path_gz, image_path) 1244bbbd9b6eSWillian Rampazzo image_pow2ceil_expand(image_path) 1245bbbd9b6eSWillian Rampazzo image_drive_args = 'if=sd,format=raw,snapshot=on,file=' + image_path 1246bbbd9b6eSWillian Rampazzo 1247bbbd9b6eSWillian Rampazzo # dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc 1248bbbd9b6eSWillian Rampazzo with open(uboot_path, 'rb') as f_in: 1249bbbd9b6eSWillian Rampazzo with open(image_path, 'r+b') as f_out: 1250bbbd9b6eSWillian Rampazzo f_out.seek(8 * 1024) 1251bbbd9b6eSWillian Rampazzo shutil.copyfileobj(f_in, f_out) 1252bbbd9b6eSWillian Rampazzo 1253bbbd9b6eSWillian Rampazzo self.vm.set_console() 1254bbbd9b6eSWillian Rampazzo self.vm.add_args('-nic', 'user', 1255bbbd9b6eSWillian Rampazzo '-drive', image_drive_args, 1256bbbd9b6eSWillian Rampazzo '-global', 'allwinner-rtc.base-year=2000', 1257bbbd9b6eSWillian Rampazzo '-no-reboot') 1258bbbd9b6eSWillian Rampazzo self.vm.launch() 1259bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'U-Boot 2020.01+dfsg-1') 1260bbbd9b6eSWillian Rampazzo interrupt_interactive_console_until_pattern(self, 1261bbbd9b6eSWillian Rampazzo 'Hit any key to stop autoboot:', 1262bbbd9b6eSWillian Rampazzo 'switch to partitions #0, OK') 1263bbbd9b6eSWillian Rampazzo 1264bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, '', '=>') 1265bbbd9b6eSWillian Rampazzo cmd = 'setenv bootargs root=ld0a' 1266bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 1267bbbd9b6eSWillian Rampazzo cmd = 'setenv kernel netbsd-GENERIC.ub' 1268bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 1269bbbd9b6eSWillian Rampazzo cmd = 'setenv fdtfile dtb/sun8i-h3-orangepi-pc.dtb' 1270bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 1271bbbd9b6eSWillian Rampazzo cmd = ("setenv bootcmd 'fatload mmc 0:1 ${kernel_addr_r} ${kernel}; " 1272bbbd9b6eSWillian Rampazzo "fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}; " 1273bbbd9b6eSWillian Rampazzo "fdt addr ${fdt_addr_r}; " 1274bbbd9b6eSWillian Rampazzo "bootm ${kernel_addr_r} - ${fdt_addr_r}'") 1275bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 1276bbbd9b6eSWillian Rampazzo 1277bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'boot', 1278bbbd9b6eSWillian Rampazzo 'Booting kernel from Legacy Image') 1279bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'Starting kernel ...') 1280bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'NetBSD 9.0 (GENERIC)') 1281bbbd9b6eSWillian Rampazzo # Wait for user-space 1282bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'Starting root file system check') 1283bbbd9b6eSWillian Rampazzo 1284bbbd9b6eSWillian Rampazzo def test_aarch64_raspi3_atf(self): 1285bbbd9b6eSWillian Rampazzo """ 12869bb9a3f3SFabiano Rosas :avocado: tags=accel:tcg 1287bbbd9b6eSWillian Rampazzo :avocado: tags=arch:aarch64 1288bbbd9b6eSWillian Rampazzo :avocado: tags=machine:raspi3b 1289bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:cortex-a53 1290bbbd9b6eSWillian Rampazzo :avocado: tags=device:pl011 1291bbbd9b6eSWillian Rampazzo :avocado: tags=atf 1292bbbd9b6eSWillian Rampazzo """ 1293bbbd9b6eSWillian Rampazzo zip_url = ('https://github.com/pbatard/RPi3/releases/download/' 1294bbbd9b6eSWillian Rampazzo 'v1.15/RPi3_UEFI_Firmware_v1.15.zip') 1295bbbd9b6eSWillian Rampazzo zip_hash = '74b3bd0de92683cadb14e008a7575e1d0c3cafb9' 1296bbbd9b6eSWillian Rampazzo zip_path = self.fetch_asset(zip_url, asset_hash=zip_hash) 1297bbbd9b6eSWillian Rampazzo 1298bbbd9b6eSWillian Rampazzo archive.extract(zip_path, self.workdir) 1299bbbd9b6eSWillian Rampazzo efi_fd = os.path.join(self.workdir, 'RPI_EFI.fd') 1300bbbd9b6eSWillian Rampazzo 1301bbbd9b6eSWillian Rampazzo self.vm.set_console(console_index=1) 1302bbbd9b6eSWillian Rampazzo self.vm.add_args('-nodefaults', 1303bbbd9b6eSWillian Rampazzo '-device', 'loader,file=%s,force-raw=true' % efi_fd) 1304bbbd9b6eSWillian Rampazzo self.vm.launch() 1305bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('version UEFI Firmware v1.15') 1306bbbd9b6eSWillian Rampazzo 1307bbbd9b6eSWillian Rampazzo def test_s390x_s390_ccw_virtio(self): 1308bbbd9b6eSWillian Rampazzo """ 1309bbbd9b6eSWillian Rampazzo :avocado: tags=arch:s390x 1310bbbd9b6eSWillian Rampazzo :avocado: tags=machine:s390-ccw-virtio 1311bbbd9b6eSWillian Rampazzo """ 1312bbbd9b6eSWillian Rampazzo kernel_url = ('https://archives.fedoraproject.org/pub/archive' 1313bbbd9b6eSWillian Rampazzo '/fedora-secondary/releases/29/Everything/s390x/os/images' 1314bbbd9b6eSWillian Rampazzo '/kernel.img') 1315bbbd9b6eSWillian Rampazzo kernel_hash = 'e8e8439103ef8053418ef062644ffd46a7919313' 1316bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 1317bbbd9b6eSWillian Rampazzo 1318bbbd9b6eSWillian Rampazzo self.vm.set_console() 1319bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=sclp0' 1320bbbd9b6eSWillian Rampazzo self.vm.add_args('-nodefaults', 1321bbbd9b6eSWillian Rampazzo '-kernel', kernel_path, 1322bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 1323bbbd9b6eSWillian Rampazzo self.vm.launch() 1324bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 1325bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1326bbbd9b6eSWillian Rampazzo 1327bbbd9b6eSWillian Rampazzo def test_alpha_clipper(self): 1328bbbd9b6eSWillian Rampazzo """ 1329bbbd9b6eSWillian Rampazzo :avocado: tags=arch:alpha 1330bbbd9b6eSWillian Rampazzo :avocado: tags=machine:clipper 1331bbbd9b6eSWillian Rampazzo """ 1332bbbd9b6eSWillian Rampazzo kernel_url = ('http://archive.debian.org/debian/dists/lenny/main/' 1333bbbd9b6eSWillian Rampazzo 'installer-alpha/20090123lenny10/images/cdrom/vmlinuz') 1334bbbd9b6eSWillian Rampazzo kernel_hash = '3a943149335529e2ed3e74d0d787b85fb5671ba3' 1335bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 1336bbbd9b6eSWillian Rampazzo 1337bbbd9b6eSWillian Rampazzo uncompressed_kernel = archive.uncompress(kernel_path, self.workdir) 1338bbbd9b6eSWillian Rampazzo 1339bbbd9b6eSWillian Rampazzo self.vm.set_console() 1340bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 1341bbbd9b6eSWillian Rampazzo self.vm.add_args('-nodefaults', 1342bbbd9b6eSWillian Rampazzo '-kernel', uncompressed_kernel, 1343bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 1344bbbd9b6eSWillian Rampazzo self.vm.launch() 1345bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 1346bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1347bbbd9b6eSWillian Rampazzo 1348bbbd9b6eSWillian Rampazzo def test_m68k_q800(self): 1349bbbd9b6eSWillian Rampazzo """ 1350bbbd9b6eSWillian Rampazzo :avocado: tags=arch:m68k 1351bbbd9b6eSWillian Rampazzo :avocado: tags=machine:q800 1352bbbd9b6eSWillian Rampazzo """ 1353bbbd9b6eSWillian Rampazzo deb_url = ('https://snapshot.debian.org/archive/debian-ports' 1354bbbd9b6eSWillian Rampazzo '/20191021T083923Z/pool-m68k/main' 1355bbbd9b6eSWillian Rampazzo '/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb') 1356bbbd9b6eSWillian Rampazzo deb_hash = '044954bb9be4160a3ce81f8bc1b5e856b75cccd1' 1357bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 1358bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 1359bbbd9b6eSWillian Rampazzo '/boot/vmlinux-5.3.0-1-m68k') 1360bbbd9b6eSWillian Rampazzo 1361bbbd9b6eSWillian Rampazzo self.vm.set_console() 1362bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 1363bbbd9b6eSWillian Rampazzo 'console=ttyS0 vga=off') 1364bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1365bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 1366bbbd9b6eSWillian Rampazzo self.vm.launch() 1367bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 1368bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1369bbbd9b6eSWillian Rampazzo console_pattern = 'No filesystem could mount root' 1370bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1371bbbd9b6eSWillian Rampazzo 1372bbbd9b6eSWillian Rampazzo def do_test_advcal_2018(self, day, tar_hash, kernel_name, console=0): 137372cf57b0SThomas Huth tar_url = ('https://qemu-advcal.gitlab.io' 137472cf57b0SThomas Huth '/qac-best-of-multiarch/download/day' + day + '.tar.xz') 1375bbbd9b6eSWillian Rampazzo file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 1376bbbd9b6eSWillian Rampazzo archive.extract(file_path, self.workdir) 1377bbbd9b6eSWillian Rampazzo self.vm.set_console(console_index=console) 1378bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', 1379bbbd9b6eSWillian Rampazzo self.workdir + '/day' + day + '/' + kernel_name) 1380bbbd9b6eSWillian Rampazzo self.vm.launch() 1381bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('QEMU advent calendar') 1382bbbd9b6eSWillian Rampazzo 1383bbbd9b6eSWillian Rampazzo def test_arm_vexpressa9(self): 1384bbbd9b6eSWillian Rampazzo """ 1385bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1386bbbd9b6eSWillian Rampazzo :avocado: tags=machine:vexpress-a9 1387bbbd9b6eSWillian Rampazzo """ 1388bbbd9b6eSWillian Rampazzo tar_hash = '32b7677ce8b6f1471fb0059865f451169934245b' 1389bbbd9b6eSWillian Rampazzo self.vm.add_args('-dtb', self.workdir + '/day16/vexpress-v2p-ca9.dtb') 1390bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('16', tar_hash, 'winter.zImage') 1391bbbd9b6eSWillian Rampazzo 1392bbbd9b6eSWillian Rampazzo def test_arm_ast2600_debian(self): 1393bbbd9b6eSWillian Rampazzo """ 1394bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 13959b983dc7SJoel Stanley :avocado: tags=machine:rainier-bmc 1396bbbd9b6eSWillian Rampazzo """ 1397bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 13989b983dc7SJoel Stanley '20220606T211338Z/' 1399bbbd9b6eSWillian Rampazzo 'pool/main/l/linux/' 14009b983dc7SJoel Stanley 'linux-image-5.17.0-2-armmp_5.17.6-1%2Bb1_armhf.deb') 14019b983dc7SJoel Stanley deb_hash = '8acb2b4439faedc2f3ed4bdb2847ad4f6e0491f73debaeb7f660c8abe4dcdc0e' 1402bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash, 1403bbbd9b6eSWillian Rampazzo algorithm='sha256') 14049b983dc7SJoel Stanley kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-5.17.0-2-armmp') 1405bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, 14069b983dc7SJoel Stanley '/usr/lib/linux-image-5.17.0-2-armmp/aspeed-bmc-ibm-rainier.dtb') 1407bbbd9b6eSWillian Rampazzo 1408bbbd9b6eSWillian Rampazzo self.vm.set_console() 1409bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1410bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 1411bbbd9b6eSWillian Rampazzo '-net', 'nic') 1412bbbd9b6eSWillian Rampazzo self.vm.launch() 1413bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("Booting Linux on physical CPU 0xf00") 1414bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("SMP: Total of 2 processors activated") 1415bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("No filesystem could mount root") 1416bbbd9b6eSWillian Rampazzo 1417bbbd9b6eSWillian Rampazzo def test_m68k_mcf5208evb(self): 1418bbbd9b6eSWillian Rampazzo """ 1419bbbd9b6eSWillian Rampazzo :avocado: tags=arch:m68k 1420bbbd9b6eSWillian Rampazzo :avocado: tags=machine:mcf5208evb 1421bbbd9b6eSWillian Rampazzo """ 1422bbbd9b6eSWillian Rampazzo tar_hash = 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c' 1423bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('07', tar_hash, 'sanity-clause.elf') 1424bbbd9b6eSWillian Rampazzo 1425bbbd9b6eSWillian Rampazzo def test_or1k_sim(self): 1426bbbd9b6eSWillian Rampazzo """ 1427bbbd9b6eSWillian Rampazzo :avocado: tags=arch:or1k 1428bbbd9b6eSWillian Rampazzo :avocado: tags=machine:or1k-sim 1429bbbd9b6eSWillian Rampazzo """ 1430bbbd9b6eSWillian Rampazzo tar_hash = '20334cdaf386108c530ff0badaecc955693027dd' 1431bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('20', tar_hash, 'vmlinux') 1432bbbd9b6eSWillian Rampazzo 1433bbbd9b6eSWillian Rampazzo def test_ppc64_e500(self): 1434bbbd9b6eSWillian Rampazzo """ 1435bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc64 1436bbbd9b6eSWillian Rampazzo :avocado: tags=machine:ppce500 1437bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:e5500 1438d78fb13dSDaniel Henrique Barboza :avocado: tags=accel:tcg 1439bbbd9b6eSWillian Rampazzo """ 1440d78fb13dSDaniel Henrique Barboza self.require_accelerator("tcg") 1441bbbd9b6eSWillian Rampazzo tar_hash = '6951d86d644b302898da2fd701739c9406527fe1' 1442bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('19', tar_hash, 'uImage') 1443bbbd9b6eSWillian Rampazzo 1444bbbd9b6eSWillian Rampazzo def do_test_ppc64_powernv(self, proc): 14456b87d614SDaniel Henrique Barboza self.require_accelerator("tcg") 1446bbbd9b6eSWillian Rampazzo images_url = ('https://github.com/open-power/op-build/releases/download/v2.7/') 1447bbbd9b6eSWillian Rampazzo 1448bbbd9b6eSWillian Rampazzo kernel_url = images_url + 'zImage.epapr' 1449bbbd9b6eSWillian Rampazzo kernel_hash = '0ab237df661727e5392cee97460e8674057a883c5f74381a128fa772588d45cd' 1450bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash, 1451bbbd9b6eSWillian Rampazzo algorithm='sha256') 1452bbbd9b6eSWillian Rampazzo self.vm.set_console() 1453bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1454bbbd9b6eSWillian Rampazzo '-append', 'console=tty0 console=hvc0', 1455bbbd9b6eSWillian Rampazzo '-device', 'pcie-pci-bridge,id=bridge1,bus=pcie.1,addr=0x0', 1456bbbd9b6eSWillian Rampazzo '-device', 'nvme,bus=pcie.2,addr=0x0,serial=1234', 1457bbbd9b6eSWillian Rampazzo '-device', 'e1000e,bus=bridge1,addr=0x3', 1458bbbd9b6eSWillian Rampazzo '-device', 'nec-usb-xhci,bus=bridge1,addr=0x2') 1459bbbd9b6eSWillian Rampazzo self.vm.launch() 1460bbbd9b6eSWillian Rampazzo 1461bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("CPU: " + proc + " generation processor") 1462bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("zImage starting: loaded") 1463bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("Run /init as init process") 1464458a6aa3SNicholas Piggin # Device detection output driven by udev probing is sometimes cut off 1465458a6aa3SNicholas Piggin # from console output, suspect S14silence-console init script. 1466bbbd9b6eSWillian Rampazzo 1467bbbd9b6eSWillian Rampazzo def test_ppc_powernv8(self): 1468bbbd9b6eSWillian Rampazzo """ 1469bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc64 1470bbbd9b6eSWillian Rampazzo :avocado: tags=machine:powernv8 14716b87d614SDaniel Henrique Barboza :avocado: tags=accel:tcg 1472bbbd9b6eSWillian Rampazzo """ 1473bbbd9b6eSWillian Rampazzo self.do_test_ppc64_powernv('P8') 1474bbbd9b6eSWillian Rampazzo 1475bbbd9b6eSWillian Rampazzo def test_ppc_powernv9(self): 1476bbbd9b6eSWillian Rampazzo """ 1477bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc64 1478bbbd9b6eSWillian Rampazzo :avocado: tags=machine:powernv9 14796b87d614SDaniel Henrique Barboza :avocado: tags=accel:tcg 1480bbbd9b6eSWillian Rampazzo """ 1481bbbd9b6eSWillian Rampazzo self.do_test_ppc64_powernv('P9') 1482bbbd9b6eSWillian Rampazzo 1483234aa6d6SNicholas Piggin def test_ppc_powernv10(self): 1484234aa6d6SNicholas Piggin """ 1485234aa6d6SNicholas Piggin :avocado: tags=arch:ppc64 1486234aa6d6SNicholas Piggin :avocado: tags=machine:powernv10 1487234aa6d6SNicholas Piggin :avocado: tags=accel:tcg 1488234aa6d6SNicholas Piggin """ 1489234aa6d6SNicholas Piggin self.do_test_ppc64_powernv('P10') 1490234aa6d6SNicholas Piggin 1491bbbd9b6eSWillian Rampazzo def test_ppc_g3beige(self): 1492bbbd9b6eSWillian Rampazzo """ 1493bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc 1494bbbd9b6eSWillian Rampazzo :avocado: tags=machine:g3beige 1495daff68ccSDaniel Henrique Barboza :avocado: tags=accel:tcg 1496bbbd9b6eSWillian Rampazzo """ 1497daff68ccSDaniel Henrique Barboza # TODO: g3beige works with kvm_pr but we don't have a 1498daff68ccSDaniel Henrique Barboza # reliable way ATM (e.g. looking at /proc/modules) to detect 1499daff68ccSDaniel Henrique Barboza # whether we're running kvm_hv or kvm_pr. For now let's 1500daff68ccSDaniel Henrique Barboza # disable this test if we don't have TCG support. 1501daff68ccSDaniel Henrique Barboza self.require_accelerator("tcg") 1502bbbd9b6eSWillian Rampazzo tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' 1503bbbd9b6eSWillian Rampazzo self.vm.add_args('-M', 'graphics=off') 1504bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('15', tar_hash, 'invaders.elf') 1505bbbd9b6eSWillian Rampazzo 1506bbbd9b6eSWillian Rampazzo def test_ppc_mac99(self): 1507bbbd9b6eSWillian Rampazzo """ 1508bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc 1509bbbd9b6eSWillian Rampazzo :avocado: tags=machine:mac99 1510ff110c18SDaniel Henrique Barboza :avocado: tags=accel:tcg 1511bbbd9b6eSWillian Rampazzo """ 1512ff110c18SDaniel Henrique Barboza # TODO: mac99 works with kvm_pr but we don't have a 1513ff110c18SDaniel Henrique Barboza # reliable way ATM (e.g. looking at /proc/modules) to detect 1514ff110c18SDaniel Henrique Barboza # whether we're running kvm_hv or kvm_pr. For now let's 1515ff110c18SDaniel Henrique Barboza # disable this test if we don't have TCG support. 1516ff110c18SDaniel Henrique Barboza self.require_accelerator("tcg") 1517bbbd9b6eSWillian Rampazzo tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' 1518bbbd9b6eSWillian Rampazzo self.vm.add_args('-M', 'graphics=off') 1519bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('15', tar_hash, 'invaders.elf') 1520bbbd9b6eSWillian Rampazzo 1521500f73b1SAlex Bennée # This test has a 6-10% failure rate on various hosts that look 1522500f73b1SAlex Bennée # like issues with a buggy kernel. As a result we don't want it 1523500f73b1SAlex Bennée # gating releases on Gitlab. 15249b45cc99SAlex Bennée @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable on GitLab') 15259b45cc99SAlex Bennée 1526bbbd9b6eSWillian Rampazzo def test_sh4_r2d(self): 1527bbbd9b6eSWillian Rampazzo """ 1528bbbd9b6eSWillian Rampazzo :avocado: tags=arch:sh4 1529bbbd9b6eSWillian Rampazzo :avocado: tags=machine:r2d 15305d25fcb7SAlex Bennée :avocado: tags=flaky 1531bbbd9b6eSWillian Rampazzo """ 1532bbbd9b6eSWillian Rampazzo tar_hash = 'fe06a4fd8ccbf2e27928d64472939d47829d4c7e' 1533bbbd9b6eSWillian Rampazzo self.vm.add_args('-append', 'console=ttySC1') 1534bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('09', tar_hash, 'zImage', console=1) 1535bbbd9b6eSWillian Rampazzo 1536bbbd9b6eSWillian Rampazzo def test_sparc_ss20(self): 1537bbbd9b6eSWillian Rampazzo """ 1538bbbd9b6eSWillian Rampazzo :avocado: tags=arch:sparc 1539bbbd9b6eSWillian Rampazzo :avocado: tags=machine:SS-20 1540bbbd9b6eSWillian Rampazzo """ 1541bbbd9b6eSWillian Rampazzo tar_hash = 'b18550d5d61c7615d989a06edace051017726a9f' 1542bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('11', tar_hash, 'zImage.elf') 1543bbbd9b6eSWillian Rampazzo 1544bbbd9b6eSWillian Rampazzo def test_xtensa_lx60(self): 1545bbbd9b6eSWillian Rampazzo """ 1546bbbd9b6eSWillian Rampazzo :avocado: tags=arch:xtensa 1547bbbd9b6eSWillian Rampazzo :avocado: tags=machine:lx60 1548bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:dc233c 1549bbbd9b6eSWillian Rampazzo """ 1550bbbd9b6eSWillian Rampazzo tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34' 1551bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('02', tar_hash, 'santas-sleigh-ride.elf') 1552