19e9eb320SCédric Le Goater#!/usr/bin/env python3
29e9eb320SCédric Le Goater#
39e9eb320SCédric Le Goater# Functional test that boots the ASPEED machines
49e9eb320SCédric Le Goater#
59e9eb320SCédric Le Goater# SPDX-License-Identifier: GPL-2.0-or-later
69e9eb320SCédric Le Goater
79e9eb320SCédric Le Goaterfrom qemu_test import Asset
89e9eb320SCédric Le Goaterfrom qemu_test.aspeed import AspeedTest
99e9eb320SCédric Le Goater
109e9eb320SCédric Le Goaterclass RainierMachine(AspeedTest):
119e9eb320SCédric Le Goater
129e9eb320SCédric Le Goater    ASSET_RAINIER_EMMC = Asset(
139e9eb320SCédric Le Goater        ('https://fileserver.linaro.org/s/B6pJTwWEkzSDi36/download/'
149e9eb320SCédric Le Goater         'mmc-p10bmc-20240617.qcow2'),
159e9eb320SCédric Le Goater        'd523fb478d2b84d5adc5658d08502bc64b1486955683814f89c6137518acd90b')
169e9eb320SCédric Le Goater
179e9eb320SCédric Le Goater    def test_arm_aspeed_emmc_boot(self):
189e9eb320SCédric Le Goater        self.set_machine('rainier-bmc')
199e9eb320SCédric Le Goater        self.require_netdev('user')
209e9eb320SCédric Le Goater
219e9eb320SCédric Le Goater        image_path = self.ASSET_RAINIER_EMMC.fetch()
229e9eb320SCédric Le Goater
239e9eb320SCédric Le Goater        self.vm.set_console()
249e9eb320SCédric Le Goater        self.vm.add_args('-drive',
259e9eb320SCédric Le Goater                         'file=' + image_path + ',if=sd,id=sd2,index=2',
269e9eb320SCédric Le Goater                         '-net', 'nic', '-net', 'user', '-snapshot')
279e9eb320SCédric Le Goater        self.vm.launch()
289e9eb320SCédric Le Goater
299e9eb320SCédric Le Goater        self.wait_for_console_pattern('U-Boot SPL 2019.04')
309e9eb320SCédric Le Goater        self.wait_for_console_pattern('Trying to boot from MMC1')
319e9eb320SCédric Le Goater        self.wait_for_console_pattern('U-Boot 2019.04')
329e9eb320SCédric Le Goater        self.wait_for_console_pattern('eMMC 2nd Boot')
339e9eb320SCédric Le Goater        self.wait_for_console_pattern('## Loading kernel from FIT Image')
349e9eb320SCédric Le Goater        self.wait_for_console_pattern('Starting kernel ...')
359e9eb320SCédric Le Goater        self.wait_for_console_pattern('Booting Linux on physical CPU 0xf00')
369e9eb320SCédric Le Goater        self.wait_for_console_pattern('mmcblk0: p1 p2 p3 p4 p5 p6 p7')
379e9eb320SCédric Le Goater        self.wait_for_console_pattern('IBM eBMC (OpenBMC for IBM Enterprise')
389e9eb320SCédric Le Goater
39*df4589adSCédric Le Goater    ASSET_DEBIAN_LINUX_ARMHF_DEB = Asset(
40*df4589adSCédric Le Goater            ('http://snapshot.debian.org/archive/debian/20220606T211338Z/pool/main/l/linux/linux-image-5.17.0-2-armmp_5.17.6-1%2Bb1_armhf.deb'),
41*df4589adSCédric Le Goater        '8acb2b4439faedc2f3ed4bdb2847ad4f6e0491f73debaeb7f660c8abe4dcdc0e')
42*df4589adSCédric Le Goater
43*df4589adSCédric Le Goater    def test_arm_debian_kernel_boot(self):
44*df4589adSCédric Le Goater        self.set_machine('rainier-bmc')
45*df4589adSCédric Le Goater
46*df4589adSCédric Le Goater        deb_path = self.ASSET_DEBIAN_LINUX_ARMHF_DEB.fetch()
47*df4589adSCédric Le Goater
48*df4589adSCédric Le Goater        kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-5.17.0-2-armmp')
49*df4589adSCédric Le Goater        dtb_path = self.extract_from_deb(deb_path,
50*df4589adSCédric Le Goater                '/usr/lib/linux-image-5.17.0-2-armmp/aspeed-bmc-ibm-rainier.dtb')
51*df4589adSCédric Le Goater
52*df4589adSCédric Le Goater        self.vm.set_console()
53*df4589adSCédric Le Goater        self.vm.add_args('-kernel', kernel_path,
54*df4589adSCédric Le Goater                         '-dtb', dtb_path,
55*df4589adSCédric Le Goater                         '-net', 'nic')
56*df4589adSCédric Le Goater        self.vm.launch()
57*df4589adSCédric Le Goater
58*df4589adSCédric Le Goater        self.wait_for_console_pattern("Booting Linux on physical CPU 0xf00")
59*df4589adSCédric Le Goater        self.wait_for_console_pattern("SMP: Total of 2 processors activated")
60*df4589adSCédric Le Goater        self.wait_for_console_pattern("No filesystem could mount root")
61*df4589adSCédric Le Goater
62*df4589adSCédric Le Goater
639e9eb320SCédric Le Goaterif __name__ == '__main__':
649e9eb320SCédric Le Goater    AspeedTest.main()
65