sim:config: Retire unused forked OpenTitan2_UART UART use upstream renode model directly Change-Id: If93a989298a09475877daffd70ec6efbd2b364cf
diff --git a/hps.resc b/hps.resc index c67baf7..b3e9e2c 100644 --- a/hps.resc +++ b/hps.resc
@@ -10,7 +10,6 @@ EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.CPU.SpringbokRiscV32" EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.CPU.SpringbokRiscV32_ControlBlock" include @sim/config/shodan_infrastructure/SmcRiscV32.cs -include @sim/config/shodan_infrastructure/OpenTitan2_UART.cs include @sim/config/shodan_infrastructure/Mailbox.cs include @sim/config/shodan_infrastructure/AddressRangeStub.cs include @sim/config/shodan_infrastructure/CamCtrl.cs
diff --git a/shodan.resc b/shodan.resc index 0a2a01c..879994c 100644 --- a/shodan.resc +++ b/shodan.resc
@@ -1,5 +1,5 @@ -:name: OpenTitan -:description: This script runs Tock & seL4 on OpenTitan matcha +:name: Shodan +:description: This script runs Tock & seL4 on Shodan matcha $name?="matcha" @@ -11,7 +11,6 @@ EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.CPU.SpringbokRiscV32_ControlBlock" include @sim/config/shodan_infrastructure/SmcRiscV32.cs include @sim/config/shodan_infrastructure/OpenTitan2_Timer.cs -include @sim/config/shodan_infrastructure/OpenTitan2_UART.cs include @sim/config/shodan_infrastructure/Mailbox.cs include @sim/renode/tools/sel4_extensions/seL4Extensions.cs include @sim/config/shodan_infrastructure/AddressRangeStub.cs
diff --git a/shodan_infrastructure/OpenTitan2_UART.cs b/shodan_infrastructure/OpenTitan2_UART.cs deleted file mode 100644 index 03841bd..0000000 --- a/shodan_infrastructure/OpenTitan2_UART.cs +++ /dev/null
@@ -1,426 +0,0 @@ -// -// Copyright (c) 2010-2021 Antmicro -// -// This file is licensed under the MIT License. -// Full license text is available in 'licenses/MIT.txt'. -// -using System.Collections.Generic; -using Antmicro.Renode.Core; -using Antmicro.Renode.Core.Structure.Registers; -using Antmicro.Renode.Logging; -using Antmicro.Renode.Peripherals.Bus; - -namespace Antmicro.Renode.Peripherals.UART -{ - // This model currently does not support timeout feature, rx break detection and software tx pin override - public class OpenTitan2_UART : UARTBase, IDoubleWordPeripheral, IKnownSize - { - public OpenTitan2_UART(Machine machine) : base(machine) - { - TxWatermarkIRQ = new GPIO(); - RxWatermarkIRQ = new GPIO(); - TxEmptyIRQ = new GPIO(); - RxOverflowIRQ = new GPIO(); - RxFrameErrorIRQ = new GPIO(); - RxBreakErrorIRQ = new GPIO(); - RxTimeoutIRQ = new GPIO(); - RxParityErrorIRQ = new GPIO(); - - registers = new DoubleWordRegisterCollection(this, BuildRegisterMap()); - txQueue = new Queue<byte>(); - } - - public uint ReadDoubleWord(long offset) - { - return registers.Read(offset); - } - - public void WriteDoubleWord(long offset, uint value) - { - registers.Write(offset, value); - } - - public override void WriteChar(byte value) - { - if(lineLoopbackEnabled.Value) - { - txOngoing = true; - TransmitCharacter(value); - this.Log(LogLevel.Noisy, "Line Loopback Enabled, byte echoed by hardware."); - } - - if(systemLoopbackEnabled.Value) - { - this.Log(LogLevel.Warning, "Sytem Loopback Enabled, incoming byte not queued."); - return; - } - - if(!rxEnabled.Value) - { - this.Log(LogLevel.Warning, "CTRL.RX is unset, incoming byte not queued."); - return; - } - - if(Count < rxFIFOCapacity) - { - rxOverflowPending.Value = false; - base.WriteChar(value); - } - else - { - rxOverflowPending.Value = true; - this.Log(LogLevel.Noisy, "RX FIFO overflowed, queueing incoming byte anyway."); - base.WriteChar(value); - } - UpdateInterrupts(); - } - - public override void Reset() - { - base.Reset(); - registers.Reset(); - txQueue.Clear(); - UpdateInterrupts(); - - txOngoing = false; - txWatermarkCrossed = false; - } - - public long Size => 0x30; - - public GPIO TxWatermarkIRQ { get; } - public GPIO RxWatermarkIRQ { get; } - public GPIO TxEmptyIRQ { get; } - public GPIO RxOverflowIRQ { get; } - public GPIO RxFrameErrorIRQ { get; } - public GPIO RxBreakErrorIRQ { get; } - public GPIO RxTimeoutIRQ { get; } - public GPIO RxParityErrorIRQ { get; } - - public override Bits StopBits => Bits.One; - - public override Parity ParityBit => parityTypeField.Value == ParityType.Odd ? Parity.Odd : Parity.Even; - - public override uint BaudRate => (uint)((baudClockRate.Value * fixedClockFrequency) >> 20); - - protected override void CharWritten() - { - // intentionally left empty - } - - protected override void QueueEmptied() - { - // intentionally left empty - } - - private Dictionary<long, DoubleWordRegister> BuildRegisterMap() - { - return new Dictionary<long, DoubleWordRegister> - { - {(long)Registers.InterruptState, new DoubleWordRegister(this) - .WithFlag(0, out txWatermarkPending, FieldMode.Read | FieldMode.WriteOneToClear, name: "INTR_STATE.tx_watermark") - .WithFlag(1, out rxWatermarkPending, FieldMode.Read | FieldMode.WriteOneToClear, name: "INTR_STATE.rx_watermark") - .WithFlag(2, out txEmptyPending, FieldMode.Read | FieldMode.WriteOneToClear, name: "INTR_STATE.tx_empty") - .WithFlag(3, out rxOverflowPending, FieldMode.Read | FieldMode.WriteOneToClear, name: "INTR_STATE.rx_overflow") - .WithFlag(4, out rxFrameErrorPending, FieldMode.Read | FieldMode.WriteOneToClear, name: "INTR_STATE.rx_frame_err") - .WithFlag(5, out rxBreakErrorPending, FieldMode.Read | FieldMode.WriteOneToClear, name: "INTR_STATE.rx_break_err") - .WithFlag(6, out rxTimeoutPending, FieldMode.Read | FieldMode.WriteOneToClear, name: "INTR_STATE.rx_timeout") - .WithFlag(7, out rxParityErrorPending, FieldMode.Read | FieldMode.WriteOneToClear, name: "INTR_STATE.rx_parity_err") - .WithReservedBits(8, 24) - .WithWriteCallback((_, __) => UpdateInterrupts()) - }, - {(long)Registers.InterruptEnable, new DoubleWordRegister(this) - .WithFlag(0, out txWatermarkEnabled, name: "INTR_ENABLE.tx_watermark") - .WithFlag(1, out rxWatermarkEnabled, name: "INTR_ENABLE.rx_watermark") - .WithFlag(2, out txEmptyEnabled, name: "INTR_ENABLE.tx_empty") - .WithFlag(3, out rxOverflowEnabled, name: "INTR_ENABLE.rx_overflow") - .WithFlag(4, out rxFrameErrorEnabled, name: "INTR_ENABLE.rx_frame_err") - .WithFlag(5, out rxBreakErrorEnabled, name: "INTR_ENABLE.rx_break_err") - .WithFlag(6, out rxTimeoutEnabled, name: "INTR_ENABLE.rx_timeout") - .WithFlag(7, out rxParityErrorEnabled, name: "INTR_ENABLE.rx_parity_err") - .WithReservedBits(8, 24) - .WithWriteCallback((_, __) => UpdateInterrupts()) - }, - {(long)Registers.InterruptTest, new DoubleWordRegister(this) - .WithFlag(0, FieldMode.Write, writeCallback: (_, val) => { txWatermarkPending.Value |= val; }, name: "INTR_TEST.tx_watermark") - .WithFlag(1, FieldMode.Write, writeCallback: (_, val) => { rxWatermarkPending.Value |= val; }, name: "INTR_TEST.rx_watermark") - .WithFlag(2, FieldMode.Write, writeCallback: (_, val) => { txEmptyPending.Value |= val; }, name: "INTR_TEST.tx_empty") - .WithFlag(3, FieldMode.Write, writeCallback: (_, val) => { rxOverflowPending.Value |= val; }, name: "INTR_TEST.rx_overflow") - .WithFlag(4, FieldMode.Write, writeCallback: (_, val) => { rxFrameErrorPending.Value |= val; }, name: "INTR_TEST.rx_frame_err") - .WithFlag(5, FieldMode.Write, writeCallback: (_, val) => { rxBreakErrorPending.Value |= val; }, name: "INTR_TEST.rx_break_err") - .WithFlag(6, FieldMode.Write, writeCallback: (_, val) => { rxTimeoutPending.Value |= val; }, name: "INTR_TEST.rx_timeout") - .WithFlag(7, FieldMode.Write, writeCallback: (_, val) => { rxParityErrorPending.Value |= val; }, name: "INTR_TEST.rx_parity_err") - .WithReservedBits(8, 24) - .WithWriteCallback((_, __) => UpdateInterrupts()) - }, - {(long)Registers.Control, new DoubleWordRegister(this) - .WithFlag(0, out txEnabled, name: "CTRL.TX", writeCallback: (_, val) => - { - if(val) - { - if(!lineLoopbackEnabled.Value) - { - foreach(byte value in txQueue) - { - txOngoing = true; - TransmitCharacter(value); - } - } - txQueue.Clear(); - UpdateInterrupts(); - } - }) - .WithFlag(1, out rxEnabled, name: "CTRL.RX") - .WithFlag(2, out noiseFilterEnabled, name: "CTRL.NF") - .WithReservedBits(3, 1) - .WithFlag(4, out systemLoopbackEnabled, name: "CTRL.SLPBK") - .WithFlag(5, out lineLoopbackEnabled, name: "CTRL.LLPBK") - .WithFlag(6, out parityEnabled, name: "CTRL.PARITY_EN") - .WithEnumField(7, 1, out parityTypeField, name: "CTRL.PARITY_ODD") - .WithTag("CTRL.RXBLVL", 8, 2) - .WithReservedBits(10, 6) - .WithValueField(16, 16, out baudClockRate, name: "CTRL.NCO") - }, - {(long)Registers.LiveStatus, new DoubleWordRegister(this) - .WithFlag(0, FieldMode.Read, valueProviderCallback: _ => txQueue.Count == txFIFOCapacity, name: "STATUS.TXFULL") - .WithFlag(1, FieldMode.Read, valueProviderCallback: _ => Count == rxFIFOCapacity, name: "STATUS.RXFULL") - .WithFlag(2, FieldMode.Read, valueProviderCallback: _ => txQueue.Count == 0, name: "STATUS.TXEMPTY") - .WithFlag(3, FieldMode.Read, valueProviderCallback: _ => txQueue.Count == 0, name: "STATUS.TXIDLE") - .WithFlag(4, FieldMode.Read, valueProviderCallback: _ => true, name: "STATUS.RXIDLE") - .WithFlag(5, FieldMode.Read, valueProviderCallback: _ => Count == 0, name: "STATUS.RXEMPTY") - .WithReservedBits(6, 26) - }, - {(long)Registers.ReadData, new DoubleWordRegister(this) - .WithValueField(0, 8, FieldMode.Read, name: "RDATA", valueProviderCallback: _ => - { - if(!TryGetCharacter(out var character)) - { - this.Log(LogLevel.Warning, "Trying to read from an empty Rx FIFO."); - } - return character; - }) - .WithReservedBits(8, 24) - .WithWriteCallback((_, __) => UpdateInterrupts()) - }, - {(long)Registers.WriteData, new DoubleWordRegister(this) - .WithValueField(0, 8, FieldMode.Write, name: "WDATA", writeCallback: (_, val) => - { - if(systemLoopbackEnabled.Value) - { - base.WriteChar((byte)val); - return; - } - - if(txEnabled.Value) - { - txOngoing = true; - TransmitCharacter((byte)val); - } - else if(txQueue.Count < txFIFOCapacity) - { - txQueue.Enqueue((byte)val); - if(txQueue.Count >= TxWatermarkValue) { - txWatermarkCrossed = true; - } - } - else - { - this.Log(LogLevel.Warning, "Trying to write to a full Tx FIFO."); - } - }) - .WithReservedBits(8, 24) - .WithWriteCallback((_, __) => UpdateInterrupts()) - }, - {(long)Registers.FIFOControl, new DoubleWordRegister(this) - .WithFlag(0, FieldMode.Write, name: "FIFO_CTRL.RXRST", writeCallback: (_, val) => - { - if(val) - { - ClearBuffer(); - } - }) - .WithFlag(1, FieldMode.Write, name: "FIFO_CTRL.TXRST", writeCallback: (_, val) => - { - if(val) - { - txQueue.Clear(); - txWatermarkCrossed = false; - } - }) - .WithEnumField(2, 3, out rxWatermarkField, name: "FIFO_CTRL.RXILVL") - .WithEnumField(5, 2, out txWatermarkField, name: "FIFO_CTRL.TXILVL") - .WithReservedBits(7, 25) - .WithWriteCallback((_, __) => UpdateInterrupts()) - }, - {(long)Registers.FIFOStatus, new DoubleWordRegister(this) - .WithValueField(0, 6, FieldMode.Read, valueProviderCallback: _ => (uint)txQueue.Count, name: "FIFO_STATUS.TXLVL") - .WithReservedBits(6, 10) - .WithValueField(16, 6, FieldMode.Read, valueProviderCallback: _ => (uint)Count, name: "FIFO_STATUS.RXLVL") - .WithReservedBits(22, 10) - }, - {(long)Registers.TxPinOverrideControl, new DoubleWordRegister(this) - .WithTaggedFlag("OVRD.TXEN", 0) - .WithTaggedFlag("OVRD.TXVAL", 1) - .WithReservedBits(2, 30) - }, - {(long)Registers.OversampledValues, new DoubleWordRegister(this) - .WithTag("VAL.RX", 0, 16) - .WithReservedBits(16, 16) - }, - {(long)Registers.RxTimeoutControl, new DoubleWordRegister(this) - .WithTag("TIMEOUT_CTRL.VAL", 0, 24) - .WithReservedBits(24, 7) - .WithTaggedFlag("TIMEOUT_CTRL.EN", 31) - } - }; - } - - private void UpdateInterrupts() - { - rxWatermarkPending.Value |= RxWatermarkValue <= Count; - - if (txWatermarkCrossed && txQueue.Count < TxWatermarkValue) { - txWatermarkPending.Value = true; - txWatermarkCrossed = false; - } - - if(txOngoing && txQueue.Count == 0) - { - txOngoing = false; - txEmptyPending.Value = true; - } - - TxWatermarkIRQ.Set(txWatermarkPending.Value && txWatermarkEnabled.Value); - RxWatermarkIRQ.Set(rxWatermarkPending.Value && rxWatermarkEnabled.Value); - TxEmptyIRQ.Set(txEmptyPending.Value && txEmptyEnabled.Value); - RxOverflowIRQ.Set(rxOverflowPending.Value && rxOverflowEnabled.Value); - RxFrameErrorIRQ.Set(rxFrameErrorPending.Value && rxFrameErrorEnabled.Value); - RxBreakErrorIRQ.Set(rxBreakErrorPending.Value && rxBreakErrorEnabled.Value); - RxTimeoutIRQ.Set(rxTimeoutPending.Value && rxTimeoutEnabled.Value); - RxParityErrorIRQ.Set(rxParityErrorPending.Value && rxParityErrorEnabled.Value); - } - - private int RxWatermarkValue - { - get - { - switch(rxWatermarkField.Value) - { - default: - this.Log(LogLevel.Error, "Unexpected state of rxWatermarkField ({0})", rxWatermarkField.Value); - return 1; - case RxWatermarkLevel.Level1: - return 1; - case RxWatermarkLevel.Level4: - return 4; - case RxWatermarkLevel.Level8: - return 8; - case RxWatermarkLevel.Level16: - return 16; - case RxWatermarkLevel.Level30: - return 30; - } - } - } - - private int TxWatermarkValue - { - get - { - switch(txWatermarkField.Value) - { - default: - this.Log(LogLevel.Error, "Unexpected state of txWatermarkField ({0})", txWatermarkField.Value); - return 2; - case TxWatermarkLevel.Level1: - return 2; - case TxWatermarkLevel.Level4: - return 4; - case TxWatermarkLevel.Level8: - return 8; - case TxWatermarkLevel.Level16: - return 16; - } - } - } - - private readonly DoubleWordRegisterCollection registers; - private readonly Queue<byte> txQueue; - // InterruptState - private IFlagRegisterField txWatermarkPending; - private IFlagRegisterField rxWatermarkPending; - private IFlagRegisterField txEmptyPending; - private IFlagRegisterField rxOverflowPending; - private IFlagRegisterField rxFrameErrorPending; - private IFlagRegisterField rxBreakErrorPending; - private IFlagRegisterField rxTimeoutPending; - private IFlagRegisterField rxParityErrorPending; - // InterruptEnable - private IFlagRegisterField txWatermarkEnabled; - private IFlagRegisterField rxWatermarkEnabled; - private IFlagRegisterField txEmptyEnabled; - private IFlagRegisterField rxOverflowEnabled; - private IFlagRegisterField rxFrameErrorEnabled; - private IFlagRegisterField rxBreakErrorEnabled; - private IFlagRegisterField rxTimeoutEnabled; - private IFlagRegisterField rxParityErrorEnabled; - // Control - private IFlagRegisterField txEnabled; - private IFlagRegisterField rxEnabled; - private IFlagRegisterField noiseFilterEnabled; - private IFlagRegisterField systemLoopbackEnabled; - private IFlagRegisterField lineLoopbackEnabled; - private IFlagRegisterField parityEnabled; - private IEnumRegisterField<ParityType> parityTypeField; - private IValueRegisterField baudClockRate; - // FIFOControl - private IEnumRegisterField<RxWatermarkLevel> rxWatermarkField; - private IEnumRegisterField<TxWatermarkLevel> txWatermarkField; - - private bool txOngoing; - private bool txWatermarkCrossed; - - private const int rxFIFOCapacity = 32; - private const int txFIFOCapacity = 32; - private const ulong fixedClockFrequency = 50000000; - - private enum ParityType - { - Even = 0, - Odd = 1 - } - - private enum RxWatermarkLevel - { - Level1 = 0, - Level4 = 1, - Level8 = 2, - Level16 = 3, - Level30 = 4 - } - - private enum TxWatermarkLevel - { - Level1 = 0, - Level4 = 1, - Level8 = 2, - Level16 = 3 - } - - private enum Registers : long - { - InterruptState = 0x0, - InterruptEnable = 0x4, - InterruptTest = 0x8, - Control = 0xC, - LiveStatus = 0x10, - ReadData = 0x14, - WriteData = 0x18, - FIFOControl = 0x1C, - FIFOStatus = 0x20, - TxPinOverrideControl = 0x24, - OversampledValues = 0x28, - RxTimeoutControl = 0x2C - } - } -}