# The offsets of the partitions that change when Hoth is enabled # From the device tree, in kB # Nuvoton NPCM7XX family 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}" # Aspeed 26XX family FLASH_IMAGE_DESC_OFFSET:aspeed-g6:hoth = "${@960 if FLASH_SIZE == '65536' else 7232}" FLASH_HOTH_UPDATE_OFFSET:aspeed-g6:hoth = "${@1024 if FLASH_SIZE == '65536' else 31744}" FLASH_HOTH_MAILBOX_OFFSET:aspeed-g6: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