# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from autotest_lib.server import utils

AUTHOR = "philipchen"
NAME = "firmware_WriteProtectFunc.dev"
PURPOSE = "Servo based SPI flash write protect functional test"
CRITERIA = "This test will fail if SPI flash write-protection does not work correctly"
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_normal, suite:faft_lv2, suite:faft_bios_ec3po, suite:faft_bios_tot"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 1

DOC = """
This test verifies the function of SPI flash write-protection.
After we enable hardware write-protection and then software write-protection,
SPI flash RO section is protected and can't be overwritten. After we disable
hardware write-protection and then software write-protection, SPI flash RO
section is not protected and can be overwritten.
"""

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run_writeprotectfunc(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_WriteProtectFunc", host=host, cmdline_args=args,
                 dev_mode=True, tag="dev")

parallel_simple(run_writeprotectfunc, machines)
