Skip to content

Commit 013d92d

Browse files
committed
RKUSBMaskromDriver: add support for using vendor idblock v1 images
Add support for using vendor idblock v1 image files, typically created using the U-Boot mkimage tool. Signed-off-by: Jonas Karlman <[email protected]>
1 parent f0ed76b commit 013d92d

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

labgrid/util/agents/rkusbmaskrom.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,16 @@ def get_newidblock_entries(data, header, delay):
161161
offset += size
162162

163163

164+
def get_idblock_entries(data, header, delay):
165+
offset, size = header.init_offset * 512, header.init_size * 512
166+
yield 0x471, data[offset:offset + size], delay
167+
if header.init_boot_size > header.init_size:
168+
offset = (header.init_offset + header.init_size) * 512
169+
size = (header.init_boot_size - header.init_size) * 512
170+
if size != 524288:
171+
yield 0x472, data[offset:offset + size], 0
172+
173+
164174
def parse_image_header(data):
165175
tag = int.from_bytes(data[:4], 'little')
166176
RKBootHeader = namedtuple('RKBootHeader', [
@@ -189,6 +199,15 @@ def parse_image_header(data):
189199
digest != data[1536:1536 + len(digest)]:
190200
raise ValueError(f"Digest mismatch for header")
191201
return header, get_newidblock_entries
202+
RKIDBlockHeader0 = namedtuple('RKIDBlockHeader0', [
203+
'tag', 'disable_rc4', 'init_offset', 'init_size', 'init_boot_size',
204+
])
205+
if tag == 0xfcdc8c3b:
206+
keystream = rc4_prga(rc4_ksa(RK_RC4_KEY))
207+
data = bytes(byte ^ next(keystream) for byte in data[:512])
208+
header = RKIDBlockHeader0._make(unpack('<L4xLH492xHH2x', data[:512]))
209+
if header.tag == 0x0ff0aa55 and header.init_size > 0:
210+
return header, get_idblock_entries
192211
return None, None
193212

194213

0 commit comments

Comments
 (0)