blob: ad9dda93b1c1105f79ed94633b4a7008ee1f9554 [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.
import logging
import time
from autotest_lib.client.common_lib import error
from autotest_lib.server.cros.faftsequence import FAFTSequence
class firmware_ECPowerG3(FAFTSequence):
"""
Servo based EC X86 power G3 drop test.
"""
version = 1
# Time out range for waiting system drop into G3.
G3_TIMEOUT = 13
# Time out range for waiting system shut down
S5_TIMEOUT = 10
# Record failure event
_failed = False
def setup(self):
super(firmware_ECPowerG3, self).setup()
# Only run in normal mode
self.setup_dev_mode(False)
def wait_power(self, reg_ex, timeout):
"""
Wait for certain power state.
Args:
reg_ex: Acceptable "powerinfo" response. Can be a regular expression.
timeout: Timeout range.
"""
logging.info('Waiting for "%s" in %d seconds.' % (reg_ex, timeout))
while timeout > 0:
try:
timeout = timeout - 1
self.send_uart_command_get_output("powerinfo",
reg_ex,
timeout=1)
return True
except:
pass
return False
def check_G3(self):
"""Shutdown the system and check if X86 drop into G3 correctly."""
self.faft_client.run_shell_command("shutdown -P now")
if not self.wait_power("x86 power state 1 = S5", self.S5_TIMEOUT):
logging.error("Fails to wait for S5 state")
self._failed = True
elif not self.wait_power("x86 power state 0 = G3", self.G3_TIMEOUT):
logging.error("EC fails to drop into G3")
self._failed = True
self.servo.power_short_press()
def check_failure(self):
return not self._failed
def run_once(self, host=None):
if not self.check_ec_capability(['x86']):
return
self.register_faft_sequence((
{ # Step 1, power off and check if system drop into G3 correctly
'reboot_action': self.check_G3,
},
{ # Step 2, check if failure occurred
'state_checker': self.check_failure,
}
))
self.run_faft_sequence()