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