1 //
2 // Copyright (c) 2010-2022 Antmicro
3 //
4 // This file is licensed under the MIT License.
5 // Full license text is available in 'licenses/MIT.txt'.
6 //
7 
8 using Antmicro.Renode.Core;
9 using Antmicro.Renode.Core.Structure.Registers;
10 
11 namespace Antmicro.Renode.Peripherals.Miscellaneous
12 {
13     // This is just a mock handling hint flags
14     public class OpenTitan_ClockManager : BasicDoubleWordPeripheral, IKnownSize
15     {
OpenTitan_ClockManager(IMachine machine, OpenTitan_BigNumberAccelerator otbn)16         public OpenTitan_ClockManager(IMachine machine, OpenTitan_BigNumberAccelerator otbn) : base(machine)
17         {
18             this.otbn = otbn;
19             DefineRegisters();
20         }
21 
22         public long Size => 0x100;
23 
DefineRegisters()24         private void DefineRegisters()
25         {
26             Register.ClockHints.Define(this, 0xF)
27                 .WithFlag(0, out aesHint,name: "CLK_MAIN_AES_HINT")
28                 .WithFlag(1, out hmacHint,name: "CLK_MAIN_HMAC_HINT")
29                 .WithFlag(2, out kmacHint,name: "CLK_MAIN_KMAC_HINT")
30                 .WithFlag(3, out otbnHint,name: "CLK_MAIN_OTBN_HINT")
31                 .WithReservedBits(4, 28)
32             ;
33 
34             Register.ClockHintsStatus.Define(this, 0xF)
35                 .WithFlag(0, FieldMode.Read, name: "CLK_MAIN_AES_VAL", valueProviderCallback: _ => aesHint.Value)
36                 .WithFlag(1, FieldMode.Read, name: "CLK_MAIN_HMAC_VAL", valueProviderCallback: _ => hmacHint.Value)
37                 .WithFlag(2, FieldMode.Read, name: "CLK_MAIN_KMAC_VAL", valueProviderCallback: _ => kmacHint.Value)
38                 .WithFlag(3, FieldMode.Read, name: "CLK_MAIN_OTBN_VAL", valueProviderCallback: _ => otbnHint.Value | !otbn.IsIdle)
39                 .WithReservedBits(4, 28)
40             ;
41         }
42 
43         private IFlagRegisterField aesHint;
44         private IFlagRegisterField hmacHint;
45         private IFlagRegisterField kmacHint;
46         private IFlagRegisterField otbnHint;
47 
48         private readonly OpenTitan_BigNumberAccelerator otbn;
49 
50         private enum Register
51         {
52             ClockHints = 0x1c,
53             ClockHintsStatus = 0x20
54         }
55     }
56 }
57