@@ -325,15 +325,27 @@ async def test_ccc_getmrl(dut):
325325 assert ibi_payload_size == _IBI_PAYLOAD_SIZE
326326
327327
328- @cocotb .test (skip = ( "ControllerSupport" not in cocotb . plusargs ) )
328+ @cocotb .test ()
329329async def test_ccc_setaasa (dut ):
330330
331331 STATIC_ADDR = 0x5A
332+ VIRT_STATIC_ADDR = 0x5B
332333 I3C_BCAST_SETAASA = 0x29
333334 i3c_controller , i3c_target , tb = await test_setup (dut )
334335 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+ )
337349
338350 # reset Dynamic Address
339351 await i3c_controller .i3c_ccc_write (ccc = I3C_BCAST_SETAASA )
@@ -346,6 +358,65 @@ async def test_ccc_setaasa(dut):
346358 assert dynamic_address == STATIC_ADDR , "Unexpected DYNAMIC ADDRESS read from the CSR"
347359 assert dynamic_address_valid == 1 , "New DYNAMIC ADDRESS is not set as valid"
348360
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"
349420
350421@cocotb .test ()
351422async def test_ccc_getpid (dut ):
0 commit comments