diff options
Diffstat (limited to 'meta-google/classes/image_types_hoth.bbclass')
-rw-r--r-- | meta-google/classes/image_types_hoth.bbclass | 150 |
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 |