# Copyright (c) 2012 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 = "Chrome OS Team"
NAME = "firmware_ECWriteProtect"
PURPOSE = "Servo based EC write protect test"
CRITERIA = "This test will fail if EC write protect misbehaved"
SUITE = "faft,faft_ec"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"

DOC = """
This test starts with RO normal mode and enables EC write protect. Software sync
supposed to write protect the entire EC flash, so we expect the following
write protect flags:
  - wp_gpio_asserted
  - ro_at_boot
  - ro_now
  - all_now
These flags are checked under following situations:
  - Cold reset. RO normal.
  - Cold reset. Two stop.
  - Cold reset by ectool. Two stop.
At the end of the test, write protect is deactivated and firmware is restored to
RO normal mode.
"""

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

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

parallel_simple(run_ecwriteprotect, machines)
