faft: Changing FORCE_DEV_SWITCH_ON flag requires reboot to get a clear state

The GBB flag FORCE_DEV_SWITCH_ON is a work-around for factory to force to
boot into a dev mode. It overwrites the actual dev switch state which is
stored in TPM. So the system may or may not in the dev mode. When we
disable this flag, the next reboot mode is unknown, either normal mode or
dev mode. So it is safe to reboot it to come up with a clear state.

BUG=chromium-os:32874
TEST=Run firmware_TryFwB/control.dev passed on a new installed firmware.

Change-Id: I32486324562e6b8847c9b88de7bab386773fa647
Reviewed-on: https://gerrit.chromium.org/gerrit/29593
Reviewed-by: Vic Yang <victoryang@chromium.org>
Commit-Ready: Tom Wai-Hong Tam <waihong@chromium.org>
Tested-by: Tom Wai-Hong Tam <waihong@chromium.org>
diff --git a/server/cros/faftsequence.py b/server/cros/faftsequence.py
index dd3e0ab..c72e252 100644
--- a/server/cros/faftsequence.py
+++ b/server/cros/faftsequence.py
@@ -263,14 +263,14 @@
         super(FAFTSequence, self).setup()
         if not self._remote_infos['faft']['used']:
             raise error.TestError('The use_faft flag should be enabled.')
-        self.clear_gbb_flags(self.GBB_FLAG_FORCE_DEV_SWITCH_ON |
-                             self.GBB_FLAG_DEV_SCREEN_SHORT_DELAY)
         self.register_faft_template({
             'state_checker': (None),
             'userspace_action': (None),
             'reboot_action': (self.sync_and_warm_reboot),
             'firmware_action': (None)
         })
+        self.clear_gbb_flags(self.GBB_FLAG_FORCE_DEV_SWITCH_ON |
+                             self.GBB_FLAG_DEV_SCREEN_SHORT_DELAY)
         if self._install_image_path:
             self.install_test_image(self._install_image_path,
                                     self._firmware_update)
@@ -355,6 +355,11 @@
             self.faft_client.run_shell_command(
                     '/usr/share/vboot/bin/set_gbb_flags.sh 0x%x' % new_flags)
             self.faft_client.reload_firmware()
+            # If changing FORCE_DEV_SWITCH_ON flag, reboot to get a clear state
+            if (gbb_flags & mask & self.GBB_FLAG_FORCE_DEV_SWITCH_ON):
+                self.run_faft_step({
+                    'firmware_action': self.wait_fw_screen_and_ctrl_d,
+                })
 
 
     def _open_uart_pty(self):