Thank you for reviewing Bernhard. Yes, iMX8MM is very close to iMX8MP that's 
why I chose to stick to that structure.

" Looks like these lists are sorted alphabetically. Shall we preserve that?"

-- yes "tests_aarch64_system_thorough" should be sorted alphabetically 
preserving the original order - - will modify it in v2 patch

"This DTB offset is the one for the imx8mp-evk, and in fact the console log 
confirms it. Both machines seem to be so similar that the test passes anyway"

-- yes, I just found out in the console log. The test was giving a false 
positive. Thank you for the heads up!  I have now modified it to fetch the dtb 
from the Debian stable repository. Verified it's working correctly via console 
log

What you need is the offset in the "disk.raw" image that gets extracted from 
above file. Open "disk.raw" in a hex editor and search for "imx8mm-evk", then 
determine the offset of the preceeding "d00df00d" DTB magic. That is your 
offset.

-- do you mean the DTB magic "d00dfeed" instead of "d00df00d"? Also, while I 
was analysing the DTB offset of the mainlined imx8mp functional testing 
'disk.raw' which has debian-12-generic-arm64-20231210-1590. The script mentions 
the DTB_OFFSET at 0x64F51000. Dumping this offset using xxd[also verified it 
via hex editor]:-
# xxd -s 0x51000000 -l 4 disk.raw
51000000: 6cff 0060
It doesn't mention the DTB magic number at this offset. Please let me know if I 
am missing anything here .
Can we choose not to rely on the hardcoded offset and instead download the dtb 
from the Debian stable repository itself? This way the same functional test can 
be used easily for the future imx board porting as well.
Looking forward to your guidance.



-----Original Message-----
From: Bernhard Beschow <[email protected]>
Sent: 12 November 2025 04:51
To: [email protected]; Gaurav Sharma <[email protected]>
Cc: [email protected]; [email protected]
Subject: [EXT] Re: [PATCH 13/13] hw/arm/fsl-imx8mm: Adding functional testing 
of iMX8MM emulation

[You don't often get email from [email protected]. Learn why this is important 
at https://aka.ms/LearnAboutSenderIdentification ]

Caution: This is an external email. Please take care when clicking links or 
opening attachments. When in doubt, report the message using the 'Report this 
email' button


Am 10. November 2025 11:22:57 UTC schrieb Gaurav Sharma 
<[email protected]>:
>Added script that would validate the iMX8MM emulation by checking the
>linux console log. If it succeeds, it will return:-
>
>ok 1 test_imx8mm_evk.Imx8mmEvkMachine.test_aarch64_imx8mm_evk_usdhc
>
>Signed-off-by: Gaurav Sharma <[email protected]>

>Hi Gaurav!

>Nice to see another imx8 machine being contributed! I'm impressed how close 
>you stick to the imx8mp, both in terms of structuring this series as well as 
>the code.

>I've built your series and ran the functional test. Comments below.




--

>---
> tests/functional/aarch64/meson.build        |  2 +
> tests/functional/aarch64/test_imx8mm_evk.py | 67 +++++++++++++++++++++
> 2 files changed, 69 insertions(+)
> create mode 100755 tests/functional/aarch64/test_imx8mm_evk.py
>
>diff --git a/tests/functional/aarch64/meson.build
>b/tests/functional/aarch64/meson.build
>index 5ad52f93e1..31ecedbf6f 100644
>--- a/tests/functional/aarch64/meson.build
>+++ b/tests/functional/aarch64/meson.build
>@@ -5,6 +5,7 @@ test_aarch64_timeouts = {
>   'aspeed_ast2700fc' : 600,
>   'device_passthrough' : 720,
>   'imx8mp_evk' : 240,
>+  'imx8mm_evk' : 240,
>   'raspi4' : 480,
>   'reverse_debug' : 180,
>   'rme_virt' : 1200,
>@@ -28,6 +29,7 @@ tests_aarch64_system_thorough = [
>   'device_passthrough',
>   'hotplug_pci',
>   'imx8mp_evk',
>+  'imx8mm_evk',

Looks like these lists are sorted alphabetically. Shall we preserve that?

>   'kvm',
>   'multiprocess',
>   'raspi3',
>diff --git a/tests/functional/aarch64/test_imx8mm_evk.py
>b/tests/functional/aarch64/test_imx8mm_evk.py
>new file mode 100755
>index 0000000000..d5eb43afc6
>--- /dev/null
>+++ b/tests/functional/aarch64/test_imx8mm_evk.py
>@@ -0,0 +1,67 @@
>+#!/usr/bin/env python3
>+#
>+# Functional test that boots a Linux kernel and checks the console # #
>+SPDX-License-Identifier: GPL-2.0-or-later
>+
>+from qemu_test import LinuxKernelTest, Asset
>+
>+class Imx8mmEvkMachine(LinuxKernelTest):
>+
>+    ASSET_IMAGE = Asset(
>+        ('https://cloud.debian.org/images/cloud/bookworm/20231210-1590/'
>+         'debian-12-generic-arm64-20231210-1590.tar.xz'),
>+
>+ '7ebf1577b32d5af6204df74b54ca2e4675de9b5a9fa14f3ff70b88eeb7b3b359')
>+
>+    KERNEL_OFFSET = 0x51000000
>+    KERNEL_SIZE = 32622528
>+    INITRD_OFFSET = 0x76000000
>+    INITRD_SIZE = 30987766
>+    DTB_OFFSET = 0x64F51000

This DTB offset is the one for the imx8mp-evk, and in fact the console log 
confirms it. Both machines seem to be so similar that the test passes anyway.

What you need is the offset in the "disk.raw" image that gets extracted from 
above file. Open "disk.raw" in a hex editor and search for "imx8mm-evk", then 
determine the offset of the preceeding "d00df00d" DTB magic. That is your 
offset.

Best regards,
Bernhard

>+    DTB_SIZE = 45 * 1024
>+
>+    def extract(self, in_path, out_path, offset, size):
>+        try:
>+            with open(in_path, "rb") as source:
>+                source.seek(offset)
>+                data = source.read(size)
>+            with open(out_path, "wb") as target:
>+                target.write(data)
>+        except (IOError, ValueError) as e:
>+            self.log.error(f"Failed to extract {out_path}: {e}")
>+            raise
>+
>+    def setUp(self):
>+        super().setUp()
>+
>+        self.image_path = self.scratch_file("disk.raw")
>+        self.kernel_path = self.scratch_file("linux")
>+        self.initrd_path = self.scratch_file("initrd.zstd")
>+        self.dtb_path = self.scratch_file("imx8mm-evk.dtb")
>+
>+        self.archive_extract(self.ASSET_IMAGE)
>+        self.extract(self.image_path, self.kernel_path,
>+                     self.KERNEL_OFFSET, self.KERNEL_SIZE)
>+        self.extract(self.image_path, self.initrd_path,
>+                     self.INITRD_OFFSET, self.INITRD_SIZE)
>+        self.extract(self.image_path, self.dtb_path,
>+                     self.DTB_OFFSET, self.DTB_SIZE)
>+
>+    def test_aarch64_imx8mm_evk_usdhc(self):
>+        self.require_accelerator("tcg")
>+        self.set_machine('imx8mm-evk')
>+        self.vm.set_console(console_index=1)
>+        self.vm.add_args('-m', '2G',
>+                         '-smp', '4',
>+                         '-kernel', self.kernel_path,
>+                         '-initrd', self.initrd_path,
>+                         '-dtb', self.dtb_path,
>+                         '-append', 'root=/dev/mmcblk2p1',
>+                         '-drive', f'file={self.image_path},if=sd,bus=2,'
>+
>+ 'format=raw,id=mmcblk2,snapshot=on')
>+
>+        self.vm.launch()
>+        self.wait_for_console_pattern('Welcome to ')
>+
>+if __name__ == '__main__':
>+    LinuxKernelTest.main()

Reply via email to