1/* 2 * Copyright (c) 2010, 2012-2015 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 --- 488 unchanged lines hidden (view full) --- 497 498 Addr l1desc_addr = mbits(ttbr, 31, 14 - currState->ttbcr.n) | 499 (bits(currState->vaddr, 31 - currState->ttbcr.n, 20) << 2); 500 DPRINTF(TLB, " - Descriptor at address %#x (%s)\n", l1desc_addr, 501 currState->isSecure ? "s" : "ns"); 502 503 // Trickbox address check 504 Fault f; |
505 f = testWalk(l1desc_addr, sizeof(uint32_t), 506 TlbEntry::DomainType::NoAccess, L1); |
507 if (f) { 508 DPRINTF(TLB, "Trickbox check caused fault on %#x\n", currState->vaddr_tainted); 509 if (currState->timing) { 510 pending = false; 511 nextWalk(currState->tc); 512 currState = NULL; 513 } else { 514 currState->tc = NULL; --- 147 unchanged lines hidden (view full) --- 662 n = (tsz >= 2 ? 14 - tsz : 12); 663 desc_addr = mbits(ttbr, 39, n) | 664 (bits(currState->vaddr, n + 17, 21) << 3); 665 DPRINTF(TLB, " - Descriptor at address %#x (%s) (long-desc.)\n", 666 desc_addr, currState->isSecure ? "s" : "ns"); 667 } 668 669 // Trickbox address check |
670 Fault f = testWalk(desc_addr, sizeof(uint64_t), 671 TlbEntry::DomainType::NoAccess, start_lookup_level); |
672 if (f) { 673 DPRINTF(TLB, "Trickbox check caused fault on %#x\n", currState->vaddr_tainted); 674 if (currState->timing) { 675 pending = false; 676 nextWalk(currState->tc); 677 currState = NULL; 678 } else { 679 currState->tc = NULL; --- 225 unchanged lines hidden (view full) --- 905 } 906 907 // Determine descriptor address 908 Addr desc_addr = base_addr | 909 (bits(currState->vaddr, tsz - 1, 910 stride * (3 - start_lookup_level) + tg) << 3); 911 912 // Trickbox address check |
913 Fault f = testWalk(desc_addr, sizeof(uint64_t), 914 TlbEntry::DomainType::NoAccess, start_lookup_level); |
915 if (f) { 916 DPRINTF(TLB, "Trickbox check caused fault on %#x\n", currState->vaddr_tainted); 917 if (currState->timing) { 918 pending = false; 919 nextWalk(currState->tc); 920 currState = NULL; 921 } else { 922 currState->tc = NULL; --- 504 unchanged lines hidden (view full) --- 1427 { 1428 Addr l2desc_addr; 1429 l2desc_addr = currState->l1Desc.l2Addr() | 1430 (bits(currState->vaddr, 19, 12) << 2); 1431 DPRINTF(TLB, "L1 descriptor points to page table at: %#x (%s)\n", 1432 l2desc_addr, currState->isSecure ? "s" : "ns"); 1433 1434 // Trickbox address check |
1435 currState->fault = testWalk(l2desc_addr, sizeof(uint32_t), 1436 currState->l1Desc.domain(), L2); |
1437 1438 if (currState->fault) { 1439 if (!currState->timing) { 1440 currState->tc = NULL; 1441 currState->req = NULL; 1442 } 1443 return; 1444 } --- 159 unchanged lines hidden (view full) --- 1604 ArmFault::AddressSizeLL 1605 + currState->longDesc.lookupLevel, 1606 isStage2, 1607 ArmFault::LpaeTran); 1608 return; 1609 } 1610 1611 // Trickbox address check |
1612 currState->fault = testWalk( 1613 next_desc_addr, sizeof(uint64_t), TlbEntry::DomainType::Client, 1614 toLookupLevel(currState->longDesc.lookupLevel +1)); |
1615 1616 if (currState->fault) { 1617 if (!currState->timing) { 1618 currState->tc = NULL; 1619 currState->req = NULL; 1620 } 1621 return; 1622 } --- 458 unchanged lines hidden (view full) --- 2081 if (n != pendingReqs) { 2082 Tick now = curTick(); 2083 statPendingWalks.sample(pendingReqs, now - pendingChangeTick); 2084 pendingReqs = n; 2085 pendingChangeTick = now; 2086 } 2087} 2088 |
2089Fault 2090TableWalker::testWalk(Addr pa, Addr size, TlbEntry::DomainType domain, 2091 LookupLevel lookup_level) 2092{ 2093 return tlb->testWalk(pa, size, currState->vaddr, currState->isSecure, 2094 currState->mode, domain, lookup_level); 2095} 2096 2097 |
2098uint8_t 2099TableWalker::pageSizeNtoStatBin(uint8_t N) 2100{ 2101 /* for statPageSizes */ 2102 switch(N) { 2103 case 12: return 0; // 4K 2104 case 14: return 1; // 16K (using 16K granule in v8-64) 2105 case 16: return 2; // 64K --- 114 unchanged lines hidden --- |