88import struct
99from pathlib import Path
1010from mldebug .utils import print_tile_grid
11- from mldebug .arch import AIE_DEV_PHX , AIE_DEV_STX , AIE_DEV_TEL , AIE_DEV_NPU3
11+ from mldebug .arch import AIE_DEV_PHX , AIE_DEV_STX , AIE_DEV_TEL , AIE_DEV_NPU3 , load_aie_arch
1212from .backend_interface import BackendInterface
1313
1414try :
@@ -62,17 +62,19 @@ class CoreDumpFallbackReader:
6262 Pure Python fallback implementation for reading core dump files.
6363 Replicates the C++ CoreDumpDataAccessBackend logic.
6464 """
65- def __init__ (self , core_dump_file , dev_name , no_header = False ):
65+ def __init__ (self , core_dump_file , dev_name , no_header = False , args = None ):
6666 """
6767 Initialize the fallback reader
6868
6969 Args:
7070 core_dump_file (str): Path to the binary core dump file
7171 dev_name (str): Device name (phx, stx, telluride, npu3)
7272 no_header (bool): If True, skip header parsing and treat data as starting at offset 0
73+ args: Used to update device and aie_iface.
7374 """
7475 self .filename = core_dump_file
7576 self .dev_name = dev_name .lower ()
77+ self .args = args
7678 self .file_handle = None
7779
7880 # Without a header to parse, we have no way to recover from an unknown device name.
@@ -165,7 +167,8 @@ def _parse_header(self):
165167 if len (metadata_data ) != 6 :
166168 raise RuntimeError ("Core dump file is corrupted: cannot read device metadata" )
167169
168- hw_gen , core_row_start , mem_row_start , mem_tile_rows , total_rows , total_cols = struct .unpack ("<BBBBBB" , metadata_data )
170+ hw_gen , core_row_start , mem_row_start , mem_tile_rows , total_rows , total_cols = (
171+ struct .unpack ("<BBBBBB" , metadata_data ))
169172
170173 # Detect device from header hwGen and override dev_name/metadata
171174 detected_dev = None
@@ -186,6 +189,13 @@ def _parse_header(self):
186189 self .dev_name = detected_dev
187190 self .metadata = DEVICE_CONFIGS [detected_dev ]
188191
192+ # Refresh args.aie_iface so the rest of the tool uses the architecture
193+ # that matches the device baked into the core dump.
194+ if self .args :
195+ self .args .device = detected_dev
196+ self .args .aie_iface = load_aie_arch (detected_dev )
197+ self .args .aie_iface .init (detected_dev == AIE_DEV_PHX )
198+
189199 expected_core_row_start = self .metadata ["core_row_start" ]
190200 expected_mem_row_start = self .metadata ["mem_row_start" ]
191201 expected_mem_tile_rows = self .metadata ["memtile_rows" ]
@@ -336,7 +346,7 @@ class CoreDumpImpl(BackendInterface):
336346 """
337347
338348 is_offline = True
339- def __init__ (self , aie_overlay_tiles , ctx_id , pid , dev_name , core_dump_file = None , no_header = False ) -> None :
349+ def __init__ (self , aie_overlay_tiles , ctx_id , pid , dev_name , core_dump_file = None , no_header = False , args = None ) -> None :
340350 """
341351 Initialize the Core Dump backend
342352
@@ -348,6 +358,7 @@ def __init__(self, aie_overlay_tiles, ctx_id, pid, dev_name, core_dump_file=None
348358 core_dump_file: Path to core dump file (required)
349359 no_header: If True, parse core dump assuming no header (data starts at offset 0).
350360 Forces use of the Python fallback reader.
361+ args: Used for device management
351362 """
352363 self .overlay_aie_core_tiles = aie_overlay_tiles
353364 self .pc_brkpts = [0 , 0 ]
@@ -360,7 +371,8 @@ def __init__(self, aie_overlay_tiles, ctx_id, pid, dev_name, core_dump_file=None
360371
361372 if no_header or not HAS_XRT_BACKEND :
362373 # Python fallback reader is required to support headerless parsing
363- #print("[INFO] --no_header specified: using Python fallback reader (C++ binding does not support headerless mode)")
374+ #print("[INFO] --no_header specified: using Python fallback reader "
375+ # "(C++ binding does not support headerless mode)")
364376 self .use_fallback = True
365377 else :
366378 # Try to initialize the C++ binding first
@@ -371,7 +383,7 @@ def __init__(self, aie_overlay_tiles, ctx_id, pid, dev_name, core_dump_file=None
371383 self .use_fallback = True
372384
373385 if self .use_fallback :
374- self .fallback_reader = CoreDumpFallbackReader (core_dump_file , dev_name , no_header = no_header )
386+ self .fallback_reader = CoreDumpFallbackReader (core_dump_file , dev_name , no_header = no_header , args = args )
375387
376388 print ("[INFO] Core Dump backend is read-only. Write/control operations will be ignored." )
377389
0 commit comments