servo: support disabling watchdog for dts mode off
If servo is watching ccd_cr50 when dts mode is disabled, you only have
10 seconds to reenable it or the watchdog will kill servod.
Enable/disable the ccd watchdog when changing dts mode.
BUG=b:35579416
BRANCH=none
TEST=none
Change-Id: Idc4725d89d968d39d664a1d22fc203c4c7f01fa1
Signed-off-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1762312
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Dana Goyette <dgoyette@chromium.org>
diff --git a/server/cros/servo/servo.py b/server/cros/servo/servo.py
index 64c6181..7c878f9 100644
--- a/server/cros/servo/servo.py
+++ b/server/cros/servo/servo.py
@@ -1159,6 +1159,35 @@
logging.debug('Not a servo v4, unable to set role to %s.', role)
+ def set_servo_v4_dts_mode(self, state):
+ """Set servo v4 dts mode to off or on.
+
+ It does nothing if not a servo v4. Disable the ccd watchdog if we're
+ disabling dts mode. CCD will disconnect. The watchdog only allows CCD
+ to disconnect for 10 seconds until it kills servod. Disable the
+ watchdog, so CCD can stay disconnected indefinitely.
+
+ @param state: Set servo v4 dts mode 'off' or 'on'.
+ """
+ servo_version = self.get_servo_version()
+ if not servo_version.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
+ enable_watchdog = state == 'on'
+
+ if set_watchdog and not enable_watchdog:
+ self.set_nocheck('watchdog_remove', 'ccd')
+
+ self.set_nocheck('servo_v4_dts_mode', state)
+
+ if set_watchdog and enable_watchdog:
+ self.set_nocheck('watchdog_add', 'ccd')
+
+
@property
def uart_logs_dir(self):
"""Return the directory to save UART logs."""