mirror of
https://github.com/AsahiLinux/m1n1
synced 2024-12-18 17:53:10 +00:00
dd111b22b8
Signed-off-by: R <rqou@berkeley.edu>
88 lines
2.6 KiB
Python
88 lines
2.6 KiB
Python
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)
|