1import os 2import time 3import tempfile 4import subprocess 5 6from qemu_test import LinuxKernelTest, Asset 7from aspeed import AspeedTest 8from qemu_test import exec_command_and_wait_for_pattern, skipIfMissingCommands 9 10class AspeedOtpMemoryTest(AspeedTest): 11 # AST2600 SDK image 12 ASSET_SDK_V907_AST2600 = Asset( 13 'https://github.com/AspeedTech-BMC/openbmc/releases/download/v09.07/ast2600-default-obmc.tar.gz', 14 'cb6c08595bcbba1672ce716b068ba4e48eda1ed9abe78a07b30392ba2278feba') 15 16 # AST1030 Zephyr image 17 ASSET_ZEPHYR_3_02 = Asset( 18 'https://github.com/AspeedTech-BMC/zephyr/releases/download/v00.03.02/ast1030-evb-demo.zip', 19 '1ec83caab3ddd5d09481772801be7210e222cb015ce22ec6fffb8a76956dcd4f') 20 21 def generate_otpmem_image(self): 22 path = self.scratch_file("otpmem.img") 23 pattern = b'\x00\x00\x00\x00\xff\xff\xff\xff' * (16 * 1024 // 8) 24 with open(path, "wb") as f: 25 f.write(pattern) 26 return path 27 28 def test_ast2600_otp_blockdev_device(self): 29 image_path = self.archive_extract(self.ASSET_SDK_V907_AST2600) 30 otp_img = self.generate_otpmem_image() 31 self.vm.set_machine("ast2600-evb") 32 self.vm.set_console() 33 self.vm.add_args( 34 "-blockdev", f"driver=file,filename={otp_img},node-name=otp", 35 "-global", "aspeed-otp.drive=otp", 36 ) 37 self.do_test_arm_aspeed_sdk_start(self.scratch_file("ast2600-default", "image-bmc")) 38 self.wait_for_console_pattern("ast2600-default login:") 39 40 def test_ast1030_otp_blockdev_device(self): 41 kernel_name = "ast1030-evb-demo-3/zephyr.elf" 42 kernel_file = self.archive_extract(self.ASSET_ZEPHYR_3_02, member=kernel_name) 43 otp_img = self.generate_otpmem_image() 44 self.vm.set_machine("ast1030-evb") 45 self.vm.set_console() 46 self.vm.add_args( 47 "-kernel", kernel_file, 48 "-blockdev", f"driver=file,filename={otp_img},node-name=otp", 49 "-global", "aspeed-otp.drive=otp", 50 ) 51 self.vm.launch() 52 self.wait_for_console_pattern("Booting Zephyr OS") 53 54if __name__ == '__main__': 55 AspeedTest.main() 56