servo: cache servo_type
The servo type does not change during a servod instance. This CL caches
the value on server initialization to avoid unnecessary extra calls.
BUG=chromium:1009616
TEST=test_that --autotest_dir . $DIP firmware_Cr50CCDServoCap
/tmp/test_that_results_b2EdTg/results-1-firmware_Cr50CCDServoCap
[ PASSED ]
Change-Id: Id705c70f207eb5c11c37d112fe99e196c9c871fd
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2023876
Tested-by: Ruben Rodriguez Buchillon <coconutruben@chromium.org>
Commit-Queue: Ruben Rodriguez Buchillon <coconutruben@chromium.org>
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
diff --git a/server/cros/servo/servo.py b/server/cros/servo/servo.py
index 97c7d49..2908a78 100644
--- a/server/cros/servo/servo.py
+++ b/server/cros/servo/servo.py
@@ -314,6 +314,7 @@
self._servo_host = servo_host
self._servo_serial = servo_serial
self._server = servo_host.get_servod_server_proxy()
+ self._servo_type = self.get_servo_version()
self._power_state = _PowerStateController(self)
self._uart = _Uart(self)
self._usb_state = None
@@ -1050,8 +1051,7 @@
def get_main_servo_device(self):
"""Return the main servo device"""
- servo_type = self.get_servo_version()
- return servo_type.split('_with_')[-1].split('_and_')[0]
+ return self._servo_type.split('_with_')[-1].split('_and_')[0]
def enable_main_servo_device(self):
@@ -1087,20 +1087,19 @@
if self._programmer:
return
# Initialize firmware programmer
- servo_version = self.get_servo_version()
- if servo_version.startswith('servo_v2'):
+ if self._servo_type.startswith('servo_v2'):
self._programmer = firmware_programmer.ProgrammerV2(self)
self._programmer_rw = firmware_programmer.ProgrammerV2RwOnly(self)
# Both servo v3 and v4 use the same programming methods so just leverage
# ProgrammerV3 for servo v4 as well.
- elif (servo_version.startswith('servo_v3') or
- servo_version.startswith('servo_v4')):
+ elif (self._servo_type.startswith('servo_v3') or
+ self._servo_type.startswith('servo_v4')):
self._programmer = firmware_programmer.ProgrammerV3(self)
self._programmer_rw = firmware_programmer.ProgrammerV3RwOnly(self)
else:
raise error.TestError(
'No firmware programmer for servo version: %s' %
- servo_version)
+ self._servo_type)
def program_bios(self, image, rw_only=False):
@@ -1292,8 +1291,7 @@
@param role: Power role for DUT port on servo v4, either 'src' or 'snk'.
"""
- servo_version = self.get_servo_version()
- if servo_version.startswith('servo_v4'):
+ if self._servo_type.startswith('servo_v4'):
value = self.get('servo_v4_role')
if value != role:
self.set_nocheck('servo_v4_role', role)
@@ -1305,12 +1303,12 @@
def supports_built_in_pd_control(self):
"""Return whether the servo type supports pd charging and control."""
- servo_type = self.get('servo_type')
- if 'servo_v4' not in servo_type:
+ if 'servo_v4' not in self._servo_type:
# Only servo v4 supports this feature.
- logging.info('%r type does not support pd control.', servo_type)
+ logging.info('%r type does not support pd control.',
+ self._servo_type)
return False
- # On servo v4, it still needs ot be the type-c version.
+ # On servo v4, it still needs to be the type-c version.
if not self.get('servo_v4_type') == 'type-c':
logging.info('PD controls require a type-c servo v4.')
return False
@@ -1333,14 +1331,14 @@
@param state: Set servo v4 dts mode 'off' or 'on'.
"""
- servo_version = self.get_servo_version()
- if not servo_version.startswith('servo_v4'):
+ if not self._servo_type.startswith('servo_v4'):
logging.debug('Not a servo v4, unable to set dts mode %s.', state)
return
# TODO(mruthven): remove watchdog check once the labstation has been
# updated to have support for modifying the watchdog.
- set_watchdog = self.has_control('watchdog') and 'ccd' in servo_version
+ set_watchdog = (self.has_control('watchdog') and
+ 'ccd' in self._servo_type)
enable_watchdog = state == 'on'
if set_watchdog and not enable_watchdog: