blob: 78d3391426e1c41e9c05c4968d0e1ac55cbb8294 [file] [log] [blame]
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -07001# The offsets of the partitions that change when Hoth is enabled
2# From the device tree, in kB
Michael Shen75e1bca2021-10-19 17:35:57 +08003# Nuvoton NPCM7XX family
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -07004FLASH_IMAGE_DESC_OFFSET:npcm7xx:hoth = "${@960 if FLASH_SIZE == '65536' else 7232}"
5FLASH_HOTH_UPDATE_OFFSET:npcm7xx:hoth = "${@1024 if FLASH_SIZE == '65536' else 31744}"
6FLASH_HOTH_MAILBOX_OFFSET:npcm7xx:hoth = "${@65472 if FLASH_SIZE == '65536' else 7168}"
Michael Shen75e1bca2021-10-19 17:35:57 +08007# Aspeed 26XX family
8FLASH_IMAGE_DESC_OFFSET:aspeed-g6:hoth = "${@960 if FLASH_SIZE == '65536' else 7232}"
9FLASH_HOTH_UPDATE_OFFSET:aspeed-g6:hoth = "${@1024 if FLASH_SIZE == '65536' else 31744}"
10FLASH_HOTH_MAILBOX_OFFSET:aspeed-g6:hoth = "${@65472 if FLASH_SIZE == '65536' else 7168}"
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -070011unset FLASH_UBOOT_ENV_OFFSET
12
13python do_generate_static:append() {
14 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
15 'image-hoth-update'),
16 int(d.getVar('FLASH_HOTH_UPDATE_OFFSET', True)),
17 int(d.getVar('FLASH_SIZE', True)))
18}
19do_generate_static[depends] += "virtual/hoth-firmware:do_deploy"
20
21python do_generate_layout () {
22 import time
23 import json
24
25 def convertPart(name, startKb, endKb, static=False, wp=False, persist=False):
26 regionTypes = []
27 extraAttrs = {}
28 if static:
29 regionTypes.append('STATIC')
30 if wp:
31 regionTypes.append('WRITE_PROTECTED')
32 if persist:
33 regionTypes.append('PERSISTENT')
34 if name == 'hoth_mailbox':
35 regionTypes.append('MAILBOX')
36 extraAttrs['mailbox_length'] = 1024
37
38 start = int(startKb) * 1024
39 end = int(endKb) * 1024
40
41 return {
42 'name': name,
43 'offset': start,
44 'length': end - start,
45 'region_type': regionTypes,
46 **extraAttrs,
47 }
48
49 # TODO: make this work for Aspeed too
50 region = [
51 convertPart(
52 'u_boot',
53 d.getVar('FLASH_UBOOT_OFFSET'),
54 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
55 static=True,
56 wp=True),
57 convertPart(
58 'image_descriptor',
59 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
60 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
61 static=True,
62 wp=True),
63 convertPart(
64 'hoth_update',
65 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
66 d.getVar('FLASH_KERNEL_OFFSET')),
67 convertPart(
68 'kernel',
69 d.getVar('FLASH_KERNEL_OFFSET'),
70 d.getVar('FLASH_ROFS_OFFSET'),
71 static=True,
72 wp=True),
73 convertPart(
74 'rofs',
75 d.getVar('FLASH_ROFS_OFFSET'),
76 d.getVar('FLASH_RWFS_OFFSET'),
77 static=True,
78 wp=True),
79 convertPart(
80 'rwfs',
81 d.getVar('FLASH_RWFS_OFFSET'),
82 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
83 persist=True),
84 convertPart(
85 'hoth_mailbox',
86 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
87 d.getVar('FLASH_SIZE')),
88 ] if d.getVar('FLASH_SIZE') == '65536' else [
89 convertPart(
90 'u_boot',
91 d.getVar('FLASH_UBOOT_OFFSET'),
92 d.getVar('FLASH_KERNEL_OFFSET'),
93 static=True,
94 wp=True),
95 convertPart(
96 'kernel',
97 d.getVar('FLASH_KERNEL_OFFSET'),
98 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
99 static=True,
100 wp=True),
101 convertPart(
102 'hoth_mailbox',
103 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
104 d.getVar('FLASH_IMAGE_DESC_OFFSET')),
105 convertPart(
106 'image_descriptor',
107 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
108 d.getVar('FLASH_ROFS_OFFSET'),
109 static=True,
110 wp=True),
111 convertPart(
112 'rofs',
113 d.getVar('FLASH_ROFS_OFFSET'),
114 d.getVar('FLASH_RWFS_OFFSET'),
115 static=True,
116 wp=True),
117 convertPart(
118 'rwfs',
119 d.getVar('FLASH_RWFS_OFFSET'),
120 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
121 persist=True),
122 convertPart(
123 'hoth_update',
124 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
125 d.getVar('FLASH_SIZE')),
126 ]
127
128 machine = d.getVar('MACHINE')
129 platform = d.getVar('PLATFORM')
130 name = '{} {} image'.format(machine, d.getVar('DISTRO'))
131 version = d.getVar('GBMC_VERSION').split('.')
132
133 if not platform:
134 raise NameError('PLATFORM not found, unable to generate layout, stopping build')
135
136 layout = {
137 'name': name,
138 'major': int(version[0]),
139 'minor': int(version[1]),
140 'point': int(version[2]),
141 'subpoint': int(version[3]),
142 'platform': platform,
143 'flash_capacity': int(d.getVar('FLASH_SIZE')) * 1024,
144 'build_timestamp': int(time.time()),
145 'region': region,
146 }
147
148 dir = d.getVar('DEPLOY_DIR_IMAGE')
149 os.makedirs(dir, exist_ok=True)
150 path = os.path.join(dir, 'cr51-image-layout.json')
151 with open(path, 'w') as f:
152 json.dump(layout, f, sort_keys=True, indent=4)
153}
154
155addtask generate_layout before do_image_complete