RELAND: servo: build v4p1 layers into autotest
This cl was generated running this command:
sed -i "s/'$old'/'$new'/g" $(grep -lr "'$old'")
The command was run with the following old/new pairs:
old: servo_v4_type - new: root.dut_connection_type
old: servo_v4_sbu - new: servo_dut_sbu
old: servo_v4_role - new: servo_pd_role
old: servo_v4_dts_mode - new: servo_dts_mode
old: active_v4_device - new: active_dut_controller
The list for those is from crrev.com/c/2407392 and crrev.com/c/2693385
Additionally, the firmware retrieval for servo types is adjusted so that
v4 and v4p1 are both retrieved with their new shorthand:
root.servo_fw_version
Note that ultimately, all servo firmwares will be retrieved that way
i.e. with a target (e.g. root, main, etc) rather than the type. The type
is always baked into the firmware name anyways.
BUG=b:180152565
//tests with atlas with v4p1, micro, and ccd
TEST=test_that $atlas_ip servo_Verification --args="servo_host=$lip"
// all passed
//tests with dru with v4, ccd
TEST=test_that $atlas_ip servo_Verification --args="servo_host=$lip"
// all passed
Change-Id: I2b1570fba766d3bc0d246821e6522d745a4e392b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2864008
Tested-by: Ruben Rodriguez Buchillon <coconutruben@chromium.org>
Tested-by: Garry Wang <xianuowang@chromium.org>
Reviewed-by: Otabek Kasimov <otabek@google.com>
Reviewed-by: Garry Wang <xianuowang@chromium.org>
Reviewed-by: Namyoon Woo <namyoon@chromium.org>
Commit-Queue: Ruben Rodriguez Buchillon <coconutruben@chromium.org>
(cherry picked from commit 030ff1682045483ae51a7b8a3e526ffde473a1de)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2898002
Reviewed-by: Ruben Rodriguez Buchillon <coconutruben@chromium.org>
diff --git a/server/cros/faft/firmware_test.py b/server/cros/faft/firmware_test.py
index bc1837a..f3dee6f 100644
--- a/server/cros/faft/firmware_test.py
+++ b/server/cros/faft/firmware_test.py
@@ -664,12 +664,12 @@
# Servo v4 requires an external charger to source power. Make sure
# this setup is correct.
if 'servo_v4' in self.pdtester.servo_type:
- role = self.pdtester.get('servo_v4_role')
+ role = self.pdtester.get('servo_pd_role')
if role != 'src':
raise error.TestError(
'Servo v4 is not sourcing power! Make sure the servo '
'"DUT POWER" port is connected to a working charger. '
- 'servo_v4_role:%s' % role)
+ 'servo_pd_role:%s' % role)
def setup_usbkey(self, usbkey, host=None, used_for_recovery=None):
"""Setup the USB disk for the test.
diff --git a/server/cros/power/servo_charger.py b/server/cros/power/servo_charger.py
index 4cb3fc4..104b8cc 100644
--- a/server/cros/power/servo_charger.py
+++ b/server/cros/power/servo_charger.py
@@ -70,7 +70,7 @@
raise error.TestNAError('Servo setup does not support PD control. '
'Check logs for details.')
- self._original_role = self._servo.get('servo_v4_role')
+ self._original_role = self._servo.get('servo_pd_role')
if self._original_role == 'snk':
self.start_charging()
self.stop_charging()
@@ -150,7 +150,7 @@
@raises error.TestError: if the role did not change successfully.
"""
- self._servo.set_nocheck('servo_v4_role', role)
+ self._servo.set_nocheck('servo_pd_role', role)
# Sometimes the role reverts quickly. Add a short delay to let the new
# role stabilize.
time.sleep(_ROLE_SETTLING_DELAY_SEC)
@@ -162,7 +162,7 @@
delay_sec=_DELAY_SEC, backoff=_BACKOFF)
def check_servo_role(role):
"""Check if servo role is as expected, if not, retry."""
- if self._servo.get('servo_v4_role') != role:
+ if self._servo.get('servo_pd_role') != role:
raise error.TestError('Servo v4 failed to set its PD role to '
'%s.' % role)
check_servo_role(role)
diff --git a/server/cros/servo/chrome_cr50.py b/server/cros/servo/chrome_cr50.py
index 16e0a4d..393a483 100644
--- a/server/cros/servo/chrome_cr50.py
+++ b/server/cros/servo/chrome_cr50.py
@@ -1231,7 +1231,7 @@
def check_servo_monitor(self):
"""Returns True if cr50 can detect servo connect/disconnect"""
- orig_dts = self._servo.get('servo_v4_dts_mode')
+ orig_dts = self._servo.get('servo_dts_mode')
# Detach ccd so EC uart won't interfere with servo detection
self._servo.set_dts_mode('off')
self._servo.set('ec_uart_en', 'off')
diff --git a/server/cros/servo/servo.py b/server/cros/servo/servo.py
index e533ec0..39c9be6 100644
--- a/server/cros/servo/servo.py
+++ b/server/cros/servo/servo.py
@@ -656,14 +656,14 @@
# v4p1).
# TODO(coconutruben): eventually, replace this with a metric to track
# SBU voltages wrt servo-hw/dut-hw
- if self.has_control('servo_v4_sbu1_mv'):
+ if self.has_control('servo_dut_sbu1_mv'):
# Attempt to take a reading of sbu1 and sbu2 multiple times to
# account for situations where the two lines exchange hi/lo roles
# frequently.
for i in range(10):
try:
- sbu1 = int(self.get('servo_v4_sbu1_mv'))
- sbu2 = int(self.get('servo_v4_sbu2_mv'))
+ sbu1 = int(self.get('servo_dut_sbu1_mv'))
+ sbu2 = int(self.get('servo_dut_sbu2_mv'))
logging.info('attempt %d sbu1 %d sbu2 %d', i, sbu1, sbu2)
except error.TestFail as e:
# This is a nice to have but if reading this fails, it
@@ -1004,10 +1004,10 @@
def get_ec_board(self):
"""Get the board name from EC."""
- if self.has_control('active_v4_device'):
+ if self.has_control('active_dut_controller'):
# If servo v4 is allowing dual_v4 devices, then choose the
# active device.
- active_device = self.get('active_v4_device')
+ active_device = self.get('active_dut_controller')
if active_device == self.get_main_servo_device():
active_device = ''
else:
@@ -1314,7 +1314,7 @@
# If servo v4 is using ccd and servo micro, modify the servo type to
# reflect the active device.
- active_device = self.get('active_v4_device')
+ active_device = self.get('active_dut_controller')
if active_device in servo_type:
logging.info('%s is active', active_device)
return 'servo_v4_with_' + active_device
@@ -1333,7 +1333,7 @@
"""Return the servo_v4_type (such as 'type-c'), or None if not v4."""
if not hasattr(self, '_servo_v4_type'):
if 'servo_v4' in self.get_servo_type():
- self._servo_v4_type = self.get('servo_v4_type')
+ self._servo_v4_type = self.get('root.dut_connection_type')
else:
self._servo_v4_type = None
return self._servo_v4_type
@@ -1353,9 +1353,9 @@
def enable_main_servo_device(self):
"""Make sure the main device has control of the dut."""
- if not self.has_control('active_v4_device'):
+ if not self.has_control('active_dut_controller'):
return
- self.set('active_v4_device', self.get_main_servo_device())
+ self.set('active_dut_controller', self.get_main_servo_device())
def main_device_is_ccd(self):
@@ -1385,7 +1385,7 @@
# Use dts support as a proxy to whether the servo setup could
# support a dual role. Only those setups now support legacy and ccd.
return True
- active_device = self.get('active_v4_device')
+ active_device = self.get('active_dut_controller')
return 'ccd_cr50' not in active_device
def _initialize_programmer(self, rw_only=False):
@@ -1616,15 +1616,15 @@
logging.debug('Not a servo v4, unable to set role to %s.', role)
return
- if not self.has_control('servo_v4_role'):
+ if not self.has_control('servo_pd_role'):
logging.debug(
'Servo does not has servo_v4_role control, unable'
' to set role to %s.', role)
return
- value = self.get('servo_v4_role')
+ value = self.get('servo_pd_role')
if value != role:
- self.set_nocheck('servo_v4_role', role)
+ self.set_nocheck('servo_pd_role', role)
else:
logging.debug('Already in the role: %s.', role)
@@ -1637,13 +1637,13 @@
logging.debug('Not a servo v4, unable to get role')
return None
- if not self.has_control('servo_v4_role'):
+ if not self.has_control('servo_pd_role'):
logging.debug(
'Servo does not has servo_v4_role control, unable'
' to get the role.')
return None
- return self.get('servo_v4_role')
+ return self.get('servo_pd_role')
def set_servo_v4_pd_comm(self, en):
"""Set the PD communication of servo v4, either 'on' or 'off'.
@@ -1695,7 +1695,7 @@
if not self.dts_mode_is_valid():
logging.info('Not a valid servo setup. Unable to get dts mode.')
return
- return self.get('servo_v4_dts_mode')
+ return self.get('servo_dts_mode')
def ccd_watchdog_enable(self, enable):
"""Control the ccd watchdog."""
@@ -1737,7 +1737,7 @@
if not enable_watchdog:
self.ccd_watchdog_enable(False)
- self.set_nocheck('servo_v4_dts_mode', state)
+ self.set_nocheck('servo_dts_mode', state)
if enable_watchdog:
self.ccd_watchdog_enable(True)
@@ -1777,10 +1777,16 @@
return '%s_version.%s' % (dev, tag)
fw_versions = {}
+ # Note, this works because v4p1 starts with v4 as well.
+ # TODO(coconutruben): make this more robust so that it can work on
+ # a future v-whatever as well.
if 'servo_v4' not in self.get_servo_type():
return {}
- v4_tag = get_fw_version_tag('support', 'servo_v4')
- fw_versions[v4_tag] = self._get_servo_type_fw_version('servo_v4')
+ # v4 or v4p1
+ v4_flavor = self.get_servo_type().split('_with_')[0]
+ v4_tag = get_fw_version_tag('root', v4_flavor)
+ fw_versions[v4_tag] = self._get_servo_type_fw_version('servo_fw',
+ prefix='root')
if 'with' in self.get_servo_type():
dut_devs = self.get_servo_type().split('_with_')[1].split('_and_')
main_tag = get_fw_version_tag('main', dut_devs[0])
diff --git a/server/hosts/servo_host.py b/server/hosts/servo_host.py
index 69178e4..5ecbf59 100644
--- a/server/hosts/servo_host.py
+++ b/server/hosts/servo_host.py
@@ -958,7 +958,7 @@
# panic information from servo micro and servo v4 for the current logs.
# This can only happen if the |_servo| attribute is initialized.
if self._servo:
- for mcu in ['servo_micro', 'servo_v4']:
+ for mcu in ['servo_micro', 'servo_v4', 'servo_v4p1']:
ctrl = '%s_uart_cmd' % mcu
if self._servo.has_control(ctrl):
logging.info('Trying to retrieve %r panicinfo into logs',
diff --git a/server/hosts/servo_repair.py b/server/hosts/servo_repair.py
index 6164a02..cc66d31 100644
--- a/server/hosts/servo_repair.py
+++ b/server/hosts/servo_repair.py
@@ -525,7 +525,7 @@
"""
@timeout_util.TimeoutDecorator(cros_constants.VERIFY_TIMEOUT_SEC)
def verify(self, host):
- if host.get_servo().get('servo_v4_role') == 'snk':
+ if host.get_servo().get('servo_pd_role') == 'snk':
raise hosts.AutoservNonCriticalVerifyError(
'Power delivery not in src role.')
@@ -714,14 +714,14 @@
def _get_max_sbu_value(self, host):
"""Get average voltage on SBU lines."""
servo = host.get_servo()
- if not servo.has_control('servo_v4_sbu1_mv'):
+ if not servo.has_control('servo_dut_sbu1_mv'):
return -1
s1 = 0
s2 = 0
for i in range(self._TOTAL_CHECK_SBU_VOLTAGE):
try:
- sbu1 = int(servo.get('servo_v4_sbu1_mv'))
- sbu2 = int(servo.get('servo_v4_sbu2_mv'))
+ sbu1 = int(servo.get('servo_dut_sbu1_mv'))
+ sbu2 = int(servo.get('servo_dut_sbu2_mv'))
logging.debug('Attempt:%2d, sbu1 %4d sbu2 %4d', i, sbu1, sbu2)
s1 += sbu1
s2 += sbu2
@@ -1028,8 +1028,8 @@
logging.info('Turn on configuration channel and wait 30 seconds.')
# alternative option to turn line on is by `cc srcdts`
- host.get_servo().set_nocheck('servo_v4_role', 'src')
- host.get_servo().set_nocheck('servo_v4_dts_mode', 'on')
+ host.get_servo().set_nocheck('servo_pd_role', 'src')
+ host.get_servo().set_nocheck('servo_dts_mode', 'on')
# wait till command will be effected
time.sleep(self.CC_ON_TIMEOUT)
host.restart_servod()
@@ -1120,21 +1120,21 @@
@timeout_util.TimeoutDecorator(cros_constants.REPAIR_TIMEOUT_SEC)
def repair(self, host):
- host.get_servo().set_nocheck('servo_v4_role', 'snk')
+ host.get_servo().set_nocheck('servo_pd_role', 'snk')
time.sleep(1)
for x in range(self._SET_ATTEMPT_COUNT):
logging.debug('Try set servo_v4_role to src.'
' Attempt: %s', x + 1)
try:
- host.get_servo().set('servo_v4_role', 'src')
+ host.get_servo().set('servo_pd_role', 'src')
# Waiting a few seconds as it can be change to snk if PD
# on servo has issue.
time.sleep(5)
except BaseException as e:
logging.debug('Setting PD with retries failed %s', e)
- if host.get_servo().get('servo_v4_role') == 'src':
+ if host.get_servo().get('servo_pd_role') == 'src':
break
- if host.get_servo().get('servo_v4_role') == 'snk':
+ if host.get_servo().get('servo_pd_role') == 'snk':
raise hosts.AutoservNonCriticalVerifyError(
'Cannot switch power delivery to the src role')
# Restart servod to re-initialize servos.
diff --git a/server/site_tests/firmware_Cr50CCDFirmwareUpdate/firmware_Cr50CCDFirmwareUpdate.py b/server/site_tests/firmware_Cr50CCDFirmwareUpdate/firmware_Cr50CCDFirmwareUpdate.py
index 6bd70a4..29d8d76 100644
--- a/server/site_tests/firmware_Cr50CCDFirmwareUpdate/firmware_Cr50CCDFirmwareUpdate.py
+++ b/server/site_tests/firmware_Cr50CCDFirmwareUpdate/firmware_Cr50CCDFirmwareUpdate.py
@@ -129,9 +129,9 @@
# Fast open cr50 and check if testlab is enabled.
self.fast_ccd_open(enable_testlab=True)
- if self.servo.has_control('active_v4_device'):
+ if self.servo.has_control('active_dut_controller'):
try:
- self.servo.set('active_v4_device', 'ccd_cr50')
+ self.servo.set('active_dut_controller', 'ccd_cr50')
except error.TestFail as e:
raise error.TestNAError('cannot change active_v4_device: %s' %
str(e))
diff --git a/server/site_tests/firmware_Cr50CCDUartStress/firmware_Cr50CCDUartStress.py b/server/site_tests/firmware_Cr50CCDUartStress/firmware_Cr50CCDUartStress.py
index 1ae8494..07f3601 100644
--- a/server/site_tests/firmware_Cr50CCDUartStress/firmware_Cr50CCDUartStress.py
+++ b/server/site_tests/firmware_Cr50CCDUartStress/firmware_Cr50CCDUartStress.py
@@ -56,10 +56,10 @@
logging.info('CCD opened.')
# Change active device as ccd_cr50.
- if self.servo.has_control('active_v4_device'):
+ if self.servo.has_control('active_dut_controller'):
try:
self.active_dev = 'ccd_cr50'
- self.servo.set('active_v4_device', self.active_dev)
+ self.servo.set('active_dut_controller', self.active_dev)
except error.TestFail as e:
raise error.TestNAError('cannot change active_v4_device: %s' %
str(e))
diff --git a/server/site_tests/firmware_Cr50CheckCap/firmware_Cr50CheckCap.py b/server/site_tests/firmware_Cr50CheckCap/firmware_Cr50CheckCap.py
index 4a79242..d50f230 100644
--- a/server/site_tests/firmware_Cr50CheckCap/firmware_Cr50CheckCap.py
+++ b/server/site_tests/firmware_Cr50CheckCap/firmware_Cr50CheckCap.py
@@ -108,7 +108,7 @@
self.servo.has_control('ec_board', self._ec_prefix))
if self.check_ec_uart and self._ec_prefix:
try:
- self.servo.set('active_v4_device', self._ec_prefix)
+ self.servo.set('active_dut_controller', self._ec_prefix)
except:
self.check_ec_uart = False
diff --git a/server/site_tests/firmware_Cr50DeferredECReset/firmware_Cr50DeferredECReset.py b/server/site_tests/firmware_Cr50DeferredECReset/firmware_Cr50DeferredECReset.py
index bc988d3..fd767ee 100644
--- a/server/site_tests/firmware_Cr50DeferredECReset/firmware_Cr50DeferredECReset.py
+++ b/server/site_tests/firmware_Cr50DeferredECReset/firmware_Cr50DeferredECReset.py
@@ -44,7 +44,7 @@
else:
# Stop power delivery to dut
logging.info('Stop charging')
- self.servo.set('servo_v4_role', 'snk')
+ self.servo.set('servo_pd_role', 'snk')
# Battery Cutoff
logging.info('Cut battery off')
@@ -54,7 +54,7 @@
# Enable power delivery to dut
logging.info('Start charging')
- self.servo.set('servo_v4_role', 'src')
+ self.servo.set('servo_pd_role', 'src')
time.sleep(self.PD_SETTLE_TIME)
@@ -111,14 +111,14 @@
self.HAS_CR50_RESET_ODL = False
# Test the external power delivery
- self.servo.set('servo_v4_role', 'snk')
+ self.servo.set('servo_pd_role', 'snk')
time.sleep(self.PD_SETTLE_TIME)
if self.ac_is_plugged_in():
raise error.TestFail('Failed to set servo_v4_role sink')
# Test stopping the external power delivery
- self.servo.set('servo_v4_role', 'src')
+ self.servo.set('servo_pd_role', 'src')
time.sleep(self.PD_SETTLE_TIME)
if not self.ac_is_plugged_in():
@@ -246,7 +246,7 @@
if self.HAS_CR50_RESET_ODL:
self.servo.set_nocheck('cr50_reset_odl', 'off')
else:
- self.servo.set_nocheck('servo_v4_role', 'src')
+ self.servo.set_nocheck('servo_pd_role', 'src')
self.servo.set_dts_mode(self.dts_restore)
time.sleep(1)
diff --git a/server/site_tests/servo_ConsoleStress/control.servo_v4 b/server/site_tests/servo_ConsoleStress/control.servo_v4
index cb6e5ff..46ea5de 100644
--- a/server/site_tests/servo_ConsoleStress/control.servo_v4
+++ b/server/site_tests/servo_ConsoleStress/control.servo_v4
@@ -28,7 +28,7 @@
iterations = int(args_dict.get("iterations", 1))
attempts = int(args_dict.get("attempts", 5000))
cmd_type = args_dict.get("cmd_type", "servo")
- cmd = args_dict.get("cmd", "servo_v4_version")
+ cmd = args_dict.get("cmd", "root.servo_fw_version")
job.run_test("servo_ConsoleStress", host=host, cmdline_args=args,
full_args=args_dict, iterations=iterations,