Add servo_serial property in servo module.

Also propagate servo serial number to flashrom programmer.

BUG=none
TEST=manually tested on my DUT

Change-Id: I1106221913ffd7adeb8d1f4118699ecc18bcf4ef
Reviewed-on: https://chromium-review.googlesource.com/196419
Reviewed-by: Vic Yang <victoryang@chromium.org>
Commit-Queue: Ricky Liang <jcliang@chromium.org>
Tested-by: Ricky Liang <jcliang@chromium.org>
diff --git a/server/cros/servo/firmware_programmer.py b/server/cros/servo/firmware_programmer.py
index 682f071..314e115 100644
--- a/server/cros/servo/firmware_programmer.py
+++ b/server/cros/servo/firmware_programmer.py
@@ -103,11 +103,14 @@
         try:
             vpd_sections = [('RW_VPD', self._rw_vpd), ('RO_VPD', self._ro_vpd)]
             gbb_section = [('GBB', self._gbb)]
+            ft2232_programmer = 'ft2232_spi:type=servo-v2'
+            if self._servo.servo_serial:
+                ft2232_programmer += ',serial=%s' % self._servo.servo_serial
 
             # Save needed sections from current firmware
             for section in vpd_sections + gbb_section:
                 self._servo.system(' '.join([
-                    'flashrom', '-V', '-p', 'ft2232_spi:type=servo-v2',
+                    'flashrom', '-V', '-p', ft2232_programmer,
                     '-r', self._fw_main, '-i', '%s:%s' % section]))
 
             # Pack the saved VPD into new firmware
@@ -134,7 +137,7 @@
 
             # Flash the new firmware
             self._servo.system(' '.join([
-                'flashrom', '-V', '-p', 'ft2232_spi:type=servo-v2',
+                'flashrom', '-V', '-p', ft2232_programmer,
                 '-w', self._fw_main]))
         finally:
             self._restore_servo_state()