pushimage: add support for signing accessories images
'accessory_usbpd' and 'accessory_rwsig' are used to sign standalone
accesory MCU firmwares (right now, the former are all the USB type-C
accessories: e.g. Zinger power supply, DingDong and HoHo display
dongles, the latter is the Smaug wireless keyboard).
Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
BUG=chrome-os-partner:46635
TEST=bin/pushimage --debug --test-sign premp --sign-types accessory_rwsig --board smaug gs://chromeos-image-archive/smaug-firmware/R45-7132.239.0
TEST=./scripts/pushimage_unittest
Change-Id: I6481c68061f50b9acc3656a1167d64ced79ec011
Reviewed-on: https://chromium-review.googlesource.com/308725
Commit-Ready: Vincent Palatin <vpalatin@chromium.org>
Tested-by: Vincent Palatin <vpalatin@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
diff --git a/cbuildbot/constants.py b/cbuildbot/constants.py
index 13b5e5d..0a64af3 100644
--- a/cbuildbot/constants.py
+++ b/cbuildbot/constants.py
@@ -760,7 +760,12 @@
IMAGE_TYPE_RECOVERY = 'recovery'
IMAGE_TYPE_FACTORY = 'factory'
IMAGE_TYPE_FIRMWARE = 'firmware'
+# NVidia Tegra SoC resume firmware blob.
IMAGE_TYPE_NV_LP0_FIRMWARE = 'nv_lp0_firmware'
+# USB PD accessory microcontroller firmware (e.g. power brick, display dongle).
+IMAGE_TYPE_ACCESSORY_USBPD = 'accessory_usbpd'
+# Standalone accessory microcontroller firmware (e.g. wireless keyboard).
+IMAGE_TYPE_ACCESSORY_RWSIG = 'accessory_rwsig'
IMAGE_TYPE_TO_NAME = {
IMAGE_TYPE_BASE: BASE_IMAGE_BIN,
diff --git a/scripts/pushimage.py b/scripts/pushimage.py
index 58c0ca2..7c56e34 100644
--- a/scripts/pushimage.py
+++ b/scripts/pushimage.py
@@ -49,6 +49,8 @@
constants.IMAGE_TYPE_FACTORY,
constants.IMAGE_TYPE_FIRMWARE,
constants.IMAGE_TYPE_NV_LP0_FIRMWARE,
+ constants.IMAGE_TYPE_ACCESSORY_USBPD,
+ constants.IMAGE_TYPE_ACCESSORY_RWSIG,
constants.IMAGE_TYPE_BASE,
)
@@ -303,6 +305,8 @@
firmware_basename = _ImageNameBase(constants.IMAGE_TYPE_FIRMWARE)
nv_lp0_firmware_basename = _ImageNameBase(
constants.IMAGE_TYPE_NV_LP0_FIRMWARE)
+ acc_usbpd_basename = _ImageNameBase(constants.IMAGE_TYPE_ACCESSORY_USBPD)
+ acc_rwsig_basename = _ImageNameBase(constants.IMAGE_TYPE_ACCESSORY_RWSIG)
test_basename = _ImageNameBase(constants.IMAGE_TYPE_TEST)
base_basename = _ImageNameBase(constants.IMAGE_TYPE_BASE)
hwqual_tarball = 'chromeos-hwqual-%s-%s.tar.bz2' % (board, versionrev)
@@ -335,6 +339,12 @@
('firmware_from_source.tar.bz2', nv_lp0_firmware_basename, 'tar.bz2',
constants.IMAGE_TYPE_NV_LP0_FIRMWARE),
+
+ ('firmware_from_source.tar.bz2', acc_usbpd_basename, 'tar.bz2',
+ constants.IMAGE_TYPE_ACCESSORY_USBPD),
+
+ ('firmware_from_source.tar.bz2', acc_rwsig_basename, 'tar.bz2',
+ constants.IMAGE_TYPE_ACCESSORY_RWSIG),
)
# The following build artifacts are copied and marked for signing, if
diff --git a/scripts/pushimage_unittest.py b/scripts/pushimage_unittest.py
index ae6f6c8..9f5dcf1 100644
--- a/scripts/pushimage_unittest.py
+++ b/scripts/pushimage_unittest.py
@@ -233,7 +233,7 @@
with mock.patch.object(gs.GSContext, 'Exists', return_value=True):
urls = pushimage.PushImage('/src', 'test.board', 'R34-5126.0.0',
sign_types=['recovery'])
- self.assertEqual(self.gs_mock.call_count, 22)
+ self.assertEqual(self.gs_mock.call_count, 26)
self.assertTrue(self.mark_mock.called)
self.assertEqual(urls, EXPECTED)
@@ -251,7 +251,7 @@
with mock.patch.object(gs.GSContext, 'Exists', return_value=True):
urls = pushimage.PushImage('/src', 'test.board', 'R34-5126.0.0',
sign_types=['base'])
- self.assertEqual(self.gs_mock.call_count, 24)
+ self.assertEqual(self.gs_mock.call_count, 28)
self.assertTrue(self.mark_mock.called)
self.assertEqual(urls, EXPECTED)
@@ -259,7 +259,7 @@
"""Verify nothing is signed when we request an unavailable type"""
urls = pushimage.PushImage('/src', 'test.board', 'R34-5126.0.0',
sign_types=['nononononono'])
- self.assertEqual(self.gs_mock.call_count, 20)
+ self.assertEqual(self.gs_mock.call_count, 24)
self.assertFalse(self.mark_mock.called)
self.assertEqual(urls, {})