xref: /qemu/tests/functional/test_ppc64_pseries.py (revision 8d07a8aef6feb7d8db4fabdcc3753636c562febe)
1c5f0a816SDavid Gibson# Test that Linux kernel boots on ppc machines and check the console
2c5f0a816SDavid Gibson#
3c5f0a816SDavid Gibson# Copyright (c) 2018, 2020 Red Hat, Inc.
4c5f0a816SDavid Gibson#
5c5f0a816SDavid Gibson# This work is licensed under the terms of the GNU GPL, version 2 or
6c5f0a816SDavid Gibson# later.  See the COPYING file in the top-level directory.
7c5f0a816SDavid Gibson
8c5f0a816SDavid Gibsonfrom avocado.utils import archive
92283b627SPhilippe Mathieu-Daudéfrom avocado_qemu import QemuSystemTest
10c5f0a816SDavid Gibsonfrom avocado_qemu import wait_for_console_pattern
11c5f0a816SDavid Gibson
122283b627SPhilippe Mathieu-Daudéclass pseriesMachine(QemuSystemTest):
13c5f0a816SDavid Gibson
14c5f0a816SDavid Gibson    timeout = 90
15*8d07a8aeSNicholas Piggin    KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 console=hvc0 '
16c5f0a816SDavid Gibson    panic_message = 'Kernel panic - not syncing'
17242e8b4dSNicholas Piggin    good_message = 'VFS: Cannot open root device'
18c5f0a816SDavid Gibson
19*8d07a8aeSNicholas Piggin    def do_test_ppc64_linux_boot(self, kernel_command_line = KERNEL_COMMON_COMMAND_LINE):
20c5f0a816SDavid Gibson        kernel_url = ('https://archives.fedoraproject.org/pub/archive'
21c5f0a816SDavid Gibson                      '/fedora-secondary/releases/29/Everything/ppc64le/os'
22c5f0a816SDavid Gibson                      '/ppc/ppc64/vmlinuz')
23c5f0a816SDavid Gibson        kernel_hash = '3fe04abfc852b66653b8c3c897a59a689270bc77'
24c5f0a816SDavid Gibson        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
25c5f0a816SDavid Gibson
26c5f0a816SDavid Gibson        self.vm.set_console()
27c5f0a816SDavid Gibson        self.vm.add_args('-kernel', kernel_path,
28c5f0a816SDavid Gibson                         '-append', kernel_command_line)
29c5f0a816SDavid Gibson        self.vm.launch()
30242e8b4dSNicholas Piggin
315eb63b88SNicholas Piggin    def test_ppc64_vof_linux_boot(self):
325eb63b88SNicholas Piggin        """
335eb63b88SNicholas Piggin        :avocado: tags=arch:ppc64
345eb63b88SNicholas Piggin        :avocado: tags=machine:pseries
355eb63b88SNicholas Piggin        """
365eb63b88SNicholas Piggin
375eb63b88SNicholas Piggin        self.vm.add_args('-machine', 'x-vof=on')
385eb63b88SNicholas Piggin        self.do_test_ppc64_linux_boot()
395eb63b88SNicholas Piggin        console_pattern = 'VFS: Cannot open root device'
405eb63b88SNicholas Piggin        wait_for_console_pattern(self, console_pattern, self.panic_message)
415eb63b88SNicholas Piggin
42242e8b4dSNicholas Piggin    def test_ppc64_linux_boot(self):
43242e8b4dSNicholas Piggin        """
44242e8b4dSNicholas Piggin        :avocado: tags=arch:ppc64
45242e8b4dSNicholas Piggin        :avocado: tags=machine:pseries
46242e8b4dSNicholas Piggin        """
47242e8b4dSNicholas Piggin
48242e8b4dSNicholas Piggin        self.do_test_ppc64_linux_boot()
498f4c627bSNicholas Piggin        console_pattern = 'VFS: Cannot open root device'
50c5f0a816SDavid Gibson        wait_for_console_pattern(self, console_pattern, self.panic_message)
51242e8b4dSNicholas Piggin
52242e8b4dSNicholas Piggin    def test_ppc64_linux_smp_boot(self):
53242e8b4dSNicholas Piggin        """
54242e8b4dSNicholas Piggin        :avocado: tags=arch:ppc64
55242e8b4dSNicholas Piggin        :avocado: tags=machine:pseries
56242e8b4dSNicholas Piggin        """
57242e8b4dSNicholas Piggin
58242e8b4dSNicholas Piggin        self.vm.add_args('-smp', '4')
59242e8b4dSNicholas Piggin        self.do_test_ppc64_linux_boot()
60242e8b4dSNicholas Piggin        console_pattern = 'smp: Brought up 1 node, 4 CPUs'
61242e8b4dSNicholas Piggin        wait_for_console_pattern(self, console_pattern, self.panic_message)
62242e8b4dSNicholas Piggin        wait_for_console_pattern(self, self.good_message, self.panic_message)
63242e8b4dSNicholas Piggin
64*8d07a8aeSNicholas Piggin    def test_ppc64_linux_hpt_smp_boot(self):
65*8d07a8aeSNicholas Piggin        """
66*8d07a8aeSNicholas Piggin        :avocado: tags=arch:ppc64
67*8d07a8aeSNicholas Piggin        :avocado: tags=machine:pseries
68*8d07a8aeSNicholas Piggin        """
69*8d07a8aeSNicholas Piggin
70*8d07a8aeSNicholas Piggin        self.vm.add_args('-smp', '4')
71*8d07a8aeSNicholas Piggin        self.do_test_ppc64_linux_boot(self.KERNEL_COMMON_COMMAND_LINE +
72*8d07a8aeSNicholas Piggin                                      'disable_radix')
73*8d07a8aeSNicholas Piggin        console_pattern = 'smp: Brought up 1 node, 4 CPUs'
74*8d07a8aeSNicholas Piggin        wait_for_console_pattern(self, 'hash-mmu: Initializing hash mmu',
75*8d07a8aeSNicholas Piggin                                 self.panic_message)
76*8d07a8aeSNicholas Piggin        wait_for_console_pattern(self, console_pattern, self.panic_message)
77*8d07a8aeSNicholas Piggin        wait_for_console_pattern(self, self.good_message, self.panic_message)
78*8d07a8aeSNicholas Piggin
79242e8b4dSNicholas Piggin    def test_ppc64_linux_smt_boot(self):
80242e8b4dSNicholas Piggin        """
81242e8b4dSNicholas Piggin        :avocado: tags=arch:ppc64
82242e8b4dSNicholas Piggin        :avocado: tags=machine:pseries
83242e8b4dSNicholas Piggin        """
84242e8b4dSNicholas Piggin
85242e8b4dSNicholas Piggin        self.vm.add_args('-smp', '4,threads=4')
86242e8b4dSNicholas Piggin        self.do_test_ppc64_linux_boot()
87242e8b4dSNicholas Piggin        console_pattern = 'CPU maps initialized for 4 threads per core'
88242e8b4dSNicholas Piggin        wait_for_console_pattern(self, console_pattern, self.panic_message)
89242e8b4dSNicholas Piggin        console_pattern = 'smp: Brought up 1 node, 4 CPUs'
90242e8b4dSNicholas Piggin        wait_for_console_pattern(self, console_pattern, self.panic_message)
91242e8b4dSNicholas Piggin        wait_for_console_pattern(self, self.good_message, self.panic_message)
92242e8b4dSNicholas Piggin
93242e8b4dSNicholas Piggin    def test_ppc64_linux_big_boot(self):
94242e8b4dSNicholas Piggin        """
95242e8b4dSNicholas Piggin        :avocado: tags=arch:ppc64
96242e8b4dSNicholas Piggin        :avocado: tags=machine:pseries
97242e8b4dSNicholas Piggin        """
98242e8b4dSNicholas Piggin
99242e8b4dSNicholas Piggin        self.vm.add_args('-smp', '16,threads=4,cores=2,sockets=2')
100242e8b4dSNicholas Piggin        self.vm.add_args('-m', '512M',
101242e8b4dSNicholas Piggin                         '-object', 'memory-backend-ram,size=256M,id=m0',
102242e8b4dSNicholas Piggin                         '-object', 'memory-backend-ram,size=256M,id=m1')
103242e8b4dSNicholas Piggin        self.vm.add_args('-numa', 'node,nodeid=0,memdev=m0')
104242e8b4dSNicholas Piggin        self.vm.add_args('-numa', 'node,nodeid=1,memdev=m1')
105242e8b4dSNicholas Piggin        self.do_test_ppc64_linux_boot()
106242e8b4dSNicholas Piggin        console_pattern = 'CPU maps initialized for 4 threads per core'
107242e8b4dSNicholas Piggin        wait_for_console_pattern(self, console_pattern, self.panic_message)
108242e8b4dSNicholas Piggin        console_pattern = 'smp: Brought up 2 nodes, 16 CPUs'
109242e8b4dSNicholas Piggin        wait_for_console_pattern(self, console_pattern, self.panic_message)
110242e8b4dSNicholas Piggin        wait_for_console_pattern(self, self.good_message, self.panic_message)
111