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