gem5  v20.1.0.0
Classes | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
ArmISA::PMU Class Reference

Model of an ARM PMU version 3. More...

#include <pmu.hh>

Inheritance diagram for ArmISA::PMU:
SimObject ArmISA::BaseISADevice EventManager Serializable Drainable Stats::Group

Classes

struct  CounterState
 State of a counter within the PMU. More...
 
struct  PMUEvent
 Event definition base class. More...
 
struct  RegularEvent
 
class  SWIncrementEvent
 

Public Member Functions

 PMU (const ArmPMUParams *p)
 
 ~PMU ()
 
void addEventProbe (unsigned int id, SimObject *obj, const char *name)
 
void addSoftwareIncrementEvent (unsigned int id)
 
void registerEvent (uint32_t id)
 
void serialize (CheckpointOut &cp) const override
 Serialize an object. More...
 
void unserialize (CheckpointIn &cp) override
 Unserialize an object. More...
 
void drainResume () override
 Resume execution after a successful drain. More...
 
void regProbeListeners () override
 Register probe listeners for this object. More...
 
void setThreadContext (ThreadContext *tc) override
 
void setMiscReg (int misc_reg, RegVal val) override
 Set a register within the PMU. More...
 
RegVal readMiscReg (int misc_reg) override
 Read a register within the PMU. More...
 
- Public Member Functions inherited from SimObject
const Paramsparams () const
 
 SimObject (const Params *_params)
 
virtual ~SimObject ()
 
virtual const std::string name () const
 
virtual void init ()
 init() is called after all C++ SimObjects have been created and all ports are connected. More...
 
virtual void loadState (CheckpointIn &cp)
 loadState() is called on each SimObject when restoring from a checkpoint. More...
 
virtual void initState ()
 initState() is called on each SimObject when not restoring from a checkpoint. More...
 
virtual void regProbePoints ()
 Register probe points for this object. More...
 
ProbeManagergetProbeManager ()
 Get the probe manager for this object. More...
 
virtual PortgetPort (const std::string &if_name, PortID idx=InvalidPortID)
 Get a port with a given name and index. More...
 
virtual void startup ()
 startup() is the final initialization call before simulation. More...
 
DrainState drain () override
 Provide a default implementation of the drain interface for objects that don't need draining. More...
 
virtual void memWriteback ()
 Write back dirty buffers to memory using functional writes. More...
 
virtual void memInvalidate ()
 Invalidate the contents of memory buffers. More...
 
void serialize (CheckpointOut &cp) const override
 Serialize an object. More...
 
void unserialize (CheckpointIn &cp) override
 Unserialize an object. More...
 
- Public Member Functions inherited from EventManager
EventQueueeventQueue () const
 
void schedule (Event &event, Tick when)
 
void deschedule (Event &event)
 
void reschedule (Event &event, Tick when, bool always=false)
 
void schedule (Event *event, Tick when)
 
void deschedule (Event *event)
 
void reschedule (Event *event, Tick when, bool always=false)
 
void wakeupEventQueue (Tick when=(Tick) -1)
 This function is not needed by the usual gem5 event loop but may be necessary in derived EventQueues which host gem5 on other schedulers. More...
 
void setCurTick (Tick newVal)
 
 EventManager (EventManager &em)
 Event manger manages events in the event queue. More...
 
 EventManager (EventManager *em)
 
 EventManager (EventQueue *eq)
 
- Public Member Functions inherited from Serializable
 Serializable ()
 
virtual ~Serializable ()
 
void serializeSection (CheckpointOut &cp, const char *name) const
 Serialize an object into a new section. More...
 
void serializeSection (CheckpointOut &cp, const std::string &name) const
 
void unserializeSection (CheckpointIn &cp, const char *name)
 Unserialize an a child object. More...
 
void unserializeSection (CheckpointIn &cp, const std::string &name)
 
- Public Member Functions inherited from Drainable
DrainState drainState () const
 Return the current drain state of an object. More...
 
virtual void notifyFork ()
 Notify a child process of a fork. More...
 
- Public Member Functions inherited from Stats::Group
 Group (Group *parent, const char *name=nullptr)
 Construct a new statistics group. More...
 
virtual ~Group ()
 
virtual void regStats ()
 Callback to set stat parameters. More...
 
virtual void resetStats ()
 Callback to reset stats. More...
 
virtual void preDumpStats ()
 Callback before stats are dumped. More...
 
void addStat (Stats::Info *info)
 Register a stat with this group. More...
 
const std::map< std::string, Group * > & getStatGroups () const
 Get all child groups associated with this object. More...
 
const std::vector< Info * > & getStats () const
 Get all stats associated with this object. More...
 
void addStatGroup (const char *name, Group *block)
 Add a stat block as a child of this block. More...
 
const InforesolveStat (std::string name) const
 Resolve a stat by its name within this group. More...
 
 Group ()=delete
 
 Group (const Group &)=delete
 
Groupoperator= (const Group &)=delete
 
- Public Member Functions inherited from ArmISA::BaseISADevice
 BaseISADevice ()
 
virtual ~BaseISADevice ()
 
virtual void setISA (ISA *isa)
 

Protected Types

typedef unsigned int EventTypeId
 Event type ID. More...
 

Protected Member Functions

 BitUnion32 (PMCR_t) Bitfield< 0 > e
 
 EndBitUnion (PMCR_t) BitUnion32(PMSELR_t) Bitfield< 4
 
 EndBitUnion (PMSELR_t) BitUnion32(PMEVTYPER_t) Bitfield< 15
 
 EndBitUnion (PMEVTYPER_t) typedef unsigned int CounterId
 Counter ID within the PMU. More...
 
RegVal readMiscRegInt (int misc_reg)
 
void setControlReg (PMCR_t val)
 PMCR write handling. More...
 
void resetEventCounts ()
 Reset all event counters excluding the cycle counter to zero. More...
 
void raiseInterrupt ()
 Deliver a PMU interrupt to the GIC. More...
 
void clearInterrupt ()
 Clear a PMU interrupt. More...
 
uint64_t getCounterValue (CounterId id) const
 Get the value of a performance counter. More...
 
void setCounterValue (CounterId id, uint64_t val)
 Set the value of a performance counter. More...
 
PMEVTYPER_t getCounterTypeRegister (CounterId id) const
 Get the type and filter settings of a counter (PMEVTYPER) More...
 
void setCounterTypeRegister (CounterId id, PMEVTYPER_t type)
 Set the type and filter settings of a performance counter (PMEVTYPER) More...
 
void setOverflowStatus (RegVal new_val)
 Used for writing the Overflow Flag Status Register (SET/CLR) More...
 
PMUEventgetEvent (uint64_t eventId)
 Obtain the event of a given id. More...
 
bool isValidCounter (CounterId id) const
 Is this a valid counter ID? More...
 
CounterStategetCounter (CounterId id)
 Return the state of a counter. More...
 
const CounterStategetCounter (CounterId id) const
 Return the state of a counter. More...
 
void updateCounter (CounterState &ctr)
 Depending on counter configuration, add or remove the probes driving the counter. More...
 
bool isFiltered (const CounterState &ctr) const
 Check if a counter's settings allow it to be counted. More...
 
void updateAllCounters ()
 Call updateCounter() for each counter in the PMU if the counter's state has changed. More...
 
- Protected Member Functions inherited from Drainable
 Drainable ()
 
virtual ~Drainable ()
 
void signalDrainDone () const
 Signal that an object is drained. More...
 

Protected Attributes

Bitfield< 1 > p
 
Bitfield< 2 > c
 
Bitfield< 3 > d
 
Bitfield< 4 > x
 
Bitfield< 5 > dp
 
Bitfield< 6 > lc
 
Bitfield< 15, 11 > n
 
Bitfield< 23, 16 > idcode
 
Bitfield< 31, 24 > imp
 
 sel
 
 evtCount
 
Bitfield< 26 > m
 
Bitfield< 27 > nsh
 
Bitfield< 28 > nsu
 
Bitfield< 29 > nsk
 
Bitfield< 30 > u
 
Bitfield< 31 > p
 
RegVal reg_pmcnten
 Performance Monitor Count Enable Register. More...
 
PMCR_t reg_pmcr
 Performance Monitor Control Register. More...
 
PMSELR_t reg_pmselr
 Performance Monitor Selection Register. More...
 
RegVal reg_pminten
 Performance Monitor Interrupt Enable Register. More...
 
RegVal reg_pmovsr
 Performance Monitor Overflow Status Register. More...
 
uint64_t reg_pmceid0
 Performance counter ID register. More...
 
uint64_t reg_pmceid1
 
unsigned clock_remainder
 Remainder part when the clock counter is divided by 64. More...
 
uint64_t maximumCounterCount
 The number of regular event counters. More...
 
std::vector< CounterStatecounters
 State of all general-purpose counters supported by PMU. More...
 
CounterState cycleCounter
 State of the cycle counter. More...
 
const uint64_t cycleCounterEventId
 The id of the counter hardwired to the cpu cycle counter. More...
 
SWIncrementEventswIncrementEvent
 The event that implements the software increment. More...
 
PMCR_t reg_pmcr_conf
 Constant (configuration-dependent) part of the PMCR. More...
 
ArmInterruptPininterrupt
 Performance monitor interrupt number. More...
 
std::map< EventTypeId, PMUEvent * > eventMap
 List of event types supported by this PMU. More...
 
- Protected Attributes inherited from SimObject
const SimObjectParams * _params
 Cached copy of the object parameters. More...
 
- Protected Attributes inherited from EventManager
EventQueueeventq
 A pointer to this object's event queue. More...
 
- Protected Attributes inherited from ArmISA::BaseISADevice
ISAisa
 

Static Protected Attributes

static const CounterId PMCCNTR = 31
 Cycle Count Register Number. More...
 
static const RegVal reg_pmcr_wr_mask = 0x39
 PMCR write mask when accessed from the guest. More...
 

Additional Inherited Members

- Public Types inherited from SimObject
typedef SimObjectParams Params
 
- Static Public Member Functions inherited from SimObject
static void serializeAll (CheckpointOut &cp)
 Serialize all SimObjects in the system. More...
 
static SimObjectfind (const char *name)
 Find the SimObject with the given name and return a pointer to it. More...
 
- Static Public Member Functions inherited from Serializable
static const std::string & currentSection ()
 Gets the fully-qualified name of the active section. More...
 
static void serializeAll (const std::string &cpt_dir)
 Serializes all the SimObjects. More...
 
static void unserializeGlobals (CheckpointIn &cp)
 

Detailed Description

Model of an ARM PMU version 3.

This class implements a subset of the ARM PMU v3 specification as described in the ARMv8 reference manual. It supports most of the features of the PMU, however the following features are known to be missing:

The PMU itself does not implement any events, in merely provides an interface for the configuration scripts to hook up probes that drive events. Configuration scripts should call addEventProbe() to configure custom events or high-level methods to configure architected events. The Python implementation of addEventProbe() automatically delays event type registration until after instantiation.

In order to support CPU switching and some combined counters (e.g., memory references synthesized from loads and stores), the PMU allows multiple probes per event type. When creating a system that switches between CPU models that share the same PMU, PMU events for all of the CPU models can be registered with the PMU.

See also
The ARM Architecture Refererence Manual (DDI 0487A)

Definition at line 94 of file pmu.hh.

Member Typedef Documentation

◆ EventTypeId

typedef unsigned int ArmISA::PMU::EventTypeId
protected

Event type ID.

See the PMU documentation for a list of architected IDs.

Definition at line 193 of file pmu.hh.

Constructor & Destructor Documentation

◆ PMU()

ArmISA::PMU::PMU ( const ArmPMUParams *  p)

◆ ~PMU()

ArmISA::PMU::~PMU ( )

Definition at line 87 of file pmu.cc.

Member Function Documentation

◆ addEventProbe()

void ArmISA::PMU::addEventProbe ( unsigned int  id,
SimObject obj,
const char *  name 
)

Definition at line 124 of file pmu.cc.

References DPRINTF, MipsISA::event, eventMap, fatal, ArmISA::id, SimObject::name(), and registerEvent().

◆ addSoftwareIncrementEvent()

void ArmISA::PMU::addSoftwareIncrementEvent ( unsigned int  id)

Definition at line 102 of file pmu.cc.

References DPRINTF, eventMap, fatal_if, ArmISA::id, registerEvent(), and swIncrementEvent.

◆ BitUnion32()

ArmISA::PMU::BitUnion32 ( PMCR_t  )
protected

◆ clearInterrupt()

void ArmISA::PMU::clearInterrupt ( )
protected

Clear a PMU interrupt.

Definition at line 675 of file pmu.cc.

References ArmInterruptPin::clear(), DPRINTF, interrupt, and warn_once.

Referenced by setOverflowStatus().

◆ drainResume()

void ArmISA::PMU::drainResume ( )
overridevirtual

Resume execution after a successful drain.

Reimplemented from Drainable.

Definition at line 166 of file pmu.cc.

References updateAllCounters().

◆ EndBitUnion() [1/3]

ArmISA::PMU::EndBitUnion ( PMCR_t  )
protected

◆ EndBitUnion() [2/3]

ArmISA::PMU::EndBitUnion ( PMEVTYPER_t  )
protected

Counter ID within the PMU.

This value is typically used to index into various registers controlling interrupts and overflows. The value normally in the [0, 31] range, where 31 refers to the cycle counter.

◆ EndBitUnion() [3/3]

ArmISA::PMU::EndBitUnion ( PMSELR_t  )
protected

◆ getCounter() [1/2]

CounterState& ArmISA::PMU::getCounter ( CounterId  id)
inlineprotected

Return the state of a counter.

Parameters
idID of counter within the PMU.
Returns
Reference to a CounterState instance representing the counter.

Definition at line 522 of file pmu.hh.

References counters, cycleCounter, ArmISA::id, isValidCounter(), and PMCCNTR.

Referenced by getCounterTypeRegister(), getCounterValue(), setCounterTypeRegister(), and setCounterValue().

◆ getCounter() [2/2]

const CounterState& ArmISA::PMU::getCounter ( CounterId  id) const
inlineprotected

Return the state of a counter.

Parameters
idID of counter within the PMU.
Returns
Reference to a CounterState instance representing the counter.

Definition at line 534 of file pmu.hh.

References counters, cycleCounter, ArmISA::id, isValidCounter(), and PMCCNTR.

◆ getCounterTypeRegister()

PMU::PMEVTYPER_t ArmISA::PMU::getCounterTypeRegister ( CounterId  id) const
protected

Get the type and filter settings of a counter (PMEVTYPER)

This method implements a read from a PMEVTYPER register. It returns the type value and filter settings of a general purpose performance counter or the cycle counter. Non-existing counters are treated as constant '0'.

Parameters
idCounter ID within the PMU.
Returns
Performance counter type ID.

Definition at line 611 of file pmu.cc.

References ArmISA::PMU::CounterState::eventId, ArmISA::PMU::CounterState::filter, getCounter(), isValidCounter(), and type.

Referenced by readMiscRegInt().

◆ getCounterValue()

uint64_t ArmISA::PMU::getCounterValue ( CounterId  id) const
inlineprotected

Get the value of a performance counter.

This method returns the value of a general purpose performance counter or the fixed-function cycle counter. Non-existing counters are treated as constant '0'.

Returns
Value of the performance counter, 0 if the counter does not exist.

Definition at line 233 of file pmu.hh.

References getCounter(), ArmISA::PMU::CounterState::getValue(), and isValidCounter().

Referenced by readMiscRegInt().

◆ getEvent()

PMU::PMUEvent * ArmISA::PMU::getEvent ( uint64_t  eventId)
protected

Obtain the event of a given id.

Parameters
theid of the event to obtain
Returns
a pointer to the event with id eventId

Definition at line 735 of file pmu.cc.

References eventMap, and warn.

Referenced by regProbeListeners().

◆ isFiltered()

bool ArmISA::PMU::isFiltered ( const CounterState ctr) const
protected

Check if a counter's settings allow it to be counted.

Parameters
ctrCounter state instance representing this counter.
Returns
false if the counter is active, true otherwise.

Referenced by ArmISA::PMU::CounterState::add().

◆ isValidCounter()

bool ArmISA::PMU::isValidCounter ( CounterId  id) const
inlineprotected

Is this a valid counter ID?

Parameters
idID of counter within the PMU.
Returns
true if counter is within the allowed range or the cycle counter, false otherwise.

Definition at line 511 of file pmu.hh.

References counters, and PMCCNTR.

Referenced by getCounter(), getCounterTypeRegister(), getCounterValue(), setCounterTypeRegister(), and setCounterValue().

◆ raiseInterrupt()

void ArmISA::PMU::raiseInterrupt ( )
protected

Deliver a PMU interrupt to the GIC.

Definition at line 663 of file pmu.cc.

References DPRINTF, interrupt, ArmInterruptPin::raise(), and warn_once.

Referenced by setOverflowStatus().

◆ readMiscReg()

RegVal ArmISA::PMU::readMiscReg ( int  misc_reg)
overridevirtual

Read a register within the PMU.

Parameters
misc_regRegister number (see miscregs.hh)
Returns
Register value.

Implements ArmISA::BaseISADevice.

Definition at line 298 of file pmu.cc.

References DPRINTF, ArmISA::miscRegName, readMiscRegInt(), ArmISA::unflattenMiscReg(), and X86ISA::val.

◆ readMiscRegInt()

RegVal ArmISA::PMU::readMiscRegInt ( int  misc_reg)
protected

◆ registerEvent()

void ArmISA::PMU::registerEvent ( uint32_t  id)

Definition at line 150 of file pmu.cc.

References ArmISA::id, reg_pmceid0, and reg_pmceid1.

Referenced by addEventProbe(), and addSoftwareIncrementEvent().

◆ regProbeListeners()

void ArmISA::PMU::regProbeListeners ( )
overridevirtual

Register probe listeners for this object.

No probe listeners by default, so do nothing in base.

Reimplemented from SimObject.

Definition at line 173 of file pmu.cc.

References ArmISA::PMU::CounterState::attach(), counters, cycleCounter, cycleCounterEventId, ArmISA::PMU::CounterState::enabled, MipsISA::event, getEvent(), MipsISA::index, maximumCounterCount, and panic_if.

◆ resetEventCounts()

void ArmISA::PMU::resetEventCounts ( )
protected

Reset all event counters excluding the cycle counter to zero.

Definition at line 591 of file pmu.cc.

References counters.

Referenced by setControlReg().

◆ serialize()

void ArmISA::PMU::serialize ( CheckpointOut cp) const
overridevirtual

Serialize an object.

Output an object's state into the current checkpoint section.

Parameters
cpCheckpoint state

Implements Serializable.

Definition at line 687 of file pmu.cc.

References clock_remainder, counters, csprintf(), cycleCounter, DPRINTF, ArmISA::i, reg_pmceid0, reg_pmceid1, reg_pmcnten, reg_pmcr, reg_pminten, reg_pmovsr, reg_pmselr, SERIALIZE_SCALAR, and Serializable::serializeSection().

◆ setControlReg()

void ArmISA::PMU::setControlReg ( PMCR_t  val)
protected

PMCR write handling.

The PMCR register needs special handling since writing to it changes PMU-global state (e.g., resets all counters).

Parameters
valNew PMCR value

Definition at line 397 of file pmu.cc.

References clock_remainder, cycleCounter, DPRINTF, reg_pmcr, reg_pmcr_wr_mask, resetEventCounts(), ArmISA::PMU::CounterState::setValue(), updateAllCounters(), and X86ISA::val.

Referenced by setMiscReg().

◆ setCounterTypeRegister()

void ArmISA::PMU::setCounterTypeRegister ( CounterId  id,
PMEVTYPER_t  type 
)
protected

Set the type and filter settings of a performance counter (PMEVTYPER)

This method implements a write to a PMEVTYPER register. It sets the type value and filter settings of a general purpose performance counter or the cycle counter. Writes to non-existing counters are ignored. The method automatically updates the probes used by the counter if it is enabled.

Parameters
idCounter ID within the PMU.
typePerformance counter type and filter configuration..

Definition at line 625 of file pmu.cc.

References DPRINTF, ArmISA::PMU::CounterState::eventId, ArmISA::PMU::CounterState::filter, getCounter(), isValidCounter(), PMCCNTR, updateCounter(), X86ISA::val, and warn_once.

Referenced by setMiscReg().

◆ setCounterValue()

void ArmISA::PMU::setCounterValue ( CounterId  id,
uint64_t  val 
)
protected

Set the value of a performance counter.

This method sets the value of a general purpose performance counter or the fixed-function cycle counter. Writes to non-existing counters are ignored.

Definition at line 598 of file pmu.cc.

References getCounter(), isValidCounter(), ArmISA::PMU::CounterState::setValue(), X86ISA::val, and warn_once.

Referenced by setMiscReg().

◆ setMiscReg()

void ArmISA::PMU::setMiscReg ( int  misc_reg,
RegVal  val 
)
overridevirtual

Set a register within the PMU.

Parameters
misc_regRegister number (see miscregs.hh)
valValue to store

Implements ArmISA::BaseISADevice.

Definition at line 189 of file pmu.cc.

References cycleCounter, DPRINTF, ArmISA::MISCREG_PMCCFILTR, ArmISA::MISCREG_PMCCFILTR_EL0, ArmISA::MISCREG_PMCCNTR, ArmISA::MISCREG_PMCCNTR_EL0, ArmISA::MISCREG_PMCEID0, ArmISA::MISCREG_PMCEID0_EL0, ArmISA::MISCREG_PMCEID1, ArmISA::MISCREG_PMCEID1_EL0, ArmISA::MISCREG_PMCNTENCLR, ArmISA::MISCREG_PMCNTENCLR_EL0, ArmISA::MISCREG_PMCNTENSET, ArmISA::MISCREG_PMCNTENSET_EL0, ArmISA::MISCREG_PMCR, ArmISA::MISCREG_PMCR_EL0, ArmISA::MISCREG_PMEVCNTR0_EL0, ArmISA::MISCREG_PMEVTYPER0_EL0, ArmISA::MISCREG_PMINTENCLR, ArmISA::MISCREG_PMINTENCLR_EL1, ArmISA::MISCREG_PMINTENSET, ArmISA::MISCREG_PMINTENSET_EL1, ArmISA::MISCREG_PMOVSCLR_EL0, ArmISA::MISCREG_PMOVSR, ArmISA::MISCREG_PMOVSSET, ArmISA::MISCREG_PMOVSSET_EL0, ArmISA::MISCREG_PMSELR, ArmISA::MISCREG_PMSELR_EL0, ArmISA::MISCREG_PMSWINC, ArmISA::MISCREG_PMSWINC_EL0, ArmISA::MISCREG_PMUSERENR, ArmISA::MISCREG_PMUSERENR_EL0, ArmISA::MISCREG_PMXEVCNTR, ArmISA::MISCREG_PMXEVCNTR_EL0, ArmISA::MISCREG_PMXEVTYPER, ArmISA::MISCREG_PMXEVTYPER_EL0, ArmISA::MISCREG_PMXEVTYPER_PMCCFILTR, ArmISA::miscRegName, panic, PMCCNTR, reg_pmcnten, reg_pminten, reg_pmovsr, reg_pmselr, setControlReg(), setCounterTypeRegister(), setCounterValue(), setOverflowStatus(), ArmISA::PMU::CounterState::setValue(), swIncrementEvent, ArmISA::unflattenMiscReg(), updateAllCounters(), X86ISA::val, warn, and ArmISA::PMU::SWIncrementEvent::write().

◆ setOverflowStatus()

void ArmISA::PMU::setOverflowStatus ( RegVal  new_val)
protected

Used for writing the Overflow Flag Status Register (SET/CLR)

This method implements a write to the PMOVSSET/PMOVSCLR registers. It is capturing change of state in the register bits so that the overflow interrupt can be raised/cleared as a side effect of the write.

Parameters
new_valNew value of the Overflow Status Register

Definition at line 649 of file pmu.cc.

References clearInterrupt(), raiseInterrupt(), reg_pminten, and reg_pmovsr.

Referenced by setMiscReg().

◆ setThreadContext()

void ArmISA::PMU::setThreadContext ( ThreadContext tc)
overridevirtual

Reimplemented from ArmISA::BaseISADevice.

Definition at line 92 of file pmu.cc.

References ThreadContext::contextId(), DPRINTF, interrupt, and SimObject::params().

◆ unserialize()

void ArmISA::PMU::unserialize ( CheckpointIn cp)
overridevirtual

Unserialize an object.

Read an object's state from the current checkpoint section.

Parameters
cpCheckpoint state

Implements Serializable.

Definition at line 707 of file pmu.cc.

References clock_remainder, counters, csprintf(), cycleCounter, DPRINTF, ArmISA::i, paramIn(), reg_pmceid0, reg_pmceid1, reg_pmcnten, reg_pmcr, reg_pminten, reg_pmovsr, reg_pmselr, UNSERIALIZE_OPT_SCALAR, UNSERIALIZE_SCALAR, and Serializable::unserializeSection().

◆ updateAllCounters()

void ArmISA::PMU::updateAllCounters ( )
protected

Call updateCounter() for each counter in the PMU if the counter's state has changed.

See also
updateCounter()

Definition at line 420 of file pmu.cc.

References counters, cycleCounter, X86ISA::enable, ArmISA::PMU::CounterState::enabled, ArmISA::i, PMCCNTR, reg_pmcnten, reg_pmcr, and updateCounter().

Referenced by drainResume(), setControlReg(), and setMiscReg().

◆ updateCounter()

void ArmISA::PMU::updateCounter ( CounterState ctr)
protected

Depending on counter configuration, add or remove the probes driving the counter.

Look at the state of a counter and (re-)attach the probes needed to drive a counter if it is currently active. All probes for the counter are detached if the counter is inactive.

Parameters
idID of counter within the PMU.
ctrReference to the counter's state

Definition at line 568 of file pmu.cc.

References ArmISA::PMU::CounterState::attach(), ArmISA::PMU::CounterState::detach(), DPRINTF, ArmISA::PMU::CounterState::enabled, ArmISA::PMU::CounterState::eventId, eventMap, ArmISA::PMU::CounterState::getCounterId(), and warn.

Referenced by setCounterTypeRegister(), and updateAllCounters().

Member Data Documentation

◆ c

Bitfield<2> ArmISA::PMU::c
protected

Definition at line 137 of file pmu.hh.

◆ clock_remainder

unsigned ArmISA::PMU::clock_remainder
protected

Remainder part when the clock counter is divided by 64.

Definition at line 594 of file pmu.hh.

Referenced by serialize(), setControlReg(), and unserialize().

◆ counters

std::vector<CounterState> ArmISA::PMU::counters
protected

State of all general-purpose counters supported by PMU.

Definition at line 600 of file pmu.hh.

Referenced by getCounter(), isValidCounter(), regProbeListeners(), resetEventCounts(), serialize(), unserialize(), and updateAllCounters().

◆ cycleCounter

CounterState ArmISA::PMU::cycleCounter
protected

State of the cycle counter.

Definition at line 603 of file pmu.hh.

Referenced by getCounter(), PMU(), readMiscRegInt(), regProbeListeners(), serialize(), setControlReg(), setMiscReg(), unserialize(), and updateAllCounters().

◆ cycleCounterEventId

const uint64_t ArmISA::PMU::cycleCounterEventId
protected

The id of the counter hardwired to the cpu cycle counter.

Definition at line 606 of file pmu.hh.

Referenced by regProbeListeners().

◆ d

Bitfield<3> ArmISA::PMU::d
protected

Definition at line 139 of file pmu.hh.

◆ dp

Bitfield<5> ArmISA::PMU::dp
protected

Definition at line 143 of file pmu.hh.

◆ eventMap

std::map<EventTypeId, PMUEvent*> ArmISA::PMU::eventMap
protected

List of event types supported by this PMU.

Definition at line 624 of file pmu.hh.

Referenced by addEventProbe(), addSoftwareIncrementEvent(), getEvent(), and updateCounter().

◆ evtCount

ArmISA::PMU::evtCount
protected

Definition at line 160 of file pmu.hh.

◆ idcode

Bitfield<23, 16> ArmISA::PMU::idcode
protected

Definition at line 149 of file pmu.hh.

◆ imp

Bitfield<31, 24> ArmISA::PMU::imp
protected

Definition at line 151 of file pmu.hh.

◆ interrupt

ArmInterruptPin* ArmISA::PMU::interrupt
protected

Performance monitor interrupt number.

Definition at line 619 of file pmu.hh.

Referenced by clearInterrupt(), raiseInterrupt(), and setThreadContext().

◆ lc

Bitfield<6> ArmISA::PMU::lc
protected

Definition at line 145 of file pmu.hh.

◆ m

Bitfield<26> ArmISA::PMU::m
protected

Definition at line 163 of file pmu.hh.

◆ maximumCounterCount

uint64_t ArmISA::PMU::maximumCounterCount
protected

The number of regular event counters.

Definition at line 597 of file pmu.hh.

Referenced by PMU(), and regProbeListeners().

◆ n

Bitfield<15, 11> ArmISA::PMU::n
protected

Definition at line 147 of file pmu.hh.

◆ nsh

Bitfield<27> ArmISA::PMU::nsh
protected

Definition at line 165 of file pmu.hh.

◆ nsk

Bitfield<29> ArmISA::PMU::nsk
protected

Definition at line 169 of file pmu.hh.

◆ nsu

Bitfield<28> ArmISA::PMU::nsu
protected

Definition at line 167 of file pmu.hh.

◆ p [1/2]

Bitfield<1> ArmISA::PMU::p
protected

Definition at line 135 of file pmu.hh.

Referenced by PMU().

◆ p [2/2]

Bitfield<31> ArmISA::PMU::p
protected

Definition at line 173 of file pmu.hh.

◆ PMCCNTR

const CounterId ArmISA::PMU::PMCCNTR = 31
staticprotected

Cycle Count Register Number.

Definition at line 186 of file pmu.hh.

Referenced by getCounter(), isValidCounter(), readMiscRegInt(), setCounterTypeRegister(), setMiscReg(), and updateAllCounters().

◆ reg_pmceid0

uint64_t ArmISA::PMU::reg_pmceid0
protected

Performance counter ID register.

These registers contain a bitmask of available architected counters.

Definition at line 590 of file pmu.hh.

Referenced by readMiscRegInt(), registerEvent(), serialize(), and unserialize().

◆ reg_pmceid1

uint64_t ArmISA::PMU::reg_pmceid1
protected

Definition at line 591 of file pmu.hh.

Referenced by readMiscRegInt(), registerEvent(), serialize(), and unserialize().

◆ reg_pmcnten

RegVal ArmISA::PMU::reg_pmcnten
protected

Performance Monitor Count Enable Register.

Definition at line 570 of file pmu.hh.

Referenced by readMiscRegInt(), serialize(), setMiscReg(), unserialize(), and updateAllCounters().

◆ reg_pmcr

PMCR_t ArmISA::PMU::reg_pmcr
protected

Performance Monitor Control Register.

Definition at line 573 of file pmu.hh.

Referenced by readMiscRegInt(), serialize(), setControlReg(), unserialize(), and updateAllCounters().

◆ reg_pmcr_conf

PMCR_t ArmISA::PMU::reg_pmcr_conf
protected

Constant (configuration-dependent) part of the PMCR.

Definition at line 613 of file pmu.hh.

Referenced by PMU(), and readMiscRegInt().

◆ reg_pmcr_wr_mask

const RegVal ArmISA::PMU::reg_pmcr_wr_mask = 0x39
staticprotected

PMCR write mask when accessed from the guest.

Definition at line 616 of file pmu.hh.

Referenced by readMiscRegInt(), and setControlReg().

◆ reg_pminten

RegVal ArmISA::PMU::reg_pminten
protected

Performance Monitor Interrupt Enable Register.

Definition at line 579 of file pmu.hh.

Referenced by readMiscRegInt(), serialize(), setMiscReg(), setOverflowStatus(), and unserialize().

◆ reg_pmovsr

RegVal ArmISA::PMU::reg_pmovsr
protected

Performance Monitor Overflow Status Register.

Definition at line 582 of file pmu.hh.

Referenced by readMiscRegInt(), serialize(), setMiscReg(), setOverflowStatus(), and unserialize().

◆ reg_pmselr

PMSELR_t ArmISA::PMU::reg_pmselr
protected

Performance Monitor Selection Register.

Definition at line 576 of file pmu.hh.

Referenced by readMiscRegInt(), serialize(), setMiscReg(), and unserialize().

◆ sel

ArmISA::PMU::sel
protected

Definition at line 156 of file pmu.hh.

◆ swIncrementEvent

SWIncrementEvent* ArmISA::PMU::swIncrementEvent
protected

The event that implements the software increment.

Definition at line 609 of file pmu.hh.

Referenced by addSoftwareIncrementEvent(), and setMiscReg().

◆ u

Bitfield<30> ArmISA::PMU::u
protected

Definition at line 171 of file pmu.hh.

◆ x

Bitfield<4> ArmISA::PMU::x
protected

Definition at line 141 of file pmu.hh.


The documentation for this class was generated from the following files:

Generated on Wed Sep 30 2020 14:02:36 for gem5 by doxygen 1.8.17