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 18*9b45cc99SAlex 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 277bbbd9b6eSWillian Rampazzo def do_test_mips_malta32el_nanomips(self, kernel_url, kernel_hash): 278bbbd9b6eSWillian Rampazzo kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 279bbbd9b6eSWillian Rampazzo kernel_path = self.workdir + "kernel" 280bbbd9b6eSWillian Rampazzo with lzma.open(kernel_path_xz, 'rb') as f_in: 281bbbd9b6eSWillian Rampazzo with open(kernel_path, 'wb') as f_out: 282bbbd9b6eSWillian Rampazzo shutil.copyfileobj(f_in, f_out) 283bbbd9b6eSWillian Rampazzo 284bbbd9b6eSWillian Rampazzo self.vm.set_console() 285bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE 286bbbd9b6eSWillian Rampazzo + 'mem=256m@@0x0 ' 287bbbd9b6eSWillian Rampazzo + 'console=ttyS0') 288bbbd9b6eSWillian Rampazzo self.vm.add_args('-no-reboot', 289bbbd9b6eSWillian Rampazzo '-kernel', kernel_path, 290bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 291bbbd9b6eSWillian Rampazzo self.vm.launch() 292bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 293bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 294bbbd9b6eSWillian Rampazzo 295bbbd9b6eSWillian Rampazzo def test_mips_malta32el_nanomips_4k(self): 296bbbd9b6eSWillian Rampazzo """ 297bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mipsel 298bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 299bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 300bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:I7200 301bbbd9b6eSWillian Rampazzo """ 302bbbd9b6eSWillian Rampazzo kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' 303bbbd9b6eSWillian Rampazzo 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 304bbbd9b6eSWillian Rampazzo 'generic_nano32r6el_page4k.xz') 305bbbd9b6eSWillian Rampazzo kernel_hash = '477456aafd2a0f1ddc9482727f20fe9575565dd6' 306bbbd9b6eSWillian Rampazzo self.do_test_mips_malta32el_nanomips(kernel_url, kernel_hash) 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 """ 315bbbd9b6eSWillian Rampazzo kernel_url = ('https://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' 319bbbd9b6eSWillian Rampazzo self.do_test_mips_malta32el_nanomips(kernel_url, kernel_hash) 320bbbd9b6eSWillian Rampazzo 321bbbd9b6eSWillian Rampazzo def test_mips_malta32el_nanomips_64k_dbg(self): 322bbbd9b6eSWillian Rampazzo """ 323bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mipsel 324bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 325bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 326bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:I7200 327bbbd9b6eSWillian Rampazzo """ 328bbbd9b6eSWillian Rampazzo kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' 329bbbd9b6eSWillian Rampazzo 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 330bbbd9b6eSWillian Rampazzo 'generic_nano32r6el_page64k_dbg.xz') 331bbbd9b6eSWillian Rampazzo kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180' 332bbbd9b6eSWillian Rampazzo self.do_test_mips_malta32el_nanomips(kernel_url, kernel_hash) 333bbbd9b6eSWillian Rampazzo 334bbbd9b6eSWillian Rampazzo def test_aarch64_xlnx_versal_virt(self): 335bbbd9b6eSWillian Rampazzo """ 336bbbd9b6eSWillian Rampazzo :avocado: tags=arch:aarch64 337bbbd9b6eSWillian Rampazzo :avocado: tags=machine:xlnx-versal-virt 338bbbd9b6eSWillian Rampazzo :avocado: tags=device:pl011 339bbbd9b6eSWillian Rampazzo :avocado: tags=device:arm_gicv3 340bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 341bbbd9b6eSWillian Rampazzo """ 342bbbd9b6eSWillian Rampazzo images_url = ('http://ports.ubuntu.com/ubuntu-ports/dists/' 343bbbd9b6eSWillian Rampazzo 'bionic-updates/main/installer-arm64/' 3447fcc3f75SThomas Huth '20101020ubuntu543.19/images/') 345bbbd9b6eSWillian Rampazzo kernel_url = images_url + 'netboot/ubuntu-installer/arm64/linux' 3467fcc3f75SThomas Huth kernel_hash = 'e167757620640eb26de0972f578741924abb3a82' 347bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 348bbbd9b6eSWillian Rampazzo 349bbbd9b6eSWillian Rampazzo initrd_url = images_url + 'netboot/ubuntu-installer/arm64/initrd.gz' 3507fcc3f75SThomas Huth initrd_hash = 'cab5cb3fcefca8408aa5aae57f24574bfce8bdb9' 351bbbd9b6eSWillian Rampazzo initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 352bbbd9b6eSWillian Rampazzo 353bbbd9b6eSWillian Rampazzo self.vm.set_console() 354bbbd9b6eSWillian Rampazzo self.vm.add_args('-m', '2G', 355bbbd9b6eSWillian Rampazzo '-accel', 'tcg', 356bbbd9b6eSWillian Rampazzo '-kernel', kernel_path, 357bbbd9b6eSWillian Rampazzo '-initrd', initrd_path) 358bbbd9b6eSWillian Rampazzo self.vm.launch() 359bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Checked W+X mappings: passed') 360bbbd9b6eSWillian Rampazzo 361bbbd9b6eSWillian Rampazzo def test_arm_virt(self): 362bbbd9b6eSWillian Rampazzo """ 363bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 364bbbd9b6eSWillian Rampazzo :avocado: tags=machine:virt 365bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 366bbbd9b6eSWillian Rampazzo """ 367bbbd9b6eSWillian Rampazzo kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' 368bbbd9b6eSWillian Rampazzo '/linux/releases/29/Everything/armhfp/os/images/pxeboot' 369bbbd9b6eSWillian Rampazzo '/vmlinuz') 370bbbd9b6eSWillian Rampazzo kernel_hash = 'e9826d741b4fb04cadba8d4824d1ed3b7fb8b4d4' 371bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 372bbbd9b6eSWillian Rampazzo 373bbbd9b6eSWillian Rampazzo self.vm.set_console() 374bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 375bbbd9b6eSWillian Rampazzo 'console=ttyAMA0') 376bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 377bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 378bbbd9b6eSWillian Rampazzo self.vm.launch() 379bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 380bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 381bbbd9b6eSWillian Rampazzo 382bbbd9b6eSWillian Rampazzo def test_arm_emcraft_sf2(self): 383bbbd9b6eSWillian Rampazzo """ 384bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 385bbbd9b6eSWillian Rampazzo :avocado: tags=machine:emcraft-sf2 386bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 387bbbd9b6eSWillian Rampazzo :avocado: tags=u-boot 388bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 389bbbd9b6eSWillian Rampazzo """ 3900793fe01SPeter Maydell self.require_netdev('user') 3910793fe01SPeter Maydell 392bbbd9b6eSWillian Rampazzo uboot_url = ('https://raw.githubusercontent.com/' 393bbbd9b6eSWillian Rampazzo 'Subbaraya-Sundeep/qemu-test-binaries/' 394bbbd9b6eSWillian Rampazzo 'fe371d32e50ca682391e1e70ab98c2942aeffb01/u-boot') 395bbbd9b6eSWillian Rampazzo uboot_hash = 'cbb8cbab970f594bf6523b9855be209c08374ae2' 396bbbd9b6eSWillian Rampazzo uboot_path = self.fetch_asset(uboot_url, asset_hash=uboot_hash) 397bbbd9b6eSWillian Rampazzo spi_url = ('https://raw.githubusercontent.com/' 398bbbd9b6eSWillian Rampazzo 'Subbaraya-Sundeep/qemu-test-binaries/' 399bbbd9b6eSWillian Rampazzo 'fe371d32e50ca682391e1e70ab98c2942aeffb01/spi.bin') 400bbbd9b6eSWillian Rampazzo spi_hash = '65523a1835949b6f4553be96dec1b6a38fb05501' 401bbbd9b6eSWillian Rampazzo spi_path = self.fetch_asset(spi_url, asset_hash=spi_hash) 402bbbd9b6eSWillian Rampazzo 403a7f16aedSPhilippe Mathieu-Daudé file_truncate(spi_path, 16 << 20) # Spansion S25FL128SDPBHICO is 16 MiB 404a7f16aedSPhilippe Mathieu-Daudé 405bbbd9b6eSWillian Rampazzo self.vm.set_console() 406bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE 407bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', uboot_path, 408bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 409bbbd9b6eSWillian Rampazzo '-drive', 'file=' + spi_path + ',if=mtd,format=raw', 410bbbd9b6eSWillian Rampazzo '-no-reboot') 411bbbd9b6eSWillian Rampazzo self.vm.launch() 412bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Enter \'help\' for a list') 413bbbd9b6eSWillian Rampazzo 414bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ifconfig eth0 10.0.2.15', 415bbbd9b6eSWillian Rampazzo 'eth0: link becomes ready') 416bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', 417bbbd9b6eSWillian Rampazzo '3 packets transmitted, 3 packets received, 0% packet loss') 418bbbd9b6eSWillian Rampazzo 419bbbd9b6eSWillian Rampazzo def do_test_arm_raspi2(self, uart_id): 420bbbd9b6eSWillian Rampazzo """ 421bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 422bbbd9b6eSWillian Rampazzo 423bbbd9b6eSWillian Rampazzo The kernel can be rebuilt using the kernel source referenced 424bbbd9b6eSWillian Rampazzo and following the instructions on the on: 425bbbd9b6eSWillian Rampazzo https://www.raspberrypi.org/documentation/linux/kernel/building.md 426bbbd9b6eSWillian Rampazzo """ 427bbbd9b6eSWillian Rampazzo serial_kernel_cmdline = { 428bbbd9b6eSWillian Rampazzo 0: 'earlycon=pl011,0x3f201000 console=ttyAMA0', 429bbbd9b6eSWillian Rampazzo } 430bbbd9b6eSWillian Rampazzo deb_url = ('http://archive.raspberrypi.org/debian/' 431bbbd9b6eSWillian Rampazzo 'pool/main/r/raspberrypi-firmware/' 432bbbd9b6eSWillian Rampazzo 'raspberrypi-kernel_1.20190215-1_armhf.deb') 433bbbd9b6eSWillian Rampazzo deb_hash = 'cd284220b32128c5084037553db3c482426f3972' 434bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 435bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img') 436bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb') 437bbbd9b6eSWillian Rampazzo 438bbbd9b6eSWillian Rampazzo self.vm.set_console() 439bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 440bbbd9b6eSWillian Rampazzo serial_kernel_cmdline[uart_id] + 441bbbd9b6eSWillian Rampazzo ' root=/dev/mmcblk0p2 rootwait ' + 442bbbd9b6eSWillian Rampazzo 'dwc_otg.fiq_fsm_enable=0') 443bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 444bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 445bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 446bbbd9b6eSWillian Rampazzo '-device', 'usb-kbd') 447bbbd9b6eSWillian Rampazzo self.vm.launch() 448bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 449bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 450bbbd9b6eSWillian Rampazzo console_pattern = 'Product: QEMU USB Keyboard' 451bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 452bbbd9b6eSWillian Rampazzo 453bbbd9b6eSWillian Rampazzo def test_arm_raspi2_uart0(self): 454bbbd9b6eSWillian Rampazzo """ 455bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 456bbbd9b6eSWillian Rampazzo :avocado: tags=machine:raspi2b 457bbbd9b6eSWillian Rampazzo :avocado: tags=device:pl011 458bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 459bbbd9b6eSWillian Rampazzo """ 460bbbd9b6eSWillian Rampazzo self.do_test_arm_raspi2(0) 461bbbd9b6eSWillian Rampazzo 462bbbd9b6eSWillian Rampazzo def test_arm_raspi2_initrd(self): 463bbbd9b6eSWillian Rampazzo """ 464bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 465bbbd9b6eSWillian Rampazzo :avocado: tags=machine:raspi2b 466bbbd9b6eSWillian Rampazzo """ 467bbbd9b6eSWillian Rampazzo deb_url = ('http://archive.raspberrypi.org/debian/' 468bbbd9b6eSWillian Rampazzo 'pool/main/r/raspberrypi-firmware/' 469bbbd9b6eSWillian Rampazzo 'raspberrypi-kernel_1.20190215-1_armhf.deb') 470bbbd9b6eSWillian Rampazzo deb_hash = 'cd284220b32128c5084037553db3c482426f3972' 471bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 472bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img') 473bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb') 474bbbd9b6eSWillian Rampazzo 475bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 476bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 477bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv7a.cpio.gz') 478bbbd9b6eSWillian Rampazzo initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' 479bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 480bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 481bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 482bbbd9b6eSWillian Rampazzo 483bbbd9b6eSWillian Rampazzo self.vm.set_console() 484bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 485bbbd9b6eSWillian Rampazzo 'earlycon=pl011,0x3f201000 console=ttyAMA0 ' 486bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot ' + 487bbbd9b6eSWillian Rampazzo 'dwc_otg.fiq_fsm_enable=0') 488bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 489bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 490bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 491bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 492bbbd9b6eSWillian Rampazzo '-no-reboot') 493bbbd9b6eSWillian Rampazzo self.vm.launch() 494bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 495bbbd9b6eSWillian Rampazzo 496bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 497bbbd9b6eSWillian Rampazzo 'BCM2835') 498bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 499bbbd9b6eSWillian Rampazzo '/soc/cprman@7e101000') 500cc45d25cSPeter Maydell exec_command_and_wait_for_pattern(self, 'halt', 'reboot: System halted') 501bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 502bbbd9b6eSWillian Rampazzo self.vm.wait() 503bbbd9b6eSWillian Rampazzo 504bbbd9b6eSWillian Rampazzo def test_arm_exynos4210_initrd(self): 505bbbd9b6eSWillian Rampazzo """ 506bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 507bbbd9b6eSWillian Rampazzo :avocado: tags=machine:smdkc210 508bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 509bbbd9b6eSWillian Rampazzo """ 510bbbd9b6eSWillian Rampazzo deb_url = ('https://snapshot.debian.org/archive/debian/' 511bbbd9b6eSWillian Rampazzo '20190928T224601Z/pool/main/l/linux/' 512bbbd9b6eSWillian Rampazzo 'linux-image-4.19.0-6-armmp_4.19.67-2+deb10u1_armhf.deb') 513bbbd9b6eSWillian Rampazzo deb_hash = 'fa9df4a0d38936cb50084838f2cb933f570d7d82' 514bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 515bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 516bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-4.19.0-6-armmp') 517bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-4.19.0-6-armmp/exynos4210-smdkv310.dtb' 518bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 519bbbd9b6eSWillian Rampazzo 520bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 521bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 522bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv5.cpio.gz') 523bbbd9b6eSWillian Rampazzo initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' 524bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 525bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 526bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 527bbbd9b6eSWillian Rampazzo 528bbbd9b6eSWillian Rampazzo self.vm.set_console() 529bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 530bbbd9b6eSWillian Rampazzo 'earlycon=exynos4210,0x13800000 earlyprintk ' + 531bbbd9b6eSWillian Rampazzo 'console=ttySAC0,115200n8 ' + 532bbbd9b6eSWillian Rampazzo 'random.trust_cpu=off cryptomgr.notests ' + 533bbbd9b6eSWillian Rampazzo 'cpuidle.off=1 panic=-1 noreboot') 534bbbd9b6eSWillian Rampazzo 535bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 536bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 537bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 538bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 539bbbd9b6eSWillian Rampazzo '-no-reboot') 540bbbd9b6eSWillian Rampazzo self.vm.launch() 541bbbd9b6eSWillian Rampazzo 542bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 543bbbd9b6eSWillian Rampazzo # TODO user command, for now the uart is stuck 544bbbd9b6eSWillian Rampazzo 545bbbd9b6eSWillian Rampazzo def test_arm_cubieboard_initrd(self): 546bbbd9b6eSWillian Rampazzo """ 547bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 548bbbd9b6eSWillian Rampazzo :avocado: tags=machine:cubieboard 549bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 550bbbd9b6eSWillian Rampazzo """ 551bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 552bbbd9b6eSWillian Rampazzo 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 553bbbd9b6eSWillian Rampazzo deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 554bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 555bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 556bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-5.10.16-sunxi') 557bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb' 558bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 559bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 560bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 561bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv5.cpio.gz') 562bbbd9b6eSWillian Rampazzo initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' 563bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 564bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 565bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 566bbbd9b6eSWillian Rampazzo 567bbbd9b6eSWillian Rampazzo self.vm.set_console() 568bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 569bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 570bbbd9b6eSWillian Rampazzo 'usbcore.nousb ' 571bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 572bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 573bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 574bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 575bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 576bbbd9b6eSWillian Rampazzo '-no-reboot') 577bbbd9b6eSWillian Rampazzo self.vm.launch() 578bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 579bbbd9b6eSWillian Rampazzo 580bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 581bbbd9b6eSWillian Rampazzo 'Allwinner sun4i/sun5i') 582bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 583bbbd9b6eSWillian Rampazzo 'system-control@1c00000') 584d784c5fbSStrahinja Jankovic exec_command_and_wait_for_pattern(self, 'reboot', 585d784c5fbSStrahinja Jankovic 'reboot: Restarting system') 586d784c5fbSStrahinja Jankovic # Wait for VM to shut down gracefully 587d784c5fbSStrahinja Jankovic self.vm.wait() 588bbbd9b6eSWillian Rampazzo 589bbbd9b6eSWillian Rampazzo def test_arm_cubieboard_sata(self): 590bbbd9b6eSWillian Rampazzo """ 591bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 592bbbd9b6eSWillian Rampazzo :avocado: tags=machine:cubieboard 593bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 594bbbd9b6eSWillian Rampazzo """ 595bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 596bbbd9b6eSWillian Rampazzo 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 597bbbd9b6eSWillian Rampazzo deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 598bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 599bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 600bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-5.10.16-sunxi') 601bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb' 602bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 603bbbd9b6eSWillian Rampazzo rootfs_url = ('https://github.com/groeck/linux-build-test/raw/' 604bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 605bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv5.ext2.gz') 606bbbd9b6eSWillian Rampazzo rootfs_hash = '093e89d2b4d982234bf528bc9fb2f2f17a9d1f93' 607bbbd9b6eSWillian Rampazzo rootfs_path_gz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) 608bbbd9b6eSWillian Rampazzo rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') 609bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(rootfs_path_gz, rootfs_path) 610bbbd9b6eSWillian Rampazzo 611bbbd9b6eSWillian Rampazzo self.vm.set_console() 612bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 613bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 614bbbd9b6eSWillian Rampazzo 'usbcore.nousb ' 615bbbd9b6eSWillian Rampazzo 'root=/dev/sda ro ' 616bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 617bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 618bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 619bbbd9b6eSWillian Rampazzo '-drive', 'if=none,format=raw,id=disk0,file=' 620bbbd9b6eSWillian Rampazzo + rootfs_path, 621bbbd9b6eSWillian Rampazzo '-device', 'ide-hd,bus=ide.0,drive=disk0', 622bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 623bbbd9b6eSWillian Rampazzo '-no-reboot') 624bbbd9b6eSWillian Rampazzo self.vm.launch() 625bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 626bbbd9b6eSWillian Rampazzo 627bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 628bbbd9b6eSWillian Rampazzo 'Allwinner sun4i/sun5i') 629bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', 630bbbd9b6eSWillian Rampazzo 'sda') 631d784c5fbSStrahinja Jankovic exec_command_and_wait_for_pattern(self, 'reboot', 632d784c5fbSStrahinja Jankovic 'reboot: Restarting system') 633d784c5fbSStrahinja Jankovic # Wait for VM to shut down gracefully 634d784c5fbSStrahinja Jankovic self.vm.wait() 635bbbd9b6eSWillian Rampazzo 63622bd244aSStrahinja Jankovic @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') 63722bd244aSStrahinja Jankovic def test_arm_cubieboard_openwrt_22_03_2(self): 63822bd244aSStrahinja Jankovic """ 63922bd244aSStrahinja Jankovic :avocado: tags=arch:arm 64022bd244aSStrahinja Jankovic :avocado: tags=machine:cubieboard 64122bd244aSStrahinja Jankovic :avocado: tags=device:sd 64222bd244aSStrahinja Jankovic """ 64322bd244aSStrahinja Jankovic 64422bd244aSStrahinja Jankovic # This test download a 7.5 MiB compressed image and expand it 64522bd244aSStrahinja Jankovic # to 126 MiB. 64622bd244aSStrahinja Jankovic image_url = ('https://downloads.openwrt.org/releases/22.03.2/targets/' 64722bd244aSStrahinja Jankovic 'sunxi/cortexa8/openwrt-22.03.2-sunxi-cortexa8-' 64822bd244aSStrahinja Jankovic 'cubietech_a10-cubieboard-ext4-sdcard.img.gz') 64922bd244aSStrahinja Jankovic image_hash = ('94b5ecbfbc0b3b56276e5146b899eafa' 65022bd244aSStrahinja Jankovic '2ac5dc2d08733d6705af9f144f39f554') 65122bd244aSStrahinja Jankovic image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash, 65222bd244aSStrahinja Jankovic algorithm='sha256') 65322bd244aSStrahinja Jankovic image_path = archive.extract(image_path_gz, self.workdir) 65422bd244aSStrahinja Jankovic image_pow2ceil_expand(image_path) 65522bd244aSStrahinja Jankovic 65622bd244aSStrahinja Jankovic self.vm.set_console() 65722bd244aSStrahinja Jankovic self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw', 65822bd244aSStrahinja Jankovic '-nic', 'user', 65922bd244aSStrahinja Jankovic '-no-reboot') 66022bd244aSStrahinja Jankovic self.vm.launch() 66122bd244aSStrahinja Jankovic 66222bd244aSStrahinja Jankovic kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 66322bd244aSStrahinja Jankovic 'usbcore.nousb ' 66422bd244aSStrahinja Jankovic 'noreboot') 66522bd244aSStrahinja Jankovic 66622bd244aSStrahinja Jankovic self.wait_for_console_pattern('U-Boot SPL') 66722bd244aSStrahinja Jankovic 66822bd244aSStrahinja Jankovic interrupt_interactive_console_until_pattern( 66922bd244aSStrahinja Jankovic self, 'Hit any key to stop autoboot:', '=>') 67022bd244aSStrahinja Jankovic exec_command_and_wait_for_pattern(self, "setenv extraargs '" + 67122bd244aSStrahinja Jankovic kernel_command_line + "'", '=>') 67222bd244aSStrahinja Jankovic exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...'); 67322bd244aSStrahinja Jankovic 67422bd244aSStrahinja Jankovic self.wait_for_console_pattern( 67522bd244aSStrahinja Jankovic 'Please press Enter to activate this console.') 67622bd244aSStrahinja Jankovic 67722bd244aSStrahinja Jankovic exec_command_and_wait_for_pattern(self, ' ', 'root@') 67822bd244aSStrahinja Jankovic 67922bd244aSStrahinja Jankovic exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 68022bd244aSStrahinja Jankovic 'Allwinner sun4i/sun5i') 681d784c5fbSStrahinja Jankovic exec_command_and_wait_for_pattern(self, 'reboot', 682d784c5fbSStrahinja Jankovic 'reboot: Restarting system') 683d784c5fbSStrahinja Jankovic # Wait for VM to shut down gracefully 684d784c5fbSStrahinja Jankovic self.vm.wait() 68522bd244aSStrahinja Jankovic 686bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') 687bbbd9b6eSWillian Rampazzo def test_arm_quanta_gsj(self): 688bbbd9b6eSWillian Rampazzo """ 689bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 690bbbd9b6eSWillian Rampazzo :avocado: tags=machine:quanta-gsj 691bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 692bbbd9b6eSWillian Rampazzo """ 693bbbd9b6eSWillian Rampazzo # 25 MiB compressed, 32 MiB uncompressed. 694bbbd9b6eSWillian Rampazzo image_url = ( 695bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 696bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/obmc-phosphor-image-gsj.static.mtd.gz') 697bbbd9b6eSWillian Rampazzo image_hash = '14895e634923345cb5c8776037ff7876df96f6b1' 698bbbd9b6eSWillian Rampazzo image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash) 699bbbd9b6eSWillian Rampazzo image_name = 'obmc.mtd' 700bbbd9b6eSWillian Rampazzo image_path = os.path.join(self.workdir, image_name) 701bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(image_path_gz, image_path) 702bbbd9b6eSWillian Rampazzo 703bbbd9b6eSWillian Rampazzo self.vm.set_console() 704bbbd9b6eSWillian Rampazzo drive_args = 'file=' + image_path + ',if=mtd,bus=0,unit=0' 705bbbd9b6eSWillian Rampazzo self.vm.add_args('-drive', drive_args) 706bbbd9b6eSWillian Rampazzo self.vm.launch() 707bbbd9b6eSWillian Rampazzo 708bbbd9b6eSWillian Rampazzo # Disable drivers and services that stall for a long time during boot, 709bbbd9b6eSWillian Rampazzo # to avoid running past the 90-second timeout. These may be removed 710bbbd9b6eSWillian Rampazzo # as the corresponding device support is added. 711bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + ( 712bbbd9b6eSWillian Rampazzo 'console=${console} ' 713bbbd9b6eSWillian Rampazzo 'mem=${mem} ' 714bbbd9b6eSWillian Rampazzo 'initcall_blacklist=npcm_i2c_bus_driver_init ' 715bbbd9b6eSWillian Rampazzo 'systemd.mask=systemd-random-seed.service ' 716bbbd9b6eSWillian Rampazzo 'systemd.mask=dropbearkey.service ' 717bbbd9b6eSWillian Rampazzo ) 718bbbd9b6eSWillian Rampazzo 719bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('> BootBlock by Nuvoton') 720bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('>Device: Poleg BMC NPCM730') 721bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('>Skip DDR init.') 722bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('U-Boot ') 723bbbd9b6eSWillian Rampazzo interrupt_interactive_console_until_pattern( 724bbbd9b6eSWillian Rampazzo self, 'Hit any key to stop autoboot:', 'U-Boot>') 725bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern( 726bbbd9b6eSWillian Rampazzo self, "setenv bootargs ${bootargs} " + kernel_command_line, 727bbbd9b6eSWillian Rampazzo 'U-Boot>') 728bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern( 729bbbd9b6eSWillian Rampazzo self, 'run romboot', 'Booting Kernel from flash') 730bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') 731bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') 732bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('OpenBMC Project Reference Distro') 733bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('gsj login:') 734bbbd9b6eSWillian Rampazzo 735bbbd9b6eSWillian Rampazzo def test_arm_quanta_gsj_initrd(self): 736bbbd9b6eSWillian Rampazzo """ 737bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 738bbbd9b6eSWillian Rampazzo :avocado: tags=machine:quanta-gsj 739bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 740bbbd9b6eSWillian Rampazzo """ 741bbbd9b6eSWillian Rampazzo initrd_url = ( 742bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 743bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/obmc-phosphor-initramfs-gsj.cpio.xz') 744bbbd9b6eSWillian Rampazzo initrd_hash = '98fefe5d7e56727b1eb17d5c00311b1b5c945300' 745bbbd9b6eSWillian Rampazzo initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 746bbbd9b6eSWillian Rampazzo kernel_url = ( 747bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 748bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/uImage-gsj.bin') 749bbbd9b6eSWillian Rampazzo kernel_hash = 'fa67b2f141d56d39b3c54305c0e8a899c99eb2c7' 750bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 751bbbd9b6eSWillian Rampazzo dtb_url = ( 752bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 753bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/nuvoton-npcm730-gsj.dtb') 754bbbd9b6eSWillian Rampazzo dtb_hash = '18315f7006d7b688d8312d5c727eecd819aa36a4' 755bbbd9b6eSWillian Rampazzo dtb_path = self.fetch_asset(dtb_url, asset_hash=dtb_hash) 756bbbd9b6eSWillian Rampazzo 757bbbd9b6eSWillian Rampazzo self.vm.set_console() 758bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 759bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200n8 ' 760bbbd9b6eSWillian Rampazzo 'earlycon=uart8250,mmio32,0xf0001000') 761bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 762bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 763bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 764bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 765bbbd9b6eSWillian Rampazzo self.vm.launch() 766bbbd9b6eSWillian Rampazzo 767bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') 768bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') 769bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern( 770bbbd9b6eSWillian Rampazzo 'Give root password for system maintenance') 771bbbd9b6eSWillian Rampazzo 7726c4f229aSqianfan Zhao def test_arm_bpim2u(self): 7736c4f229aSqianfan Zhao """ 7746c4f229aSqianfan Zhao :avocado: tags=arch:arm 7756c4f229aSqianfan Zhao :avocado: tags=machine:bpim2u 7766c4f229aSqianfan Zhao :avocado: tags=accel:tcg 7776c4f229aSqianfan Zhao """ 7786c4f229aSqianfan Zhao deb_url = ('https://apt.armbian.com/pool/main/l/linux-5.10.16-sunxi/' 7796c4f229aSqianfan Zhao 'linux-image-current-sunxi_21.02.2_armhf.deb') 7806c4f229aSqianfan Zhao deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 7816c4f229aSqianfan Zhao deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 7826c4f229aSqianfan Zhao kernel_path = self.extract_from_deb(deb_path, 7836c4f229aSqianfan Zhao '/boot/vmlinuz-5.10.16-sunxi') 7846c4f229aSqianfan Zhao dtb_path = ('/usr/lib/linux-image-current-sunxi/' 7856c4f229aSqianfan Zhao 'sun8i-r40-bananapi-m2-ultra.dtb') 7866c4f229aSqianfan Zhao dtb_path = self.extract_from_deb(deb_path, dtb_path) 7876c4f229aSqianfan Zhao 7886c4f229aSqianfan Zhao self.vm.set_console() 7896c4f229aSqianfan Zhao kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 7906c4f229aSqianfan Zhao 'console=ttyS0,115200n8 ' 7916c4f229aSqianfan Zhao 'earlycon=uart,mmio32,0x1c28000') 7926c4f229aSqianfan Zhao self.vm.add_args('-kernel', kernel_path, 7936c4f229aSqianfan Zhao '-dtb', dtb_path, 7946c4f229aSqianfan Zhao '-append', kernel_command_line) 7956c4f229aSqianfan Zhao self.vm.launch() 7966c4f229aSqianfan Zhao console_pattern = 'Kernel command line: %s' % kernel_command_line 7976c4f229aSqianfan Zhao self.wait_for_console_pattern(console_pattern) 7986c4f229aSqianfan Zhao 7996c4f229aSqianfan Zhao def test_arm_bpim2u_initrd(self): 8006c4f229aSqianfan Zhao """ 8016c4f229aSqianfan Zhao :avocado: tags=arch:arm 8026c4f229aSqianfan Zhao :avocado: tags=accel:tcg 8036c4f229aSqianfan Zhao :avocado: tags=machine:bpim2u 8046c4f229aSqianfan Zhao """ 8056c4f229aSqianfan Zhao deb_url = ('https://apt.armbian.com/pool/main/l/linux-5.10.16-sunxi/' 8066c4f229aSqianfan Zhao 'linux-image-current-sunxi_21.02.2_armhf.deb') 8076c4f229aSqianfan Zhao deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 8086c4f229aSqianfan Zhao deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 8096c4f229aSqianfan Zhao kernel_path = self.extract_from_deb(deb_path, 8106c4f229aSqianfan Zhao '/boot/vmlinuz-5.10.16-sunxi') 8116c4f229aSqianfan Zhao dtb_path = ('/usr/lib/linux-image-current-sunxi/' 8126c4f229aSqianfan Zhao 'sun8i-r40-bananapi-m2-ultra.dtb') 8136c4f229aSqianfan Zhao dtb_path = self.extract_from_deb(deb_path, dtb_path) 8146c4f229aSqianfan Zhao initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 8156c4f229aSqianfan Zhao '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 8166c4f229aSqianfan Zhao 'arm/rootfs-armv7a.cpio.gz') 8176c4f229aSqianfan Zhao initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' 8186c4f229aSqianfan Zhao initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 8196c4f229aSqianfan Zhao initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 8206c4f229aSqianfan Zhao archive.gzip_uncompress(initrd_path_gz, initrd_path) 8216c4f229aSqianfan Zhao 8226c4f229aSqianfan Zhao self.vm.set_console() 8236c4f229aSqianfan Zhao kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 8246c4f229aSqianfan Zhao 'console=ttyS0,115200 ' 8256c4f229aSqianfan Zhao 'panic=-1 noreboot') 8266c4f229aSqianfan Zhao self.vm.add_args('-kernel', kernel_path, 8276c4f229aSqianfan Zhao '-dtb', dtb_path, 8286c4f229aSqianfan Zhao '-initrd', initrd_path, 8296c4f229aSqianfan Zhao '-append', kernel_command_line, 8306c4f229aSqianfan Zhao '-no-reboot') 8316c4f229aSqianfan Zhao self.vm.launch() 8326c4f229aSqianfan Zhao self.wait_for_console_pattern('Boot successful.') 8336c4f229aSqianfan Zhao 8346c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 8356c4f229aSqianfan Zhao 'Allwinner sun8i Family') 8366c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 8376c4f229aSqianfan Zhao 'system-control@1c00000') 8386c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'reboot', 8396c4f229aSqianfan Zhao 'reboot: Restarting system') 8406c4f229aSqianfan Zhao # Wait for VM to shut down gracefully 8416c4f229aSqianfan Zhao self.vm.wait() 8426c4f229aSqianfan Zhao 8436c4f229aSqianfan Zhao def test_arm_bpim2u_gmac(self): 8446c4f229aSqianfan Zhao """ 8456c4f229aSqianfan Zhao :avocado: tags=arch:arm 8466c4f229aSqianfan Zhao :avocado: tags=accel:tcg 8476c4f229aSqianfan Zhao :avocado: tags=machine:bpim2u 8486c4f229aSqianfan Zhao :avocado: tags=device:sd 8496c4f229aSqianfan Zhao """ 8506c4f229aSqianfan Zhao self.require_netdev('user') 8516c4f229aSqianfan Zhao 8526c4f229aSqianfan Zhao deb_url = ('https://apt.armbian.com/pool/main/l/linux-5.10.16-sunxi/' 8536c4f229aSqianfan Zhao 'linux-image-current-sunxi_21.02.2_armhf.deb') 8546c4f229aSqianfan Zhao deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 8556c4f229aSqianfan Zhao deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 8566c4f229aSqianfan Zhao kernel_path = self.extract_from_deb(deb_path, 8576c4f229aSqianfan Zhao '/boot/vmlinuz-5.10.16-sunxi') 8586c4f229aSqianfan Zhao dtb_path = ('/usr/lib/linux-image-current-sunxi/' 8596c4f229aSqianfan Zhao 'sun8i-r40-bananapi-m2-ultra.dtb') 8606c4f229aSqianfan Zhao dtb_path = self.extract_from_deb(deb_path, dtb_path) 8616c4f229aSqianfan Zhao rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/' 8626c4f229aSqianfan Zhao 'buildroot-baseline/20221116.0/armel/rootfs.ext2.xz') 8636c4f229aSqianfan Zhao rootfs_hash = 'fae32f337c7b87547b10f42599acf109da8b6d9a' 8646c4f229aSqianfan Zhao rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) 8656c4f229aSqianfan Zhao rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') 8666c4f229aSqianfan Zhao archive.lzma_uncompress(rootfs_path_xz, rootfs_path) 8676c4f229aSqianfan Zhao image_pow2ceil_expand(rootfs_path) 8686c4f229aSqianfan Zhao 8696c4f229aSqianfan Zhao self.vm.set_console() 8706c4f229aSqianfan Zhao kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 8716c4f229aSqianfan Zhao 'console=ttyS0,115200 ' 8727ea47af3SThomas Huth 'root=b300 rootwait rw ' 8736c4f229aSqianfan Zhao 'panic=-1 noreboot') 8746c4f229aSqianfan Zhao self.vm.add_args('-kernel', kernel_path, 8756c4f229aSqianfan Zhao '-dtb', dtb_path, 8766c4f229aSqianfan Zhao '-drive', 'file=' + rootfs_path + ',if=sd,format=raw', 8776c4f229aSqianfan Zhao '-net', 'nic,model=gmac,netdev=host_gmac', 8786c4f229aSqianfan Zhao '-netdev', 'user,id=host_gmac', 8796c4f229aSqianfan Zhao '-append', kernel_command_line, 8806c4f229aSqianfan Zhao '-no-reboot') 8816c4f229aSqianfan Zhao self.vm.launch() 8826c4f229aSqianfan Zhao shell_ready = "/bin/sh: can't access tty; job control turned off" 8836c4f229aSqianfan Zhao self.wait_for_console_pattern(shell_ready) 8846c4f229aSqianfan Zhao 8856c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 8866c4f229aSqianfan Zhao 'Allwinner sun8i Family') 8876c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', 8887ea47af3SThomas Huth 'mmcblk') 8896c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up', 8906c4f229aSqianfan Zhao 'eth0: Link is Up') 8916c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'udhcpc eth0', 8926c4f229aSqianfan Zhao 'udhcpc: lease of 10.0.2.15 obtained') 8936c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', 8946c4f229aSqianfan Zhao '3 packets transmitted, 3 packets received, 0% packet loss') 8956c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'reboot', 8966c4f229aSqianfan Zhao 'reboot: Restarting system') 8976c4f229aSqianfan Zhao # Wait for VM to shut down gracefully 8986c4f229aSqianfan Zhao self.vm.wait() 8996c4f229aSqianfan Zhao 9006c4f229aSqianfan Zhao @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') 9016c4f229aSqianfan Zhao def test_arm_bpim2u_openwrt_22_03_3(self): 9026c4f229aSqianfan Zhao """ 9036c4f229aSqianfan Zhao :avocado: tags=arch:arm 9046c4f229aSqianfan Zhao :avocado: tags=machine:bpim2u 9056c4f229aSqianfan Zhao :avocado: tags=device:sd 9066c4f229aSqianfan Zhao """ 9076c4f229aSqianfan Zhao 9086c4f229aSqianfan Zhao # This test download a 8.9 MiB compressed image and expand it 9096c4f229aSqianfan Zhao # to 127 MiB. 9106c4f229aSqianfan Zhao image_url = ('https://downloads.openwrt.org/releases/22.03.3/targets/' 9116c4f229aSqianfan Zhao 'sunxi/cortexa7/openwrt-22.03.3-sunxi-cortexa7-' 9126c4f229aSqianfan Zhao 'sinovoip_bananapi-m2-ultra-ext4-sdcard.img.gz') 9136c4f229aSqianfan Zhao image_hash = ('5b41b4e11423e562c6011640f9a7cd3b' 9146c4f229aSqianfan Zhao 'dd0a3d42b83430f7caa70a432e6cd82c') 9156c4f229aSqianfan Zhao image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash, 9166c4f229aSqianfan Zhao algorithm='sha256') 9176c4f229aSqianfan Zhao image_path = archive.extract(image_path_gz, self.workdir) 9186c4f229aSqianfan Zhao image_pow2ceil_expand(image_path) 9196c4f229aSqianfan Zhao 9206c4f229aSqianfan Zhao self.vm.set_console() 9216c4f229aSqianfan Zhao self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw', 9226c4f229aSqianfan Zhao '-nic', 'user', 9236c4f229aSqianfan Zhao '-no-reboot') 9246c4f229aSqianfan Zhao self.vm.launch() 9256c4f229aSqianfan Zhao 9266c4f229aSqianfan Zhao kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 9276c4f229aSqianfan Zhao 'usbcore.nousb ' 9286c4f229aSqianfan Zhao 'noreboot') 9296c4f229aSqianfan Zhao 9306c4f229aSqianfan Zhao self.wait_for_console_pattern('U-Boot SPL') 9316c4f229aSqianfan Zhao 9326c4f229aSqianfan Zhao interrupt_interactive_console_until_pattern( 9336c4f229aSqianfan Zhao self, 'Hit any key to stop autoboot:', '=>') 9346c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, "setenv extraargs '" + 9356c4f229aSqianfan Zhao kernel_command_line + "'", '=>') 9366c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...'); 9376c4f229aSqianfan Zhao 9386c4f229aSqianfan Zhao self.wait_for_console_pattern( 9396c4f229aSqianfan Zhao 'Please press Enter to activate this console.') 9406c4f229aSqianfan Zhao 9416c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, ' ', 'root@') 9426c4f229aSqianfan Zhao 9436c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 9446c4f229aSqianfan Zhao 'Allwinner sun8i Family') 9456c4f229aSqianfan Zhao exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 9466c4f229aSqianfan Zhao 'system-control@1c00000') 9476c4f229aSqianfan Zhao 948bbbd9b6eSWillian Rampazzo def test_arm_orangepi(self): 949bbbd9b6eSWillian Rampazzo """ 950bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 951bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 952bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 953bbbd9b6eSWillian Rampazzo """ 954bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 955bbbd9b6eSWillian Rampazzo 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 956bbbd9b6eSWillian Rampazzo deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 957bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 958bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 959bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-5.10.16-sunxi') 960bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb' 961bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 962bbbd9b6eSWillian Rampazzo 963bbbd9b6eSWillian Rampazzo self.vm.set_console() 964bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 965bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200n8 ' 966bbbd9b6eSWillian Rampazzo 'earlycon=uart,mmio32,0x1c28000') 967bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 968bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 969bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 970bbbd9b6eSWillian Rampazzo self.vm.launch() 971bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 972bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 973bbbd9b6eSWillian Rampazzo 974bbbd9b6eSWillian Rampazzo def test_arm_orangepi_initrd(self): 975bbbd9b6eSWillian Rampazzo """ 976bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 977bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 978bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 979bbbd9b6eSWillian Rampazzo """ 980bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 981bbbd9b6eSWillian Rampazzo 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 982bbbd9b6eSWillian Rampazzo deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 983bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 984bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 985bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-5.10.16-sunxi') 986bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb' 987bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 988bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 989bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 990bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv7a.cpio.gz') 991bbbd9b6eSWillian Rampazzo initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' 992bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 993bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 994bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 995bbbd9b6eSWillian Rampazzo 996bbbd9b6eSWillian Rampazzo self.vm.set_console() 997bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 998bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 999bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 1000bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1001bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 1002bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 1003bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 1004bbbd9b6eSWillian Rampazzo '-no-reboot') 1005bbbd9b6eSWillian Rampazzo self.vm.launch() 1006bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 1007bbbd9b6eSWillian Rampazzo 1008bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 1009bbbd9b6eSWillian Rampazzo 'Allwinner sun8i Family') 1010bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 1011bbbd9b6eSWillian Rampazzo 'system-control@1c00000') 1012bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'reboot', 1013bbbd9b6eSWillian Rampazzo 'reboot: Restarting system') 1014bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 1015bbbd9b6eSWillian Rampazzo self.vm.wait() 1016bbbd9b6eSWillian Rampazzo 1017bbbd9b6eSWillian Rampazzo def test_arm_orangepi_sd(self): 1018bbbd9b6eSWillian Rampazzo """ 1019bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1020bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 1021bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 1022bbbd9b6eSWillian Rampazzo :avocado: tags=device:sd 1023bbbd9b6eSWillian Rampazzo """ 10240793fe01SPeter Maydell self.require_netdev('user') 10250793fe01SPeter Maydell 1026bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 1027bbbd9b6eSWillian Rampazzo 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 1028bbbd9b6eSWillian Rampazzo deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 1029bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 1030bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 1031bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-5.10.16-sunxi') 1032bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb' 1033bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 1034bbbd9b6eSWillian Rampazzo rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/' 10354189af72SAlex Bennée 'buildroot-baseline/20221116.0/armel/rootfs.ext2.xz') 10364189af72SAlex Bennée rootfs_hash = 'fae32f337c7b87547b10f42599acf109da8b6d9a' 1037bbbd9b6eSWillian Rampazzo rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) 1038bbbd9b6eSWillian Rampazzo rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') 1039bbbd9b6eSWillian Rampazzo archive.lzma_uncompress(rootfs_path_xz, rootfs_path) 1040bbbd9b6eSWillian Rampazzo image_pow2ceil_expand(rootfs_path) 1041bbbd9b6eSWillian Rampazzo 1042bbbd9b6eSWillian Rampazzo self.vm.set_console() 1043bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 1044bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 1045bbbd9b6eSWillian Rampazzo 'root=/dev/mmcblk0 rootwait rw ' 1046bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 1047bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1048bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 1049bbbd9b6eSWillian Rampazzo '-drive', 'file=' + rootfs_path + ',if=sd,format=raw', 1050bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 1051bbbd9b6eSWillian Rampazzo '-no-reboot') 1052bbbd9b6eSWillian Rampazzo self.vm.launch() 1053bbbd9b6eSWillian Rampazzo shell_ready = "/bin/sh: can't access tty; job control turned off" 1054bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(shell_ready) 1055bbbd9b6eSWillian Rampazzo 1056bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 1057bbbd9b6eSWillian Rampazzo 'Allwinner sun8i Family') 1058bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', 1059bbbd9b6eSWillian Rampazzo 'mmcblk0') 1060bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up', 1061bbbd9b6eSWillian Rampazzo 'eth0: Link is Up') 1062bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'udhcpc eth0', 1063bbbd9b6eSWillian Rampazzo 'udhcpc: lease of 10.0.2.15 obtained') 1064bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', 1065bbbd9b6eSWillian Rampazzo '3 packets transmitted, 3 packets received, 0% packet loss') 1066bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'reboot', 1067bbbd9b6eSWillian Rampazzo 'reboot: Restarting system') 1068bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 1069bbbd9b6eSWillian Rampazzo self.vm.wait() 1070bbbd9b6eSWillian Rampazzo 1071bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') 1072bbbd9b6eSWillian Rampazzo def test_arm_orangepi_bionic_20_08(self): 1073bbbd9b6eSWillian Rampazzo """ 1074bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1075bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 1076bbbd9b6eSWillian Rampazzo :avocado: tags=device:sd 1077bbbd9b6eSWillian Rampazzo """ 1078bbbd9b6eSWillian Rampazzo 1079bbbd9b6eSWillian Rampazzo # This test download a 275 MiB compressed image and expand it 1080bbbd9b6eSWillian Rampazzo # to 1036 MiB, but the underlying filesystem is 1552 MiB... 1081bbbd9b6eSWillian Rampazzo # As we expand it to 2 GiB we are safe. 1082bbbd9b6eSWillian Rampazzo 1083bbbd9b6eSWillian Rampazzo image_url = ('https://archive.armbian.com/orangepipc/archive/' 1084bbbd9b6eSWillian Rampazzo 'Armbian_20.08.1_Orangepipc_bionic_current_5.8.5.img.xz') 1085bbbd9b6eSWillian Rampazzo image_hash = ('b4d6775f5673486329e45a0586bf06b6' 1086bbbd9b6eSWillian Rampazzo 'dbe792199fd182ac6b9c7bb6c7d3e6dd') 1087bbbd9b6eSWillian Rampazzo image_path_xz = self.fetch_asset(image_url, asset_hash=image_hash, 1088bbbd9b6eSWillian Rampazzo algorithm='sha256') 1089bbbd9b6eSWillian Rampazzo image_path = archive.extract(image_path_xz, self.workdir) 1090bbbd9b6eSWillian Rampazzo image_pow2ceil_expand(image_path) 1091bbbd9b6eSWillian Rampazzo 1092bbbd9b6eSWillian Rampazzo self.vm.set_console() 1093bbbd9b6eSWillian Rampazzo self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw', 1094bbbd9b6eSWillian Rampazzo '-nic', 'user', 1095bbbd9b6eSWillian Rampazzo '-no-reboot') 1096bbbd9b6eSWillian Rampazzo self.vm.launch() 1097bbbd9b6eSWillian Rampazzo 1098bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 1099bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 1100bbbd9b6eSWillian Rampazzo 'loglevel=7 ' 1101bbbd9b6eSWillian Rampazzo 'nosmp ' 1102bbbd9b6eSWillian Rampazzo 'systemd.default_timeout_start_sec=9000 ' 1103bbbd9b6eSWillian Rampazzo 'systemd.mask=armbian-zram-config.service ' 1104bbbd9b6eSWillian Rampazzo 'systemd.mask=armbian-ramlog.service') 1105bbbd9b6eSWillian Rampazzo 1106bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('U-Boot SPL') 1107bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Autoboot in ') 1108bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, ' ', '=>') 1109bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, "setenv extraargs '" + 1110bbbd9b6eSWillian Rampazzo kernel_command_line + "'", '=>') 1111bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...'); 1112bbbd9b6eSWillian Rampazzo 1113bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('systemd[1]: Set hostname ' + 1114bbbd9b6eSWillian Rampazzo 'to <orangepipc>') 1115bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Starting Load Kernel Modules...') 1116bbbd9b6eSWillian Rampazzo 1117bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') 1118bbbd9b6eSWillian Rampazzo def test_arm_orangepi_uboot_netbsd9(self): 1119bbbd9b6eSWillian Rampazzo """ 1120bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1121bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 1122bbbd9b6eSWillian Rampazzo :avocado: tags=device:sd 1123bbbd9b6eSWillian Rampazzo :avocado: tags=os:netbsd 1124bbbd9b6eSWillian Rampazzo """ 1125bbbd9b6eSWillian Rampazzo # This test download a 304MB compressed image and expand it to 2GB 1126bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 1127bbbd9b6eSWillian Rampazzo '20200108T145233Z/pool/main/u/u-boot/' 1128bbbd9b6eSWillian Rampazzo 'u-boot-sunxi_2020.01%2Bdfsg-1_armhf.deb') 1129bbbd9b6eSWillian Rampazzo deb_hash = 'f67f404a80753ca3d1258f13e38f2b060e13db99' 1130bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 1131bbbd9b6eSWillian Rampazzo # We use the common OrangePi PC 'plus' build of U-Boot for our secondary 1132bbbd9b6eSWillian Rampazzo # program loader (SPL). We will then set the path to the more specific 1133bbbd9b6eSWillian Rampazzo # OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt, 1134bbbd9b6eSWillian Rampazzo # before to boot NetBSD. 1135bbbd9b6eSWillian Rampazzo uboot_path = '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin' 1136bbbd9b6eSWillian Rampazzo uboot_path = self.extract_from_deb(deb_path, uboot_path) 1137bbbd9b6eSWillian Rampazzo image_url = ('https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/' 1138bbbd9b6eSWillian Rampazzo 'evbarm-earmv7hf/binary/gzimg/armv7.img.gz') 1139bbbd9b6eSWillian Rampazzo image_hash = '2babb29d36d8360adcb39c09e31060945259917a' 1140bbbd9b6eSWillian Rampazzo image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash) 1141bbbd9b6eSWillian Rampazzo image_path = os.path.join(self.workdir, 'armv7.img') 1142bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(image_path_gz, image_path) 1143bbbd9b6eSWillian Rampazzo image_pow2ceil_expand(image_path) 1144bbbd9b6eSWillian Rampazzo image_drive_args = 'if=sd,format=raw,snapshot=on,file=' + image_path 1145bbbd9b6eSWillian Rampazzo 1146bbbd9b6eSWillian Rampazzo # dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc 1147bbbd9b6eSWillian Rampazzo with open(uboot_path, 'rb') as f_in: 1148bbbd9b6eSWillian Rampazzo with open(image_path, 'r+b') as f_out: 1149bbbd9b6eSWillian Rampazzo f_out.seek(8 * 1024) 1150bbbd9b6eSWillian Rampazzo shutil.copyfileobj(f_in, f_out) 1151bbbd9b6eSWillian Rampazzo 1152bbbd9b6eSWillian Rampazzo self.vm.set_console() 1153bbbd9b6eSWillian Rampazzo self.vm.add_args('-nic', 'user', 1154bbbd9b6eSWillian Rampazzo '-drive', image_drive_args, 1155bbbd9b6eSWillian Rampazzo '-global', 'allwinner-rtc.base-year=2000', 1156bbbd9b6eSWillian Rampazzo '-no-reboot') 1157bbbd9b6eSWillian Rampazzo self.vm.launch() 1158bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'U-Boot 2020.01+dfsg-1') 1159bbbd9b6eSWillian Rampazzo interrupt_interactive_console_until_pattern(self, 1160bbbd9b6eSWillian Rampazzo 'Hit any key to stop autoboot:', 1161bbbd9b6eSWillian Rampazzo 'switch to partitions #0, OK') 1162bbbd9b6eSWillian Rampazzo 1163bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, '', '=>') 1164bbbd9b6eSWillian Rampazzo cmd = 'setenv bootargs root=ld0a' 1165bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 1166bbbd9b6eSWillian Rampazzo cmd = 'setenv kernel netbsd-GENERIC.ub' 1167bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 1168bbbd9b6eSWillian Rampazzo cmd = 'setenv fdtfile dtb/sun8i-h3-orangepi-pc.dtb' 1169bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 1170bbbd9b6eSWillian Rampazzo cmd = ("setenv bootcmd 'fatload mmc 0:1 ${kernel_addr_r} ${kernel}; " 1171bbbd9b6eSWillian Rampazzo "fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}; " 1172bbbd9b6eSWillian Rampazzo "fdt addr ${fdt_addr_r}; " 1173bbbd9b6eSWillian Rampazzo "bootm ${kernel_addr_r} - ${fdt_addr_r}'") 1174bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 1175bbbd9b6eSWillian Rampazzo 1176bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'boot', 1177bbbd9b6eSWillian Rampazzo 'Booting kernel from Legacy Image') 1178bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'Starting kernel ...') 1179bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'NetBSD 9.0 (GENERIC)') 1180bbbd9b6eSWillian Rampazzo # Wait for user-space 1181bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'Starting root file system check') 1182bbbd9b6eSWillian Rampazzo 1183bbbd9b6eSWillian Rampazzo def test_aarch64_raspi3_atf(self): 1184bbbd9b6eSWillian Rampazzo """ 11859bb9a3f3SFabiano Rosas :avocado: tags=accel:tcg 1186bbbd9b6eSWillian Rampazzo :avocado: tags=arch:aarch64 1187bbbd9b6eSWillian Rampazzo :avocado: tags=machine:raspi3b 1188bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:cortex-a53 1189bbbd9b6eSWillian Rampazzo :avocado: tags=device:pl011 1190bbbd9b6eSWillian Rampazzo :avocado: tags=atf 1191bbbd9b6eSWillian Rampazzo """ 1192bbbd9b6eSWillian Rampazzo zip_url = ('https://github.com/pbatard/RPi3/releases/download/' 1193bbbd9b6eSWillian Rampazzo 'v1.15/RPi3_UEFI_Firmware_v1.15.zip') 1194bbbd9b6eSWillian Rampazzo zip_hash = '74b3bd0de92683cadb14e008a7575e1d0c3cafb9' 1195bbbd9b6eSWillian Rampazzo zip_path = self.fetch_asset(zip_url, asset_hash=zip_hash) 1196bbbd9b6eSWillian Rampazzo 1197bbbd9b6eSWillian Rampazzo archive.extract(zip_path, self.workdir) 1198bbbd9b6eSWillian Rampazzo efi_fd = os.path.join(self.workdir, 'RPI_EFI.fd') 1199bbbd9b6eSWillian Rampazzo 1200bbbd9b6eSWillian Rampazzo self.vm.set_console(console_index=1) 1201bbbd9b6eSWillian Rampazzo self.vm.add_args('-nodefaults', 1202bbbd9b6eSWillian Rampazzo '-device', 'loader,file=%s,force-raw=true' % efi_fd) 1203bbbd9b6eSWillian Rampazzo self.vm.launch() 1204bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('version UEFI Firmware v1.15') 1205bbbd9b6eSWillian Rampazzo 1206bbbd9b6eSWillian Rampazzo def test_s390x_s390_ccw_virtio(self): 1207bbbd9b6eSWillian Rampazzo """ 1208bbbd9b6eSWillian Rampazzo :avocado: tags=arch:s390x 1209bbbd9b6eSWillian Rampazzo :avocado: tags=machine:s390-ccw-virtio 1210bbbd9b6eSWillian Rampazzo """ 1211bbbd9b6eSWillian Rampazzo kernel_url = ('https://archives.fedoraproject.org/pub/archive' 1212bbbd9b6eSWillian Rampazzo '/fedora-secondary/releases/29/Everything/s390x/os/images' 1213bbbd9b6eSWillian Rampazzo '/kernel.img') 1214bbbd9b6eSWillian Rampazzo kernel_hash = 'e8e8439103ef8053418ef062644ffd46a7919313' 1215bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 1216bbbd9b6eSWillian Rampazzo 1217bbbd9b6eSWillian Rampazzo self.vm.set_console() 1218bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=sclp0' 1219bbbd9b6eSWillian Rampazzo self.vm.add_args('-nodefaults', 1220bbbd9b6eSWillian Rampazzo '-kernel', kernel_path, 1221bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 1222bbbd9b6eSWillian Rampazzo self.vm.launch() 1223bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 1224bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1225bbbd9b6eSWillian Rampazzo 1226bbbd9b6eSWillian Rampazzo def test_alpha_clipper(self): 1227bbbd9b6eSWillian Rampazzo """ 1228bbbd9b6eSWillian Rampazzo :avocado: tags=arch:alpha 1229bbbd9b6eSWillian Rampazzo :avocado: tags=machine:clipper 1230bbbd9b6eSWillian Rampazzo """ 1231bbbd9b6eSWillian Rampazzo kernel_url = ('http://archive.debian.org/debian/dists/lenny/main/' 1232bbbd9b6eSWillian Rampazzo 'installer-alpha/20090123lenny10/images/cdrom/vmlinuz') 1233bbbd9b6eSWillian Rampazzo kernel_hash = '3a943149335529e2ed3e74d0d787b85fb5671ba3' 1234bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 1235bbbd9b6eSWillian Rampazzo 1236bbbd9b6eSWillian Rampazzo uncompressed_kernel = archive.uncompress(kernel_path, self.workdir) 1237bbbd9b6eSWillian Rampazzo 1238bbbd9b6eSWillian Rampazzo self.vm.set_console() 1239bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 1240bbbd9b6eSWillian Rampazzo self.vm.add_args('-nodefaults', 1241bbbd9b6eSWillian Rampazzo '-kernel', uncompressed_kernel, 1242bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 1243bbbd9b6eSWillian Rampazzo self.vm.launch() 1244bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 1245bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1246bbbd9b6eSWillian Rampazzo 1247bbbd9b6eSWillian Rampazzo def test_m68k_q800(self): 1248bbbd9b6eSWillian Rampazzo """ 1249bbbd9b6eSWillian Rampazzo :avocado: tags=arch:m68k 1250bbbd9b6eSWillian Rampazzo :avocado: tags=machine:q800 1251bbbd9b6eSWillian Rampazzo """ 1252bbbd9b6eSWillian Rampazzo deb_url = ('https://snapshot.debian.org/archive/debian-ports' 1253bbbd9b6eSWillian Rampazzo '/20191021T083923Z/pool-m68k/main' 1254bbbd9b6eSWillian Rampazzo '/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb') 1255bbbd9b6eSWillian Rampazzo deb_hash = '044954bb9be4160a3ce81f8bc1b5e856b75cccd1' 1256bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 1257bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 1258bbbd9b6eSWillian Rampazzo '/boot/vmlinux-5.3.0-1-m68k') 1259bbbd9b6eSWillian Rampazzo 1260bbbd9b6eSWillian Rampazzo self.vm.set_console() 1261bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 1262bbbd9b6eSWillian Rampazzo 'console=ttyS0 vga=off') 1263bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1264bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 1265bbbd9b6eSWillian Rampazzo self.vm.launch() 1266bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 1267bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1268bbbd9b6eSWillian Rampazzo console_pattern = 'No filesystem could mount root' 1269bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1270bbbd9b6eSWillian Rampazzo 1271bbbd9b6eSWillian Rampazzo def do_test_advcal_2018(self, day, tar_hash, kernel_name, console=0): 127272cf57b0SThomas Huth tar_url = ('https://qemu-advcal.gitlab.io' 127372cf57b0SThomas Huth '/qac-best-of-multiarch/download/day' + day + '.tar.xz') 1274bbbd9b6eSWillian Rampazzo file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 1275bbbd9b6eSWillian Rampazzo archive.extract(file_path, self.workdir) 1276bbbd9b6eSWillian Rampazzo self.vm.set_console(console_index=console) 1277bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', 1278bbbd9b6eSWillian Rampazzo self.workdir + '/day' + day + '/' + kernel_name) 1279bbbd9b6eSWillian Rampazzo self.vm.launch() 1280bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('QEMU advent calendar') 1281bbbd9b6eSWillian Rampazzo 1282bbbd9b6eSWillian Rampazzo def test_arm_vexpressa9(self): 1283bbbd9b6eSWillian Rampazzo """ 1284bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1285bbbd9b6eSWillian Rampazzo :avocado: tags=machine:vexpress-a9 1286bbbd9b6eSWillian Rampazzo """ 1287bbbd9b6eSWillian Rampazzo tar_hash = '32b7677ce8b6f1471fb0059865f451169934245b' 1288bbbd9b6eSWillian Rampazzo self.vm.add_args('-dtb', self.workdir + '/day16/vexpress-v2p-ca9.dtb') 1289bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('16', tar_hash, 'winter.zImage') 1290bbbd9b6eSWillian Rampazzo 1291bbbd9b6eSWillian Rampazzo def test_arm_ast2600_debian(self): 1292bbbd9b6eSWillian Rampazzo """ 1293bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 12949b983dc7SJoel Stanley :avocado: tags=machine:rainier-bmc 1295bbbd9b6eSWillian Rampazzo """ 1296bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 12979b983dc7SJoel Stanley '20220606T211338Z/' 1298bbbd9b6eSWillian Rampazzo 'pool/main/l/linux/' 12999b983dc7SJoel Stanley 'linux-image-5.17.0-2-armmp_5.17.6-1%2Bb1_armhf.deb') 13009b983dc7SJoel Stanley deb_hash = '8acb2b4439faedc2f3ed4bdb2847ad4f6e0491f73debaeb7f660c8abe4dcdc0e' 1301bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash, 1302bbbd9b6eSWillian Rampazzo algorithm='sha256') 13039b983dc7SJoel Stanley kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-5.17.0-2-armmp') 1304bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, 13059b983dc7SJoel Stanley '/usr/lib/linux-image-5.17.0-2-armmp/aspeed-bmc-ibm-rainier.dtb') 1306bbbd9b6eSWillian Rampazzo 1307bbbd9b6eSWillian Rampazzo self.vm.set_console() 1308bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1309bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 1310bbbd9b6eSWillian Rampazzo '-net', 'nic') 1311bbbd9b6eSWillian Rampazzo self.vm.launch() 1312bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("Booting Linux on physical CPU 0xf00") 1313bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("SMP: Total of 2 processors activated") 1314bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("No filesystem could mount root") 1315bbbd9b6eSWillian Rampazzo 1316bbbd9b6eSWillian Rampazzo def test_m68k_mcf5208evb(self): 1317bbbd9b6eSWillian Rampazzo """ 1318bbbd9b6eSWillian Rampazzo :avocado: tags=arch:m68k 1319bbbd9b6eSWillian Rampazzo :avocado: tags=machine:mcf5208evb 1320bbbd9b6eSWillian Rampazzo """ 1321bbbd9b6eSWillian Rampazzo tar_hash = 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c' 1322bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('07', tar_hash, 'sanity-clause.elf') 1323bbbd9b6eSWillian Rampazzo 1324bbbd9b6eSWillian Rampazzo def test_or1k_sim(self): 1325bbbd9b6eSWillian Rampazzo """ 1326bbbd9b6eSWillian Rampazzo :avocado: tags=arch:or1k 1327bbbd9b6eSWillian Rampazzo :avocado: tags=machine:or1k-sim 1328bbbd9b6eSWillian Rampazzo """ 1329bbbd9b6eSWillian Rampazzo tar_hash = '20334cdaf386108c530ff0badaecc955693027dd' 1330bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('20', tar_hash, 'vmlinux') 1331bbbd9b6eSWillian Rampazzo 1332bbbd9b6eSWillian Rampazzo def test_nios2_10m50(self): 1333bbbd9b6eSWillian Rampazzo """ 1334bbbd9b6eSWillian Rampazzo :avocado: tags=arch:nios2 1335bbbd9b6eSWillian Rampazzo :avocado: tags=machine:10m50-ghrd 1336bbbd9b6eSWillian Rampazzo """ 1337bbbd9b6eSWillian Rampazzo tar_hash = 'e4251141726c412ac0407c5a6bceefbbff018918' 1338bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('14', tar_hash, 'vmlinux.elf') 1339bbbd9b6eSWillian Rampazzo 1340bbbd9b6eSWillian Rampazzo def test_ppc64_e500(self): 1341bbbd9b6eSWillian Rampazzo """ 1342bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc64 1343bbbd9b6eSWillian Rampazzo :avocado: tags=machine:ppce500 1344bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:e5500 1345d78fb13dSDaniel Henrique Barboza :avocado: tags=accel:tcg 1346bbbd9b6eSWillian Rampazzo """ 1347d78fb13dSDaniel Henrique Barboza self.require_accelerator("tcg") 1348bbbd9b6eSWillian Rampazzo tar_hash = '6951d86d644b302898da2fd701739c9406527fe1' 1349bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('19', tar_hash, 'uImage') 1350bbbd9b6eSWillian Rampazzo 1351bbbd9b6eSWillian Rampazzo def do_test_ppc64_powernv(self, proc): 13526b87d614SDaniel Henrique Barboza self.require_accelerator("tcg") 1353bbbd9b6eSWillian Rampazzo images_url = ('https://github.com/open-power/op-build/releases/download/v2.7/') 1354bbbd9b6eSWillian Rampazzo 1355bbbd9b6eSWillian Rampazzo kernel_url = images_url + 'zImage.epapr' 1356bbbd9b6eSWillian Rampazzo kernel_hash = '0ab237df661727e5392cee97460e8674057a883c5f74381a128fa772588d45cd' 1357bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash, 1358bbbd9b6eSWillian Rampazzo algorithm='sha256') 1359bbbd9b6eSWillian Rampazzo self.vm.set_console() 1360bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1361bbbd9b6eSWillian Rampazzo '-append', 'console=tty0 console=hvc0', 1362bbbd9b6eSWillian Rampazzo '-device', 'pcie-pci-bridge,id=bridge1,bus=pcie.1,addr=0x0', 1363bbbd9b6eSWillian Rampazzo '-device', 'nvme,bus=pcie.2,addr=0x0,serial=1234', 1364bbbd9b6eSWillian Rampazzo '-device', 'e1000e,bus=bridge1,addr=0x3', 1365bbbd9b6eSWillian Rampazzo '-device', 'nec-usb-xhci,bus=bridge1,addr=0x2') 1366bbbd9b6eSWillian Rampazzo self.vm.launch() 1367bbbd9b6eSWillian Rampazzo 1368bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("CPU: " + proc + " generation processor") 1369bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("zImage starting: loaded") 1370bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("Run /init as init process") 1371bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("Creating 1 MTD partitions") 1372bbbd9b6eSWillian Rampazzo 1373bbbd9b6eSWillian Rampazzo def test_ppc_powernv8(self): 1374bbbd9b6eSWillian Rampazzo """ 1375bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc64 1376bbbd9b6eSWillian Rampazzo :avocado: tags=machine:powernv8 13776b87d614SDaniel Henrique Barboza :avocado: tags=accel:tcg 1378bbbd9b6eSWillian Rampazzo """ 1379bbbd9b6eSWillian Rampazzo self.do_test_ppc64_powernv('P8') 1380bbbd9b6eSWillian Rampazzo 1381bbbd9b6eSWillian Rampazzo def test_ppc_powernv9(self): 1382bbbd9b6eSWillian Rampazzo """ 1383bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc64 1384bbbd9b6eSWillian Rampazzo :avocado: tags=machine:powernv9 13856b87d614SDaniel Henrique Barboza :avocado: tags=accel:tcg 1386bbbd9b6eSWillian Rampazzo """ 1387bbbd9b6eSWillian Rampazzo self.do_test_ppc64_powernv('P9') 1388bbbd9b6eSWillian Rampazzo 1389bbbd9b6eSWillian Rampazzo def test_ppc_g3beige(self): 1390bbbd9b6eSWillian Rampazzo """ 1391bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc 1392bbbd9b6eSWillian Rampazzo :avocado: tags=machine:g3beige 1393daff68ccSDaniel Henrique Barboza :avocado: tags=accel:tcg 1394bbbd9b6eSWillian Rampazzo """ 1395daff68ccSDaniel Henrique Barboza # TODO: g3beige works with kvm_pr but we don't have a 1396daff68ccSDaniel Henrique Barboza # reliable way ATM (e.g. looking at /proc/modules) to detect 1397daff68ccSDaniel Henrique Barboza # whether we're running kvm_hv or kvm_pr. For now let's 1398daff68ccSDaniel Henrique Barboza # disable this test if we don't have TCG support. 1399daff68ccSDaniel Henrique Barboza self.require_accelerator("tcg") 1400bbbd9b6eSWillian Rampazzo tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' 1401bbbd9b6eSWillian Rampazzo self.vm.add_args('-M', 'graphics=off') 1402bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('15', tar_hash, 'invaders.elf') 1403bbbd9b6eSWillian Rampazzo 1404bbbd9b6eSWillian Rampazzo def test_ppc_mac99(self): 1405bbbd9b6eSWillian Rampazzo """ 1406bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc 1407bbbd9b6eSWillian Rampazzo :avocado: tags=machine:mac99 1408ff110c18SDaniel Henrique Barboza :avocado: tags=accel:tcg 1409bbbd9b6eSWillian Rampazzo """ 1410ff110c18SDaniel Henrique Barboza # TODO: mac99 works with kvm_pr but we don't have a 1411ff110c18SDaniel Henrique Barboza # reliable way ATM (e.g. looking at /proc/modules) to detect 1412ff110c18SDaniel Henrique Barboza # whether we're running kvm_hv or kvm_pr. For now let's 1413ff110c18SDaniel Henrique Barboza # disable this test if we don't have TCG support. 1414ff110c18SDaniel Henrique Barboza self.require_accelerator("tcg") 1415bbbd9b6eSWillian Rampazzo tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' 1416bbbd9b6eSWillian Rampazzo self.vm.add_args('-M', 'graphics=off') 1417bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('15', tar_hash, 'invaders.elf') 1418bbbd9b6eSWillian Rampazzo 1419500f73b1SAlex Bennée # This test has a 6-10% failure rate on various hosts that look 1420500f73b1SAlex Bennée # like issues with a buggy kernel. As a result we don't want it 1421500f73b1SAlex Bennée # gating releases on Gitlab. 1422*9b45cc99SAlex Bennée @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable on GitLab') 1423*9b45cc99SAlex Bennée 1424bbbd9b6eSWillian Rampazzo def test_sh4_r2d(self): 1425bbbd9b6eSWillian Rampazzo """ 1426bbbd9b6eSWillian Rampazzo :avocado: tags=arch:sh4 1427bbbd9b6eSWillian Rampazzo :avocado: tags=machine:r2d 1428bbbd9b6eSWillian Rampazzo """ 1429bbbd9b6eSWillian Rampazzo tar_hash = 'fe06a4fd8ccbf2e27928d64472939d47829d4c7e' 1430bbbd9b6eSWillian Rampazzo self.vm.add_args('-append', 'console=ttySC1') 1431bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('09', tar_hash, 'zImage', console=1) 1432bbbd9b6eSWillian Rampazzo 1433bbbd9b6eSWillian Rampazzo def test_sparc_ss20(self): 1434bbbd9b6eSWillian Rampazzo """ 1435bbbd9b6eSWillian Rampazzo :avocado: tags=arch:sparc 1436bbbd9b6eSWillian Rampazzo :avocado: tags=machine:SS-20 1437bbbd9b6eSWillian Rampazzo """ 1438bbbd9b6eSWillian Rampazzo tar_hash = 'b18550d5d61c7615d989a06edace051017726a9f' 1439bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('11', tar_hash, 'zImage.elf') 1440bbbd9b6eSWillian Rampazzo 1441bbbd9b6eSWillian Rampazzo def test_xtensa_lx60(self): 1442bbbd9b6eSWillian Rampazzo """ 1443bbbd9b6eSWillian Rampazzo :avocado: tags=arch:xtensa 1444bbbd9b6eSWillian Rampazzo :avocado: tags=machine:lx60 1445bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:dc233c 1446bbbd9b6eSWillian Rampazzo """ 1447bbbd9b6eSWillian Rampazzo tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34' 1448bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('02', tar_hash, 'santas-sleigh-ride.elf') 1449