1 // 2 // Copyright (c) 2010-2025 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 using Antmicro.Renode.Core.Structure.Registers; 8 9 namespace Antmicro.Renode.Peripherals.I3C 10 { 11 partial class Caliptra_I3C : IKnownSize 12 { 13 public long Size => 0x1000; 14 Init()15 partial void Init() 16 { 17 HciVersion.VERSION.ValueProviderCallback = _ => 0x120; 18 DctSectionOffset.TABLE_OFFSET.ValueProviderCallback = _ => 0x800; 19 DctSectionOffset.TABLE_SIZE.ValueProviderCallback = _ => 0x7F; 20 PioSectionOffset.SECTION_OFFSET.ValueProviderCallback = _ => 0x80; 21 ExtCapsSectionOffset.SECTION_OFFSET.ValueProviderCallback = _ => 0x100; 22 IntCtrlCmdsEn.ICC_SUPPORT.ValueProviderCallback = _ => true; 23 IntCtrlCmdsEn.MIPI_CMDS_SUPPORTED.ValueProviderCallback = _ => 0x35; 24 PIOQueueSize.CR_QUEUE_SIZE.ValueProviderCallback = _ => 0x40; 25 AltQueueSize.ALT_RESP_QUEUE_SIZE.ValueProviderCallback = _ => 0x40; 26 AltQueueSize.ALT_RESP_QUEUE_EN.ValueProviderCallback = _ => false; 27 AltQueueSize.EXT_IBI_QUEUE_EN.ValueProviderCallback = _ => false; 28 29 CreateInterruptForceCallback( 30 IntrForce.HC_INTERNAL_ERR_FORCE, 31 IntrStatus.HC_INTERNAL_ERR_STAT, 32 IntrStatusEnable.HC_INTERNAL_ERR_STAT_EN); 33 34 CreateInterruptForceCallback( 35 IntrForce.HC_SEQ_CANCEL_FORCE, 36 IntrStatus.HC_SEQ_CANCEL_STAT, 37 IntrStatusEnable.HC_SEQ_CANCEL_STAT_EN); 38 39 CreateInterruptForceCallback( 40 IntrForce.HC_WARN_CMD_SEQ_STALL_FORCE, 41 IntrStatus.HC_WARN_CMD_SEQ_STALL_STAT, 42 IntrStatusEnable.HC_WARN_CMD_SEQ_STALL_STAT_EN); 43 44 CreateInterruptForceCallback( 45 IntrForce.HC_ERR_CMD_SEQ_TIMEOUT_FORCE, 46 IntrStatus.HC_ERR_CMD_SEQ_TIMEOUT_STAT, 47 IntrStatusEnable.HC_ERR_CMD_SEQ_TIMEOUT_STAT_EN); 48 49 CreateInterruptForceCallback( 50 IntrForce.SCHED_CMD_MISSED_TICK_FORCE, 51 IntrStatus.SCHED_CMD_MISSED_TICK_STAT, 52 IntrStatusEnable.SCHED_CMD_MISSED_TICK_STAT_EN); 53 54 CreateInterruptForceCallback( 55 InterruptForce.RX_DESC_STAT_FORCE, 56 InterruptStatus.RX_DESC_STAT, 57 InterruptEnable.RX_DESC_STAT_EN); 58 59 CreateInterruptForceCallback( 60 InterruptForce.TX_DESC_STAT_FORCE, 61 InterruptStatus.TX_DESC_STAT, 62 InterruptEnable.TX_DESC_THLD_STAT_EN); 63 64 CreateInterruptForceCallback( 65 InterruptForce.RX_DATA_THLD_FORCE, 66 InterruptStatus.RX_DATA_THLD_STAT, 67 InterruptEnable.RX_DATA_THLD_STAT_EN); 68 69 CreateInterruptForceCallback( 70 InterruptForce.RX_DESC_THLD_FORCE, 71 InterruptStatus.RX_DESC_THLD_STAT, 72 InterruptEnable.RX_DESC_THLD_STAT_EN); 73 74 CreateInterruptForceCallback( 75 InterruptForce.IBI_DONE_FORCE, 76 InterruptStatus.IBI_DONE, 77 InterruptEnable.IBI_DONE_EN); 78 } 79 CreateInterruptForceCallback(IFlagRegisterField force, IFlagRegisterField status, IFlagRegisterField enabled)80 private void CreateInterruptForceCallback(IFlagRegisterField force, IFlagRegisterField status, IFlagRegisterField enabled) 81 { 82 force.WriteCallback += (_, value) => 83 { 84 if(value && enabled.Value) 85 { 86 status.Value = value; 87 UpdateInterrupts(); 88 } 89 }; 90 } 91 UpdateInterrupts()92 private void UpdateInterrupts() 93 { 94 } 95 } 96 } 97