m1n1.hw.admac: Add debug print of estimated rate

Signed-off-by: Martin Povišer <povik@protonmail.com>
This commit is contained in:
Martin Povišer 2021-11-24 17:15:10 +01:00 committed by Hector Martin
parent 99a0741c87
commit 549dcf8b3a

View file

@ -166,7 +166,10 @@ class ADMACTXChannel(Reloadable):
self.dart = parent.dart self.dart = parent.dart
self.regs = parent.regs self.regs = parent.regs
self.ch = channo self.ch = channo
self.desc_id = 0
self._desc_id = 0
self._submitted = {}
self._last_report = None
def reset(self): def reset(self):
self.regs.TX_CTL[self.ch].set(RESET_RINGS=1, CLEAR_OF_UF_COUNTERS=1) self.regs.TX_CTL[self.ch].set(RESET_RINGS=1, CLEAR_OF_UF_COUNTERS=1)
@ -191,6 +194,8 @@ class ADMACTXChannel(Reloadable):
for piece in desc.ser(): for piece in desc.ser():
self.regs.TX_DESC_WRITE[self.ch].val = piece self.regs.TX_DESC_WRITE[self.ch].val = piece
self._submitted[desc.flags.DESC_ID] = desc
def submit(self, data, **kwargs): def submit(self, data, **kwargs):
assert self.dart is not None assert self.dart is not None
@ -199,9 +204,9 @@ class ADMACTXChannel(Reloadable):
buf, iova = self.p._get_buffer(len(data)) buf, iova = self.p._get_buffer(len(data))
self.iface.writemem(buf, data) self.iface.writemem(buf, data)
self.submit_desc(ADMACDescriptor( self.submit_desc(ADMACDescriptor(
iova, len(data), DESC_ID=self.desc_id, NOTIFY=1, **kwargs iova, len(data), DESC_ID=self._desc_id, NOTIFY=1, **kwargs
)) ))
self.desc_id += 1 self._desc_id = (self._desc_id + 1) % 256
def poll(self): def poll(self):
if self.regs.TX_STATUS[self.ch, 1].reg.RING_ERR: if self.regs.TX_STATUS[self.ch, 1].reg.RING_ERR:
@ -219,7 +224,16 @@ class ADMACTXChannel(Reloadable):
report = ADMACReport.deser(pieces) report = ADMACReport.deser(pieces)
if self.p.debug: if self.p.debug:
print(f"admac: picked up (ch{self.ch}): {report}") if self._last_report is not None and report.flags.DESC_ID in self._submitted:
countval_delta = report.countval - self._last_report.countval
est_rate = 24e6*self._submitted[report.flags.DESC_ID].length/countval_delta/4
est = f"(estimated rate: {est_rate:.2f} dwords/s)"
else:
est = ""
print(f"admac: picked up (ch{self.ch}): {report} {est}")
self._last_report = report
class ADMAC(Reloadable): class ADMAC(Reloadable):