blob: 5ad64f932b14640ae6d398b2f11791af828e6b59 [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
Jason Lingf0bb5db2022-04-26 10:53:30 -07003FLASH_IMAGE_DESC_OFFSET:hoth = "${@960 if FLASH_SIZE == '65536' else 7232}"
4FLASH_HOTH_UPDATE_OFFSET:hoth = "${@1024 if FLASH_SIZE == '65536' else 31744}"
5FLASH_HOTH_MAILBOX_OFFSET:hoth = "${@65472 if FLASH_SIZE == '65536' else 7168}"
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -07006
Benjamin Fair3aad98e2022-08-26 22:47:22 +00007# 64 bit kernels are larger, so they require a different layout
8FLASH_IMAGE_DESC_OFFSET:hoth:aarch64 = "${@61312 if FLASH_SIZE == '65536' else 7232}"
9FLASH_HOTH_UPDATE_OFFSET:hoth:aarch64 = "${@61376 if FLASH_SIZE == '65536' else 31744}"
10
Tom Tung94de8dc2023-04-06 22:05:14 +080011# Leave a zero-size u-boot env partition.
Tom Tung4b495802023-04-11 15:29:32 +080012FLASH_UBOOT_ENV_OFFSET = "${FLASH_KERNEL_OFFSET}"
Tom Tung94de8dc2023-04-06 22:05:14 +080013
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -070014python do_generate_static:append() {
15 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
16 'image-hoth-update'),
17 int(d.getVar('FLASH_HOTH_UPDATE_OFFSET', True)),
18 int(d.getVar('FLASH_SIZE', True)))
19}
20do_generate_static[depends] += "virtual/hoth-firmware:do_deploy"
21
22python do_generate_layout () {
23 import time
24 import json
25
26 def convertPart(name, startKb, endKb, static=False, wp=False, persist=False):
27 regionTypes = []
28 extraAttrs = {}
29 if static:
30 regionTypes.append('STATIC')
31 if wp:
32 regionTypes.append('WRITE_PROTECTED')
33 if persist:
34 regionTypes.append('PERSISTENT')
35 if name == 'hoth_mailbox':
36 regionTypes.append('MAILBOX')
37 extraAttrs['mailbox_length'] = 1024
38
39 start = int(startKb) * 1024
40 end = int(endKb) * 1024
41
42 return {
43 'name': name,
44 'offset': start,
45 'length': end - start,
46 'region_type': regionTypes,
47 **extraAttrs,
48 }
49
50 # TODO: make this work for Aspeed too
51 region = [
52 convertPart(
53 'u_boot',
54 d.getVar('FLASH_UBOOT_OFFSET'),
Benjamin Fair3aad98e2022-08-26 22:47:22 +000055 d.getVar('FLASH_KERNEL_OFFSET'),
56 static=True,
57 wp=True),
58 convertPart(
59 'kernel',
60 d.getVar('FLASH_KERNEL_OFFSET'),
61 d.getVar('FLASH_ROFS_OFFSET'),
62 static=True,
63 wp=True),
64 convertPart(
65 'rofs',
66 d.getVar('FLASH_ROFS_OFFSET'),
67 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
68 static=True,
69 wp=True),
70 convertPart(
71 'image_descriptor',
72 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
73 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
74 static=True,
75 wp=True),
76 convertPart(
77 'hoth_update',
78 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
79 d.getVar('FLASH_RWFS_OFFSET')),
80 convertPart(
81 'rwfs',
82 d.getVar('FLASH_RWFS_OFFSET'),
83 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
84 persist=True),
85 convertPart(
86 'hoth_mailbox',
87 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
88 d.getVar('FLASH_SIZE')),
Benjamin Fairc1b7e802022-10-03 23:29:07 +000089 ] if d.getVar('TARGET_ARCH') == "aarch64" else [
Benjamin Fair3aad98e2022-08-26 22:47:22 +000090 convertPart(
91 'u_boot',
92 d.getVar('FLASH_UBOOT_OFFSET'),
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -070093 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
94 static=True,
95 wp=True),
96 convertPart(
97 'image_descriptor',
98 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
99 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
100 static=True,
101 wp=True),
102 convertPart(
103 'hoth_update',
104 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
105 d.getVar('FLASH_KERNEL_OFFSET')),
106 convertPart(
107 'kernel',
108 d.getVar('FLASH_KERNEL_OFFSET'),
109 d.getVar('FLASH_ROFS_OFFSET'),
110 static=True,
111 wp=True),
112 convertPart(
113 'rofs',
114 d.getVar('FLASH_ROFS_OFFSET'),
115 d.getVar('FLASH_RWFS_OFFSET'),
116 static=True,
117 wp=True),
118 convertPart(
119 'rwfs',
120 d.getVar('FLASH_RWFS_OFFSET'),
121 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
122 persist=True),
123 convertPart(
124 'hoth_mailbox',
125 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
126 d.getVar('FLASH_SIZE')),
127 ] if d.getVar('FLASH_SIZE') == '65536' else [
128 convertPart(
129 'u_boot',
130 d.getVar('FLASH_UBOOT_OFFSET'),
131 d.getVar('FLASH_KERNEL_OFFSET'),
132 static=True,
133 wp=True),
134 convertPart(
135 'kernel',
136 d.getVar('FLASH_KERNEL_OFFSET'),
137 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
138 static=True,
139 wp=True),
140 convertPart(
141 'hoth_mailbox',
142 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
143 d.getVar('FLASH_IMAGE_DESC_OFFSET')),
144 convertPart(
145 'image_descriptor',
146 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
147 d.getVar('FLASH_ROFS_OFFSET'),
148 static=True,
149 wp=True),
150 convertPart(
151 'rofs',
152 d.getVar('FLASH_ROFS_OFFSET'),
153 d.getVar('FLASH_RWFS_OFFSET'),
154 static=True,
155 wp=True),
156 convertPart(
157 'rwfs',
158 d.getVar('FLASH_RWFS_OFFSET'),
159 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
160 persist=True),
161 convertPart(
162 'hoth_update',
163 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
164 d.getVar('FLASH_SIZE')),
165 ]
166
167 machine = d.getVar('MACHINE')
168 platform = d.getVar('PLATFORM')
169 name = '{} {} image'.format(machine, d.getVar('DISTRO'))
170 version = d.getVar('GBMC_VERSION').split('.')
171
172 if not platform:
173 raise NameError('PLATFORM not found, unable to generate layout, stopping build')
174
175 layout = {
176 'name': name,
177 'major': int(version[0]),
178 'minor': int(version[1]),
179 'point': int(version[2]),
180 'subpoint': int(version[3]),
181 'platform': platform,
182 'flash_capacity': int(d.getVar('FLASH_SIZE')) * 1024,
183 'build_timestamp': int(time.time()),
184 'region': region,
185 }
186
187 dir = d.getVar('DEPLOY_DIR_IMAGE')
188 os.makedirs(dir, exist_ok=True)
189 path = os.path.join(dir, 'cr51-image-layout.json')
190 with open(path, 'w') as f:
191 json.dump(layout, f, sort_keys=True, indent=4)
192}
193
194addtask generate_layout before do_image_complete