Deleted Added
sdiff udiff text old ( 11583:13c5ba4250b3 ) new ( 11588:32cbf6ab7730 )
full compact
1/*
2 * Copyright (c) 2010, 2012-2016 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 51 unchanged lines hidden (view full) ---

60 : MemObject(p),
61 stage2Mmu(NULL), port(NULL), masterId(Request::invldMasterId),
62 isStage2(p->is_stage2), tlb(NULL),
63 currState(NULL), pending(false),
64 numSquashable(p->num_squash_per_cycle),
65 pendingReqs(0),
66 pendingChangeTick(curTick()),
67 doL1DescEvent(this), doL2DescEvent(this),
68 doL0LongDescEvent(this), doL1LongDescEvent(this),
69 doL2LongDescEvent(this), doL3LongDescEvent(this),
70 LongDescEventByLevel { &doL0LongDescEvent, &doL1LongDescEvent,
71 &doL2LongDescEvent, &doL3LongDescEvent },
72 doProcessEvent(this)
73{
74 sctlr = 0;
75
76 // Cache system-level properties
77 if (FullSystem) {
78 ArmSystem *armSys = dynamic_cast<ArmSystem *>(p->sys);
79 assert(armSys);

--- 55 unchanged lines hidden (view full) ---

135 delayed(false), tableWalker(nullptr)
136{
137}
138
139void
140TableWalker::completeDrain()
141{
142 if (drainState() == DrainState::Draining &&
143 stateQueues[L0].empty() && stateQueues[L1].empty() &&
144 stateQueues[L2].empty() && stateQueues[L3].empty() &&
145 pendingQueue.empty()) {
146
147 DPRINTF(Drain, "TableWalker done draining, processing drain event\n");
148 signalDrainDone();
149 }
150}
151
152DrainState

--- 542 unchanged lines hidden (view full) ---

695 if (currState->sctlr.c == 0) {
696 flag.set(Request::UNCACHEABLE);
697 }
698
699 currState->longDesc.lookupLevel = start_lookup_level;
700 currState->longDesc.aarch64 = false;
701 currState->longDesc.grainSize = Grain4KB;
702
703 bool delayed = fetchDescriptor(desc_addr, (uint8_t*)&currState->longDesc.data,
704 sizeof(uint64_t), flag, start_lookup_level,
705 LongDescEventByLevel[start_lookup_level],
706 &TableWalker::doLongDescriptor);
707 if (!delayed) {
708 f = currState->fault;
709 }
710
711 return f;
712}
713
714unsigned

--- 248 unchanged lines hidden (view full) ---

963 flag.set(Request::SECURE);
964 }
965
966 currState->longDesc.lookupLevel = start_lookup_level;
967 currState->longDesc.aarch64 = true;
968 currState->longDesc.grainSize = tg;
969
970 if (currState->timing) {
971 fetchDescriptor(desc_addr, (uint8_t*) &currState->longDesc.data,
972 sizeof(uint64_t), flag, start_lookup_level,
973 LongDescEventByLevel[start_lookup_level], NULL);
974 } else {
975 fetchDescriptor(desc_addr, (uint8_t*)&currState->longDesc.data,
976 sizeof(uint64_t), flag, -1, NULL,
977 &TableWalker::doLongDescriptor);
978 f = currState->fault;
979 }
980
981 return f;

--- 663 unchanged lines hidden (view full) ---

1645 }
1646 return;
1647 }
1648
1649 Request::Flags flag = Request::PT_WALK;
1650 if (currState->secureLookup)
1651 flag.set(Request::SECURE);
1652
1653 LookupLevel L = currState->longDesc.lookupLevel =
1654 (LookupLevel) (currState->longDesc.lookupLevel + 1);
1655 Event *event = NULL;
1656 switch (L) {
1657 case L1:
1658 assert(currState->aarch64);
1659 case L2:
1660 case L3:
1661 event = LongDescEventByLevel[L];
1662 break;
1663 default:
1664 panic("Wrong lookup level in table walk\n");
1665 break;
1666 }
1667
1668 bool delayed;
1669 delayed = fetchDescriptor(next_desc_addr, (uint8_t*)&currState->longDesc.data,

--- 576 unchanged lines hidden ---