firmware_programmer: handle servo v4 with micro and ccd
BUG=b:35579416
BRANCH=none
TEST=run provision_FirmwareUpdate
Change-Id: I25c755ca2859baca603992c1ae84d422172e411e
Signed-off-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1758926
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Namyoon Woo <namyoon@chromium.org>
diff --git a/server/cros/servo/firmware_programmer.py b/server/cros/servo/firmware_programmer.py
index e4e4a0c..15a6349 100644
--- a/server/cros/servo/firmware_programmer.py
+++ b/server/cros/servo/firmware_programmer.py
@@ -137,7 +137,7 @@
self._ro_vpd = os.path.join(self._tmp_path, 'ro_vpd')
self._rw_vpd = os.path.join(self._tmp_path, 'rw_vpd')
self._gbb = os.path.join(self._tmp_path, 'gbb')
- self._servo_version = self._servo.get_servo_version()
+ self._servo_version = self._servo.get_servo_version(active=True)
self._servo_serials = self._servo._server.get_servo_serials()
@@ -160,6 +160,7 @@
servo_v3_programmer = 'linux_spi'
servo_v4_with_micro_programmer = 'raiden_debug_spi'
servo_v4_with_ccd_programmer = 'raiden_debug_spi:target=AP'
+
if self._servo_version == 'servo_v2':
programmer = servo_v2_programmer
servo_serial = self._servo_serials.get('main')
@@ -227,6 +228,11 @@
@param path: a string, name of the file containing the firmware image.
"""
self._fw_path = path
+
+ # If servo is running with servo v4, there may be two programming
+ # devices. Determine the programmer based on the active one.
+ self._servo_version = self._servo.get_servo_version(active=True)
+
# CCD takes care holding AP/EC. Don't need the following steps.
if self._servo_version != 'servo_v4_with_ccd_cr50':
faft_config = FAFTConfig(self._servo.get_board())
@@ -270,6 +276,10 @@
if self._ec_chip is None:
self._ec_chip = self._servo.get('ec_chip')
+ # If servo is running with servo v4, there may be two programming
+ # devices. Determine the programmer based on the active one.
+ self._servo_version = self._servo.get_servo_version(active=True)
+
# Get the port of servod. flash_ec may use it to talk to servod.
port = self._servo._servo_host.servo_port
self._program_cmd = ('flash_ec --chip=%s --image=%s --port=%d' %
diff --git a/server/cros/servo/servo.py b/server/cros/servo/servo.py
index 23dd258..65e4d41 100644
--- a/server/cros/servo/servo.py
+++ b/server/cros/servo/servo.py
@@ -907,13 +907,27 @@
args=args).stdout.strip()
- def get_servo_version(self):
+ def get_servo_version(self, active=False):
"""Get the version of the servo, e.g., servo_v2 or servo_v3.
+ @param active: Only return the servo type with the active device.
@return: The version of the servo.
"""
- return self._server.get_version()
+ servo_type = self._server.get_version()
+ if '_and_' not in servo_type or not active:
+ return servo_type
+
+ # 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')
+ if active_device in servo_type:
+ logging.info('%s is active', active_device)
+ return 'servo_v4_with_' + active_device
+
+ logging.warn("%s is active even though it's not in servo type",
+ active_device)
+ return servo_type
def running_through_ccd(self):