summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2015-09-11 15:56:09 +0100
committerAndreas Sandberg <andreas.sandberg@arm.com>2015-09-11 15:56:09 +0100
commita1517867415abe0705d195bbe4cf62cc7fa03e47 (patch)
treec3388a37379ccf1110492f7b451912d0b8644461
parentf7055e9215106fbd8297083298a815ef7098a028 (diff)
downloadgem5-a1517867415abe0705d195bbe4cf62cc7fa03e47.tar.xz
dev: Add an underrun statistic to the HDLCD controller
Add a stat that counts buffer underruns in the HDLCD controller. The stat counts at most one underrun per frame since the controller aborts the current frame if it underruns.
-rw-r--r--src/dev/arm/hdlcd.cc13
-rw-r--r--src/dev/arm/hdlcd.hh7
2 files changed, 20 insertions, 0 deletions
diff --git a/src/dev/arm/hdlcd.cc b/src/dev/arm/hdlcd.cc
index 84df24472..2c402b00a 100644
--- a/src/dev/arm/hdlcd.cc
+++ b/src/dev/arm/hdlcd.cc
@@ -95,6 +95,18 @@ HDLcd::~HDLcd()
}
void
+HDLcd::regStats()
+{
+ using namespace Stats;
+
+ stats.underruns
+ .name(name() + ".underruns")
+ .desc("number of buffer underruns")
+ .flags(nozero)
+ ;
+}
+
+void
HDLcd::serialize(CheckpointOut &cp) const
{
DPRINTF(Checkpoint, "Serializing ARM HDLCD\n");
@@ -503,6 +515,7 @@ void
HDLcd::pxlUnderrun()
{
DPRINTF(HDLcd, "Buffer underrun, stopping DMA fill.\n");
+ ++stats.underruns;
intRaise(INT_UNDERRUN);
dmaEngine->abortFrame();
}
diff --git a/src/dev/arm/hdlcd.hh b/src/dev/arm/hdlcd.hh
index 3a83c6ad4..cb47b8522 100644
--- a/src/dev/arm/hdlcd.hh
+++ b/src/dev/arm/hdlcd.hh
@@ -95,6 +95,8 @@ class HDLcd: public AmbaDmaDevice
HDLcd(const HDLcdParams *p);
~HDLcd();
+ void regStats() M5_ATTR_OVERRIDE;
+
void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE;
void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE;
@@ -381,6 +383,11 @@ class HDLcd: public AmbaDmaDevice
};
std::unique_ptr<DmaEngine> dmaEngine;
+
+ protected: // Statistics
+ struct {
+ Stats::Scalar underruns;
+ } stats;
};
#endif