cros_bundle_firmware: Tidy up exynos USB download
Tighten up this code to reduce delays and release the power button on
servo as soon as possible.
BUG=chrome-os-partner:9633
TEST=manual:
Run 'cros_bundle_firmware -b daisy -w usb' 30 times and see that U-Boot
boots every time.
Change-Id: Ie58de9c011888c39c766d2cd8059ba41eb1c4387
Reviewed-on: https://gerrit.chromium.org/gerrit/23407
Commit-Ready: Simon Glass <sjg@chromium.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
diff --git a/host/lib/write_firmware.py b/host/lib/write_firmware.py
index ff1253d..d27a7e2 100644
--- a/host/lib/write_firmware.py
+++ b/host/lib/write_firmware.py
@@ -300,7 +300,8 @@
True if the device was found, False if we timed out.
"""
self._out.Progress('Waiting for board to appear on USB bus')
- for tries in range(timeout * 2):
+ start_time = time.time()
+ while time.time() - start_time < timeout:
try:
args = ['-d', '%04x:%04x' % (vendor_id, product_id)]
self._tools.Run('lsusb', args, sudo=True)
@@ -310,8 +311,6 @@
except CmdError as err:
pass
- time.sleep(.5)
-
return False
def _ExtractPayloadParts(self, payload):
@@ -383,7 +382,6 @@
# BUG=chromium-os:28229
args = ['cold_reset:on', 'sleep:.2', 'cold_reset:off'] + args
self._tools.Run('dut-control', args)
- time.sleep(2)
self._out.Progress('Uploading image')
download_list = [
@@ -393,23 +391,30 @@
['bl2', 0x02023400, bl2],
['u-boot', 0x43e00000, image]
]
- first = True
try:
- for item in download_list:
+ for upto in range(len(download_list)):
+ item = download_list[upto]
if not self._WaitForUSBDevice('exynos', vendor_id, product_id, 4):
- if first:
+ if upto == 0:
raise CmdError('Could not find Exynos board on USB port')
raise CmdError("Stage '%s' did not complete" % item[0])
- args = ['-a', '%#x' % item[1], '-f', item[2]]
- first = False
self._out.Notice(item[2])
self._out.Progress("Uploading stage '%s'" % item[0])
- # TODO(sjg): Remove this delay, once the need for it is understood.
- time.sleep(1)
+ if upto == 0:
+ # The IROM needs roughly 200ms here to be ready for USB download
+ time.sleep(.5)
+
+ if upto == 1:
+ # Once SPL starts up we can release the power buttom
+ args = ['fw_up:off', 'pwr_button:release']
+ self._tools.Run('dut-control', args)
+
+ args = ['-a', '%#x' % item[1], '-f', item[2]]
self._tools.Run('smdk-usbdl', args, sudo=True)
finally:
+ # Make sure that the power button is released, whatever happens
args = ['fw_up:off', 'pwr_button:release']
self._tools.Run('dut-control', args)