1 # Functional tests for the MIPS Malta board
3 # Copyright (c) Philippe Mathieu-Daudé <f4bug@amsat.org>
5 # This work is licensed under the terms of the GNU GPL, version 2 or later.
6 # See the COPYING file in the top-level directory.
8 # SPDX-License-Identifier: GPL-2.0-or-later
14 from avocado
import skipUnless
15 from avocado_qemu
import Test
16 from avocado_qemu
import wait_for_console_pattern
17 from avocado
.utils
import archive
20 NUMPY_AVAILABLE
= True
24 NUMPY_AVAILABLE
= False
33 @skipUnless(NUMPY_AVAILABLE
, 'Python NumPy not installed')
34 @skipUnless(CV2_AVAILABLE
, 'Python OpenCV not installed')
35 class MaltaMachineFramebuffer(Test
):
39 KERNEL_COMMON_COMMAND_LINE
= 'printk.time=0 '
41 def do_test_i6400_framebuffer_logo(self
, cpu_cores_count
):
43 Boot Linux kernel and check Tux logo is displayed on the framebuffer.
45 screendump_path
= os
.path
.join(self
.workdir
, 'screendump.pbm')
47 kernel_url
= ('https://github.com/philmd/qemu-testing-blob/raw/'
48 'a5966ca4b5/mips/malta/mips64el/'
49 'vmlinux-4.7.0-rc1.I6400.gz')
50 kernel_hash
= '096f50c377ec5072e6a366943324622c312045f6'
51 kernel_path_gz
= self
.fetch_asset(kernel_url
, asset_hash
=kernel_hash
)
52 kernel_path
= self
.workdir
+ "vmlinux"
53 archive
.gzip_uncompress(kernel_path_gz
, kernel_path
)
55 tuxlogo_url
= ('https://github.com/torvalds/linux/raw/v2.6.12/'
56 'drivers/video/logo/logo_linux_vga16.ppm')
57 tuxlogo_hash
= '3991c2ddbd1ddaecda7601f8aafbcf5b02dc86af'
58 tuxlogo_path
= self
.fetch_asset(tuxlogo_url
, asset_hash
=tuxlogo_hash
)
61 kernel_command_line
= (self
.KERNEL_COMMON_COMMAND_LINE
+
62 'clocksource=GIC console=tty0 console=ttyS0')
63 self
.vm
.add_args('-kernel', kernel_path
,
65 '-smp', '%u' % cpu_cores_count
,
67 '-append', kernel_command_line
)
69 framebuffer_ready
= 'Console: switching to colour frame buffer device'
70 wait_for_console_pattern(self
, framebuffer_ready
,
71 failure_message
='Kernel panic - not syncing')
72 self
.vm
.command('human-monitor-command', command_line
='stop')
73 self
.vm
.command('human-monitor-command',
74 command_line
='screendump %s' % screendump_path
)
75 logger
= logging
.getLogger('framebuffer')
77 match_threshold
= 0.95
78 screendump_bgr
= cv2
.imread(screendump_path
, cv2
.IMREAD_COLOR
)
79 tuxlogo_bgr
= cv2
.imread(tuxlogo_path
, cv2
.IMREAD_COLOR
)
80 result
= cv2
.matchTemplate(screendump_bgr
, tuxlogo_bgr
,
82 loc
= np
.where(result
>= match_threshold
)
84 h
, w
= tuxlogo_bgr
.shape
[:2]
85 debug_png
= os
.getenv('AVOCADO_CV2_SCREENDUMP_PNG_PATH')
86 for tuxlogo_count
, pt
in enumerate(zip(*loc
[::-1]), start
=1):
87 logger
.debug('found Tux at position (x, y) = %s', pt
)
88 cv2
.rectangle(screendump_bgr
, pt
,
89 (pt
[0] + w
, pt
[1] + h
), (0, 0, 255), 2)
91 cv2
.imwrite(debug_png
, screendump_bgr
)
92 self
.assertGreaterEqual(tuxlogo_count
, cpu_cores_count
)
94 def test_mips_malta_i6400_framebuffer_logo_1core(self
):
96 :avocado: tags=arch:mips64el
97 :avocado: tags=machine:malta
98 :avocado: tags=cpu:i6400
100 self
.do_test_i6400_framebuffer_logo(1)
102 def test_mips_malta_i6400_framebuffer_logo_7cores(self
):
104 :avocado: tags=arch:mips64el
105 :avocado: tags=machine:malta
106 :avocado: tags=cpu:i6400
107 :avocado: tags=mips:smp
109 self
.do_test_i6400_framebuffer_logo(7)
111 def test_mips_malta_i6400_framebuffer_logo_8cores(self
):
113 :avocado: tags=arch:mips64el
114 :avocado: tags=machine:malta
115 :avocado: tags=cpu:i6400
116 :avocado: tags=mips:smp
118 self
.do_test_i6400_framebuffer_logo(8)