Deleted Added
sdiff udiff text old ( 11793:ef606668d247 ) new ( 12406:86bde4a026b5 )
full compact
1/*
2 * Copyright (c) 2001-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

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

844TLB::translateTiming(RequestPtr req, ThreadContext *tc,
845 Translation *translation, Mode mode)
846{
847 assert(translation);
848 translation->finish(translateAtomic(req, tc, mode), req, tc, mode);
849}
850
851Fault
852TLB::translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode)
853{
854 panic("Not implemented\n");
855 return NoFault;
856}
857
858Fault
859TLB::finalizePhysical(RequestPtr req, ThreadContext *tc, Mode mode) const
860{
861 return NoFault;
862}
863
864Cycles
865TLB::doMmuRegRead(ThreadContext *tc, Packet *pkt)
866{
867 Addr va = pkt->getAddr();
868 ASI asi = (ASI)pkt->req->getArchFlags();
869 uint64_t temp;
870
871 DPRINTF(IPR, "Memory Mapped IPR Read: asi=%#X a=%#x\n",
872 (uint32_t)pkt->req->getArchFlags(), pkt->getAddr());
873
874 TLB *itb = tc->getITBPtr();
875
876 switch (asi) {
877 case ASI_LSU_CONTROL_REG:
878 assert(va == 0);
879 pkt->set(tc->readMiscReg(MISCREG_MMU_LSU_CTRL));
880 break;
881 case ASI_MMU:
882 switch (va) {

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

1062 bool ignore;
1063 int part_id;
1064 int ctx_id;
1065 PageTableEntry pte;
1066
1067 DPRINTF(IPR, "Memory Mapped IPR Write: asi=%#X a=%#x d=%#X\n",
1068 (uint32_t)asi, va, data);
1069
1070 TLB *itb = tc->getITBPtr();
1071
1072 switch (asi) {
1073 case ASI_LSU_CONTROL_REG:
1074 assert(va == 0);
1075 tc->setMiscReg(MISCREG_MMU_LSU_CTRL, data);
1076 break;
1077 case ASI_MMU:
1078 switch (va) {

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

1166 assert(entry_insert != -1 || mbits(va,10,9) == va);
1167 ta_insert = itb->tag_access;
1168 va_insert = mbits(ta_insert, 63,13);
1169 ct_insert = mbits(ta_insert, 12,0);
1170 part_insert = tc->readMiscReg(MISCREG_MMU_PART_ID);
1171 real_insert = bits(va, 9,9);
1172 pte.populate(data, bits(va,10,10) ? PageTableEntry::sun4v :
1173 PageTableEntry::sun4u);
1174 tc->getITBPtr()->insert(va_insert, part_insert, ct_insert, real_insert,
1175 pte, entry_insert);
1176 break;
1177 case ASI_DTLB_DATA_ACCESS_REG:
1178 entry_insert = bits(va, 8,3);
1179 case ASI_DTLB_DATA_IN_REG:
1180 assert(entry_insert != -1 || mbits(va,10,9) == va);
1181 ta_insert = tag_access;
1182 va_insert = mbits(ta_insert, 63,13);
1183 ct_insert = mbits(ta_insert, 12,0);

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

1204 break;
1205 default:
1206 ignore = true;
1207 }
1208
1209 switch (bits(va,7,6)) {
1210 case 0: // demap page
1211 if (!ignore)
1212 tc->getITBPtr()->demapPage(mbits(va,63,13), part_id,
1213 bits(va,9,9), ctx_id);
1214 break;
1215 case 1: // demap context
1216 if (!ignore)
1217 tc->getITBPtr()->demapContext(part_id, ctx_id);
1218 break;
1219 case 2:
1220 tc->getITBPtr()->demapAll(part_id);
1221 break;
1222 default:
1223 panic("Invalid type for IMMU demap\n");
1224 }
1225 break;
1226 case ASI_DMMU:
1227 switch (va) {
1228 case 0x18:

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

1298 pkt->makeAtomicResponse();
1299 return Cycles(1);
1300}
1301
1302void
1303TLB::GetTsbPtr(ThreadContext *tc, Addr addr, int ctx, Addr *ptrs)
1304{
1305 uint64_t tag_access = mbits(addr,63,13) | mbits(ctx,12,0);
1306 TLB * itb = tc->getITBPtr();
1307 ptrs[0] = MakeTsbPtr(Ps0, tag_access,
1308 c0_tsb_ps0,
1309 c0_config,
1310 cx_tsb_ps0,
1311 cx_config);
1312 ptrs[1] = MakeTsbPtr(Ps1, tag_access,
1313 c0_tsb_ps1,
1314 c0_config,

--- 115 unchanged lines hidden ---