Enabling Stout on FAFT

BUG=chrome-os-partner:13970
TEST=most FAFT tests pass when running control.faft_bios

Change-Id: I364919e4ff47ccc434b3396673e849e3bf9c1305
Reviewed-on: https://gerrit.chromium.org/gerrit/37944
Reviewed-by: Simran Basi <sbasi@chromium.org>
Commit-Ready: Gediminas Ramanauskas <gedis@chromium.org>
Tested-by: Gediminas Ramanauskas <gedis@chromium.org>
diff --git a/server/cros/faftsequence.py b/server/cros/faftsequence.py
index c560814..23ac54b 100644
--- a/server/cros/faftsequence.py
+++ b/server/cros/faftsequence.py
@@ -18,6 +18,7 @@
 from autotest_lib.server.cros.faft_client_attribute import FAFTClientAttribute
 from autotest_lib.server.cros.faft_delay_constants import FAFTDelayConstants
 from autotest_lib.server.cros.servo_test import ServoTest
+from autotest_lib.server import hosts
 from autotest_lib.site_utils import lab_test
 from autotest_lib.site_utils.chromeos_test.common_util import ChromeOSTestError
 
@@ -175,6 +176,8 @@
             # Setting up key matrix mapping
             self.servo.set_key_matrix(self.client_attr.key_matrix_layout)
 
+            self._host = hosts.create_host(self.servo.get_target_hostname())
+
 
     def setup(self, ec_wp=None):
         """Autotest setup function."""
@@ -875,7 +878,8 @@
                                  vboot.GBB_FLAG_FORCE_DEV_SWITCH_ON |
                                  vboot.GBB_FLAG_FORCE_DEV_BOOT_USB |
                                  vboot.GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK,
-                                 vboot.GBB_FLAG_ENTER_TRIGGERS_TONORM)
+                                 vboot.GBB_FLAG_ENTER_TRIGGERS_TONORM |
+                                 vboot.GBB_FLAG_FAFT_KEY_OVERIDE)
         self.mark_setup_done('gbb_flags')
 
 
@@ -922,6 +926,15 @@
             time.sleep(self.delay.ec_boot_to_console)
             self.ec.set_hostevent(chrome_ec.HOSTEVENT_KEYBOARD_RECOVERY)
             self.servo.power_short_press()
+        elif self.client_attr.broken_rec_mode:
+            if self._host.has_power():
+                self._host.power_cycle()
+            else:
+                logging.info('You have %d seconds to power cycle this device.',
+                             self.delay.user_power_cycle)
+                time.sleep(self.delay.user_power_cycle)
+            logging.info('Booting to recovery mode.')
+            self.servo.custom_recovery_mode()
         else:
             self.servo.enable_recovery_mode()
             self.cold_reboot()
@@ -976,7 +989,8 @@
 
     def disable_keyboard_dev_mode(self):
         logging.info("Disabling keyboard controlled developer mode")
-        if not self.client_attr.chrome_ec:
+        if (not self.client_attr.chrome_ec and
+            not self.client_attr.broken_rec_mode):
             self.servo.disable_recovery_mode()
         self.cold_reboot()
         self.wait_for_client_offline()