| # 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. |
| |
| import logging |
| |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.server.cros.faftsequence import FAFTSequence |
| |
| class firmware_ECBootTime(FAFTSequence): |
| """ |
| Servo based EC boot time test. |
| """ |
| version = 1 |
| |
| def setup(self): |
| super(firmware_ECBootTime, self).setup() |
| # Only run in normal mode |
| self.setup_dev_mode(False) |
| |
| |
| def check_boot_time(self): |
| boot_msg = ("([0-9\.]+) Port 80" |
| if self._x86 else "([0-9\.]+) AP running") |
| power_cmd = "powerbtn" if self._x86 else "power on" |
| reboot = self.send_uart_command_get_output("reboot ap-off", |
| "([0-9\.]+) Inits done") |
| power_press = self.send_uart_command_get_output(power_cmd, |
| ["\[([0-9\.]+) PB", boot_msg], timeout=3) |
| reboot_time = float(reboot[0].group(1)) |
| power_press_time = float(power_press[0].group(1)) |
| firmware_resp_time = float(power_press[1].group(1)) |
| boot_time = firmware_resp_time - power_press_time |
| logging.info("EC cold boot time: %f s" % reboot_time) |
| if reboot_time > 1.0: |
| raise error.TestFail("EC cold boot time longer than 1 second.") |
| logging.info("EC boot time: %f s" % boot_time) |
| if boot_time > 1.0: |
| raise error.TestFail("Boot time longer than 1 second.") |
| |
| |
| def run_once(self, host=None): |
| if not self.check_ec_capability(): |
| return |
| self._x86 = ('x86' in self.client_attr.ec_capability) |
| dev_mode = self.crossystem_checker({'devsw_boot': '1'}) |
| self.register_faft_sequence(( |
| { # Step 1, Reboot and check EC cold boot time and host boot time |
| 'reboot_action': self.check_boot_time, |
| 'firmware_action': (self.wait_fw_screen_and_ctrl_d |
| if dev_mode else None) |
| }, |
| { # Step 2, dummy step to make step 1 reboot |
| } |
| )) |
| self.run_faft_sequence() |