diff --git a/src/arch/arm/fastmodel/PL330_DMAC/FastModelPL330.py b/src/arch/arm/fastmodel/PL330_DMAC/FastModelPL330.py index ad43fed237..21ead525d3 100644 --- a/src/arch/arm/fastmodel/PL330_DMAC/FastModelPL330.py +++ b/src/arch/arm/fastmodel/PL330_DMAC/FastModelPL330.py @@ -26,6 +26,7 @@ from m5.params import * from m5.objects.FastModel import AmbaInitiatorSocket, AmbaTargetSocket from m5.objects.IntPin import IntSourcePin +from m5.objects.ResetPort import ResetResponsePort from m5.objects.SystemC import SystemC_ScModule @@ -197,6 +198,8 @@ class FastModelPL330(SystemC_ScModule): pio_s = AmbaTargetSocket(64, "Register accesses (secure)") pio_ns = AmbaTargetSocket(64, "Register accesses (non-secure)") + reset_in = ResetResponsePort("System reset") + # irq_abort_master_port # irq_master_port # pvbus_m diff --git a/src/arch/arm/fastmodel/PL330_DMAC/PL330.lisa b/src/arch/arm/fastmodel/PL330_DMAC/PL330.lisa index 3c31c90d87..d57dfdad3d 100644 --- a/src/arch/arm/fastmodel/PL330_DMAC/PL330.lisa +++ b/src/arch/arm/fastmodel/PL330_DMAC/PL330.lisa @@ -64,6 +64,9 @@ component PL330 // Interrupts. pl330.irq_master_port => self.irq; pl330.irq_abort_master_port => self.irq_abort; + + // Reset signals. + self.reset_in => pl330.reset_in; } properties @@ -85,4 +88,6 @@ component PL330 master port irq[32]; master port irq_abort; + + slave port reset_in; } diff --git a/src/arch/arm/fastmodel/PL330_DMAC/pl330.cc b/src/arch/arm/fastmodel/PL330_DMAC/pl330.cc index e582404c8c..13162bd409 100644 --- a/src/arch/arm/fastmodel/PL330_DMAC/pl330.cc +++ b/src/arch/arm/fastmodel/PL330_DMAC/pl330.cc @@ -45,7 +45,8 @@ PL330::PL330(const FastModelPL330Params ¶ms, dma(amba_m, params.name + ".dma", -1), pioS(amba_s, params.name + ".pio_s", -1), pioNs(amba_s_ns, params.name + ".pio_ns", -1), - irqAbortReceiver("irq_abort_receiver") + irqAbortReceiver("irq_abort_receiver"), + resetIn("reset_in", 0) { set_parameter("pl330.fifo_size", params.fifo_size); set_parameter("pl330.max_transfer", params.max_transfer); @@ -211,6 +212,9 @@ PL330::PL330(const FastModelPL330Params ¶ms, // And install it. irqAbortReceiver.onChange(abort_change); + + // Plumb the reset signal. + resetIn.signal_out.bind(this->reset_in); } void @@ -250,6 +254,8 @@ PL330::gem5_getPort(const std::string &if_name, int idx) } if (port != -1 && port < irqPort.size()) return *irqPort[port].at(idx); + } else if (if_name == "reset_in") { + return resetIn; } return scx_evs_PL330::gem5_getPort(if_name, idx); diff --git a/src/arch/arm/fastmodel/PL330_DMAC/pl330.hh b/src/arch/arm/fastmodel/PL330_DMAC/pl330.hh index 3af56f2e6e..389f7047c7 100644 --- a/src/arch/arm/fastmodel/PL330_DMAC/pl330.hh +++ b/src/arch/arm/fastmodel/PL330_DMAC/pl330.hh @@ -39,6 +39,7 @@ #include "arch/arm/fastmodel/amba_ports.hh" #include "arch/arm/fastmodel/common/signal_receiver.hh" +#include "arch/arm/fastmodel/common/signal_sender.hh" #include "arch/arm/fastmodel/protocol/exported_clock_rate_control.hh" #include "dev/intpin.hh" #include "params/FastModelPL330.hh" @@ -73,6 +74,8 @@ class PL330 : public scx_evs_PL330 void allocateIrq(int idx, int count); + SignalSender resetIn; + public: PL330(const FastModelPL330Params ¶ms, sc_core::sc_module_name _name); PL330(const FastModelPL330Params ¶ms) :