1*f04cb2d0SCédric Le Goater#!/usr/bin/env python3 2*f04cb2d0SCédric Le Goater# 3*f04cb2d0SCédric Le Goater# Functional test that boots the ASPEED SoCs with firmware 4*f04cb2d0SCédric Le Goater# 5*f04cb2d0SCédric Le Goater# Copyright (C) 2022 ASPEED Technology Inc 6*f04cb2d0SCédric Le Goater# 7*f04cb2d0SCédric Le Goater# SPDX-License-Identifier: GPL-2.0-or-later 8*f04cb2d0SCédric Le Goater 9*f04cb2d0SCédric Le Goaterimport os 10*f04cb2d0SCédric Le Goaterimport time 11*f04cb2d0SCédric Le Goaterimport subprocess 12*f04cb2d0SCédric Le Goaterimport tempfile 13*f04cb2d0SCédric Le Goater 14*f04cb2d0SCédric Le Goaterfrom qemu_test import LinuxKernelTest, Asset 15*f04cb2d0SCédric Le Goaterfrom qemu_test import exec_command_and_wait_for_pattern 16*f04cb2d0SCédric Le Goaterfrom qemu_test import interrupt_interactive_console_until_pattern 17*f04cb2d0SCédric Le Goaterfrom qemu_test import exec_command 18*f04cb2d0SCédric Le Goaterfrom qemu_test import has_cmd 19*f04cb2d0SCédric Le Goaterfrom qemu_test.utils import archive_extract 20*f04cb2d0SCédric Le Goaterfrom zipfile import ZipFile 21*f04cb2d0SCédric Le Goaterfrom unittest import skipUnless 22*f04cb2d0SCédric Le Goater 23*f04cb2d0SCédric Le Goaterclass AST1030Machine(LinuxKernelTest): 24*f04cb2d0SCédric Le Goater 25*f04cb2d0SCédric Le Goater ASSET_ZEPHYR_1_04 = Asset( 26*f04cb2d0SCédric Le Goater ('https://github.com/AspeedTech-BMC' 27*f04cb2d0SCédric Le Goater '/zephyr/releases/download/v00.01.04/ast1030-evb-demo.zip'), 28*f04cb2d0SCédric Le Goater '4ac6210adcbc61294927918707c6762483fd844dde5e07f3ba834ad1f91434d3') 29*f04cb2d0SCédric Le Goater 30*f04cb2d0SCédric Le Goater def test_ast1030_zephyros_1_04(self): 31*f04cb2d0SCédric Le Goater self.set_machine('ast1030-evb') 32*f04cb2d0SCédric Le Goater 33*f04cb2d0SCédric Le Goater zip_file = self.ASSET_ZEPHYR_1_04.fetch() 34*f04cb2d0SCédric Le Goater 35*f04cb2d0SCédric Le Goater kernel_name = "ast1030-evb-demo/zephyr.elf" 36*f04cb2d0SCédric Le Goater with ZipFile(zip_file, 'r') as zf: 37*f04cb2d0SCédric Le Goater zf.extract(kernel_name, path=self.workdir) 38*f04cb2d0SCédric Le Goater kernel_file = os.path.join(self.workdir, kernel_name) 39*f04cb2d0SCédric Le Goater 40*f04cb2d0SCédric Le Goater self.vm.set_console() 41*f04cb2d0SCédric Le Goater self.vm.add_args('-kernel', kernel_file, '-nographic') 42*f04cb2d0SCédric Le Goater self.vm.launch() 43*f04cb2d0SCédric Le Goater self.wait_for_console_pattern("Booting Zephyr OS") 44*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, "help", 45*f04cb2d0SCédric Le Goater "Available commands") 46*f04cb2d0SCédric Le Goater 47*f04cb2d0SCédric Le Goater ASSET_ZEPHYR_1_07 = Asset( 48*f04cb2d0SCédric Le Goater ('https://github.com/AspeedTech-BMC' 49*f04cb2d0SCédric Le Goater '/zephyr/releases/download/v00.01.07/ast1030-evb-demo.zip'), 50*f04cb2d0SCédric Le Goater 'ad52e27959746988afaed8429bf4e12ab988c05c4d07c9d90e13ec6f7be4574c') 51*f04cb2d0SCédric Le Goater 52*f04cb2d0SCédric Le Goater def test_ast1030_zephyros_1_07(self): 53*f04cb2d0SCédric Le Goater self.set_machine('ast1030-evb') 54*f04cb2d0SCédric Le Goater 55*f04cb2d0SCédric Le Goater zip_file = self.ASSET_ZEPHYR_1_07.fetch() 56*f04cb2d0SCédric Le Goater 57*f04cb2d0SCédric Le Goater kernel_name = "ast1030-evb-demo/zephyr.bin" 58*f04cb2d0SCédric Le Goater with ZipFile(zip_file, 'r') as zf: 59*f04cb2d0SCédric Le Goater zf.extract(kernel_name, path=self.workdir) 60*f04cb2d0SCédric Le Goater kernel_file = os.path.join(self.workdir, kernel_name) 61*f04cb2d0SCédric Le Goater 62*f04cb2d0SCédric Le Goater self.vm.set_console() 63*f04cb2d0SCédric Le Goater self.vm.add_args('-kernel', kernel_file, '-nographic') 64*f04cb2d0SCédric Le Goater self.vm.launch() 65*f04cb2d0SCédric Le Goater self.wait_for_console_pattern("Booting Zephyr OS") 66*f04cb2d0SCédric Le Goater for shell_cmd in [ 67*f04cb2d0SCédric Le Goater 'kernel stacks', 68*f04cb2d0SCédric Le Goater 'otp info conf', 69*f04cb2d0SCédric Le Goater 'otp info scu', 70*f04cb2d0SCédric Le Goater 'hwinfo devid', 71*f04cb2d0SCédric Le Goater 'crypto aes256_cbc_vault', 72*f04cb2d0SCédric Le Goater 'random get', 73*f04cb2d0SCédric Le Goater 'jtag JTAG1 sw_xfer high TMS', 74*f04cb2d0SCédric Le Goater 'adc ADC0 resolution 12', 75*f04cb2d0SCédric Le Goater 'adc ADC0 read 42', 76*f04cb2d0SCédric Le Goater 'adc ADC1 read 69', 77*f04cb2d0SCédric Le Goater 'i2c scan I2C_0', 78*f04cb2d0SCédric Le Goater 'i3c attach I3C_0', 79*f04cb2d0SCédric Le Goater 'hash test', 80*f04cb2d0SCédric Le Goater 'kernel uptime', 81*f04cb2d0SCédric Le Goater 'kernel reboot warm', 82*f04cb2d0SCédric Le Goater 'kernel uptime', 83*f04cb2d0SCédric Le Goater 'kernel reboot cold', 84*f04cb2d0SCédric Le Goater 'kernel uptime', 85*f04cb2d0SCédric Le Goater ]: exec_command_and_wait_for_pattern(self, shell_cmd, "uart:~$") 86*f04cb2d0SCédric Le Goater 87*f04cb2d0SCédric Le Goaterclass AST2x00Machine(LinuxKernelTest): 88*f04cb2d0SCédric Le Goater 89*f04cb2d0SCédric Le Goater def do_test_arm_aspeed(self, machine, image): 90*f04cb2d0SCédric Le Goater self.set_machine(machine) 91*f04cb2d0SCédric Le Goater self.vm.set_console() 92*f04cb2d0SCédric Le Goater self.vm.add_args('-drive', 'file=' + image + ',if=mtd,format=raw', 93*f04cb2d0SCédric Le Goater '-net', 'nic', '-snapshot') 94*f04cb2d0SCédric Le Goater self.vm.launch() 95*f04cb2d0SCédric Le Goater 96*f04cb2d0SCédric Le Goater self.wait_for_console_pattern("U-Boot 2016.07") 97*f04cb2d0SCédric Le Goater self.wait_for_console_pattern("## Loading kernel from FIT Image at 20080000") 98*f04cb2d0SCédric Le Goater self.wait_for_console_pattern("Starting kernel ...") 99*f04cb2d0SCédric Le Goater self.wait_for_console_pattern("Booting Linux on physical CPU 0x0") 100*f04cb2d0SCédric Le Goater self.wait_for_console_pattern( 101*f04cb2d0SCédric Le Goater "aspeed-smc 1e620000.spi: read control register: 203b0641") 102*f04cb2d0SCédric Le Goater self.wait_for_console_pattern("ftgmac100 1e660000.ethernet eth0: irq ") 103*f04cb2d0SCédric Le Goater self.wait_for_console_pattern("systemd[1]: Set hostname to") 104*f04cb2d0SCédric Le Goater 105*f04cb2d0SCédric Le Goater ASSET_PALMETTO_FLASH = Asset( 106*f04cb2d0SCédric Le Goater ('https://github.com/openbmc/openbmc/releases/download/2.9.0/' 107*f04cb2d0SCédric Le Goater 'obmc-phosphor-image-palmetto.static.mtd'), 108*f04cb2d0SCédric Le Goater '3e13bbbc28e424865dc42f35ad672b10f2e82cdb11846bb28fa625b48beafd0d'); 109*f04cb2d0SCédric Le Goater 110*f04cb2d0SCédric Le Goater def test_arm_ast2400_palmetto_openbmc_v2_9_0(self): 111*f04cb2d0SCédric Le Goater image_path = self.ASSET_PALMETTO_FLASH.fetch() 112*f04cb2d0SCédric Le Goater 113*f04cb2d0SCédric Le Goater self.do_test_arm_aspeed('palmetto-bmc', image_path) 114*f04cb2d0SCédric Le Goater 115*f04cb2d0SCédric Le Goater ASSET_ROMULUS_FLASH = Asset( 116*f04cb2d0SCédric Le Goater ('https://github.com/openbmc/openbmc/releases/download/2.9.0/' 117*f04cb2d0SCédric Le Goater 'obmc-phosphor-image-romulus.static.mtd'), 118*f04cb2d0SCédric Le Goater '820341076803f1955bc31e647a512c79f9add4f5233d0697678bab4604c7bb25') 119*f04cb2d0SCédric Le Goater 120*f04cb2d0SCédric Le Goater def test_arm_ast2500_romulus_openbmc_v2_9_0(self): 121*f04cb2d0SCédric Le Goater image_path = self.ASSET_ROMULUS_FLASH.fetch() 122*f04cb2d0SCédric Le Goater 123*f04cb2d0SCédric Le Goater self.do_test_arm_aspeed('romulus-bmc', image_path) 124*f04cb2d0SCédric Le Goater 125*f04cb2d0SCédric Le Goater def do_test_arm_aspeed_buildroot_start(self, image, cpu_id, pattern='Aspeed EVB'): 126*f04cb2d0SCédric Le Goater self.require_netdev('user') 127*f04cb2d0SCédric Le Goater self.vm.set_console() 128*f04cb2d0SCédric Le Goater self.vm.add_args('-drive', 'file=' + image + ',if=mtd,format=raw', 129*f04cb2d0SCédric Le Goater '-net', 'nic', '-net', 'user') 130*f04cb2d0SCédric Le Goater self.vm.launch() 131*f04cb2d0SCédric Le Goater 132*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('U-Boot 2019.04') 133*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('## Loading kernel from FIT Image') 134*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('Starting kernel ...') 135*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('Booting Linux on physical CPU ' + cpu_id) 136*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('lease of 10.0.2.15') 137*f04cb2d0SCédric Le Goater # the line before login: 138*f04cb2d0SCédric Le Goater self.wait_for_console_pattern(pattern) 139*f04cb2d0SCédric Le Goater time.sleep(0.1) 140*f04cb2d0SCédric Le Goater exec_command(self, 'root') 141*f04cb2d0SCédric Le Goater time.sleep(0.1) 142*f04cb2d0SCédric Le Goater exec_command(self, "passw0rd") 143*f04cb2d0SCédric Le Goater 144*f04cb2d0SCédric Le Goater def do_test_arm_aspeed_buildroot_poweroff(self): 145*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 'poweroff', 146*f04cb2d0SCédric Le Goater 'reboot: System halted'); 147*f04cb2d0SCédric Le Goater 148*f04cb2d0SCédric Le Goater ASSET_BR2_202311_AST2500_FLASH = Asset( 149*f04cb2d0SCédric Le Goater ('https://github.com/legoater/qemu-aspeed-boot/raw/master/' 150*f04cb2d0SCédric Le Goater 'images/ast2500-evb/buildroot-2023.11/flash.img'), 151*f04cb2d0SCédric Le Goater 'c23db6160cf77d0258397eb2051162c8473a56c441417c52a91ba217186e715f') 152*f04cb2d0SCédric Le Goater 153*f04cb2d0SCédric Le Goater def test_arm_ast2500_evb_buildroot(self): 154*f04cb2d0SCédric Le Goater self.set_machine('ast2500-evb') 155*f04cb2d0SCédric Le Goater 156*f04cb2d0SCédric Le Goater image_path = self.ASSET_BR2_202311_AST2500_FLASH.fetch() 157*f04cb2d0SCédric Le Goater 158*f04cb2d0SCédric Le Goater self.vm.add_args('-device', 159*f04cb2d0SCédric Le Goater 'tmp105,bus=aspeed.i2c.bus.3,address=0x4d,id=tmp-test'); 160*f04cb2d0SCédric Le Goater self.do_test_arm_aspeed_buildroot_start(image_path, '0x0', 161*f04cb2d0SCédric Le Goater 'Aspeed AST2500 EVB') 162*f04cb2d0SCédric Le Goater 163*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 164*f04cb2d0SCédric Le Goater 'echo lm75 0x4d > /sys/class/i2c-dev/i2c-3/device/new_device', 165*f04cb2d0SCédric Le Goater 'i2c i2c-3: new_device: Instantiated device lm75 at 0x4d'); 166*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 167*f04cb2d0SCédric Le Goater 'cat /sys/class/hwmon/hwmon1/temp1_input', '0') 168*f04cb2d0SCédric Le Goater self.vm.cmd('qom-set', path='/machine/peripheral/tmp-test', 169*f04cb2d0SCédric Le Goater property='temperature', value=18000); 170*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 171*f04cb2d0SCédric Le Goater 'cat /sys/class/hwmon/hwmon1/temp1_input', '18000') 172*f04cb2d0SCédric Le Goater 173*f04cb2d0SCédric Le Goater self.do_test_arm_aspeed_buildroot_poweroff() 174*f04cb2d0SCédric Le Goater 175*f04cb2d0SCédric Le Goater ASSET_BR2_202311_AST2600_FLASH = Asset( 176*f04cb2d0SCédric Le Goater ('https://github.com/legoater/qemu-aspeed-boot/raw/master/' 177*f04cb2d0SCédric Le Goater 'images/ast2600-evb/buildroot-2023.11/flash.img'), 178*f04cb2d0SCédric Le Goater 'b62808daef48b438d0728ee07662290490ecfa65987bb91294cafb1bb7ad1a68') 179*f04cb2d0SCédric Le Goater 180*f04cb2d0SCédric Le Goater def test_arm_ast2600_evb_buildroot(self): 181*f04cb2d0SCédric Le Goater self.set_machine('ast2600-evb') 182*f04cb2d0SCédric Le Goater 183*f04cb2d0SCédric Le Goater image_path = self.ASSET_BR2_202311_AST2600_FLASH.fetch() 184*f04cb2d0SCédric Le Goater 185*f04cb2d0SCédric Le Goater self.vm.add_args('-device', 186*f04cb2d0SCédric Le Goater 'tmp105,bus=aspeed.i2c.bus.3,address=0x4d,id=tmp-test'); 187*f04cb2d0SCédric Le Goater self.vm.add_args('-device', 188*f04cb2d0SCédric Le Goater 'ds1338,bus=aspeed.i2c.bus.3,address=0x32'); 189*f04cb2d0SCédric Le Goater self.vm.add_args('-device', 190*f04cb2d0SCédric Le Goater 'i2c-echo,bus=aspeed.i2c.bus.3,address=0x42'); 191*f04cb2d0SCédric Le Goater self.do_test_arm_aspeed_buildroot_start(image_path, '0xf00', 'Aspeed AST2600 EVB') 192*f04cb2d0SCédric Le Goater 193*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 194*f04cb2d0SCédric Le Goater 'echo lm75 0x4d > /sys/class/i2c-dev/i2c-3/device/new_device', 195*f04cb2d0SCédric Le Goater 'i2c i2c-3: new_device: Instantiated device lm75 at 0x4d'); 196*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 197*f04cb2d0SCédric Le Goater 'cat /sys/class/hwmon/hwmon1/temp1_input', '0') 198*f04cb2d0SCédric Le Goater self.vm.cmd('qom-set', path='/machine/peripheral/tmp-test', 199*f04cb2d0SCédric Le Goater property='temperature', value=18000); 200*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 201*f04cb2d0SCédric Le Goater 'cat /sys/class/hwmon/hwmon1/temp1_input', '18000') 202*f04cb2d0SCédric Le Goater 203*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 204*f04cb2d0SCédric Le Goater 'echo ds1307 0x32 > /sys/class/i2c-dev/i2c-3/device/new_device', 205*f04cb2d0SCédric Le Goater 'i2c i2c-3: new_device: Instantiated device ds1307 at 0x32'); 206*f04cb2d0SCédric Le Goater year = time.strftime("%Y") 207*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 'hwclock -f /dev/rtc1', year); 208*f04cb2d0SCédric Le Goater 209*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 210*f04cb2d0SCédric Le Goater 'echo slave-24c02 0x1064 > /sys/bus/i2c/devices/i2c-3/new_device', 211*f04cb2d0SCédric Le Goater 'i2c i2c-3: new_device: Instantiated device slave-24c02 at 0x64'); 212*f04cb2d0SCédric Le Goater exec_command(self, 'i2cset -y 3 0x42 0x64 0x00 0xaa i'); 213*f04cb2d0SCédric Le Goater time.sleep(0.1) 214*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 215*f04cb2d0SCédric Le Goater 'hexdump /sys/bus/i2c/devices/3-1064/slave-eeprom', 216*f04cb2d0SCédric Le Goater '0000000 ffaa ffff ffff ffff ffff ffff ffff ffff'); 217*f04cb2d0SCédric Le Goater self.do_test_arm_aspeed_buildroot_poweroff() 218*f04cb2d0SCédric Le Goater 219*f04cb2d0SCédric Le Goater ASSET_BR2_202302_AST2600_TPM_FLASH = Asset( 220*f04cb2d0SCédric Le Goater ('https://github.com/legoater/qemu-aspeed-boot/raw/master/' 221*f04cb2d0SCédric Le Goater 'images/ast2600-evb/buildroot-2023.02-tpm/flash.img'), 222*f04cb2d0SCédric Le Goater 'a46009ae8a5403a0826d607215e731a8c68d27c14c41e55331706b8f9c7bd997') 223*f04cb2d0SCédric Le Goater 224*f04cb2d0SCédric Le Goater @skipUnless(*has_cmd('swtpm')) 225*f04cb2d0SCédric Le Goater def test_arm_ast2600_evb_buildroot_tpm(self): 226*f04cb2d0SCédric Le Goater self.set_machine('ast2600-evb') 227*f04cb2d0SCédric Le Goater 228*f04cb2d0SCédric Le Goater image_path = self.ASSET_BR2_202302_AST2600_TPM_FLASH.fetch() 229*f04cb2d0SCédric Le Goater 230*f04cb2d0SCédric Le Goater socket_dir = tempfile.TemporaryDirectory(prefix="qemu_") 231*f04cb2d0SCédric Le Goater socket = os.path.join(socket_dir.name, 'swtpm-socket') 232*f04cb2d0SCédric Le Goater 233*f04cb2d0SCédric Le Goater subprocess.run(['swtpm', 'socket', '-d', '--tpm2', 234*f04cb2d0SCédric Le Goater '--tpmstate', f'dir={self.vm.temp_dir}', 235*f04cb2d0SCédric Le Goater '--ctrl', f'type=unixio,path={socket}']) 236*f04cb2d0SCédric Le Goater 237*f04cb2d0SCédric Le Goater self.vm.add_args('-chardev', f'socket,id=chrtpm,path={socket}') 238*f04cb2d0SCédric Le Goater self.vm.add_args('-tpmdev', 'emulator,id=tpm0,chardev=chrtpm') 239*f04cb2d0SCédric Le Goater self.vm.add_args('-device', 240*f04cb2d0SCédric Le Goater 'tpm-tis-i2c,tpmdev=tpm0,bus=aspeed.i2c.bus.12,address=0x2e') 241*f04cb2d0SCédric Le Goater self.do_test_arm_aspeed_buildroot_start(image_path, '0xf00', 'Aspeed AST2600 EVB') 242*f04cb2d0SCédric Le Goater 243*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 244*f04cb2d0SCédric Le Goater 'echo tpm_tis_i2c 0x2e > /sys/bus/i2c/devices/i2c-12/new_device', 245*f04cb2d0SCédric Le Goater 'tpm_tis_i2c 12-002e: 2.0 TPM (device-id 0x1, rev-id 1)'); 246*f04cb2d0SCédric Le Goater exec_command_and_wait_for_pattern(self, 247*f04cb2d0SCédric Le Goater 'cat /sys/class/tpm/tpm0/pcr-sha256/0', 248*f04cb2d0SCédric Le Goater 'B804724EA13F52A9072BA87FE8FDCC497DFC9DF9AA15B9088694639C431688E0'); 249*f04cb2d0SCédric Le Goater 250*f04cb2d0SCédric Le Goater self.do_test_arm_aspeed_buildroot_poweroff() 251*f04cb2d0SCédric Le Goater 252*f04cb2d0SCédric Le Goaterclass AST2x00MachineMMC(LinuxKernelTest): 253*f04cb2d0SCédric Le Goater 254*f04cb2d0SCédric Le Goater ASSET_RAINIER_EMMC = Asset( 255*f04cb2d0SCédric Le Goater ('https://fileserver.linaro.org/s/B6pJTwWEkzSDi36/download/' 256*f04cb2d0SCédric Le Goater 'mmc-p10bmc-20240617.qcow2'), 257*f04cb2d0SCédric Le Goater 'd523fb478d2b84d5adc5658d08502bc64b1486955683814f89c6137518acd90b') 258*f04cb2d0SCédric Le Goater 259*f04cb2d0SCédric Le Goater def test_arm_aspeed_emmc_boot(self): 260*f04cb2d0SCédric Le Goater self.set_machine('rainier-bmc') 261*f04cb2d0SCédric Le Goater self.require_netdev('user') 262*f04cb2d0SCédric Le Goater 263*f04cb2d0SCédric Le Goater image_path = self.ASSET_RAINIER_EMMC.fetch() 264*f04cb2d0SCédric Le Goater 265*f04cb2d0SCédric Le Goater self.vm.set_console() 266*f04cb2d0SCédric Le Goater self.vm.add_args('-drive', 267*f04cb2d0SCédric Le Goater 'file=' + image_path + ',if=sd,id=sd2,index=2', 268*f04cb2d0SCédric Le Goater '-net', 'nic', '-net', 'user', '-snapshot') 269*f04cb2d0SCédric Le Goater self.vm.launch() 270*f04cb2d0SCédric Le Goater 271*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('U-Boot SPL 2019.04') 272*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('Trying to boot from MMC1') 273*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('U-Boot 2019.04') 274*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('eMMC 2nd Boot') 275*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('## Loading kernel from FIT Image') 276*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('Starting kernel ...') 277*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('Booting Linux on physical CPU 0xf00') 278*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('mmcblk0: p1 p2 p3 p4 p5 p6 p7') 279*f04cb2d0SCédric Le Goater self.wait_for_console_pattern('IBM eBMC (OpenBMC for IBM Enterprise') 280*f04cb2d0SCédric Le Goater 281*f04cb2d0SCédric Le Goaterif __name__ == '__main__': 282*f04cb2d0SCédric Le Goater LinuxKernelTest.main() 283