From: Kane-Chen-AS <kane_c...@aspeedtech.com> 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 <kane_c...@aspeedtech.com> --- 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 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 + +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') + + # AST1030 Zephyr image + ASSET_ZEPHYR_3_02 = Asset( + 'https://github.com/AspeedTech-BMC/zephyr/releases/download/v00.03.02/ast1030-evb-demo.zip', + '1ec83caab3ddd5d09481772801be7210e222cb015ce22ec6fffb8a76956dcd4f') + + 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") + 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() -- 2.43.0