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