1# Copyright 2017 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5AUTHOR = "mruthven" 6NAME = "firmware_Cr50Update" 7PURPOSE = "Verify Cr50 update" 8ATTRIBUTES = "suite:cr50_stress_flaky" 9TIME = "SHORT" 10TEST_TYPE = "server" 11DEPENDENCIES = "servo" 12 13DOC = """ 14This test verifies Cr50 update works or recovery from erased nvmem. 15 16To test nvmem recovery set test to "erase_nvmem" or use 17firmware_Cr50Update.erase_nvmem 18 19The test will rollback to the oldest Cr50 image and then verify each update to 20the next newest image runs successfully. If testing nvmem recovery, nvmem will 21be erased during the rollback from the dev image to the release image and 22any old release args will be ignored for erase_nvmem tests. 23 24The old release needs to have a version lower than the release image. The 25release image needs to have a version lower than the dev image. The dev image 26has to be newer than all of the images including the original cr50 image on 27the dut to be able to guarantee that the original state can be restored. 28 29If no_release path or old_release_path are given, the test will use 30old_release_ver and release_ver to fetch the images from gs://. 31 32If a valid path is given the version will be ignored. For example 33release_path='/tmp/cr50.bin.prod' or release_ver='0.0.23/ZZAF:ffffffff:7f00' 34could be used. The test will attempt to get the cr50 image from 35/tmp/cr50.bin.prod first. If that doesn't exist then it will download the 36version .23 image stored in google cloud storage. The version string needs to 37contain the epoch, major, and minor versions separated by '.' and the image 38board id. The image board id is optional. The tests can be run against all 39versions since '0.0.13'. 40 41If dev_path is not specified, then the test will get the cr50 devids and 42attempt to get the debug image from gs://. 43 44After the test is complete the original Cr50 image will be reflashed onto the 45device. 46 47@param iterations: the number of iterations to run 48@param dev_path: the location of the dev image. Must be built with CR50_DEV=1 49@param release_path: the location of the release image 50@param release_ver: RW and BID version string used to fetch the image from gs 51@param old_release_path: the location of the old release image. 52@param old_release_ver: RW version string used to fetch the image from gs 53@param test: string representing the test type. use "erase_nvmem" if nvmem 54 should be erased before updating to the release image. This can be 55 used to verify that Cr50 can recovery from erased nvmem. 56""" 57 58from autotest_lib.client.common_lib import error 59from autotest_lib.server import utils 60 61args_dict = utils.args_to_dict(args) 62servo_args = hosts.CrosHost.get_servo_arguments(args_dict) 63 64iterations = int(args_dict.get("iterations", 1)) 65old_release_path = args_dict.get("old_release_path", "") 66old_release_ver = args_dict.get("old_release_ver", "") 67release_path = args_dict.get("release_path", "") 68release_ver = args_dict.get("release_ver", "") 69dev_path = args_dict.get("dev_path", "") 70test = args_dict.get("test", "") 71 72def run(machine): 73 host = hosts.create_host(machine, servo_args=servo_args) 74 75 job.run_test("firmware_Cr50Update", host=host, cmdline_args=args, 76 release_path=release_path, release_ver=release_ver, 77 old_release_path=old_release_path, 78 old_release_ver=old_release_ver, dev_path=dev_path, 79 test=test, iterations=iterations) 80 81parallel_simple(run, machines) 82