xref: /qemu/tests/functional/test_ppc64_pseries.py (revision 242e8b4dca60574a81c92ba4b8bcb538550c6cfc)
1# Test that Linux kernel boots on ppc machines and check the console
2#
3# Copyright (c) 2018, 2020 Red Hat, Inc.
4#
5# This work is licensed under the terms of the GNU GPL, version 2 or
6# later.  See the COPYING file in the top-level directory.
7
8from avocado.utils import archive
9from avocado_qemu import QemuSystemTest
10from avocado_qemu import wait_for_console_pattern
11
12class pseriesMachine(QemuSystemTest):
13
14    timeout = 90
15    KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
16    panic_message = 'Kernel panic - not syncing'
17    good_message = 'VFS: Cannot open root device'
18
19    def do_test_ppc64_linux_boot(self):
20        kernel_url = ('https://archives.fedoraproject.org/pub/archive'
21                      '/fedora-secondary/releases/29/Everything/ppc64le/os'
22                      '/ppc/ppc64/vmlinuz')
23        kernel_hash = '3fe04abfc852b66653b8c3c897a59a689270bc77'
24        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
25
26        self.vm.set_console()
27        kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=hvc0'
28        self.vm.add_args('-kernel', kernel_path,
29                         '-append', kernel_command_line)
30        self.vm.launch()
31
32    def test_ppc64_linux_boot(self):
33        """
34        :avocado: tags=arch:ppc64
35        :avocado: tags=machine:pseries
36        """
37
38        self.do_test_ppc64_linux_boot()
39        console_pattern = 'VFS: Cannot open root device'
40        wait_for_console_pattern(self, console_pattern, self.panic_message)
41
42    def test_ppc64_linux_smp_boot(self):
43        """
44        :avocado: tags=arch:ppc64
45        :avocado: tags=machine:pseries
46        """
47
48        self.vm.add_args('-smp', '4')
49        self.do_test_ppc64_linux_boot()
50        console_pattern = 'smp: Brought up 1 node, 4 CPUs'
51        wait_for_console_pattern(self, console_pattern, self.panic_message)
52        wait_for_console_pattern(self, self.good_message, self.panic_message)
53
54    def test_ppc64_linux_smt_boot(self):
55        """
56        :avocado: tags=arch:ppc64
57        :avocado: tags=machine:pseries
58        """
59
60        self.vm.add_args('-smp', '4,threads=4')
61        self.do_test_ppc64_linux_boot()
62        console_pattern = 'CPU maps initialized for 4 threads per core'
63        wait_for_console_pattern(self, console_pattern, self.panic_message)
64        console_pattern = 'smp: Brought up 1 node, 4 CPUs'
65        wait_for_console_pattern(self, console_pattern, self.panic_message)
66        wait_for_console_pattern(self, self.good_message, self.panic_message)
67
68    def test_ppc64_linux_big_boot(self):
69        """
70        :avocado: tags=arch:ppc64
71        :avocado: tags=machine:pseries
72        """
73
74        self.vm.add_args('-smp', '16,threads=4,cores=2,sockets=2')
75        self.vm.add_args('-m', '512M',
76                         '-object', 'memory-backend-ram,size=256M,id=m0',
77                         '-object', 'memory-backend-ram,size=256M,id=m1')
78        self.vm.add_args('-numa', 'node,nodeid=0,memdev=m0')
79        self.vm.add_args('-numa', 'node,nodeid=1,memdev=m1')
80        self.do_test_ppc64_linux_boot()
81        console_pattern = 'CPU maps initialized for 4 threads per core'
82        wait_for_console_pattern(self, console_pattern, self.panic_message)
83        console_pattern = 'smp: Brought up 2 nodes, 16 CPUs'
84        wait_for_console_pattern(self, console_pattern, self.panic_message)
85        wait_for_console_pattern(self, self.good_message, self.panic_message)
86