Skip to content

Commit 0f4eeb6

Browse files
andyrosskartben
authored andcommitted
soc/mediatek/mtk_adsp: Use smaller accesses when find()ing in device memory
Recent Python interpreters have started tossing bus errors from this 12-byte string search (the loader is looking for the winstream descriptor in the live firmware image). My guess is that there's a SIMD optimization that's been added that's trying to do e.g. a 16 byte load, and something in the fabric is kicking that out. Note that this is 100% a software change: the same hardware with one version of the host environment works, and an update breaks it. But really I have no idea what's happening here, the memory region in question is documented as system DRAM, the same bus regular process memory is on (it's just not kernel-utilized memory). All I know is that the bus error is introduced with a Python upgrade from 3.8.20 to 3.11.10. Regardless, it's no great hardship to do the search on 64 bit chunks. Signed-off-by: Andy Ross <[email protected]>
1 parent caafe23 commit 0f4eeb6

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

soc/mediatek/mt8xxx/mtk_adsp_load.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,13 @@ def find_winstream(maps):
277277
magic = b'\x74\x5f\x6a\xd0\x79\xe2\x4f\x00\xcd\xb8\xbd\xf9'
278278
for m in maps:
279279
if "dram" in m:
280-
magoff = maps[m].find(magic)
280+
# Some python versions produce bus errors (!) on the
281+
# hardware when finding a 12 byte substring (maybe a SIMD
282+
# load that the hardware doesn't like?). Do it in two
283+
# chunks.
284+
magoff = maps[m].find(magic[0:8])
285+
if magoff >= 0:
286+
magoff = maps[m].find(magic[8:], magoff) - 8
281287
if magoff >= 0:
282288
addr = le4(maps[m][magoff + 12 : magoff + 16])
283289
return addr

0 commit comments

Comments
 (0)