blob: d45e523e78aafb062bd114cdeb96d8923f3bb61d [file] [log] [blame]
# 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_UpdateECBin"
PURPOSE = "Servo based software sync EC update test"
CRITERIA = "This test will fail if software sync failed on EC update"
SUITE = "faft_update_ec"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
DOC = """
This test verified the EC software sync. The EC binary is embedded in
the BIOS image. On AP startup, AP verifies the EC by comparing the
hash of the current EC with the hash of the embedded EC image. So
updating EC is simple and we just need to change the EC binary on
the BIOS image.
The test steps are:
1. check EC is RO boot and AP is RO boot,
extract the original EC binary on current AP RW A and save it locally,
copy the new_ec binary to the EC area on the current AP RW A,
disable RO_BOOT preamble flag,
reboot;
2. check EC is RW boot and AP is RW A boot,
compare the current EC with the new_ec binary,
copy the original EC binary to the EC area on the current AP RW A,
reboot;
3. check EC is RW boot and AP is RW A boot,
compare the current EC with the original EC binary,
enable RO_BOOT preamble flag,
reboot;
4. check EC is RO boot and AP is RW A boot.
This test requires a new EC image for update. The new EC image should
be different with the existing EC image on the current BIOS. In normal
cases, we use the ec_autest_image.bin from firmware_from_source.tar.bz2.
The ec_autest_image.bin is the same binary as ec.bin but shift'ed and its
version string has the "_shift" suffix.
The new EC image should be specified by the new_ec argument, like:
run_remote_tests.sh --args "new_ec=ec_autest_image.bin" ...
So RONORMAL->TWOSTOP, TWOSTOP->TWOSTOP, and TWOSTOP->RONORMAL are covered.
"""
args_dict = utils.args_to_dict(args)
servo_args = hosts.SiteHost.get_servo_arguments(args_dict)
def run_updateec(machine):
host = hosts.create_host(machine, servo_args=servo_args)
job.run_test("firmware_UpdateECBin", host=host, cmdline_args=args,
use_faft=True, disable_sysinfo=True,
dev_mode=True, tag="dev")
parallel_simple(run_updateec, machines)