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