blob: f01ed90ddc80bec89b1563c87c8d60c28b20cd1d [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}"
Claire Liao5d48ea22023-04-11 21:14:28 +00006FLASH_HOTH_SECONDARY_OFFSET:hoth = "${@61376 if FLASH_SIZE == '65536' else 7296}"
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -07007
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
Tom Tung94de8dc2023-04-06 22:05:14 +080012# Leave a zero-size u-boot env partition.
Tom Tung4b495802023-04-11 15:29:32 +080013FLASH_UBOOT_ENV_OFFSET = "${FLASH_KERNEL_OFFSET}"
Anthonyde6dbde2023-05-02 11:08:46 +080014FLASH_UBOOT_ENV_OFFSET:flash-65536 = "${FLASH_KERNEL_OFFSET:flash-65536}"
Tom Tung94de8dc2023-04-06 22:05:14 +080015
Claire Liao294ec5d2023-05-02 04:07:36 +000016# Support BMC image to have secondary hoth firmware
17ENABLE_HOTH_SECONDARY ?= "no"
18
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -070019python do_generate_static:append() {
20 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
21 'image-hoth-update'),
22 int(d.getVar('FLASH_HOTH_UPDATE_OFFSET', True)),
23 int(d.getVar('FLASH_SIZE', True)))
Claire Liao294ec5d2023-05-02 04:07:36 +000024 if d.getVar('ENABLE_HOTH_SECONDARY',True) == 'yes':
25 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
26 'image-hoth-update-2nd'),
27 int(d.getVar('FLASH_HOTH_SECONDARY_OFFSET', True)),
Claire Liao1def6a12023-05-04 03:06:38 +000028 int(d.getVar('FLASH_RWFS_OFFSET', True)))
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -070029}
30do_generate_static[depends] += "virtual/hoth-firmware:do_deploy"
Claire Liao294ec5d2023-05-02 04:07:36 +000031do_generate_static[depends] += "${@'virtual/hoth-firmware-2nd:do_deploy' if ENABLE_HOTH_SECONDARY == 'yes' else ''}"
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -070032
33python do_generate_layout () {
34 import time
35 import json
36
37 def convertPart(name, startKb, endKb, static=False, wp=False, persist=False):
38 regionTypes = []
39 extraAttrs = {}
40 if static:
41 regionTypes.append('STATIC')
42 if wp:
43 regionTypes.append('WRITE_PROTECTED')
44 if persist:
45 regionTypes.append('PERSISTENT')
46 if name == 'hoth_mailbox':
47 regionTypes.append('MAILBOX')
48 extraAttrs['mailbox_length'] = 1024
49
50 start = int(startKb) * 1024
51 end = int(endKb) * 1024
52
53 return {
54 'name': name,
55 'offset': start,
56 'length': end - start,
57 'region_type': regionTypes,
58 **extraAttrs,
59 }
60
61 # TODO: make this work for Aspeed too
62 region = [
63 convertPart(
64 'u_boot',
65 d.getVar('FLASH_UBOOT_OFFSET'),
Benjamin Fair3aad98e2022-08-26 22:47:22 +000066 d.getVar('FLASH_KERNEL_OFFSET'),
67 static=True,
68 wp=True),
69 convertPart(
70 'kernel',
71 d.getVar('FLASH_KERNEL_OFFSET'),
72 d.getVar('FLASH_ROFS_OFFSET'),
73 static=True,
74 wp=True),
75 convertPart(
76 'rofs',
77 d.getVar('FLASH_ROFS_OFFSET'),
78 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
79 static=True,
80 wp=True),
81 convertPart(
82 'image_descriptor',
83 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
84 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
85 static=True,
86 wp=True),
87 convertPart(
88 'hoth_update',
89 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
90 d.getVar('FLASH_RWFS_OFFSET')),
91 convertPart(
92 'rwfs',
93 d.getVar('FLASH_RWFS_OFFSET'),
94 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
95 persist=True),
96 convertPart(
97 'hoth_mailbox',
98 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
99 d.getVar('FLASH_SIZE')),
Benjamin Fairc1b7e802022-10-03 23:29:07 +0000100 ] if d.getVar('TARGET_ARCH') == "aarch64" else [
Benjamin Fair3aad98e2022-08-26 22:47:22 +0000101 convertPart(
102 'u_boot',
103 d.getVar('FLASH_UBOOT_OFFSET'),
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -0700104 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
105 static=True,
106 wp=True),
107 convertPart(
108 'image_descriptor',
109 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
110 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
111 static=True,
112 wp=True),
113 convertPart(
114 'hoth_update',
115 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
116 d.getVar('FLASH_KERNEL_OFFSET')),
117 convertPart(
118 'kernel',
119 d.getVar('FLASH_KERNEL_OFFSET'),
120 d.getVar('FLASH_ROFS_OFFSET'),
121 static=True,
122 wp=True),
123 convertPart(
124 'rofs',
125 d.getVar('FLASH_ROFS_OFFSET'),
Claire Liao5d48ea22023-04-11 21:14:28 +0000126 d.getVar('FLASH_HOTH_SECONDARY_OFFSET'),
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -0700127 static=True,
128 wp=True),
129 convertPart(
Claire Liao5d48ea22023-04-11 21:14:28 +0000130 'hoth_secondary',
131 d.getVar('FLASH_HOTH_SECONDARY_OFFSET'),
132 d.getVar('FLASH_RWFS_OFFSET')),
133 convertPart(
John Edward Broadbentaa7e21d2021-09-02 17:31:45 -0700134 'rwfs',
135 d.getVar('FLASH_RWFS_OFFSET'),
136 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
137 persist=True),
138 convertPart(
139 'hoth_mailbox',
140 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
141 d.getVar('FLASH_SIZE')),
142 ] if d.getVar('FLASH_SIZE') == '65536' else [
143 convertPart(
144 'u_boot',
145 d.getVar('FLASH_UBOOT_OFFSET'),
146 d.getVar('FLASH_KERNEL_OFFSET'),
147 static=True,
148 wp=True),
149 convertPart(
150 'kernel',
151 d.getVar('FLASH_KERNEL_OFFSET'),
152 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
153 static=True,
154 wp=True),
155 convertPart(
156 'hoth_mailbox',
157 d.getVar('FLASH_HOTH_MAILBOX_OFFSET'),
158 d.getVar('FLASH_IMAGE_DESC_OFFSET')),
159 convertPart(
160 'image_descriptor',
161 d.getVar('FLASH_IMAGE_DESC_OFFSET'),
162 d.getVar('FLASH_ROFS_OFFSET'),
163 static=True,
164 wp=True),
165 convertPart(
166 'rofs',
167 d.getVar('FLASH_ROFS_OFFSET'),
168 d.getVar('FLASH_RWFS_OFFSET'),
169 static=True,
170 wp=True),
171 convertPart(
172 'rwfs',
173 d.getVar('FLASH_RWFS_OFFSET'),
174 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
175 persist=True),
176 convertPart(
177 'hoth_update',
178 d.getVar('FLASH_HOTH_UPDATE_OFFSET'),
179 d.getVar('FLASH_SIZE')),
180 ]
181
182 machine = d.getVar('MACHINE')
183 platform = d.getVar('PLATFORM')
184 name = '{} {} image'.format(machine, d.getVar('DISTRO'))
185 version = d.getVar('GBMC_VERSION').split('.')
186
187 if not platform:
188 raise NameError('PLATFORM not found, unable to generate layout, stopping build')
189
190 layout = {
191 'name': name,
192 'major': int(version[0]),
193 'minor': int(version[1]),
194 'point': int(version[2]),
195 'subpoint': int(version[3]),
196 'platform': platform,
197 'flash_capacity': int(d.getVar('FLASH_SIZE')) * 1024,
198 'build_timestamp': int(time.time()),
199 'region': region,
200 }
201
202 dir = d.getVar('DEPLOY_DIR_IMAGE')
203 os.makedirs(dir, exist_ok=True)
204 path = os.path.join(dir, 'cr51-image-layout.json')
205 with open(path, 'w') as f:
206 json.dump(layout, f, sort_keys=True, indent=4)
207}
208
209addtask generate_layout before do_image_complete