|
gem5 v23.0.0.1
|
#include <table_walker.hh>
Classes | |
| class | DescriptorBase |
| class | L1Descriptor |
| class | L2Descriptor |
| Level 2 page table descriptor. More... | |
| class | LongDescriptor |
| Long-descriptor format (LPAE) More... | |
| class | Port |
| class | Stage2Walk |
| This translation class is used to trigger the data fetch once a timing translation returns the translated physical address. More... | |
| class | TableWalkerState |
| struct | TableWalkerStats |
| Statistics. More... | |
| class | WalkerState |
Public Member Functions | |
| Fault | readDataUntimed (ThreadContext *tc, Addr vaddr, Addr desc_addr, uint8_t *data, int num_bytes, Request::Flags flags, BaseMMU::Mode mode, MMU::ArmTranslationType tran_type, bool functional) |
| void | readDataTimed (ThreadContext *tc, Addr desc_addr, Stage2Walk *translation, int num_bytes, Request::Flags flags) |
| PARAMS (ArmTableWalker) | |
| TableWalker (const Params &p) | |
| virtual | ~TableWalker () |
| bool | haveLargeAsid64 () const |
| uint8_t | physAddrRange () const |
| void | completeDrain () |
| Checks if all state is cleared and if so, completes drain. | |
| DrainState | drain () override |
| Provide a default implementation of the drain interface for objects that don't need draining. | |
| void | drainResume () override |
| Resume execution after a successful drain. | |
| gem5::Port & | getPort (const std::string &if_name, PortID idx=InvalidPortID) override |
| Get a port with a given name and index. | |
| Port & | getTableWalkerPort () |
| Fault | walk (const RequestPtr &req, ThreadContext *tc, uint16_t asid, vmid_t _vmid, bool hyp, BaseMMU::Mode mode, BaseMMU::Translation *_trans, bool timing, bool functional, bool secure, MMU::ArmTranslationType tran_type, bool stage2, const TlbEntry *walk_entry) |
| void | setMmu (MMU *_mmu) |
| void | setTlb (TLB *_tlb) |
| TLB * | getTlb () |
| void | memAttrs (ThreadContext *tc, TlbEntry &te, SCTLR sctlr, uint8_t texcb, bool s) |
| void | memAttrsLPAE (ThreadContext *tc, TlbEntry &te, LongDescriptor &lDescriptor) |
| void | memAttrsAArch64 (ThreadContext *tc, TlbEntry &te, LongDescriptor &lDescriptor) |
Public Member Functions inherited from gem5::ClockedObject | |
| ClockedObject (const ClockedObjectParams &p) | |
| void | serialize (CheckpointOut &cp) const override |
| Serialize an object. | |
| void | unserialize (CheckpointIn &cp) override |
| Unserialize an object. | |
Public Member Functions inherited from gem5::SimObject | |
| const Params & | params () const |
| SimObject (const Params &p) | |
| virtual | ~SimObject () |
| virtual void | init () |
| init() is called after all C++ SimObjects have been created and all ports are connected. | |
| virtual void | loadState (CheckpointIn &cp) |
| loadState() is called on each SimObject when restoring from a checkpoint. | |
| virtual void | initState () |
| initState() is called on each SimObject when not restoring from a checkpoint. | |
| virtual void | regProbePoints () |
| Register probe points for this object. | |
| virtual void | regProbeListeners () |
| Register probe listeners for this object. | |
| ProbeManager * | getProbeManager () |
| Get the probe manager for this object. | |
| virtual Port & | getPort (const std::string &if_name, PortID idx=InvalidPortID) |
| Get a port with a given name and index. | |
| virtual void | startup () |
| startup() is the final initialization call before simulation. | |
| DrainState | drain () override |
| Provide a default implementation of the drain interface for objects that don't need draining. | |
| virtual void | memWriteback () |
| Write back dirty buffers to memory using functional writes. | |
| virtual void | memInvalidate () |
| Invalidate the contents of memory buffers. | |
| void | serialize (CheckpointOut &cp) const override |
| Serialize an object. | |
| void | unserialize (CheckpointIn &cp) override |
| Unserialize an object. | |
Public Member Functions inherited from gem5::EventManager | |
| EventQueue * | eventQueue () 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. | |
| void | setCurTick (Tick newVal) |
| EventManager (EventManager &em) | |
| Event manger manages events in the event queue. | |
| EventManager (EventManager *em) | |
| EventManager (EventQueue *eq) | |
Public Member Functions inherited from gem5::Serializable | |
| Serializable () | |
| virtual | ~Serializable () |
| virtual void | serialize (CheckpointOut &cp) const =0 |
| Serialize an object. | |
| virtual void | unserialize (CheckpointIn &cp)=0 |
| Unserialize an object. | |
| void | serializeSection (CheckpointOut &cp, const char *name) const |
| Serialize an object into a new section. | |
| void | serializeSection (CheckpointOut &cp, const std::string &name) const |
| void | unserializeSection (CheckpointIn &cp, const char *name) |
| Unserialize an a child object. | |
| void | unserializeSection (CheckpointIn &cp, const std::string &name) |
Public Member Functions inherited from gem5::Drainable | |
| DrainState | drainState () const |
| Return the current drain state of an object. | |
| virtual void | notifyFork () |
| Notify a child process of a fork. | |
Public Member Functions inherited from gem5::statistics::Group | |
| Group (Group *parent, const char *name=nullptr) | |
| Construct a new statistics group. | |
| virtual | ~Group () |
| virtual void | regStats () |
| Callback to set stat parameters. | |
| virtual void | resetStats () |
| Callback to reset stats. | |
| virtual void | preDumpStats () |
| Callback before stats are dumped. | |
| void | addStat (statistics::Info *info) |
| Register a stat with this group. | |
| const std::map< std::string, Group * > & | getStatGroups () const |
| Get all child groups associated with this object. | |
| const std::vector< Info * > & | getStats () const |
| Get all stats associated with this object. | |
| void | addStatGroup (const char *name, Group *block) |
| Add a stat block as a child of this block. | |
| const Info * | resolveStat (std::string name) const |
| Resolve a stat by its name within this group. | |
| void | mergeStatGroup (Group *block) |
| Merge the contents (stats & children) of a block to this block. | |
| Group (const Group &)=delete | |
| Group & | operator= (const Group &)=delete |
Public Member Functions inherited from gem5::Named | |
| Named (const std::string &name_) | |
| virtual | ~Named ()=default |
| virtual std::string | name () const |
Public Member Functions inherited from gem5::Clocked | |
| void | updateClockPeriod () |
| Update the tick to the current tick. | |
| Tick | clockEdge (Cycles cycles=Cycles(0)) const |
| Determine the tick when a cycle begins, by default the current one, but the argument also enables the caller to determine a future cycle. | |
| Cycles | curCycle () const |
| Determine the current cycle, corresponding to a tick aligned to a clock edge. | |
| Tick | nextCycle () const |
| Based on the clock of the object, determine the start tick of the first cycle that is at least one cycle in the future. | |
| uint64_t | frequency () const |
| Tick | clockPeriod () const |
| double | voltage () const |
| Cycles | ticksToCycles (Tick t) const |
| Tick | cyclesToTicks (Cycles c) const |
Static Public Member Functions | |
| static LookupLevel | toLookupLevel (uint8_t lookup_level_as_int) |
Static Public Member Functions inherited from gem5::SimObject | |
| static void | serializeAll (const std::string &cpt_dir) |
| Create a checkpoint by serializing all SimObjects in the system. | |
| static SimObject * | find (const char *name) |
| Find the SimObject with the given name and return a pointer to it. | |
| static void | setSimObjectResolver (SimObjectResolver *resolver) |
| There is a single object name resolver, and it is only set when simulation is restoring from checkpoints. | |
| static SimObjectResolver * | getSimObjectResolver () |
| There is a single object name resolver, and it is only set when simulation is restoring from checkpoints. | |
Static Public Member Functions inherited from gem5::Serializable | |
| static const std::string & | currentSection () |
| Gets the fully-qualified name of the active section. | |
| static void | generateCheckpointOut (const std::string &cpt_dir, std::ofstream &outstream) |
| Generate a checkpoint file so that the serialization can be routed to it. | |
Protected Attributes | |
| std::list< WalkerState * > | stateQueues [LookupLevel::Num_ArmLookupLevel] |
| Queues of requests for all the different lookup levels. | |
| std::list< WalkerState * > | pendingQueue |
| Queue of requests that have passed are waiting because the walker is currently busy. | |
| MMU * | mmu |
| The MMU to forward second stage look upts to. | |
| RequestorID | requestorId |
| Requestor id assigned by the MMU. | |
| Port * | port |
| Port shared by the two table walkers. | |
| const bool | isStage2 |
| Indicates whether this table walker is part of the stage 2 mmu. | |
| TLB * | tlb |
| TLB that is initiating these table walks. | |
| SCTLR | sctlr |
| Cached copy of the sctlr as it existed when translation began. | |
| WalkerState * | currState |
| bool | pending |
| If a timing translation is currently in progress. | |
| unsigned | numSquashable |
| The number of walks belonging to squashed instructions that can be removed from the pendingQueue per cycle. | |
| const ArmRelease * | release |
| Cached copies of system-level properties. | |
| uint8_t | _physAddrRange |
| bool | _haveLargeAsid64 |
| gem5::ArmISA::TableWalker::TableWalkerStats | stats |
| unsigned | pendingReqs |
| Tick | pendingChangeTick |
Protected Attributes inherited from gem5::SimObject | |
| const SimObjectParams & | _params |
| Cached copy of the object parameters. | |
Protected Attributes inherited from gem5::EventManager | |
| EventQueue * | eventq |
| A pointer to this object's event queue. | |
Static Protected Attributes | |
| static const unsigned | REQUESTED = 0 |
| static const unsigned | COMPLETED = 1 |
Private Types | |
| using | LookupLevel = enums::ArmLookupLevel |
Private Member Functions | |
| void | doL1Descriptor () |
| void | doL1DescriptorWrapper () |
| void | doL2Descriptor () |
| void | doL2DescriptorWrapper () |
| void | doLongDescriptor () |
| void | doL0LongDescriptorWrapper () |
| void | doL1LongDescriptorWrapper () |
| void | doL2LongDescriptorWrapper () |
| void | doL3LongDescriptorWrapper () |
| void | doLongDescriptorWrapper (LookupLevel curr_lookup_level) |
| bool | fetchDescriptor (Addr descAddr, uint8_t *data, int numBytes, Request::Flags flags, int queueIndex, Event *event, void(TableWalker::*doDescriptor)()) |
| Fault | generateLongDescFault (ArmFault::FaultSource src) |
| void | insertTableEntry (DescriptorBase &descriptor, bool longDescriptor) |
| void | insertPartialTableEntry (LongDescriptor &descriptor) |
| std::tuple< Addr, Addr, LookupLevel > | walkAddresses (Addr ttbr, GrainSize tg, int tsz, int pa_range) |
| Returns a tuple made of: 1) The address of the first page table 2) The address of the first descriptor within the table 3) The page table level. | |
| Fault | processWalk () |
| Fault | processWalkLPAE () |
| bool | checkVAddrSizeFaultAArch64 (Addr addr, int top_bit, GrainSize granule, int tsz, bool low_range) |
| bool | checkAddrSizeFaultAArch64 (Addr addr, int pa_range) |
| Returns true if the address exceeds the range permitted by the system-wide setting or by the TCR_ELx IPS/PS setting. | |
| Fault | processWalkAArch64 () |
| void | processWalkWrapper () |
| void | nextWalk (ThreadContext *tc) |
| void | pendingChange () |
| Fault | testWalk (Addr pa, Addr size, TlbEntry::DomainType domain, LookupLevel lookup_level, bool stage2) |
Static Private Member Functions | |
| static uint8_t | pageSizeNtoStatBin (uint8_t N) |
Additional Inherited Members | |
Public Types inherited from gem5::ClockedObject | |
| using | Params = ClockedObjectParams |
| Parameters of ClockedObject. | |
Public Types inherited from gem5::SimObject | |
| typedef SimObjectParams | Params |
Public Attributes inherited from gem5::ClockedObject | |
| PowerState * | powerState |
Protected Member Functions inherited from gem5::Drainable | |
| Drainable () | |
| virtual | ~Drainable () |
| virtual DrainState | drain ()=0 |
| Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are partially executed or are partially in flight. | |
| virtual void | drainResume () |
| Resume execution after a successful drain. | |
| void | signalDrainDone () const |
| Signal that an object is drained. | |
Protected Member Functions inherited from gem5::Clocked | |
| Clocked (ClockDomain &clk_domain) | |
| Create a clocked object and set the clock domain based on the parameters. | |
| Clocked (Clocked &)=delete | |
| Clocked & | operator= (Clocked &)=delete |
| virtual | ~Clocked () |
| Virtual destructor due to inheritance. | |
| void | resetClock () const |
| Reset the object's clock using the current global tick value. | |
| virtual void | clockPeriodUpdated () |
| A hook subclasses can implement so they can do any extra work that's needed when the clock rate is changed. | |
Definition at line 66 of file table_walker.hh.
|
private |
Definition at line 68 of file table_walker.hh.
| gem5::TableWalker::TableWalker | ( | const Params & | p | ) |
Definition at line 62 of file table_walker.cc.
References doL1DescriptorWrapper().
|
virtual |
Definition at line 98 of file table_walker.cc.
|
private |
Returns true if the address exceeds the range permitted by the system-wide setting or by the TCR_ELx IPS/PS setting.
Definition at line 884 of file table_walker.cc.
References _physAddrRange, gem5::X86ISA::addr, and gem5::bits().
Referenced by doLongDescriptor(), and processWalkAArch64().
|
private |
Definition at line 866 of file table_walker.cc.
References gem5::bits(), currState, gem5::ArmISA::Grain64KB, gem5::ArmISA::HaveExt(), gem5::ArmISA::mask, gem5::ArmISA::TableWalker::WalkerState::tc, and gem5::ArmISA::TableWalker::WalkerState::vaddr.
Referenced by processWalkAArch64().
| void gem5::TableWalker::completeDrain | ( | ) |
Checks if all state is cleared and if so, completes drain.
Definition at line 244 of file table_walker.cc.
References DPRINTF, gem5::Draining, gem5::Drainable::drainState(), pendingQueue, gem5::Drainable::signalDrainDone(), and stateQueues.
Referenced by nextWalk().
|
private |
Definition at line 2128 of file table_walker.cc.
References doLongDescriptorWrapper().
|
private |
Definition at line 1675 of file table_walker.cc.
References gem5::ArmISA::ArmFault::AccessFlagLL, gem5::ArmISA::TableWalker::L1Descriptor::ap(), gem5::bits(), gem5::ArmISA::byteOrder(), currState, gem5::ArmISA::TableWalker::L1Descriptor::data, gem5::ArmISA::TableWalker::L2Descriptor::data, gem5::ArmISA::TableWalker::WalkerState::delayed, doL2DescEvent, doL2Descriptor(), gem5::ArmISA::TableWalker::L1Descriptor::domain(), DPRINTF, gem5::ArmISA::TableWalker::WalkerState::fault, fetchDescriptor(), gem5::htog(), gem5::ArmISA::TableWalker::L1Descriptor::Ignore, insertTableEntry(), gem5::ArmISA::TableWalker::WalkerState::isFetch, gem5::ArmISA::TableWalker::WalkerState::isSecure, isStage2, gem5::ArmISA::TableWalker::WalkerState::isUncacheable, gem5::ArmISA::TableWalker::WalkerState::isWrite, gem5::ArmISA::TableWalker::WalkerState::l1Desc, gem5::ArmISA::TableWalker::L1Descriptor::l2Addr(), gem5::ArmISA::TableWalker::WalkerState::l2Desc, gem5::ArmISA::TlbEntry::NoAccess, gem5::NoFault, gem5::ArmISA::TableWalker::L1Descriptor::PageTable, panic, gem5::Request::PT_WALK, gem5::ArmISA::TableWalker::WalkerState::req, gem5::ArmISA::TableWalker::L1Descriptor::Reserved, gem5::ArmISA::TableWalker::WalkerState::sctlr, gem5::ArmISA::TableWalker::L1Descriptor::Section, gem5::Request::SECURE, gem5::Flags< T >::set(), gem5::ArmISA::TableWalker::L1Descriptor::supersection(), gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::te, testWalk(), gem5::ArmISA::TableWalker::WalkerState::timing, gem5::ArmISA::ArmFault::TranslationLL, gem5::ArmISA::TableWalker::L1Descriptor::type(), gem5::Request::UNCACHEABLE, gem5::ArmISA::TableWalker::WalkerState::vaddr, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, and gem5::ArmISA::ArmFault::VmsaTran.
Referenced by doL1DescriptorWrapper(), and processWalk().
|
private |
Definition at line 2022 of file table_walker.cc.
References currState, gem5::curTick(), gem5::ArmISA::TableWalker::L1Descriptor::data, gem5::ArmISA::TableWalker::WalkerState::delayed, doL1Descriptor(), DPRINTF, gem5::ArmISA::TableWalker::WalkerState::fault, gem5::BaseMMU::Translation::finish(), isStage2, gem5::ArmISA::TableWalker::WalkerState::l1Desc, mmu, gem5::ArmISA::TableWalker::WalkerState::mode, nextWalk(), gem5::NoFault, pending, gem5::ArmISA::TableWalker::WalkerState::req, gem5::statistics::DistBase< Derived, Stor >::sample(), gem5::ArmISA::TableWalker::WalkerState::stage2Tran, gem5::ArmISA::TableWalker::WalkerState::startTime, stateQueues, stats, gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::MMU::translateTiming(), gem5::ArmISA::TableWalker::WalkerState::transState, gem5::ArmISA::TableWalker::WalkerState::tranType, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, gem5::ArmISA::TableWalker::TableWalkerStats::walkServiceTime, and gem5::ArmISA::TableWalker::TableWalkerStats::walksShortTerminatedAtLevel.
Referenced by TableWalker().
|
private |
Definition at line 2134 of file table_walker.cc.
References doLongDescriptorWrapper().
|
private |
Definition at line 1966 of file table_walker.cc.
References gem5::ArmISA::ArmFault::AccessFlagLL, gem5::ArmISA::TableWalker::L2Descriptor::ap(), gem5::bits(), gem5::ArmISA::byteOrder(), currState, gem5::ArmISA::TableWalker::L2Descriptor::data, gem5::ArmISA::TableWalker::L1Descriptor::domain(), DPRINTF, gem5::ArmISA::TableWalker::WalkerState::fault, gem5::htog(), insertTableEntry(), gem5::ArmISA::TableWalker::L2Descriptor::invalid(), gem5::ArmISA::TableWalker::WalkerState::isFetch, isStage2, gem5::ArmISA::TableWalker::WalkerState::isWrite, gem5::ArmISA::TableWalker::WalkerState::l1Desc, gem5::ArmISA::TableWalker::WalkerState::l2Desc, gem5::ArmISA::TlbEntry::NoAccess, gem5::NoFault, gem5::ArmISA::TableWalker::WalkerState::req, gem5::ArmISA::TableWalker::WalkerState::sctlr, gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::te, gem5::ArmISA::TableWalker::WalkerState::timing, gem5::ArmISA::ArmFault::TranslationLL, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, and gem5::ArmISA::ArmFault::VmsaTran.
Referenced by doL1Descriptor(), and doL2DescriptorWrapper().
|
private |
Definition at line 2084 of file table_walker.cc.
References currState, gem5::curTick(), gem5::ArmISA::TableWalker::WalkerState::delayed, doL2Descriptor(), DPRINTF, gem5::ArmISA::TableWalker::WalkerState::fault, gem5::BaseMMU::Translation::finish(), isStage2, mmu, gem5::ArmISA::TableWalker::WalkerState::mode, nextWalk(), gem5::NoFault, pending, gem5::ArmISA::TableWalker::WalkerState::req, gem5::statistics::DistBase< Derived, Stor >::sample(), gem5::ArmISA::TableWalker::WalkerState::stage2Tran, gem5::ArmISA::TableWalker::WalkerState::startTime, stateQueues, stats, gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::MMU::translateTiming(), gem5::ArmISA::TableWalker::WalkerState::transState, gem5::ArmISA::TableWalker::WalkerState::tranType, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, gem5::ArmISA::TableWalker::TableWalkerStats::walkServiceTime, and gem5::ArmISA::TableWalker::TableWalkerStats::walksShortTerminatedAtLevel.
|
private |
Definition at line 2140 of file table_walker.cc.
References doLongDescriptorWrapper().
|
private |
Definition at line 2146 of file table_walker.cc.
References doLongDescriptorWrapper().
|
private |
Definition at line 1801 of file table_walker.cc.
References gem5::ArmISA::TableWalker::WalkerState::aarch64, gem5::ArmISA::ArmFault::AccessFlagLL, gem5::ArmISA::ArmFault::AddressSizeLL, gem5::ArmISA::TableWalker::LongDescriptor::af(), gem5::ArmISA::TableWalker::LongDescriptor::ap(), gem5::ArmISA::TableWalker::LongDescriptor::Block, gem5::ArmISA::byteOrder(), checkAddrSizeFaultAArch64(), gem5::ArmISA::TlbEntry::Client, currState, gem5::ArmISA::TableWalker::LongDescriptor::data, gem5::ArmISA::TableWalker::WalkerState::delayed, doLongDescriptor(), DPRINTF, gem5::MipsISA::event, gem5::ArmISA::TableWalker::WalkerState::fault, gem5::ArmISA::ArmFault::FaultSourceInvalid, fetchDescriptor(), generateLongDescFault(), gem5::ArmISA::MMU::hasWalkCache(), gem5::ArmISA::TableWalker::WalkerState::hpd, gem5::htog(), insertPartialTableEntry(), insertTableEntry(), gem5::ArmISA::TableWalker::LongDescriptor::Invalid, isStage2, gem5::ArmISA::TableWalker::WalkerState::isUncacheable, gem5::X86ISA::L, gem5::ArmISA::TableWalker::WalkerState::longDesc, LongDescEventByLevel, gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, mmu, gem5::ArmISA::TableWalker::LongDescriptor::nextDescAddr(), gem5::NoFault, gem5::ArmISA::TableWalker::LongDescriptor::paddr(), gem5::ArmISA::TableWalker::LongDescriptor::Page, panic, gem5::ArmISA::TableWalker::WalkerState::physAddrRange, gem5::Request::PT_WALK, gem5::ArmISA::TableWalker::LongDescriptor::pxn(), gem5::ArmISA::TableWalker::LongDescriptor::pxnTable(), gem5::ArmISA::TableWalker::WalkerState::pxnTable, gem5::ArmISA::TableWalker::WalkerState::req, gem5::ArmISA::TableWalker::LongDescriptor::rwTable(), gem5::ArmISA::TableWalker::WalkerState::rwTable, gem5::ArmISA::TableWalker::WalkerState::sctlr, gem5::Request::SECURE, gem5::ArmISA::TableWalker::WalkerState::secureLookup, gem5::ArmISA::TableWalker::LongDescriptor::secureTable(), gem5::Flags< T >::set(), gem5::ArmISA::TableWalker::LongDescriptor::Table, gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::te, testWalk(), gem5::ArmISA::TableWalker::WalkerState::timing, toLookupLevel(), gem5::ArmISA::ArmFault::TranslationLL, gem5::ArmISA::TableWalker::LongDescriptor::type(), gem5::Request::UNCACHEABLE, gem5::ArmISA::TableWalker::LongDescriptor::userTable(), gem5::ArmISA::TableWalker::WalkerState::userTable, gem5::ArmISA::TableWalker::WalkerState::vaddr, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, gem5::ArmISA::TableWalker::LongDescriptor::xn(), gem5::ArmISA::TableWalker::LongDescriptor::xnTable(), and gem5::ArmISA::TableWalker::WalkerState::xnTable.
Referenced by doLongDescriptor(), doLongDescriptorWrapper(), processWalkAArch64(), and processWalkLPAE().
|
private |
Definition at line 2152 of file table_walker.cc.
References currState, gem5::curTick(), gem5::ArmISA::TableWalker::WalkerState::delayed, doLongDescriptor(), DPRINTF, gem5::ArmISA::TableWalker::WalkerState::fault, gem5::BaseMMU::Translation::finish(), isStage2, gem5::ArmISA::TableWalker::WalkerState::longDesc, gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, mmu, gem5::ArmISA::TableWalker::WalkerState::mode, nextWalk(), gem5::NoFault, panic, pending, gem5::ArmISA::TableWalker::WalkerState::req, gem5::statistics::DistBase< Derived, Stor >::sample(), gem5::ArmISA::TableWalker::WalkerState::stage2Tran, gem5::ArmISA::TableWalker::WalkerState::startTime, stateQueues, stats, gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::MMU::translateTiming(), gem5::ArmISA::TableWalker::WalkerState::transState, gem5::ArmISA::TableWalker::WalkerState::tranType, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, gem5::ArmISA::TableWalker::TableWalkerStats::walkServiceTime, and gem5::ArmISA::TableWalker::TableWalkerStats::walksLongTerminatedAtLevel.
Referenced by doL0LongDescriptorWrapper(), doL1LongDescriptorWrapper(), doL2LongDescriptorWrapper(), and doL3LongDescriptorWrapper().
|
overridevirtual |
Provide a default implementation of the drain interface for objects that don't need draining.
Reimplemented from gem5::SimObject.
Definition at line 259 of file table_walker.cc.
References DPRINTF, gem5::Drained, gem5::Draining, gem5::ArmISA::i, pendingQueue, and stateQueues.
|
overridevirtual |
Resume execution after a successful drain.
Reimplemented from gem5::Drainable.
Definition at line 280 of file table_walker.cc.
References currState, gem5::SimObject::params(), and pendingChange().
|
private |
Definition at line 2220 of file table_walker.cc.
References gem5::Clocked::clockPeriod(), currState, data, DPRINTF, gem5::MipsISA::event, gem5::ArmISA::TableWalker::WalkerState::fault, flags, gem5::ArmISA::TableWalker::WalkerState::functional, gem5::ThreadContext::getCpuPtr(), gem5::ArmISA::TableWalker::WalkerState::mode, gem5::NoFault, port, readDataTimed(), readDataUntimed(), gem5::ArmISA::TableWalker::Port::sendAtomicReq(), gem5::ArmISA::TableWalker::Port::sendFunctionalReq(), gem5::ArmISA::TableWalker::Port::sendTimingReq(), gem5::ArmISA::TableWalker::WalkerState::stage2Req, gem5::ArmISA::TableWalker::WalkerState::stage2Tran, stateQueues, gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::TableWalker::WalkerState::timing, gem5::ArmISA::TableWalker::WalkerState::tranType, and gem5::ArmISA::TableWalker::WalkerState::vaddr.
Referenced by doL1Descriptor(), doLongDescriptor(), processWalk(), processWalkAArch64(), and processWalkLPAE().
|
private |
Definition at line 1781 of file table_walker.cc.
References currState, gem5::ArmISA::TableWalker::WalkerState::isFetch, isStage2, gem5::ArmISA::TableWalker::WalkerState::isWrite, gem5::ArmISA::TableWalker::WalkerState::longDesc, gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, gem5::ArmISA::ArmFault::LpaeTran, gem5::ArmISA::TlbEntry::NoAccess, gem5::ArmISA::TableWalker::WalkerState::req, and gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted.
Referenced by doLongDescriptor().
|
overridevirtual |
Get a port with a given name and index.
This is used at binding time and returns a reference to a protocol-agnostic port.
gem5 has a request and response port interface. All memory objects are connected together via ports. These ports provide a rigid interface between these memory objects. These ports implement three different memory system modes: timing, atomic, and functional. The most important mode is the timing mode and here timing mode is used for conducting cycle-level timing experiments. The other modes are only used in special circumstances and should not be used to conduct cycle-level timing experiments. The other modes are only used in special circumstances. These ports allow SimObjects to communicate with each other.
| if_name | Port name |
| idx | Index in the case of a VectorPort |
Reimplemented from gem5::SimObject.
Definition at line 110 of file table_walker.cc.
References gem5::SimObject::getPort(), and port.
Referenced by getTableWalkerPort().
| TableWalker::Port & gem5::TableWalker::getTableWalkerPort | ( | ) |
Definition at line 104 of file table_walker.cc.
References getPort().
Referenced by gem5::ArmISA::TLB::getTableWalkerPort().
|
inline |
Definition at line 1115 of file table_walker.hh.
References tlb.
|
inline |
Definition at line 1094 of file table_walker.hh.
References _haveLargeAsid64.
|
private |
Definition at line 2291 of file table_walker.cc.
References gem5::ArmISA::TableWalker::WalkerState::aarch64, gem5::ArmISA::TableWalker::WalkerState::asid, currState, gem5::ArmISA::TableWalker::LongDescriptor::dbgHeader(), gem5::ArmISA::TableWalker::LongDescriptor::domain(), DPRINTF, gem5::ArmISA::TableWalker::WalkerState::el, gem5::ArmISA::EL1, gem5::ArmISA::TableWalker::LongDescriptor::getRawData(), gem5::ArmRelease::has(), gem5::ArmISA::MMU::hasUnprivRegime(), gem5::ArmISA::TableWalker::WalkerState::hcr, gem5::ArmISA::TableWalker::WalkerState::isHyp, gem5::ArmISA::TableWalker::WalkerState::isSecure, gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, mmu, gem5::ArmISA::TLB::multiInsert(), gem5::ArmISA::TableWalker::LongDescriptor::nextTableAddr(), gem5::ArmISA::TableWalker::LongDescriptor::offsetBits(), gem5::ArmISA::TableWalker::WalkerState::pxnTable, release, gem5::ArmISA::TableWalker::WalkerState::rwTable, gem5::ArmISA::TableWalker::LongDescriptor::secure(), gem5::ArmISA::te, tlb, gem5::ArmISA::TableWalker::WalkerState::userTable, gem5::ArmISA::TableWalker::WalkerState::vaddr, gem5::ArmISA::TableWalker::WalkerState::vmid, and gem5::ArmISA::TableWalker::WalkerState::xnTable.
Referenced by doLongDescriptor().
|
private |
Definition at line 2343 of file table_walker.cc.
References gem5::ArmISA::TableWalker::WalkerState::aarch64, gem5::ArmISA::TableWalker::DescriptorBase::ap(), gem5::ArmISA::TableWalker::LongDescriptor::ap(), gem5::ArmISA::TableWalker::WalkerState::asid, COMPLETED, currState, gem5::ArmISA::TableWalker::DescriptorBase::dbgHeader(), gem5::ArmISA::TableWalker::DescriptorBase::domain(), DPRINTF, gem5::ArmISA::TableWalker::WalkerState::el, gem5::ArmISA::EL1, gem5::BaseMMU::Execute, gem5::ArmISA::TableWalker::DescriptorBase::getRawData(), gem5::ArmISA::TableWalker::DescriptorBase::global(), gem5::ArmRelease::has(), gem5::ArmISA::TableWalker::WalkerState::isFetch, gem5::ArmISA::TableWalker::WalkerState::isHyp, gem5::ArmISA::TableWalker::WalkerState::isSecure, isStage2, gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, memAttrs(), memAttrsAArch64(), memAttrsLPAE(), gem5::ArmISA::TableWalker::WalkerState::mode, gem5::ArmISA::TLB::multiInsert(), gem5::ArmISA::TableWalker::DescriptorBase::offsetBits(), pageSizeNtoStatBin(), gem5::ArmISA::TableWalker::TableWalkerStats::pageSizes, gem5::ArmISA::TableWalker::DescriptorBase::pfn(), gem5::ArmISA::TableWalker::LongDescriptor::pxn(), gem5::ArmISA::TableWalker::WalkerState::pxnTable, release, gem5::ArmISA::TableWalker::WalkerState::req, gem5::ArmISA::TableWalker::TableWalkerStats::requestOrigin, gem5::ArmISA::TableWalker::WalkerState::rwTable, gem5::ArmISA::TableWalker::WalkerState::sctlr, gem5::ArmISA::TableWalker::DescriptorBase::secure(), gem5::ArmISA::TableWalker::DescriptorBase::shareable(), stats, gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::te, gem5::ArmISA::TableWalker::DescriptorBase::texcb(), gem5::ArmISA::TableWalker::WalkerState::timing, tlb, gem5::ArmISA::TableWalker::WalkerState::userTable, gem5::ArmISA::TableWalker::WalkerState::vaddr, gem5::ArmISA::TableWalker::WalkerState::vmid, gem5::ArmISA::TableWalker::DescriptorBase::xn(), and gem5::ArmISA::TableWalker::WalkerState::xnTable.
Referenced by doL1Descriptor(), doL2Descriptor(), and doLongDescriptor().
| void gem5::TableWalker::memAttrs | ( | ThreadContext * | tc, |
| TlbEntry & | te, | ||
| SCTLR | sctlr, | ||
| uint8_t | texcb, | ||
| bool | s | ||
| ) |
Definition at line 1242 of file table_walker.cc.
References gem5::bits(), currState, gem5::ArmISA::TlbEntry::Device, DPRINTF, gem5::ArmISA::TableWalker::WalkerState::isSecure, gem5::ArmISA::MISCREG_NMRR, gem5::ArmISA::MISCREG_PRRR, gem5::ArmISA::TlbEntry::Normal, panic, gem5::ThreadContext::readMiscReg(), gem5::ArmISA::s, sctlr, gem5::ArmISA::snsBankedIndex(), gem5::ArmISA::TlbEntry::StronglyOrdered, gem5::ArmISA::TableWalker::WalkerState::tc, and gem5::ArmISA::te.
Referenced by insertTableEntry().
| void gem5::TableWalker::memAttrsAArch64 | ( | ThreadContext * | tc, |
| TlbEntry & | te, | ||
| LongDescriptor & | lDescriptor | ||
| ) |
Definition at line 1575 of file table_walker.cc.
References gem5::ArmISA::attr, gem5::ArmISA::TableWalker::LongDescriptor::attrIndx(), gem5::bits(), currState, gem5::ArmISA::TlbEntry::Device, DPRINTF, gem5::ArmISA::TableWalker::WalkerState::el, gem5::ArmISA::EL0, gem5::ArmISA::EL1, gem5::ArmISA::EL2, gem5::ArmISA::EL3, isStage2, gem5::ArmISA::TableWalker::LongDescriptor::memAttr(), gem5::ArmISA::MISCREG_MAIR_EL1, gem5::ArmISA::MISCREG_MAIR_EL2, gem5::ArmISA::MISCREG_MAIR_EL3, gem5::ArmISA::TlbEntry::Normal, panic, gem5::ThreadContext::readMiscReg(), gem5::ArmISA::s1TranslationRegime(), gem5::ArmISA::sh, gem5::ArmISA::TableWalker::LongDescriptor::sh(), gem5::ArmISA::TlbEntry::StronglyOrdered, gem5::ArmISA::te, and warn_if.
Referenced by insertTableEntry().
| void gem5::TableWalker::memAttrsLPAE | ( | ThreadContext * | tc, |
| TlbEntry & | te, | ||
| LongDescriptor & | lDescriptor | ||
| ) |
Definition at line 1449 of file table_walker.cc.
References gem5::ArmISA::attr, gem5::ArmISA::TableWalker::LongDescriptor::attrIndx(), gem5::bits(), currState, gem5::ArmISA::TlbEntry::Device, DPRINTF, gem5::ArmRelease::has(), gem5::ArmISA::TableWalker::WalkerState::isSecure, isStage2, gem5::ArmISA::TableWalker::LongDescriptor::memAttr(), gem5::ArmISA::MISCREG_MAIR0, gem5::ArmISA::MISCREG_MAIR1, gem5::ArmISA::TlbEntry::Normal, panic, gem5::ThreadContext::readMiscReg(), gem5::X86ISA::reg, release, gem5::ArmISA::sh, gem5::ArmISA::TableWalker::LongDescriptor::sh(), gem5::ArmISA::snsBankedIndex(), gem5::ArmISA::TlbEntry::StronglyOrdered, gem5::ArmISA::TableWalker::WalkerState::tc, and gem5::ArmISA::te.
Referenced by insertTableEntry().
|
private |
Definition at line 2211 of file table_walker.cc.
References gem5::Clocked::clockEdge(), completeDrain(), doProcessEvent, pendingQueue, and gem5::EventManager::schedule().
Referenced by doL1DescriptorWrapper(), doL2DescriptorWrapper(), doLongDescriptorWrapper(), processWalk(), processWalkAArch64(), processWalkLPAE(), and processWalkWrapper().
|
staticprivate |
Definition at line 2464 of file table_walker.cc.
References panic.
Referenced by insertTableEntry().
| gem5::ArmISA::TableWalker::PARAMS | ( | ArmTableWalker | ) |
|
private |
Definition at line 2439 of file table_walker.cc.
References currState, gem5::curTick(), gem5::ArmISA::n, pendingChangeTick, pendingQueue, pendingReqs, gem5::ArmISA::TableWalker::TableWalkerStats::pendingWalks, gem5::statistics::DistBase< Derived, Stor >::sample(), and stats.
Referenced by drainResume(), processWalkWrapper(), and walk().
|
inline |
Definition at line 1095 of file table_walker.hh.
References _physAddrRange.
|
private |
Definition at line 581 of file table_walker.cc.
References gem5::bits(), currState, gem5::curTick(), gem5::ArmISA::TableWalker::L1Descriptor::data, doL1DescEvent, doL1Descriptor(), DPRINTF, gem5::ArmISA::f, gem5::ArmISA::TableWalker::WalkerState::fault, fetchDescriptor(), gem5::ArmRelease::has(), gem5::ArmISA::TableWalker::WalkerState::isFetch, gem5::ArmISA::TableWalker::WalkerState::isSecure, isStage2, gem5::ArmISA::TableWalker::WalkerState::isUncacheable, gem5::ArmISA::TableWalker::WalkerState::isWrite, gem5::ArmISA::TableWalker::WalkerState::l1Desc, gem5::mbits(), gem5::ArmISA::MISCREG_TTBR0, gem5::ArmISA::MISCREG_TTBR1, nextWalk(), gem5::ArmISA::TlbEntry::NoAccess, pending, gem5::Request::PT_WALK, gem5::ThreadContext::readMiscReg(), release, gem5::ArmISA::TableWalker::WalkerState::req, gem5::statistics::DistBase< Derived, Stor >::sample(), gem5::ArmISA::TableWalker::WalkerState::sctlr, gem5::Request::SECURE, gem5::Flags< T >::set(), gem5::ArmISA::snsBankedIndex(), gem5::ArmISA::TableWalker::WalkerState::startTime, stats, gem5::ArmISA::TableWalker::WalkerState::tc, testWalk(), gem5::ArmISA::TableWalker::WalkerState::timing, gem5::ArmISA::ArmFault::TranslationLL, gem5::ArmISA::TableWalker::WalkerState::ttbcr, gem5::Request::UNCACHEABLE, gem5::ArmISA::TableWalker::WalkerState::vaddr, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, gem5::ArmISA::ArmFault::VmsaTran, and gem5::ArmISA::TableWalker::TableWalkerStats::walkWaitTime.
Referenced by processWalkWrapper(), and walk().
|
private |
Definition at line 891 of file table_walker.cc.
References _physAddrRange, gem5::ArmISA::TableWalker::LongDescriptor::aarch64, gem5::ArmISA::TableWalker::WalkerState::aarch64, gem5::ArmISA::ArmFault::AddressSizeLL, gem5::bits(), checkAddrSizeFaultAArch64(), checkVAddrSizeFaultAArch64(), gem5::ArmISA::computeAddrTop(), currState, gem5::curTick(), gem5::ArmISA::TableWalker::LongDescriptor::data, gem5::ArmISA::decodePhysAddrRange64(), doLongDescriptor(), DPRINTF, gem5::ArmISA::TableWalker::WalkerState::el, gem5::ArmISA::EL0, gem5::ArmISA::EL1, gem5::ArmISA::EL2, gem5::ArmISA::EL3, gem5::BaseMMU::Execute, gem5::ArmISA::f, gem5::ArmISA::TableWalker::WalkerState::fault, fetchDescriptor(), gem5::ArmISA::Grain4KB, gem5::ArmISA::GrainMap_tg0, gem5::ArmISA::GrainMap_tg1, gem5::ArmISA::TableWalker::LongDescriptor::grainSize, gem5::ArmISA::HaveExt(), gem5::ArmISA::TableWalker::WalkerState::hcr, gem5::ArmISA::TableWalker::WalkerState::hpd, gem5::ArmISA::TableWalker::WalkerState::isFetch, gem5::ArmISA::TableWalker::WalkerState::isSecure, isStage2, gem5::ArmISA::TableWalker::WalkerState::isUncacheable, gem5::ArmISA::TableWalker::WalkerState::isWrite, gem5::ArmISA::TableWalker::WalkerState::longDesc, LongDescEventByLevel, gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, gem5::ArmISA::ArmFault::LpaeTran, gem5::ArmISA::MISCREG_TTBR0_EL1, gem5::ArmISA::MISCREG_TTBR0_EL2, gem5::ArmISA::MISCREG_TTBR0_EL3, gem5::ArmISA::MISCREG_TTBR1_EL1, gem5::ArmISA::MISCREG_TTBR1_EL2, gem5::ArmISA::MISCREG_VSTTBR_EL2, gem5::ArmISA::MISCREG_VTTBR_EL2, gem5::ArmISA::TableWalker::WalkerState::mode, nextWalk(), gem5::ArmISA::TlbEntry::NoAccess, pending, gem5::ArmISA::TableWalker::LongDescriptor::physAddrRange, gem5::ArmISA::TableWalker::WalkerState::physAddrRange, gem5::ArmISA::ps, gem5::Request::PT_WALK, gem5::ThreadContext::readMiscReg(), gem5::ArmISA::TableWalker::WalkerState::req, gem5::ArmISA::ReservedGrain, gem5::statistics::DistBase< Derived, Stor >::sample(), gem5::ArmISA::TableWalker::WalkerState::sctlr, gem5::Request::SECURE, gem5::ArmISA::TableWalker::WalkerState::secureLookup, gem5::Flags< T >::set(), gem5::ArmISA::TableWalker::WalkerState::startTime, stats, gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::TableWalker::WalkerState::tcr, testWalk(), gem5::ArmISA::TableWalker::WalkerState::timing, gem5::ArmISA::ArmFault::TranslationLL, gem5::Request::UNCACHEABLE, gem5::ArmISA::TableWalker::WalkerState::vaddr, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, gem5::ArmISA::TableWalker::WalkerState::vtcr, walkAddresses(), gem5::ArmISA::TableWalker::TableWalkerStats::walkWaitTime, and warn_once.
Referenced by processWalkWrapper(), and walk().
|
private |
Definition at line 692 of file table_walker.cc.
References gem5::ArmISA::TableWalker::LongDescriptor::aarch64, gem5::bits(), currState, gem5::curTick(), gem5::ArmISA::TableWalker::LongDescriptor::data, doLongDescriptor(), DPRINTF, gem5::ArmISA::f, gem5::ArmISA::TableWalker::WalkerState::fault, fetchDescriptor(), gem5::ArmISA::Grain4KB, gem5::ArmISA::TableWalker::LongDescriptor::grainSize, gem5::ArmISA::TableWalker::WalkerState::htcr, gem5::ArmISA::TableWalker::WalkerState::isFetch, gem5::ArmISA::TableWalker::WalkerState::isHyp, gem5::ArmISA::TableWalker::WalkerState::isSecure, isStage2, gem5::ArmISA::TableWalker::WalkerState::isUncacheable, gem5::ArmISA::TableWalker::WalkerState::isWrite, gem5::ArmISA::TableWalker::WalkerState::longDesc, LongDescEventByLevel, gem5::ArmISA::longDescFormatInUse(), gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, gem5::ArmISA::ArmFault::LpaeTran, gem5::mbits(), gem5::ArmISA::MISCREG_HTTBR, gem5::ArmISA::MISCREG_TTBR0, gem5::ArmISA::MISCREG_TTBR1, gem5::ArmISA::MISCREG_VTTBR, gem5::ArmISA::n, nextWalk(), gem5::ArmISA::TlbEntry::NoAccess, pending, gem5::Request::PT_WALK, gem5::ThreadContext::readMiscReg(), gem5::ArmISA::TableWalker::WalkerState::req, gem5::statistics::DistBase< Derived, Stor >::sample(), gem5::ArmISA::TableWalker::WalkerState::sctlr, gem5::Request::SECURE, gem5::Flags< T >::set(), gem5::ArmISA::snsBankedIndex(), gem5::ArmISA::TableWalker::WalkerState::startTime, stats, gem5::ArmISA::TableWalker::WalkerState::tc, testWalk(), gem5::ArmISA::TableWalker::WalkerState::timing, gem5::ArmISA::ArmFault::TranslationLL, gem5::ArmISA::TableWalker::WalkerState::ttbcr, gem5::Request::UNCACHEABLE, gem5::ArmISA::TableWalker::WalkerState::vaddr, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, gem5::ArmISA::TableWalker::WalkerState::vtcr, and gem5::ArmISA::TableWalker::TableWalkerStats::walkWaitTime.
Referenced by processWalkWrapper(), and walk().
|
private |
Definition at line 485 of file table_walker.cc.
References gem5::ArmISA::TableWalker::WalkerState::aarch64, gem5::ArmISA::TableWalker::WalkerState::asid, currState, gem5::curTick(), DPRINTF, gem5::ArmISA::TableWalker::WalkerState::el, gem5::ArmISA::f, gem5::BaseMMU::Translation::finish(), gem5::ArmISA::TableWalker::WalkerState::isHyp, gem5::ArmISA::TableWalker::WalkerState::isSecure, isStage2, gem5::ArmISA::longDescFormatInUse(), gem5::ArmISA::MMU::lookup(), mmu, gem5::ArmISA::TableWalker::WalkerState::mode, nextWalk(), gem5::NoFault, numSquashable, pending, pendingChange(), pendingQueue, processWalk(), processWalkAArch64(), processWalkLPAE(), gem5::ArmISA::TableWalker::WalkerState::req, gem5::statistics::DistBase< Derived, Stor >::sample(), gem5::BaseMMU::Translation::squashed(), gem5::ArmISA::TableWalker::TableWalkerStats::squashedBefore, gem5::ArmISA::TableWalker::WalkerState::startTime, stats, gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::te, gem5::ArmISA::MMU::translateTiming(), gem5::ArmISA::TableWalker::WalkerState::transState, gem5::ArmISA::TableWalker::WalkerState::tranType, gem5::ArmISA::TableWalker::WalkerState::vaddr, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, gem5::ArmISA::TableWalker::WalkerState::vmid, gem5::ArmISA::TableWalker::WalkerState::walkEntry, and gem5::ArmISA::TableWalker::TableWalkerStats::walkServiceTime.
| void gem5::TableWalker::readDataTimed | ( | ThreadContext * | tc, |
| Addr | desc_addr, | ||
| Stage2Walk * | translation, | ||
| int | num_bytes, | ||
| Request::Flags | flags | ||
| ) |
Definition at line 2527 of file table_walker.cc.
References flags, gem5::Request::PT_WALK, requestorId, gem5::ArmISA::TableWalker::Stage2Walk::setVirt(), and gem5::ArmISA::TableWalker::Stage2Walk::translateTiming().
Referenced by fetchDescriptor().
| Fault gem5::TableWalker::readDataUntimed | ( | ThreadContext * | tc, |
| Addr | vaddr, | ||
| Addr | desc_addr, | ||
| uint8_t * | data, | ||
| int | num_bytes, | ||
| Request::Flags | flags, | ||
| BaseMMU::Mode | mode, | ||
| MMU::ArmTranslationType | tran_type, | ||
| bool | functional | ||
| ) |
Definition at line 2485 of file table_walker.cc.
References gem5::ArmISA::ArmFault::annotate(), data, gem5::Packet::dataStatic(), flags, gem5::Packet::isError(), mmu, gem5::Request::NO_ACCESS, gem5::NoFault, gem5::ArmISA::ArmFault::OVA, port, gem5::Request::PT_WALK, gem5::BaseMMU::Read, gem5::MemCmd::ReadReq, requestorId, gem5::ArmISA::ArmFault::S1PTW, gem5::RequestPort::sendAtomic(), gem5::RequestPort::sendFunctional(), gem5::ArmISA::MMU::translateAtomic(), gem5::ArmISA::MMU::translateFunctional(), and gem5::MipsISA::vaddr.
Referenced by fetchDescriptor().
| void gem5::TableWalker::setMmu | ( | MMU * | _mmu | ) |
Definition at line 119 of file table_walker.cc.
References mmu, gem5::ArmISA::MMU::release(), and release.
Referenced by gem5::ArmISA::MMU::init().
|
inline |
Definition at line 1114 of file table_walker.hh.
References tlb.
Referenced by gem5::ArmISA::TLB::setTableWalker().
|
private |
Definition at line 2455 of file table_walker.cc.
References currState, gem5::ArmISA::domain, gem5::ArmISA::TableWalker::WalkerState::isSecure, mmu, gem5::ArmISA::TableWalker::WalkerState::mode, gem5::ArmISA::pa, gem5::ArmISA::MMU::testWalk(), and gem5::ArmISA::TableWalker::WalkerState::vaddr.
Referenced by doL1Descriptor(), doLongDescriptor(), processWalk(), processWalkAArch64(), and processWalkLPAE().
|
static |
Definition at line 2422 of file table_walker.cc.
References panic.
Referenced by doLongDescriptor().
| Fault gem5::TableWalker::walk | ( | const RequestPtr & | req, |
| ThreadContext * | tc, | ||
| uint16_t | asid, | ||
| vmid_t | _vmid, | ||
| bool | hyp, | ||
| BaseMMU::Mode | mode, | ||
| BaseMMU::Translation * | _trans, | ||
| bool | timing, | ||
| bool | functional, | ||
| bool | secure, | ||
| MMU::ArmTranslationType | tran_type, | ||
| bool | stage2, | ||
| const TlbEntry * | walk_entry | ||
| ) |
Definition at line 290 of file table_walker.cc.
References _physAddrRange, gem5::ArmISA::TableWalker::WalkerState::aarch64, gem5::ArmISA::TableWalker::WalkerState::asid, currState, gem5::curTick(), DPRINTF, gem5::ArmISA::TableWalker::WalkerState::el, gem5::ArmISA::EL0, gem5::ArmISA::EL1, gem5::ArmISA::EL2, gem5::ArmISA::EL3, gem5::ArmISA::ELIs64(), gem5::BaseMMU::Execute, gem5::ArmISA::TableWalker::WalkerState::fault, gem5::ArmISA::TableWalker::WalkerState::functional, gem5::ArmRelease::has(), gem5::ArmISA::HaveExt(), gem5::ArmISA::TableWalker::WalkerState::hcr, gem5::ArmISA::TableWalker::WalkerState::htcr, gem5::ArmISA::TableWalker::WalkerState::isFetch, gem5::ArmISA::TableWalker::WalkerState::isHyp, gem5::ArmISA::TableWalker::WalkerState::isSecure, isStage2, gem5::ArmISA::TableWalker::WalkerState::isWrite, gem5::ArmISA::longDescFormatInUse(), gem5::ArmISA::MISCREG_CPSR, gem5::ArmISA::MISCREG_HCR, gem5::ArmISA::MISCREG_HCR_EL2, gem5::ArmISA::MISCREG_HTCR, gem5::ArmISA::MISCREG_SCTLR, gem5::ArmISA::MISCREG_SCTLR_EL1, gem5::ArmISA::MISCREG_SCTLR_EL2, gem5::ArmISA::MISCREG_SCTLR_EL3, gem5::ArmISA::MISCREG_TCR_EL1, gem5::ArmISA::MISCREG_TCR_EL2, gem5::ArmISA::MISCREG_TCR_EL3, gem5::ArmISA::MISCREG_TTBCR, gem5::ArmISA::MISCREG_VSTCR_EL2, gem5::ArmISA::MISCREG_VTCR, gem5::ArmISA::MISCREG_VTCR_EL2, gem5::ArmISA::TableWalker::WalkerState::mode, gem5::NoFault, panic, pending, pendingChange(), pendingQueue, gem5::ArmISA::TableWalker::WalkerState::physAddrRange, processWalk(), processWalkAArch64(), processWalkLPAE(), gem5::ArmISA::purifyTaggedAddr(), gem5::ArmISA::TableWalker::WalkerState::pxnTable, gem5::ThreadContext::readMiscReg(), release, gem5::ArmISA::TableWalker::WalkerState::req, REQUESTED, gem5::ArmISA::TableWalker::TableWalkerStats::requestOrigin, gem5::ArmISA::TableWalker::WalkerState::rwTable, gem5::ArmISA::TableWalker::WalkerState::sctlr, sctlr, gem5::ArmISA::TableWalker::WalkerState::secureLookup, gem5::ArmISA::snsBankedIndex(), gem5::ArmISA::TableWalker::TableWalkerStats::squashedBefore, gem5::ArmISA::TableWalker::WalkerState::stage2Req, gem5::ArmISA::TableWalker::WalkerState::startTime, stats, gem5::ArmISA::TableWalker::WalkerState::tableWalker, gem5::ArmISA::TableWalker::WalkerState::tc, gem5::ArmISA::TableWalker::WalkerState::tcr, gem5::ArmISA::TableWalker::WalkerState::timing, gem5::ArmISA::TableWalker::WalkerState::transState, gem5::ArmISA::TableWalker::WalkerState::tranType, gem5::ArmISA::MMU::tranTypeEL(), gem5::ArmISA::TableWalker::WalkerState::ttbcr, gem5::ArmISA::TableWalker::WalkerState::userTable, gem5::ArmISA::TableWalker::WalkerState::vaddr, gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted, gem5::ArmISA::TableWalker::WalkerState::vmid, gem5::ArmISA::TableWalker::WalkerState::vtcr, gem5::ArmISA::TableWalker::WalkerState::walkEntry, gem5::ArmISA::TableWalker::TableWalkerStats::walks, gem5::ArmISA::TableWalker::TableWalkerStats::walksLongDescriptor, gem5::ArmISA::TableWalker::TableWalkerStats::walksShortDescriptor, gem5::BaseMMU::Write, and gem5::ArmISA::TableWalker::WalkerState::xnTable.
Referenced by gem5::ArmISA::MMU::getTE().
|
private |
Returns a tuple made of: 1) The address of the first page table 2) The address of the first descriptor within the table 3) The page table level.
Definition at line 1194 of file table_walker.cc.
References gem5::ArmISA::TlbEntry::ap, gem5::bits(), currState, DPRINTF, gem5::ArmISA::getPageTableOps(), isStage2, gem5::ArmISA::TlbEntry::lookupLevel, gem5::mbits(), panic_if, gem5::ArmISA::TlbEntry::pfn, gem5::ArmISA::TlbEntry::pxn, gem5::ArmISA::TableWalker::WalkerState::pxnTable, gem5::ArmISA::TableWalker::WalkerState::rwTable, gem5::ArmISA::stride, gem5::ArmISA::TableWalker::WalkerState::userTable, gem5::ArmISA::TableWalker::WalkerState::vaddr, gem5::ArmISA::TlbEntry::valid, gem5::ArmISA::TableWalker::WalkerState::vtcr, gem5::ArmISA::TableWalker::WalkerState::walkEntry, gem5::ArmISA::TlbEntry::xn, gem5::ArmISA::TableWalker::WalkerState::xnTable, and gem5::ArmISA::z.
Referenced by processWalkAArch64().
|
protected |
Definition at line 1062 of file table_walker.hh.
Referenced by haveLargeAsid64().
|
protected |
Definition at line 1061 of file table_walker.hh.
Referenced by checkAddrSizeFaultAArch64(), physAddrRange(), processWalkAArch64(), and walk().
|
staticprotected |
Definition at line 1087 of file table_walker.hh.
Referenced by insertTableEntry().
|
protected |
Definition at line 1050 of file table_walker.hh.
Referenced by checkVAddrSizeFaultAArch64(), doL1Descriptor(), doL1DescriptorWrapper(), doL2Descriptor(), doL2DescriptorWrapper(), doLongDescriptor(), doLongDescriptorWrapper(), drainResume(), fetchDescriptor(), generateLongDescFault(), gem5::ArmISA::TableWalker::LongDescriptor::global(), insertPartialTableEntry(), insertTableEntry(), memAttrs(), memAttrsAArch64(), memAttrsLPAE(), pendingChange(), processWalk(), processWalkAArch64(), processWalkLPAE(), processWalkWrapper(), gem5::ArmISA::TableWalker::L1Descriptor::secure(), gem5::ArmISA::TableWalker::L2Descriptor::secure(), gem5::ArmISA::TableWalker::LongDescriptor::secure(), testWalk(), walk(), and walkAddresses().
|
private |
Definition at line 1138 of file table_walker.hh.
|
private |
Definition at line 1129 of file table_walker.hh.
Referenced by processWalk().
|
private |
Definition at line 1140 of file table_walker.hh.
|
private |
Definition at line 1133 of file table_walker.hh.
Referenced by doL1Descriptor().
|
private |
Definition at line 1142 of file table_walker.hh.
|
private |
Definition at line 1144 of file table_walker.hh.
|
private |
Definition at line 1178 of file table_walker.hh.
Referenced by nextWalk().
|
protected |
Indicates whether this table walker is part of the stage 2 mmu.
Definition at line 1042 of file table_walker.hh.
Referenced by doL1Descriptor(), doL1DescriptorWrapper(), doL2Descriptor(), doL2DescriptorWrapper(), doLongDescriptor(), doLongDescriptorWrapper(), generateLongDescFault(), insertTableEntry(), memAttrsAArch64(), memAttrsLPAE(), processWalk(), processWalkAArch64(), processWalkLPAE(), processWalkWrapper(), walk(), and walkAddresses().
|
private |
Definition at line 1147 of file table_walker.hh.
Referenced by doLongDescriptor(), processWalkAArch64(), and processWalkLPAE().
|
protected |
The MMU to forward second stage look upts to.
Definition at line 1033 of file table_walker.hh.
Referenced by doL1DescriptorWrapper(), doL2DescriptorWrapper(), doLongDescriptor(), doLongDescriptorWrapper(), insertPartialTableEntry(), processWalkWrapper(), readDataUntimed(), setMmu(), and testWalk().
|
protected |
The number of walks belonging to squashed instructions that can be removed from the pendingQueue per cycle.
Definition at line 1057 of file table_walker.hh.
Referenced by processWalkWrapper().
|
protected |
If a timing translation is currently in progress.
Definition at line 1053 of file table_walker.hh.
Referenced by doL1DescriptorWrapper(), doL2DescriptorWrapper(), doLongDescriptorWrapper(), processWalk(), processWalkAArch64(), processWalkLPAE(), processWalkWrapper(), and walk().
|
mutableprotected |
Definition at line 1084 of file table_walker.hh.
Referenced by pendingChange().
|
protected |
Queue of requests that have passed are waiting because the walker is currently busy.
Definition at line 1030 of file table_walker.hh.
Referenced by completeDrain(), drain(), nextWalk(), pendingChange(), processWalkWrapper(), and walk().
|
mutableprotected |
Definition at line 1083 of file table_walker.hh.
Referenced by pendingChange().
|
protected |
Port shared by the two table walkers.
Definition at line 1039 of file table_walker.hh.
Referenced by fetchDescriptor(), getPort(), and readDataUntimed().
|
protected |
Cached copies of system-level properties.
Definition at line 1060 of file table_walker.hh.
Referenced by insertPartialTableEntry(), insertTableEntry(), memAttrsLPAE(), processWalk(), setMmu(), and walk().
|
staticprotected |
Definition at line 1086 of file table_walker.hh.
Referenced by walk().
|
protected |
Requestor id assigned by the MMU.
Definition at line 1036 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::Port::createPacket(), readDataTimed(), readDataUntimed(), and gem5::ArmISA::TableWalker::Stage2Walk::setVirt().
|
protected |
Cached copy of the sctlr as it existed when translation began.
Definition at line 1048 of file table_walker.hh.
Referenced by memAttrs(), and walk().
|
protected |
Queues of requests for all the different lookup levels.
Definition at line 1026 of file table_walker.hh.
Referenced by completeDrain(), doL1DescriptorWrapper(), doL2DescriptorWrapper(), doLongDescriptorWrapper(), drain(), and fetchDescriptor().
|
protected |
|
protected |
TLB that is initiating these table walks.
Definition at line 1045 of file table_walker.hh.
Referenced by getTlb(), insertPartialTableEntry(), insertTableEntry(), and setTlb().