blob: e1231987dd1feb973fbf03a5370e8ee61572c03e [file] [log] [blame] [edit]
# Lint as: python2, python3
# Copyright 2021 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.cros.servo import chrome_cr50
from autotest_lib.client.common_lib import error
class ChromeTi50(chrome_cr50.ChromeCr50):
"""Manages control of a Chrome Ti50.
We control the Chrome Ti50 via the console of a Servo board. Chrome Ti50
provides many interfaces to set and get its behavior via console commands.
This class is to abstract these interfaces.
"""
WAKE_RESPONSE = ['(>|ti50_common)']
START_STR = ['ti50_common']
# List of all ti50 ccd capabilities. Same order of 'ccd' output.
# This is not the same as cr50 list.
CAP_NAMES = [
'UartGscRxAPTx', 'UartGscTxAPRx', 'UartGscRxECTx', 'UartGscTxECRx',
'UartGscRxFpmcuTx', 'UartGscTxFpmcuRx', 'FlashAP', 'FlashEC',
'OverrideWP', 'RebootECAP', 'GscFullConsole', 'UnlockNoReboot',
'UnlockNoShortPP', 'OpenNoTPMWipe', 'OpenNoLongPP',
'BatteryBypassPP', 'I2C', 'FlashRead', 'OpenNoDevMode',
'OpenFromUSB', 'OverrideBatt'
]
# Ti50 only supports v2
AP_RO_VERSIONS = [2]
def __init__(self, servo, faft_config):
"""Initializes a ChromeCr50 object.
@param servo: A servo object.
@param faft_config: A faft config object.
"""
super(ChromeTi50, self).__init__(servo, 'cr50_uart')
self.faft_config = faft_config
# Update CCD_FORMAT to use ti50 version of CAP_NAMES.
self.CCD_FORMAT['Capabilities'] = \
'(Capabilities:.*(?P<Capabilities>%s))' % \
(self.CAP_FORMAT.join(self.CAP_NAMES) + self.CAP_FORMAT)
def set_ccd_level(self, level, password=''):
if level == 'unlock':
raise error.TestError(
"Ti50 does not support privilege level unlock")
super(ChromeTi50, self).set_ccd_level(level, password)
def unlock_is_supported(self):
return False
def check_boot_mode(self, mode_exp='NORMAL'):
"""Query the Ti50 boot mode, and compare it against mode_exp.
Args:
mode_exp: expected boot mode. It should be either 'NORMAL'
or 'NO_BOOT'.
Returns:
True if the boot mode matches mode_exp.
False, otherwise.
Raises:
TestError: Input parameter is not valid.
"""
# Ti50 implements EFS 2.1, Cr50 implements EFS 2.0. This means
# 'NORMAL' is renamed to 'VERIFIED'. Ti50 also changes the case.
rv = self.send_command_retry_get_output('ec_comm',
[r'boot_mode\s*:\s*(Verified|NoBoot)'], safe=True)
if mode_exp == 'NORMAL':
return rv[0][1] == 'Verified'
elif mode_exp == 'NO_BOOT':
return rv[0][1] == 'NoBoot'
else:
raise error.TestError('parameter, mode_exp is not valid: %s' %
mode_exp)