Skip to content

Commit 8e77f8f

Browse files
committed
m1n1.fw.agx.channels: Do not require contiguous pages for channel state
Signed-off-by: Asahi Lina <[email protected]>
1 parent 8dd002d commit 8e77f8f

3 files changed

Lines changed: 14 additions & 15 deletions

File tree

proxyclient/m1n1/fw/agx/channels.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -423,9 +423,8 @@ def __init__(self, u, uat, info, ring_defs, base=None, state_fields=ChannelState
423423
self.ring_defs = ring_defs
424424
self.info = info
425425

426-
self.st_maps = uat.iotranslate(0, info.state_addr, state_fields._SIZE * len(ring_defs))
427-
assert len(self.st_maps) == 1
428-
self.state_phys = self.st_maps[0][0]
426+
self.accessor = uat.ioaccessor(0)
427+
self.state_addr = info.state_addr
429428
self.state = []
430429
self.rb_base = []
431430
self.rb_maps = []
@@ -437,7 +436,7 @@ def __init__(self, u, uat, info, ring_defs, base=None, state_fields=ChannelState
437436
for i, (msg, size, count) in enumerate(ring_defs):
438437
assert msg.sizeof() == size
439438

440-
self.state.append(state_fields(self.u, self.state_phys + 0x30 * i))
439+
self.state.append(state_fields(self.accessor, self.state_addr + 0x30 * i))
441440
m = uat.iotranslate(0, p, size * count)
442441
self.rb_base.append(p)
443442
self.rb_maps.append(m)

proxyclient/m1n1/hw/uat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ def iostream(self, ctx, base, recurse=True):
333333
return UatStream(self, ctx, base, recurse)
334334

335335
# A read/write register interface like proxy/utils objects that can be used by RegMap
336-
def ioaccessor(self, ctx, base):
336+
def ioaccessor(self, ctx):
337337
return UatAccessor(self, ctx)
338338

339339
def iomap(self, ctx, addr, size, **flags):

proxyclient/m1n1/trace/agx.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -106,16 +106,13 @@ def __init__(self, tracer, info, index):
106106

107107
self.channel = Channel(self.u, self.uat, self.info, channelRings[index], base=base,
108108
state_fields=self.STATE_FIELDS)
109-
for addr, size in self.channel.st_maps:
110-
self.log(f"st_map {addr:#x} ({size:#x})")
111109
for i in range(self.ring_count):
112110
for addr, size in self.channel.rb_maps[i]:
113111
self.log(f"rb_map[{i}] {addr:#x} ({size:#x})")
114112

115113
self.set_active(self.state.active)
116114

117-
def state_read(self, evt, regmap=None, prefix=None):
118-
off = evt.addr - self.channel.state_phys
115+
def state_read(self, evt, regmap=None, prefix=None, off=None):
119116
ring = off // 0x30
120117
off = off % 0x30
121118

@@ -133,8 +130,7 @@ def state_read(self, evt, regmap=None, prefix=None):
133130
if self.verbose:
134131
self.log(f"RD [{evt.addr:#x}] UNK[{ring}] {off:#x} = {evt.data:#x}")
135132

136-
def state_write(self, evt, regmap=None, prefix=None):
137-
off = evt.addr - self.channel.state_phys
133+
def state_write(self, evt, regmap=None, prefix=None, off=None):
138134
ring = off // 0x30
139135
off = off % 0x30
140136

@@ -187,16 +183,20 @@ def set_active(self, active=True):
187183
self.state.tail[ring] = self.channel.state[ring].WRITE_PTR.val
188184

189185
for base in range(0, 0x30 * self.ring_count, 0x30):
190-
self.hv.add_tracer(irange(self.channel.state_phys + base + self.RPTR, 4),
186+
p = self.uat.iotranslate(0, self.channel.state_addr + base + self.RPTR, 4)[0][0]
187+
self.hv.add_tracer(irange(p, 4),
191188
f"ChannelTracer/{self.name}",
192189
mode=TraceMode.SYNC,
193190
read=self.state_read,
194-
write=self.state_write)
195-
self.hv.add_tracer(irange(self.channel.state_phys + base + self.WPTR, 4),
191+
write=self.state_write,
192+
off=base + self.RPTR)
193+
p = self.uat.iotranslate(0, self.channel.state_addr + base + self.WPTR, 4)[0][0]
194+
self.hv.add_tracer(irange(p, 4),
196195
f"ChannelTracer/{self.name}",
197196
mode=TraceMode.SYNC,
198197
read=self.state_read,
199-
write=self.state_write)
198+
write=self.state_write,
199+
off=base + self.WPTR)
200200
else:
201201
self.hv.clear_tracers(f"ChannelTracer/{self.name}")
202202
self.state.active = active

0 commit comments

Comments
 (0)