diff options
Diffstat (limited to 'tools/proxyclient/hv/trace_prores.py')
| -rw-r--r-- | tools/proxyclient/hv/trace_prores.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/tools/proxyclient/hv/trace_prores.py b/tools/proxyclient/hv/trace_prores.py new file mode 100644 index 0000000..05acb4a --- /dev/null +++ b/tools/proxyclient/hv/trace_prores.py @@ -0,0 +1,88 @@ +from m1n1.trace import ADTDevTracer +from m1n1.trace.dart8110 import DART8110Tracer +from m1n1.hw.prores import * +from m1n1.utils import * +import struct + +p.pmgr_adt_clocks_enable('/arm-io/dart-apr0') +p.pmgr_adt_clocks_enable('/arm-io/dart-apr1') + +dart0_tracer = DART8110Tracer(hv, "/arm-io/dart-apr0", verbose=1) +dart0_tracer.start() +print(dart0_tracer) +dart1_tracer = DART8110Tracer(hv, "/arm-io/dart-apr1", verbose=1) +dart1_tracer.start() +print(dart1_tracer) + + +class ProResTracer(ADTDevTracer): + DEFAULT_MODE = TraceMode.SYNC + REGMAPS = [ProResRegs] + NAMES = ['prores'] + + def __init__(self, hv, devpath, dart_tracer): + super().__init__(hv, devpath, verbose=3) + self.dart_tracer = dart_tracer + + def w_DR_SIZE(self, val): + self._dr_size = val + + def w_DR_ADDR_HI(self, val): + self._dr_addr_hi = val + + def w_DR_ADDR_LO(self, val): + self._dr_addr_lo = val + + def w_DR_TAIL(self, val): + self.log(f"DR_TAIL = {val}") + self._dr_tail = val + + def w_DR_HEAD(self, val): + self.log(f"DR_HEAD = {val}") + self.dart_tracer.dart.dump_all() + + dr_addr = int(self._dr_addr_hi) << 32 | int(self._dr_addr_lo) + dr_size = int(self._dr_size) + self.log(f"desc ring @ {dr_addr:016X} sz {dr_size:08X}") + + dr = self.dart_tracer.dart.ioread(0, dr_addr, dr_size) + chexdump(dr) + + # FIXME there are other descriptor types + # also, what if there are multiple in the ring? + dr_head = int(val) + dr_tail = int(self._dr_tail) + + if dr_head - dr_tail == 0x180: + desc = EncodeNotRawDescriptor._make(struct.unpack(ENCODE_NOT_RAW_STRUCT, dr[dr_tail:dr_head])) + print(desc) + + p0_iova = desc.luma_iova + p1_iova = desc.chroma_iova + p2_iova = desc.alpha_iova + + if p0_iova: + print(f"P0 iova {p0_iova:016X}") + data = self.dart_tracer.dart.ioread(0, p0_iova, 0x1000) + chexdump(data) + if p1_iova: + print(f"P1 iova {p1_iova:016X}") + data = self.dart_tracer.dart.ioread(0, p1_iova, 0x1000) + chexdump(data) + if p2_iova: + print(f"P2 iova {p2_iova:016X}") + data = self.dart_tracer.dart.ioread(0, p2_iova, 0x1000) + chexdump(data) + + +ProResTracer = ProResTracer._reloadcls() + +p.pmgr_adt_clocks_enable('/arm-io/apr0') +p.pmgr_adt_clocks_enable('/arm-io/apr1') + +tracer0 = ProResTracer(hv, '/arm-io/apr0', dart0_tracer) +tracer0.start() +print(tracer0) +tracer1 = ProResTracer(hv, '/arm-io/apr1', dart1_tracer) +tracer1.start() +print(tracer1) |
