1# Copyright (c) 2010 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
5import logging
6from autotest_lib.server import test, utils
7
8class platform_InstallFW(test.test):
9    """Test to install FW on DUT"""
10    version = 1
11
12    def run_once(self, host=None, fw_type=None, fw_path=None, fw_name=None):
13        """Run test to install firmware.
14
15        @param host: host to run on
16        @param fw_type: must be either "bios" or "ec"
17        @param fw_path: path to fw binary or set to "local"
18        @param fw_name: (optional) name of binary file
19        """
20
21        if fw_path == "local":
22            fw_dst = "/usr/sbin/chromeos-firmwareupdate"
23            is_shellball = True
24        else:
25            fw_src = "%s/%s" % (fw_path, fw_name)
26            # Determine the firmware file is a shellball or a raw binary.
27            is_shellball = (utils.system_output("file %s" % fw_src).find(
28                    "shell script") != -1)
29            fw_dst = "/tmp/%s" % fw_name
30            # Copy binary from server to client.
31            host.send_file(fw_src, fw_dst)
32
33        # Install bios/ec on a client.
34        if fw_type == "bios":
35            if is_shellball:
36                host.run("sudo /bin/sh %s --mode recovery --update_main "
37                         "--noupdate_ec" % fw_dst)
38            else:
39                host.run("sudo /usr/sbin/flashrom -p host -w %s"
40                         % fw_dst)
41        if fw_type == "ec":
42            if is_shellball:
43                host.run("sudo /bin/sh %s --mode recovery --update_ec "
44                         "--noupdate_main" % fw_dst)
45            else:
46                host.run("sudo /usr/sbin/flashrom -p ec -w %s"
47                         % fw_dst)
48        # Reboot client after installing the binary.
49        host.reboot()
50        # Get the versions of BIOS and EC binaries.
51        bios_info = host.run("crossystem fwid")
52        logging.info("BIOS version info:\n %s", bios_info)
53        ec_info = host.run("sudo mosys -k ec info")
54        logging.info("EC version info:\n %s", ec_info)
55