Deleted Added
sdiff udiff text old ( 10609:ae5582819481 ) new ( 10653:e3fc6bc7f97e )
full compact
1/*
2 * Copyright (c) 2010-2014 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

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

1485 case MISCREG_ATS1CUW:
1486 case MISCREG_ATS12NSOPR:
1487 case MISCREG_ATS12NSOPW:
1488 case MISCREG_ATS12NSOUR:
1489 case MISCREG_ATS12NSOUW:
1490 case MISCREG_ATS1HR:
1491 case MISCREG_ATS1HW:
1492 {
1493 RequestPtr req = new Request;
1494 unsigned flags = 0;
1495 BaseTLB::Mode mode = BaseTLB::Read;
1496 TLB::ArmTranslationType tranType = TLB::NormalTran;
1497 Fault fault;
1498 switch(misc_reg) {
1499 case MISCREG_ATS1CPR:
1500 flags = TLB::MustBeOne;
1501 tranType = TLB::S1CTran;

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

1557 }
1558 // If we're in timing mode then doing the translation in
1559 // functional mode then we're slightly distorting performance
1560 // results obtained from simulations. The translation should be
1561 // done in the same mode the core is running in. NOTE: This
1562 // can't be an atomic translation because that causes problems
1563 // with unexpected atomic snoop requests.
1564 warn("Translating via MISCREG(%d) in functional mode! Fix Me!\n", misc_reg);
1565 req->setVirt(0, val, 1, flags, Request::funcMasterId,
1566 tc->pcState().pc());
1567 req->setThreadContext(tc->contextId(), tc->threadId());
1568 fault = tc->getDTBPtr()->translateFunctional(req, tc, mode, tranType);
1569 TTBCR ttbcr = readMiscRegNoEffect(MISCREG_TTBCR);
1570 HCR hcr = readMiscRegNoEffect(MISCREG_HCR);
1571
1572 MiscReg newVal;
1573 if (fault == NoFault) {
1574 Addr paddr = req->getPaddr();
1575 if (haveLPAE && (ttbcr.eae || tranType & TLB::HypMode ||
1576 ((tranType & TLB::S1S2NsTran) && hcr.vm) )) {
1577 newVal = (paddr & mask(39, 12)) |
1578 (tc->getDTBPtr()->getAttr());
1579 } else {
1580 newVal = (paddr & 0xfffff000) |
1581 (tc->getDTBPtr()->getAttr());
1582 }

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

1600 }
1601 newVal |= 0x1; // F bit
1602 newVal |= ((armFault->iss() >> 7) & 0x1) << 8;
1603 newVal |= armFault->isStage2() ? 0x200 : 0;
1604 DPRINTF(MiscRegs,
1605 "MISCREG: Translated addr 0x%08x fault fsr %#x: PAR: 0x%08x\n",
1606 val, fsr, newVal);
1607 }
1608 delete req;
1609 setMiscRegNoEffect(MISCREG_PAR, newVal);
1610 return;
1611 }
1612 case MISCREG_TTBCR:
1613 {
1614 TTBCR ttbcr = readMiscRegNoEffect(MISCREG_TTBCR);
1615 const uint32_t ones = (uint32_t)(-1);
1616 TTBCR ttbcrMask = 0;

--- 445 unchanged lines hidden ---