| # 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 |