xref: /openbmc/qemu/tests/functional/test_arm_aspeed_otp.py (revision c816f80827e2c561732a72f65df01a50c1f2164d)
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