diff options
Diffstat (limited to 'src/arch/sparc')
-rw-r--r-- | src/arch/sparc/faults.cc | 8 | ||||
-rw-r--r-- | src/arch/sparc/mmapped_ipr.hh | 4 | ||||
-rw-r--r-- | src/arch/sparc/tlb.cc | 24 | ||||
-rw-r--r-- | src/arch/sparc/tlb.hh | 15 | ||||
-rw-r--r-- | src/arch/sparc/vtophys.cc | 4 |
5 files changed, 23 insertions, 32 deletions
diff --git a/src/arch/sparc/faults.cc b/src/arch/sparc/faults.cc index 13e9c19f6..5466115d0 100644 --- a/src/arch/sparc/faults.cc +++ b/src/arch/sparc/faults.cc @@ -669,8 +669,8 @@ FastInstructionAccessMMUMiss::invoke(ThreadContext *tc, // false for syscall emulation mode regardless of whether the // address is real in preceding code. Not sure sure that this is // correct, but also not sure if it matters at all. - tc->getITBPtr()->insert(alignedvaddr, partition_id, context_id, - false, entry.pte); + dynamic_cast<TLB *>(tc->getITBPtr())-> + insert(alignedvaddr, partition_id, context_id, false, entry.pte); } } @@ -757,8 +757,8 @@ FastDataAccessMMUMiss::invoke(ThreadContext *tc, const StaticInstPtr &inst) // false for syscall emulation mode regardless of whether the // address is real in preceding code. Not sure sure that this is // correct, but also not sure if it matters at all. - tc->getDTBPtr()->insert(alignedvaddr, partition_id, context_id, - false, entry.pte); + dynamic_cast<TLB *>(tc->getDTBPtr())-> + insert(alignedvaddr, partition_id, context_id, false, entry.pte); } } diff --git a/src/arch/sparc/mmapped_ipr.hh b/src/arch/sparc/mmapped_ipr.hh index e7d27eed5..35e4d891b 100644 --- a/src/arch/sparc/mmapped_ipr.hh +++ b/src/arch/sparc/mmapped_ipr.hh @@ -51,7 +51,7 @@ handleIprRead(ThreadContext *xc, Packet *pkt) if (GenericISA::isGenericIprAccess(pkt)) return GenericISA::handleGenericIprRead(xc, pkt); else - return xc->getDTBPtr()->doMmuRegRead(xc, pkt); + return dynamic_cast<TLB *>(xc->getDTBPtr())->doMmuRegRead(xc, pkt); } inline Cycles @@ -60,7 +60,7 @@ handleIprWrite(ThreadContext *xc, Packet *pkt) if (GenericISA::isGenericIprAccess(pkt)) return GenericISA::handleGenericIprWrite(xc, pkt); else - return xc->getDTBPtr()->doMmuRegWrite(xc, pkt); + return dynamic_cast<TLB *>(xc->getDTBPtr())->doMmuRegWrite(xc, pkt); } diff --git a/src/arch/sparc/tlb.cc b/src/arch/sparc/tlb.cc index 51eb83ac2..997bfe991 100644 --- a/src/arch/sparc/tlb.cc +++ b/src/arch/sparc/tlb.cc @@ -849,13 +849,6 @@ TLB::translateTiming(RequestPtr req, ThreadContext *tc, } Fault -TLB::translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode) -{ - panic("Not implemented\n"); - return NoFault; -} - -Fault TLB::finalizePhysical(RequestPtr req, ThreadContext *tc, Mode mode) const { return NoFault; @@ -871,7 +864,7 @@ TLB::doMmuRegRead(ThreadContext *tc, Packet *pkt) DPRINTF(IPR, "Memory Mapped IPR Read: asi=%#X a=%#x\n", (uint32_t)pkt->req->getArchFlags(), pkt->getAddr()); - TLB *itb = tc->getITBPtr(); + TLB *itb = dynamic_cast<TLB *>(tc->getITBPtr()); switch (asi) { case ASI_LSU_CONTROL_REG: @@ -1067,7 +1060,7 @@ TLB::doMmuRegWrite(ThreadContext *tc, Packet *pkt) DPRINTF(IPR, "Memory Mapped IPR Write: asi=%#X a=%#x d=%#X\n", (uint32_t)asi, va, data); - TLB *itb = tc->getITBPtr(); + TLB *itb = dynamic_cast<TLB *>(tc->getITBPtr()); switch (asi) { case ASI_LSU_CONTROL_REG: @@ -1171,8 +1164,8 @@ TLB::doMmuRegWrite(ThreadContext *tc, Packet *pkt) real_insert = bits(va, 9,9); pte.populate(data, bits(va,10,10) ? PageTableEntry::sun4v : PageTableEntry::sun4u); - tc->getITBPtr()->insert(va_insert, part_insert, ct_insert, real_insert, - pte, entry_insert); + itb->insert(va_insert, part_insert, ct_insert, real_insert, + pte, entry_insert); break; case ASI_DTLB_DATA_ACCESS_REG: entry_insert = bits(va, 8,3); @@ -1209,15 +1202,14 @@ TLB::doMmuRegWrite(ThreadContext *tc, Packet *pkt) switch (bits(va,7,6)) { case 0: // demap page if (!ignore) - tc->getITBPtr()->demapPage(mbits(va,63,13), part_id, - bits(va,9,9), ctx_id); + itb->demapPage(mbits(va,63,13), part_id, bits(va,9,9), ctx_id); break; case 1: // demap context if (!ignore) - tc->getITBPtr()->demapContext(part_id, ctx_id); + itb->demapContext(part_id, ctx_id); break; case 2: - tc->getITBPtr()->demapAll(part_id); + itb->demapAll(part_id); break; default: panic("Invalid type for IMMU demap\n"); @@ -1303,7 +1295,7 @@ void TLB::GetTsbPtr(ThreadContext *tc, Addr addr, int ctx, Addr *ptrs) { uint64_t tag_access = mbits(addr,63,13) | mbits(ctx,12,0); - TLB * itb = tc->getITBPtr(); + TLB *itb = dynamic_cast<TLB *>(tc->getITBPtr()); ptrs[0] = MakeTsbPtr(Ps0, tag_access, c0_tsb_ps0, c0_config, diff --git a/src/arch/sparc/tlb.hh b/src/arch/sparc/tlb.hh index 12d5ef738..7437ec3e6 100644 --- a/src/arch/sparc/tlb.hh +++ b/src/arch/sparc/tlb.hh @@ -163,14 +163,13 @@ class TLB : public BaseTLB void dumpAll(); - Fault translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode); - void translateTiming(RequestPtr req, ThreadContext *tc, - Translation *translation, Mode mode); - /** Stub function for compilation support with CheckerCPU. SPARC ISA - * does not support the Checker model at the moment - */ - Fault translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode); - Fault finalizePhysical(RequestPtr req, ThreadContext *tc, Mode mode) const; + Fault translateAtomic( + RequestPtr req, ThreadContext *tc, Mode mode) override; + void translateTiming( + RequestPtr req, ThreadContext *tc, + Translation *translation, Mode mode) override; + Fault finalizePhysical( + RequestPtr req, ThreadContext *tc, Mode mode) const override; Cycles doMmuRegRead(ThreadContext *tc, Packet *pkt); Cycles doMmuRegWrite(ThreadContext *tc, Packet *pkt); void GetTsbPtr(ThreadContext *tc, Addr addr, int ctx, Addr *ptrs); diff --git a/src/arch/sparc/vtophys.cc b/src/arch/sparc/vtophys.cc index 6ba62eb9c..88f1c4ace 100644 --- a/src/arch/sparc/vtophys.cc +++ b/src/arch/sparc/vtophys.cc @@ -83,8 +83,8 @@ vtophys(ThreadContext *tc, Addr addr) // int sec_context = bits(tlbdata,63,48); PortProxy &mem = tc->getPhysProxy(); - TLB* itb = tc->getITBPtr(); - TLB* dtb = tc->getDTBPtr(); + TLB* itb = dynamic_cast<TLB *>(tc->getITBPtr()); + TLB* dtb = dynamic_cast<TLB *>(tc->getDTBPtr()); TlbEntry* tbe; PageTableEntry pte; Addr tsbs[4]; |