Skip to content

Commit 65896ee

Browse files
wkkunakgugala
authored andcommitted
test_check_axi_filtering: Mark payload done
Allow reading from indirect FIFO by marking the payload done first. Signed-off-by: Wiktoria Kuna <[email protected]>
1 parent 14b2e95 commit 65896ee

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

verification/cocotb/common/bus2csr.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,27 +80,33 @@ async def register_test_interfaces(self, fclk=500.0):
8080
await cocotb.start(setup_dut(self.clk, self.rst_n, (tclk, "ps")))
8181

8282
async def read_csr(
83-
self, addr: int, size: int = 4, timeout: int = 1, units: str = "us"
83+
self, addr: int, size: int = 4, arid=None, timeout: int = 1, units: str = "us"
8484
) -> List[int]:
8585
"""Send a read request & await the response."""
8686
raise NotImplementedError
8787

8888
async def write_csr(
89-
self, addr: int, data: List[int], size: int = 4, timeout: int = 1, units: str = "us"
89+
self,
90+
addr: int,
91+
data: List[int],
92+
size: int = 4,
93+
awid=None,
94+
timeout: int = 1,
95+
units: str = "us",
9096
) -> None:
9197
"""Send a write request & await transfer to finish."""
9298
raise NotImplementedError
9399

94-
async def write_csr_field(self, reg_addr, field, data) -> None:
100+
async def write_csr_field(self, reg_addr, field, data, awid=None) -> None:
95101
"""Read -> modify -> write CSR"""
96-
value = bytes2int(await self.read_csr(reg_addr))
102+
value = bytes2int(await self.read_csr(reg_addr, arid=awid))
97103
value = value & ~field.mask
98104
value = value | (data << field.low)
99-
await self.write_csr(reg_addr, int2bytes(value))
105+
await self.write_csr(reg_addr, int2bytes(value), awid=awid)
100106

101-
async def read_csr_field(self, reg_addr, field) -> int:
107+
async def read_csr_field(self, reg_addr, field, arid=None) -> int:
102108
"""Read -> modify -> write CSR"""
103-
value = bytes2int(await self.read_csr(reg_addr))
109+
value = bytes2int(await self.read_csr(reg_addr, arid=arid))
104110
value = value & field.mask
105111
value = value >> field.low
106112
return value
@@ -149,18 +155,28 @@ async def register_test_interfaces(self, *args, **kw):
149155
await super().register_test_interfaces(*args, **kw)
150156

151157
async def read_csr(
152-
self, addr: int, size: int = 4, timeout: int = 1, units: str = "us"
158+
self, addr: int, size: int = 4, arid=None, timeout: int = 1, units: str = "us"
153159
) -> List[int]:
154160
"""Send a read request & await the response for 'timeout' in 'units'."""
161+
if arid:
162+
self.dut._log.debug(f"AHB doesn't support transaction IDs, ignoring arid={arid}")
155163
self.AHBManager.read(addr, size)
156164
await with_timeout(self.AHBManager.transfer_done(), timeout, units)
157165
read = self.AHBManager.get_rsp(addr, self.data_byte_width)
158166
return read
159167

160168
async def write_csr(
161-
self, addr: int, data: List[int], size: int = 4, timeout: int = 1, units: str = "us"
169+
self,
170+
addr: int,
171+
data: List[int],
172+
size: int = 4,
173+
awid=None,
174+
timeout: int = 1,
175+
units: str = "us",
162176
) -> None:
163177
"""Send a write request & await transfer to finish for 'timeout' in 'units'."""
178+
if awid:
179+
self.dut._log.debug(f"AHB doesn't support transaction IDs, ignoring awid={awid}")
164180
data_len = len(data)
165181
# Extend bytes to size if there's less than that
166182
if data_len <= size:

verification/cocotb/top/lib_i3c_top/test_bypass.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ async def target_bus_traffic(addr, run_condition):
505505

506506
for _ in range(10): # Arbitrary number of repetitions
507507
payload_data = [random.randint(0, 2**32 - 1) for _ in range(fifo_size)]
508-
delay_cycles = random.randint(0, 1000)
508+
delay_cycles = random.randint(1, 1000)
509509
dut._log.info(f"Randomized delay is {delay_cycles} clock cycles")
510510

511511
# Start I3C traffic
@@ -805,7 +805,7 @@ def csr_access_test_data(tb, rd_acc=Access.Priv, wr_acc=Access.Priv):
805805

806806

807807
@cocotb.test(skip=os.getenv("FrontendBusInterface") != "AXI")
808-
async def test_check_axi_filtering(dut):
808+
async def test_axi_filtering(dut):
809809
"""
810810
Verifies AXI ID filtering in Secure Firmware Recovery registers access.
811811
"""
@@ -851,6 +851,15 @@ async def test_check_axi_filtering(dut):
851851
payload_data = [random.randint(0, 2**32 - 1) for _ in range(2)]
852852
await write_to_indirect_fifo(tb, payload_data, format="dwords", awid=awid)
853853

854+
# Indicate that payload transfer is finished
855+
for done in [1, 0]:
856+
await tb.write_csr_field(
857+
tb.reg_map.I3C_EC.SOCMGMTIF.REC_INTF_CFG.base_addr,
858+
tb.reg_map.I3C_EC.SOCMGMTIF.REC_INTF_CFG.REC_PAYLOAD_DONE,
859+
done,
860+
awid=awid,
861+
)
862+
854863
resp = await tb.read_csr(addr, arid=get_axi_ids_seq(priv_ids, 1, rd_acc)[0])
855864
exp_rd = 0 if rd_acc == Access.Unpriv or wr_acc == Access.Unpriv else payload_data[0]
856865
compare_values(int2bytes(exp_rd), resp, addr)

0 commit comments

Comments
 (0)