Browse Source

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 <andyross@google.com>
pull/85755/head
Andy Ross 5 months ago committed by Benjamin Cabé
parent
commit
0f4eeb6380
  1. 8
      soc/mediatek/mt8xxx/mtk_adsp_load.py

8
soc/mediatek/mt8xxx/mtk_adsp_load.py

@ -277,7 +277,13 @@ def find_winstream(maps):
magic = b'\x74\x5f\x6a\xd0\x79\xe2\x4f\x00\xcd\xb8\xbd\xf9' magic = b'\x74\x5f\x6a\xd0\x79\xe2\x4f\x00\xcd\xb8\xbd\xf9'
for m in maps: for m in maps:
if "dram" in m: if "dram" in m:
magoff = maps[m].find(magic) # Some python versions produce bus errors (!) on the
# hardware when finding a 12 byte substring (maybe a SIMD
# load that the hardware doesn't like?). Do it in two
# chunks.
magoff = maps[m].find(magic[0:8])
if magoff >= 0:
magoff = maps[m].find(magic[8:], magoff) - 8
if magoff >= 0: if magoff >= 0:
addr = le4(maps[m][magoff + 12 : magoff + 16]) addr = le4(maps[m][magoff + 12 : magoff + 16])
return addr return addr

Loading…
Cancel
Save