Hello Kane,
+ Thomas
On 8/12/25 11:40, Kane Chen wrote:
From: Kane-Chen-AS <[email protected]>
On boot, the SoC firmware reads data from the OTP region to obtain the
chip ID and default settings. This change adds test cases to verify
that the firmware can boot correctly with a pre-configured OTP image.
Signed-off-by: Kane-Chen-AS <[email protected]>
---
tests/functional/meson.build | 2 +
tests/functional/test_arm_aspeed_otp.py | 55 +++++++++++++++++++++++++
2 files changed, 57 insertions(+)
create mode 100644 tests/functional/test_arm_aspeed_otp.py
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index 311c6f1806..c731b779dd 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -34,6 +34,7 @@ test_timeouts = {
'arm_aspeed_bletchley' : 480,
'arm_aspeed_catalina' : 480,
'arm_aspeed_gb200nvl_bmc' : 480,
+ 'arm_aspeed_otp': 1200,
'arm_aspeed_rainier' : 480,
'arm_bpim2u' : 500,
'arm_collie' : 180,
@@ -132,6 +133,7 @@ tests_arm_system_thorough = [
'arm_aspeed_bletchley',
'arm_aspeed_catalina',
'arm_aspeed_gb200nvl_bmc',
+ 'arm_aspeed_otp',
'arm_aspeed_rainier',
'arm_bpim2u',
'arm_canona1100',
diff --git a/tests/functional/test_arm_aspeed_otp.py
b/tests/functional/test_arm_aspeed_otp.py
The tests/functional directory was recently reorganized.
Also, I think I would prefer the new otp test to be part of the
existing test files :
tests/functional/arm/test_aspeed_ast1030.py
tests/functional/arm/test_aspeed_ast2600.py
Something to discuss since test_aspeed_ast2600.py is rather big.
new file mode 100644
index 0000000000..48c7cad3f3
--- /dev/null
+++ b/tests/functional/test_arm_aspeed_otp.py
@@ -0,0 +1,55 @@
+import os
+import time
+import tempfile
+import subprocess
+
+from qemu_test import LinuxKernelTest, Asset> +from aspeed import AspeedTest
+from qemu_test import exec_command_and_wait_for_pattern, skipIfMissingCommands
+
Please add an extra blank line
+class AspeedOtpMemoryTest(AspeedTest):
+ # AST2600 SDK image
+ ASSET_SDK_V907_AST2600 = Asset(
+
'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.07/ast2600-default-obmc.tar.gz',
+ 'cb6c08595bcbba1672ce716b068ba4e48eda1ed9abe78a07b30392ba2278feba')
Please update first all functional tests with the new SDK v9.07 images.
+
+ # AST1030 Zephyr image
+ ASSET_ZEPHYR_3_02 = Asset(
+
'https://github.com/AspeedTech-BMC/zephyr/releases/download/v00.03.02/ast1030-evb-demo.zip',
+ '1ec83caab3ddd5d09481772801be7210e222cb015ce22ec6fffb8a76956dcd4f')
Same for Zephyr images
+
+ def generate_otpmem_image(self):
+ path = self.scratch_file("otpmem.img")
+ pattern = b'\x00\x00\x00\x00\xff\xff\xff\xff' * (16 * 1024 // 8)
+ with open(path, "wb") as f:
+ f.write(pattern)
+ return path
+
+ def test_ast2600_otp_blockdev_device(self):
+ image_path = self.archive_extract(self.ASSET_SDK_V907_AST2600)
+ otp_img = self.generate_otpmem_image()
+ self.vm.set_machine("ast2600-evb")
Please move self.vm.set_machine() at the top of the routine.
Thanks,
C.
+ self.vm.set_console()
+ self.vm.add_args(
+ "-blockdev", f"driver=file,filename={otp_img},node-name=otp",
+ "-global", "aspeed-otp.drive=otp",
+ )
+ self.do_test_arm_aspeed_sdk_start(self.scratch_file("ast2600-default",
"image-bmc"))
+ self.wait_for_console_pattern("ast2600-default login:")
+
+ def test_ast1030_otp_blockdev_device(self):
+ kernel_name = "ast1030-evb-demo-3/zephyr.elf"
+ kernel_file = self.archive_extract(self.ASSET_ZEPHYR_3_02,
member=kernel_name)
+ otp_img = self.generate_otpmem_image()
+ self.vm.set_machine("ast1030-evb")
+ self.vm.set_console()
+ self.vm.add_args(
+ "-kernel", kernel_file,
+ "-blockdev", f"driver=file,filename={otp_img},node-name=otp",
+ "-global", "aspeed-otp.drive=otp",
+ )
+ self.vm.launch()
+ self.wait_for_console_pattern("Booting Zephyr OS")
+
+if __name__ == '__main__':
+ AspeedTest.main()