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