summaryrefslogtreecommitdiff
path: root/meta-google/classes/image_types_hoth.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta-google/classes/image_types_hoth.bbclass')
-rw-r--r--meta-google/classes/image_types_hoth.bbclass150
1 files changed, 150 insertions, 0 deletions
diff --git a/meta-google/classes/image_types_hoth.bbclass b/meta-google/classes/image_types_hoth.bbclass
new file mode 100644
index 000000000..0db4183a1
--- /dev/null
+++ b/meta-google/classes/image_types_hoth.bbclass
@@ -0,0 +1,150 @@
+# The offsets of the partitions that change when Hoth is enabled
+# From the device tree, in kB
+FLASH_IMAGE_DESC_OFFSET:npcm7xx:hoth = "${@960 if FLASH_SIZE == '65536' else 7232}"
+FLASH_HOTH_UPDATE_OFFSET:npcm7xx:hoth = "${@1024 if FLASH_SIZE == '65536' else 31744}"
+FLASH_HOTH_MAILBOX_OFFSET:npcm7xx:hoth = "${@65472 if FLASH_SIZE == '65536' else 7168}"
+unset FLASH_UBOOT_ENV_OFFSET
+
+python do_generate_static:append() {
+ _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
+ 'image-hoth-update'),
+ int(d.getVar('FLASH_HOTH_UPDATE_OFFSET', True)),
+ int(d.getVar('FLASH_SIZE', True)))
+}
+do_generate_static[depends] += "virtual/hoth-firmware:do_deploy"
+
+python do_generate_layout () {
+ import time
+ import json
+
+ def convertPart(name, startKb, endKb, static=False, wp=False, persist=False):
+ regionTypes = []
+ extraAttrs = {}
+ if static:
+ regionTypes.append('STATIC')
+ if wp:
+ regionTypes.append('WRITE_PROTECTED')
+ if persist:
+ regionTypes.append('PERSISTENT')
+ if name == 'hoth_mailbox':
+ regionTypes.append('MAILBOX')
+ extraAttrs['mailbox_length'] = 1024
+
+ start = int(startKb) * 1024
+ end = int(endKb) * 1024
+
+ return {
+ 'name': name,
+ 'offset': start,
+ 'length': end - start,
+ 'region_type': regionTypes,
+ **extraAttrs,
+ }
+
+ # TODO: make this work for Aspeed too
+ region = [
+ convertPart(
+ 'u_boot',
+ d.getVar('FLASH_UBOOT_OFFSET'),
+ d.getVar('FLASH_IMAGE_DESC_OFFSET'),
+ static=True,
+ wp=True),
+ convertPart(
+ 'image_descriptor',
+ d.getVar('FLASH_IMAGE_DESC_OFFSET'),
+ d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
+ static=True,
+ wp=True),
+ convertPart(
+ 'hoth_update',
+ d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
+ d.getVar('FLASH_KERNEL_OFFSET')),
+ convertPart(
+ 'kernel',
+ d.getVar('FLASH_KERNEL_OFFSET'),
+ d.getVar('FLASH_ROFS_OFFSET'),
+ static=True,
+ wp=True),
+ convertPart(
+ 'rofs',
+ d.getVar('FLASH_ROFS_OFFSET'),
+ d.getVar('FLASH_RWFS_OFFSET'),
+ static=True,
+ wp=True),
+ convertPart(
+ 'rwfs',
+ d.getVar('FLASH_RWFS_OFFSET'),
+ d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
+ persist=True),
+ convertPart(
+ 'hoth_mailbox',
+ d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
+ d.getVar('FLASH_SIZE')),
+ ] if d.getVar('FLASH_SIZE') == '65536' else [
+ convertPart(
+ 'u_boot',
+ d.getVar('FLASH_UBOOT_OFFSET'),
+ d.getVar('FLASH_KERNEL_OFFSET'),
+ static=True,
+ wp=True),
+ convertPart(
+ 'kernel',
+ d.getVar('FLASH_KERNEL_OFFSET'),
+ d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
+ static=True,
+ wp=True),
+ convertPart(
+ 'hoth_mailbox',
+ d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
+ d.getVar('FLASH_IMAGE_DESC_OFFSET')),
+ convertPart(
+ 'image_descriptor',
+ d.getVar('FLASH_IMAGE_DESC_OFFSET'),
+ d.getVar('FLASH_ROFS_OFFSET'),
+ static=True,
+ wp=True),
+ convertPart(
+ 'rofs',
+ d.getVar('FLASH_ROFS_OFFSET'),
+ d.getVar('FLASH_RWFS_OFFSET'),
+ static=True,
+ wp=True),
+ convertPart(
+ 'rwfs',
+ d.getVar('FLASH_RWFS_OFFSET'),
+ d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
+ persist=True),
+ convertPart(
+ 'hoth_update',
+ d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
+ d.getVar('FLASH_SIZE')),
+ ]
+
+ machine = d.getVar('MACHINE')
+ platform = d.getVar('PLATFORM')
+ name = '{} {} image'.format(machine, d.getVar('DISTRO'))
+ version = d.getVar('GBMC_VERSION').split('.')
+
+ if not platform:
+ raise NameError('PLATFORM not found, unable to generate layout, stopping build')
+
+ layout = {
+ 'name': name,
+ 'major': int(version[0]),
+ 'minor': int(version[1]),
+ 'point': int(version[2]),
+ 'subpoint': int(version[3]),
+ 'platform': platform,
+ 'flash_capacity': int(d.getVar('FLASH_SIZE')) * 1024,
+ 'build_timestamp': int(time.time()),
+ 'region': region,
+ }
+
+ dir = d.getVar('DEPLOY_DIR_IMAGE')
+ os.makedirs(dir, exist_ok=True)
+ path = os.path.join(dir, 'cr51-image-layout.json')
+ with open(path, 'w') as f:
+ json.dump(layout, f, sort_keys=True, indent=4)
+}
+
+addtask generate_layout before do_image_complete