timing.cc (9524:d6ffa982a68b) | timing.cc (9648:f10eb34e3e38) |
---|---|
1/* 2 * Copyright (c) 2010-2012 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 --- 106 unchanged lines hidden (view full) --- 115 } else { 116 drainManager = drain_manager; 117 DPRINTF(Drain, "Requesting drain: %s\n", pcState()); 118 119 // The fetch event can become descheduled if a drain didn't 120 // succeed on the first attempt. We need to reschedule it if 121 // the CPU is waiting for a microcode routine to complete. 122 if (_status == BaseSimpleCPU::Running && !fetchEvent.scheduled()) | 1/* 2 * Copyright (c) 2010-2012 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 --- 106 unchanged lines hidden (view full) --- 115 } else { 116 drainManager = drain_manager; 117 DPRINTF(Drain, "Requesting drain: %s\n", pcState()); 118 119 // The fetch event can become descheduled if a drain didn't 120 // succeed on the first attempt. We need to reschedule it if 121 // the CPU is waiting for a microcode routine to complete. 122 if (_status == BaseSimpleCPU::Running && !fetchEvent.scheduled()) |
123 schedule(fetchEvent, nextCycle()); | 123 schedule(fetchEvent, clockEdge()); |
124 125 return 1; 126 } 127} 128 129void 130TimingSimpleCPU::drainResume() 131{ --- 479 unchanged lines hidden (view full) --- 611TimingSimpleCPU::advanceInst(Fault fault) 612{ 613 if (_status == Faulting) 614 return; 615 616 if (fault != NoFault) { 617 advancePC(fault); 618 DPRINTF(SimpleCPU, "Fault occured, scheduling fetch event\n"); | 124 125 return 1; 126 } 127} 128 129void 130TimingSimpleCPU::drainResume() 131{ --- 479 unchanged lines hidden (view full) --- 611TimingSimpleCPU::advanceInst(Fault fault) 612{ 613 if (_status == Faulting) 614 return; 615 616 if (fault != NoFault) { 617 advancePC(fault); 618 DPRINTF(SimpleCPU, "Fault occured, scheduling fetch event\n"); |
619 reschedule(fetchEvent, nextCycle(), true); | 619 reschedule(fetchEvent, clockEdge(), true); |
620 _status = Faulting; 621 return; 622 } 623 624 625 if (!stayAtPC) 626 advancePC(fault); 627 --- 82 unchanged lines hidden (view full) --- 710 cpu->completeIfetch(pkt); 711} 712 713bool 714TimingSimpleCPU::IcachePort::recvTimingResp(PacketPtr pkt) 715{ 716 DPRINTF(SimpleCPU, "Received timing response %#x\n", pkt->getAddr()); 717 // delay processing of returned data until next CPU clock edge | 620 _status = Faulting; 621 return; 622 } 623 624 625 if (!stayAtPC) 626 advancePC(fault); 627 --- 82 unchanged lines hidden (view full) --- 710 cpu->completeIfetch(pkt); 711} 712 713bool 714TimingSimpleCPU::IcachePort::recvTimingResp(PacketPtr pkt) 715{ 716 DPRINTF(SimpleCPU, "Received timing response %#x\n", pkt->getAddr()); 717 // delay processing of returned data until next CPU clock edge |
718 Tick next_tick = cpu->nextCycle(); | 718 Tick next_tick = cpu->clockEdge(); |
719 720 if (next_tick == curTick()) 721 cpu->completeIfetch(pkt); 722 else 723 tickEvent.schedule(pkt, next_tick); 724 725 return true; 726} --- 75 unchanged lines hidden (view full) --- 802 803 advanceInst(fault); 804} 805 806bool 807TimingSimpleCPU::DcachePort::recvTimingResp(PacketPtr pkt) 808{ 809 // delay processing of returned data until next CPU clock edge | 719 720 if (next_tick == curTick()) 721 cpu->completeIfetch(pkt); 722 else 723 tickEvent.schedule(pkt, next_tick); 724 725 return true; 726} --- 75 unchanged lines hidden (view full) --- 802 803 advanceInst(fault); 804} 805 806bool 807TimingSimpleCPU::DcachePort::recvTimingResp(PacketPtr pkt) 808{ 809 // delay processing of returned data until next CPU clock edge |
810 Tick next_tick = cpu->nextCycle(); | 810 Tick next_tick = cpu->clockEdge(); |
811 812 if (next_tick == curTick()) { 813 cpu->completeDataAccess(pkt); 814 } else { 815 if (!tickEvent.scheduled()) { 816 tickEvent.schedule(pkt, next_tick); 817 } else { 818 // In the case of a split transaction and a cache that is --- 100 unchanged lines hidden --- | 811 812 if (next_tick == curTick()) { 813 cpu->completeDataAccess(pkt); 814 } else { 815 if (!tickEvent.scheduled()) { 816 tickEvent.schedule(pkt, next_tick); 817 } else { 818 // In the case of a split transaction and a cache that is --- 100 unchanged lines hidden --- |