tlb.cc (11793:ef606668d247) | tlb.cc (12406:86bde4a026b5) |
---|---|
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 | 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 | 852TLB::finalizePhysical(RequestPtr req, ThreadContext *tc, Mode mode) const 853{ 854 return NoFault; 855} 856 857Cycles 858TLB::doMmuRegRead(ThreadContext *tc, Packet *pkt) 859{ 860 Addr va = pkt->getAddr(); 861 ASI asi = (ASI)pkt->req->getArchFlags(); 862 uint64_t temp; 863 864 DPRINTF(IPR, "Memory Mapped IPR Read: asi=%#X a=%#x\n", 865 (uint32_t)pkt->req->getArchFlags(), pkt->getAddr()); 866 |
874 TLB *itb = tc->getITBPtr(); | 867 TLB *itb = dynamic_cast<TLB *>(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 | 868 869 switch (asi) { 870 case ASI_LSU_CONTROL_REG: 871 assert(va == 0); 872 pkt->set(tc->readMiscReg(MISCREG_MMU_LSU_CTRL)); 873 break; 874 case ASI_MMU: 875 switch (va) { --- 179 unchanged lines hidden (view full) --- 1055 bool ignore; 1056 int part_id; 1057 int ctx_id; 1058 PageTableEntry pte; 1059 1060 DPRINTF(IPR, "Memory Mapped IPR Write: asi=%#X a=%#x d=%#X\n", 1061 (uint32_t)asi, va, data); 1062 |
1070 TLB *itb = tc->getITBPtr(); | 1063 TLB *itb = dynamic_cast<TLB *>(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); | 1064 1065 switch (asi) { 1066 case ASI_LSU_CONTROL_REG: 1067 assert(va == 0); 1068 tc->setMiscReg(MISCREG_MMU_LSU_CTRL, data); 1069 break; 1070 case ASI_MMU: 1071 switch (va) { --- 87 unchanged lines hidden (view full) --- 1159 assert(entry_insert != -1 || mbits(va,10,9) == va); 1160 ta_insert = itb->tag_access; 1161 va_insert = mbits(ta_insert, 63,13); 1162 ct_insert = mbits(ta_insert, 12,0); 1163 part_insert = tc->readMiscReg(MISCREG_MMU_PART_ID); 1164 real_insert = bits(va, 9,9); 1165 pte.populate(data, bits(va,10,10) ? PageTableEntry::sun4v : 1166 PageTableEntry::sun4u); |
1174 tc->getITBPtr()->insert(va_insert, part_insert, ct_insert, real_insert, 1175 pte, entry_insert); | 1167 itb->insert(va_insert, part_insert, ct_insert, real_insert, 1168 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) | 1169 break; 1170 case ASI_DTLB_DATA_ACCESS_REG: 1171 entry_insert = bits(va, 8,3); 1172 case ASI_DTLB_DATA_IN_REG: 1173 assert(entry_insert != -1 || mbits(va,10,9) == va); 1174 ta_insert = tag_access; 1175 va_insert = mbits(ta_insert, 63,13); 1176 ct_insert = mbits(ta_insert, 12,0); --- 20 unchanged lines hidden (view full) --- 1197 break; 1198 default: 1199 ignore = true; 1200 } 1201 1202 switch (bits(va,7,6)) { 1203 case 0: // demap page 1204 if (!ignore) |
1212 tc->getITBPtr()->demapPage(mbits(va,63,13), part_id, 1213 bits(va,9,9), ctx_id); | 1205 itb->demapPage(mbits(va,63,13), part_id, bits(va,9,9), ctx_id); |
1214 break; 1215 case 1: // demap context 1216 if (!ignore) | 1206 break; 1207 case 1: // demap context 1208 if (!ignore) |
1217 tc->getITBPtr()->demapContext(part_id, ctx_id); | 1209 itb->demapContext(part_id, ctx_id); |
1218 break; 1219 case 2: | 1210 break; 1211 case 2: |
1220 tc->getITBPtr()->demapAll(part_id); | 1212 itb->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); | 1213 break; 1214 default: 1215 panic("Invalid type for IMMU demap\n"); 1216 } 1217 break; 1218 case ASI_DMMU: 1219 switch (va) { 1220 case 0x18: --- 69 unchanged lines hidden (view full) --- 1290 pkt->makeAtomicResponse(); 1291 return Cycles(1); 1292} 1293 1294void 1295TLB::GetTsbPtr(ThreadContext *tc, Addr addr, int ctx, Addr *ptrs) 1296{ 1297 uint64_t tag_access = mbits(addr,63,13) | mbits(ctx,12,0); |
1306 TLB * itb = tc->getITBPtr(); | 1298 TLB *itb = dynamic_cast<TLB *>(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 --- | 1299 ptrs[0] = MakeTsbPtr(Ps0, tag_access, 1300 c0_tsb_ps0, 1301 c0_config, 1302 cx_tsb_ps0, 1303 cx_config); 1304 ptrs[1] = MakeTsbPtr(Ps1, tag_access, 1305 c0_tsb_ps1, 1306 c0_config, --- 115 unchanged lines hidden --- |