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