Skip to content

Commit 12ba00d

Browse files
hoshinolinamarcan
authored andcommitted
m1n1.trace.dart: Add basic IOVA tracer
In the spirit of what we have for AGX, but simpler. Signed-off-by: Asahi Lina <[email protected]>
1 parent 23d4f99 commit 12ba00d

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

proxyclient/m1n1/trace/dart.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def __init__(self, hv, devpath, **kwargs):
3232
elif compat in ["dart,t8110"]:
3333
self.REGMAPS = [DART8110Regs]
3434

35+
self.page_map = ScalarRangeMap()
3536
return super().__init__(hv, devpath, **kwargs)
3637

3738
def start(self):
@@ -67,3 +68,30 @@ def w_TLB_OP(self, tlb_op):
6768
self.dart.invalidate_cache()
6869
else:
6970
self.log(f"Unknown TLB op {tlb_op}")
71+
72+
self.page_map = ScalarRangeMap()
73+
74+
def trace_range(self, stream, zone, read=True, write=True, mode=TraceMode.ASYNC):
75+
ranges = self.dart.iotranslate(stream, zone.start, zone.stop - zone.start)
76+
va = zone.start
77+
for pa, size in ranges:
78+
if pa is not None:
79+
pzone = irange(pa, size)
80+
self.page_map[pzone] = (pa, va)
81+
self.hv.add_tracer(pzone, "DARTVATracer", mode,
82+
self.event_va if read else None,
83+
self.event_va if write else None,
84+
stream = stream)
85+
va += size
86+
87+
def event_va(self, evt, stream=None):
88+
pabase, vabase = self.page_map.get(evt.addr, (None, None))
89+
if pabase is None:
90+
addr = "UNKNOWN"
91+
else:
92+
addr = f"{evt.addr - pabase + vabase:#x}"
93+
t = "W" if evt.flags.WRITE else "R"
94+
m = "+" if evt.flags.MULTI else " "
95+
logline = (f"[cpu{evt.flags.CPU}] [0x{evt.pc:016x}] IOVA/{stream}: {t}.{1<<evt.flags.WIDTH:<2}{m} " +
96+
f"{addr} (0x{evt.addr:x}) = 0x{evt.data:x}")
97+
self.hv.log(logline, show_cpu=False)

0 commit comments

Comments
 (0)