diff options
-rw-r--r-- | src/dev/arm/RealView.py | 22 | ||||
-rw-r--r-- | src/dev/arm/rv_ctrl.cc | 25 | ||||
-rw-r--r-- | src/dev/arm/rv_ctrl.hh | 28 |
3 files changed, 74 insertions, 1 deletions
diff --git a/src/dev/arm/RealView.py b/src/dev/arm/RealView.py index 9d4dc6aaf..17b3eb51d 100644 --- a/src/dev/arm/RealView.py +++ b/src/dev/arm/RealView.py @@ -129,6 +129,22 @@ class RealViewOsc(ClockDomain): freq = Param.Clock("Default frequency") +class RealViewTemperatureSensor(SimObject): + type = 'RealViewTemperatureSensor' + cxx_header = "dev/arm/rv_ctrl.hh" + + parent = Param.RealViewCtrl(Parent.any, "RealView controller") + + system = Param.System(Parent.any, "system") + + # See ARM DUI 0447J (ARM Motherboard Express uATX -- V2M-P1) and + # the individual core/logic tile reference manuals for details + # about the site/position/dcc/device allocation. + site = Param.UInt8("Board Site") + position = Param.UInt8("Position in device stack") + dcc = Param.UInt8("Daughterboard Configuration Controller") + device = Param.UInt8("Device ID") + class VExpressMCC(SubSystem): """ARM V2M-P1 Motherboard Configuration Controller @@ -140,11 +156,17 @@ Express (V2M-P1) motherboard. See ARM DUI 0447J for details. class Osc(RealViewOsc): site, position, dcc = (0, 0, 0) + class Temperature(RealViewTemperatureSensor): + site, position, dcc = (0, 0, 0) + osc_mcc = Osc(device=0, freq="50MHz") osc_clcd = Osc(device=1, freq="23.75MHz") osc_peripheral = Osc(device=2, freq="24MHz") osc_system_bus = Osc(device=4, freq="24MHz") + # See Table 4.19 in ARM DUI 0447J (Motherboard Express uATX TRM). + temp_crtl = Temperature(device=0) + class CoreTile2A15DCC(SubSystem): """ARM CoreTile Express A15x2 Daughterboard Configuration Controller diff --git a/src/dev/arm/rv_ctrl.cc b/src/dev/arm/rv_ctrl.cc index 507def0c1..f89f23b59 100644 --- a/src/dev/arm/rv_ctrl.cc +++ b/src/dev/arm/rv_ctrl.cc @@ -37,11 +37,14 @@ * Authors: Ali Saidi */ +#include "dev/arm/rv_ctrl.hh" + #include "base/trace.hh" #include "debug/RVCTRL.hh" -#include "dev/arm/rv_ctrl.hh" #include "mem/packet.hh" #include "mem/packet_access.hh" +#include "sim/power/thermal_model.hh" +#include "sim/system.hh" #include "sim/voltage_domain.hh" RealViewCtrl::RealViewCtrl(Params *p) @@ -293,7 +296,21 @@ RealViewOsc::write(uint32_t freq) clockPeriod(SimClock::Float::s / freq); } +uint32_t +RealViewTemperatureSensor::read() const +{ + // Temperature reported in uC + ThermalModel * tm = system->getThermalModel(); + if (tm) { + double t = tm->getTemp(); + if (t < 0) + warn("Temperature below zero!\n"); + return fmax(0, t) * 1000000; + } + // Report a dummy 25 degrees temperature + return 25000000; +} RealViewCtrl * RealViewCtrlParams::create() @@ -306,3 +323,9 @@ RealViewOscParams::create() { return new RealViewOsc(this); } + +RealViewTemperatureSensor * +RealViewTemperatureSensorParams::create() +{ + return new RealViewTemperatureSensor(this); +} diff --git a/src/dev/arm/rv_ctrl.hh b/src/dev/arm/rv_ctrl.hh index 1a55025a8..b325c4b16 100644 --- a/src/dev/arm/rv_ctrl.hh +++ b/src/dev/arm/rv_ctrl.hh @@ -44,6 +44,7 @@ #include "dev/io_device.hh" #include "params/RealViewCtrl.hh" #include "params/RealViewOsc.hh" +#include "params/RealViewTemperatureSensor.hh" /** @file * This implements the simple real view registers on a PBXA9 @@ -219,5 +220,32 @@ class RealViewOsc void clockPeriod(Tick clock_period); }; +/** + * This device implements the temperature sensor used in the + * RealView/Versatile Express platform. + * + * See ARM DUI 0447J (ARM Motherboard Express uATX -- V2M-P1). + */ +class RealViewTemperatureSensor + : public SimObject, RealViewCtrl::Device +{ + public: + RealViewTemperatureSensor(RealViewTemperatureSensorParams *p) + : SimObject(p), + RealViewCtrl::Device(*p->parent, RealViewCtrl::FUNC_TEMP, + p->site, p->position, p->dcc, p->device), + system(p->system) + {} + virtual ~RealViewTemperatureSensor() {}; + + public: // RealViewCtrl::Device interface + uint32_t read() const override; + void write(uint32_t temp) override {} + + protected: + /** The system this RV device belongs to */ + System * system; +}; + #endif // __DEV_ARM_RV_HH__ |