@@ -325,15 +325,27 @@ async def test_ccc_getmrl(dut):
325
325
assert ibi_payload_size == _IBI_PAYLOAD_SIZE
326
326
327
327
328
- @cocotb .test (skip = ( "ControllerSupport" not in cocotb . plusargs ) )
328
+ @cocotb .test ()
329
329
async def test_ccc_setaasa (dut ):
330
330
331
331
STATIC_ADDR = 0x5A
332
+ VIRT_STATIC_ADDR = 0x5B
332
333
I3C_BCAST_SETAASA = 0x29
333
334
i3c_controller , i3c_target , tb = await test_setup (dut )
334
335
dynamic_address_reg_addr = tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .base_addr
335
- dynamic_address_reg_value = tb .reg_map .I3CBASE .CONTROLLER_DEVICE_ADDR .DYNAMIC_ADDR
336
- dynamic_address_reg_valid = tb .reg_map .I3CBASE .CONTROLLER_DEVICE_ADDR .DYNAMIC_ADDR_VALID
336
+ dynamic_address_reg_value = tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .DYNAMIC_ADDR
337
+ dynamic_address_reg_valid = (
338
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .DYNAMIC_ADDR_VALID
339
+ )
340
+ virtual_dynamic_address_reg_addr = (
341
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .base_addr
342
+ )
343
+ virtual_dynamic_address_reg_value = (
344
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .VIRT_DYNAMIC_ADDR
345
+ )
346
+ virtual_dynamic_address_reg_valid = (
347
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .VIRT_DYNAMIC_ADDR_VALID
348
+ )
337
349
338
350
# reset Dynamic Address
339
351
await i3c_controller .i3c_ccc_write (ccc = I3C_BCAST_SETAASA )
@@ -346,6 +358,65 @@ async def test_ccc_setaasa(dut):
346
358
assert dynamic_address == STATIC_ADDR , "Unexpected DYNAMIC ADDRESS read from the CSR"
347
359
assert dynamic_address_valid == 1 , "New DYNAMIC ADDRESS is not set as valid"
348
360
361
+ virt_dynamic_address = await tb .read_csr_field (
362
+ virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_value
363
+ )
364
+ virt_dynamic_address_valid = await tb .read_csr_field (
365
+ virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_valid
366
+ )
367
+ assert virt_dynamic_address == VIRT_STATIC_ADDR , "Unexpected VIRT DYNAMIC ADDRESS read from the CSR"
368
+ assert virt_dynamic_address_valid == 1 , "New VIRT DYNAMIC ADDRESS is not set as valid"
369
+
370
+
371
+ @cocotb .test ()
372
+ async def test_ccc_setaasa_ignore (dut ):
373
+
374
+ STATIC_ADDR = 0x5A
375
+ VIRT_STATIC_ADDR = 0x5B
376
+ DYNAMIC_ADDR = 0x3A
377
+ VIRT_DYNAMIC_ADDR = 0x3B
378
+ I3C_BCAST_SETAASA = 0x29
379
+
380
+ i3c_controller , i3c_target , tb = await test_setup (dut )
381
+ dynamic_address_reg_addr = tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .base_addr
382
+ dynamic_address_reg_value = tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .DYNAMIC_ADDR
383
+ dynamic_address_reg_valid = (
384
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .DYNAMIC_ADDR_VALID
385
+ )
386
+ virtual_dynamic_address_reg_addr = (
387
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .base_addr
388
+ )
389
+ virtual_dynamic_address_reg_value = (
390
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .VIRT_DYNAMIC_ADDR
391
+ )
392
+ virtual_dynamic_address_reg_valid = (
393
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .VIRT_DYNAMIC_ADDR_VALID
394
+ )
395
+ # set dynamic address CSRs
396
+ await tb .write_csr_field (dynamic_address_reg_addr , dynamic_address_reg_value , DYNAMIC_ADDR )
397
+ await tb .write_csr_field (dynamic_address_reg_addr , dynamic_address_reg_valid , 1 )
398
+ await tb .write_csr_field (virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_value , VIRT_DYNAMIC_ADDR )
399
+ await tb .write_csr_field (virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_valid , 1 )
400
+
401
+ # Send SETAASA
402
+ await i3c_controller .i3c_ccc_write (ccc = I3C_BCAST_SETAASA )
403
+
404
+ # check if the address was not changed
405
+ dynamic_address = await tb .read_csr_field (dynamic_address_reg_addr , dynamic_address_reg_value )
406
+ dynamic_address_valid = await tb .read_csr_field (
407
+ dynamic_address_reg_addr , dynamic_address_reg_valid
408
+ )
409
+ assert dynamic_address == DYNAMIC_ADDR , "Unexpected DYNAMIC ADDRESS read from the CSR"
410
+ assert dynamic_address_valid == 1 , "New DYNAMIC ADDRESS is not set as valid"
411
+
412
+ virt_dynamic_address = await tb .read_csr_field (
413
+ virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_value
414
+ )
415
+ virt_dynamic_address_valid = await tb .read_csr_field (
416
+ virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_valid
417
+ )
418
+ assert virt_dynamic_address == VIRT_DYNAMIC_ADDR , "Unexpected VIRT DYNAMIC ADDRESS read from the CSR"
419
+ assert virt_dynamic_address_valid == 1 , "New VIRT DYNAMIC ADDRESS is not set as valid"
349
420
350
421
@cocotb .test ()
351
422
async def test_ccc_getpid (dut ):
0 commit comments