faft: Ensure blocking sync is called before reboot

Ensure blocking sync is called before all of servo-triggered reset,
whether warm or cold.

Also, add command 'hdparm' to blocking_sync() to make sure that TUR
has to be sent to SSD for checking the status.

BUG=chrome-os-partner:31300
TEST=Ran FAFT

Change-Id: Ic5e4d98e4b0d6246106f6de94a153562793dde71
Signed-off-by: Ryan Lin <ryan.lin@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/218560
Reviewed-by: Shawn Nematbakhsh <shawnn@chromium.org>
Reviewed-by: danny chan <dchan@chromium.org>
diff --git a/server/cros/faft/firmware_test.py b/server/cros/faft/firmware_test.py
index 45bb073..e2f1efe 100644
--- a/server/cros/faft/firmware_test.py
+++ b/server/cros/faft/firmware_test.py
@@ -477,7 +477,7 @@
         self.faft_client.bios.reload()
         # If changing FORCE_DEV_SWITCH_ON flag, reboot to get a clear state
         if ((gbb_flags ^ new_flags) & vboot.GBB_FLAG_FORCE_DEV_SWITCH_ON):
-            self.reboot_warm_trigger()
+            self.sync_and_warm_reboot()
             self.wait_dev_screen_and_ctrl_d()
             self.wait_for_kernel_up()
 
@@ -900,6 +900,7 @@
         i.e. switch ON + reboot + switch OFF, and the new keyboard controlled
         recovery mode, i.e. just press Power + Esc + Refresh.
         """
+        self.blocking_sync()
         psc = self.servo.get_power_state_controller()
         psc.power_off()
         psc.power_on(psc.REC_ON)
@@ -966,7 +967,7 @@
         if (not self.faft_config.chrome_ec and
             not self.faft_config.broken_rec_mode):
             self.servo.disable_recovery_mode()
-        self.reboot_cold_trigger()
+        self.sync_and_cold_reboot()
         self.wait_for_client_offline()
         self.wait_fw_screen_and_switch_keyboard_dev_mode(dev=False)
 
@@ -1071,6 +1072,11 @@
         self.faft_client.system.run_shell_command('sync')
         self.faft_client.system.run_shell_command('sync')
 
+        # sync only sends SYNCHRONIZE_CACHE but doesn't
+        # check the status. hdparm sends TUR to check if
+        # a device is ready for transfer operation.
+        root_dev = self.faft_client.system.get_root_dev()
+        self.faft_client.system.run_shell_command('hdparm -f %s' % root_dev)
 
     ################################################
     # Reboot APIs