1/* 2 * Copyright (c) 2010 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 --- 146 unchanged lines hidden (view full) --- 155 } 156 return f; 157 } 158 159 if (currState->timing) { 160 port->dmaAction(MemCmd::ReadReq, l1desc_addr, sizeof(uint32_t), 161 &doL1DescEvent, (uint8_t*)&currState->l1Desc.data, (Tick)0); 162 DPRINTF(TLBVerbose, "Adding to walker fifo: queue size before adding: %d\n", |
163 stateQueueL1.size()); 164 stateQueueL1.push_back(currState); |
165 currState = NULL; 166 } else { 167 Request::Flags flag = 0; 168 if (currState->sctlr.c == 0){ 169 flag = Request::UNCACHEABLE; 170 } 171 port->dmaAction(MemCmd::ReadReq, l1desc_addr, sizeof(uint32_t), 172 NULL, (uint8_t*)&currState->l1Desc.data, (Tick)0, flag); --- 398 unchanged lines hidden (view full) --- 571 currState->req = NULL; 572 } 573 tlb->insert(currState->vaddr, te); 574} 575 576void 577TableWalker::doL1DescriptorWrapper() 578{ |
579 currState = stateQueueL1.front(); |
580 currState->delayed = false; 581 582 DPRINTF(TLBVerbose, "L1 Desc object host addr: %p\n",&currState->l1Desc.data); 583 DPRINTF(TLBVerbose, "L1 Desc object data: %08x\n",currState->l1Desc.data); 584 585 DPRINTF(TLBVerbose, "calling doL1Descriptor for vaddr:%#x\n", currState->vaddr); 586 doL1Descriptor(); 587 |
588 stateQueueL1.pop_front(); |
589 // Check if fault was generated 590 if (currState->fault != NoFault) { 591 currState->transState->finish(currState->fault, currState->req, 592 currState->tc, currState->mode); 593 594 currState->req = NULL; 595 currState->tc = NULL; 596 currState->delayed = false; 597 |
598 } 599 else if (!currState->delayed) { |
600 // delay is not set so there is no L2 to do |
601 DPRINTF(TLBVerbose, "calling translateTiming again\n"); 602 currState->fault = tlb->translateTiming(currState->req, currState->tc, 603 currState->transState, currState->mode); 604 605 currState->req = NULL; 606 currState->tc = NULL; 607 currState->delayed = false; 608 |
609 delete currState; 610 } else { 611 // need to do L2 descriptor 612 stateQueueL2.push_back(currState); |
613 } 614 currState = NULL; 615} 616 617void 618TableWalker::doL2DescriptorWrapper() 619{ |
620 currState = stateQueueL2.front(); |
621 assert(currState->delayed); 622 623 DPRINTF(TLBVerbose, "calling doL2Descriptor for vaddr:%#x\n", 624 currState->vaddr); 625 doL2Descriptor(); 626 627 // Check if fault was generated 628 if (currState->fault != NoFault) { --- 5 unchanged lines hidden (view full) --- 634 currState->fault = tlb->translateTiming(currState->req, currState->tc, 635 currState->transState, currState->mode); 636 } 637 638 currState->req = NULL; 639 currState->tc = NULL; 640 currState->delayed = false; 641 |
642 stateQueueL2.pop_front(); 643 delete currState; |
644 currState = NULL; 645} 646 647ArmISA::TableWalker * 648ArmTableWalkerParams::create() 649{ 650 return new ArmISA::TableWalker(this); 651} 652 |