1#!/usr/bin/env python3 2# 3# Functional test that boots a Linux kernel and checks the console 4# 5# SPDX-License-Identifier: GPL-2.0-or-later 6 7from qemu_test import LinuxKernelTest, Asset, exec_command_and_wait_for_pattern 8from qemu_test import interrupt_interactive_console_until_pattern, skipSlowTest 9 10 11class EmcraftSf2Machine(LinuxKernelTest): 12 13 ASSET_IMAGE = Asset( 14 ('https://github.com/hskinnemoen/openbmc/releases/download/' 15 '20200711-gsj-qemu-0/obmc-phosphor-image-gsj.static.mtd.gz'), 16 'eccd4e375cde53034c84aece5c511932cacf838d9fd3f63da368a511757da72b') 17 18 ASSET_INITRD = Asset( 19 ('https://github.com/hskinnemoen/openbmc/releases/download/' 20 '20200711-gsj-qemu-0/obmc-phosphor-initramfs-gsj.cpio.xz'), 21 '37b05009fc54db1434beac12bd7ff99a2e751a2f032ee18d9042f991dd0cdeaa') 22 23 ASSET_KERNEL = Asset( 24 ('https://github.com/hskinnemoen/openbmc/releases/download/' 25 '20200711-gsj-qemu-0/uImage-gsj.bin'), 26 'ce6d6b37bff46c74fc7b1e90da10a431cc37a62cdb35ec199fa73473d0790110') 27 28 ASSET_DTB = Asset( 29 ('https://github.com/hskinnemoen/openbmc/releases/download/' 30 '20200711-gsj-qemu-0/nuvoton-npcm730-gsj.dtb'), 31 '3249b2da787d4b9ad4e61f315b160abfceb87b5e1895a7ce898ce7f40c8d4045') 32 33 @skipSlowTest() 34 def test_arm_quanta_gsj(self): 35 self.set_machine('quanta-gsj') 36 image_path = self.uncompress(self.ASSET_IMAGE, format='gz') 37 38 self.vm.set_console() 39 drive_args = 'file=' + image_path + ',if=mtd,bus=0,unit=0' 40 self.vm.add_args('-drive', drive_args) 41 self.vm.launch() 42 43 # Disable drivers and services that stall for a long time during boot, 44 # to avoid running past the 90-second timeout. These may be removed 45 # as the corresponding device support is added. 46 kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + ( 47 'console=${console} ' 48 'mem=${mem} ' 49 'initcall_blacklist=npcm_i2c_bus_driver_init ' 50 'systemd.mask=systemd-random-seed.service ' 51 'systemd.mask=dropbearkey.service ' 52 ) 53 54 self.wait_for_console_pattern('> BootBlock by Nuvoton') 55 self.wait_for_console_pattern('>Device: Poleg BMC NPCM730') 56 self.wait_for_console_pattern('>Skip DDR init.') 57 self.wait_for_console_pattern('U-Boot ') 58 interrupt_interactive_console_until_pattern( 59 self, 'Hit any key to stop autoboot:', 'U-Boot>') 60 exec_command_and_wait_for_pattern( 61 self, "setenv bootargs ${bootargs} " + kernel_command_line, 62 'U-Boot>') 63 exec_command_and_wait_for_pattern( 64 self, 'run romboot', 'Booting Kernel from flash') 65 self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') 66 self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') 67 self.wait_for_console_pattern('OpenBMC Project Reference Distro') 68 self.wait_for_console_pattern('gsj login:') 69 70 def test_arm_quanta_gsj_initrd(self): 71 self.set_machine('quanta-gsj') 72 initrd_path = self.ASSET_INITRD.fetch() 73 kernel_path = self.ASSET_KERNEL.fetch() 74 dtb_path = self.ASSET_DTB.fetch() 75 76 self.vm.set_console() 77 kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 78 'console=ttyS0,115200n8 ' 79 'earlycon=uart8250,mmio32,0xf0001000') 80 self.vm.add_args('-kernel', kernel_path, 81 '-initrd', initrd_path, 82 '-dtb', dtb_path, 83 '-append', kernel_command_line) 84 self.vm.launch() 85 86 self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') 87 self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') 88 self.wait_for_console_pattern( 89 'Give root password for system maintenance') 90 91if __name__ == '__main__': 92 LinuxKernelTest.main() 93