-----Original Message----- From: [email protected] [mailto:[email protected]] Sent: Monday, November 09, 2009 10:32 AM To: Beckmann, Brad Subject: [PATCH 15 of 31] ruby: fixed dma mi example to work with multiple dmaports
# HG changeset patch # User Brad Beckmann <[email protected]> # Date 1257791383 28800 # Node ID 53c75ffb387ae6798f0b0db85b33995a6faaaabc # Parent deed9b888085808ede1797d9aff43f9195d1f788 ruby: fixed dma mi example to work with multiple dma ports diff -r deed9b888085 -r 53c75ffb387a src/mem/protocol/MI_example-dir.sm --- a/src/mem/protocol/MI_example-dir.sm Mon Nov 09 10:29:42 2009 -0800 +++ b/src/mem/protocol/MI_example-dir.sm Mon Nov 09 10:29:43 2009 -0800 @@ -1,8 +1,6 @@ machine(Directory, "Directory protocol") -: int directory_latency, - int dma_select_low_bit, - int dma_select_num_bits +: int directory_latency { MessageBuffer forwardFromDir, network="To", virtual_network="2", ordered="false"; @@ -74,6 +72,7 @@ State TBEState, desc="Transient State"; DataBlock DataBlk, desc="Data to be written (DMA write only)"; int Len, desc="..."; + MachineID DmaRequestor, desc="DMA requestor"; } external_type(TBETable) { @@ -243,8 +242,7 @@ out_msg.LineAddress := address; out_msg.Type := DMAResponseType:DATA; out_msg.DataBlk := in_msg.DataBlk; // we send the entire data block and rely on the dma controller to split it up if need be - out_msg.Destination.add(mapAddressToRange(address, MachineType:DMA, - dma_select_low_bit, dma_select_num_bits)); + out_msg.Destination.add(TBEs[address].DmaRequestor); out_msg.MessageSize := MessageSizeType:Response_Data; } } @@ -259,8 +257,7 @@ out_msg.LineAddress := address; out_msg.Type := DMAResponseType:DATA; out_msg.DataBlk := in_msg.DataBlk; // we send the entire data block and rely on the dma controller to split it up if need be - out_msg.Destination.add(mapAddressToRange(address, MachineType:DMA, - dma_select_low_bit, dma_select_num_bits)); + out_msg.Destination.add(TBEs[address].DmaRequestor); out_msg.MessageSize := MessageSizeType:Response_Data; } } @@ -271,8 +268,7 @@ out_msg.PhysicalAddress := address; out_msg.LineAddress := address; out_msg.Type := DMAResponseType:ACK; - out_msg.Destination.add(mapAddressToRange(address, MachineType:DMA, - dma_select_low_bit, dma_select_num_bits)); + out_msg.Destination.add(TBEs[address].DmaRequestor); out_msg.MessageSize := MessageSizeType:Writeback_Control; } } @@ -343,6 +339,14 @@ TBEs[address].DataBlk := in_msg.DataBlk; TBEs[address].PhysicalAddress := in_msg.PhysicalAddress; TBEs[address].Len := in_msg.Len; + TBEs[address].DmaRequestor := in_msg.Requestor; + } + } + + action(r_allocateTbeForDmaRead, "\r", desc="Allocate TBE for DMA Read") { + peek(dmaRequestQueue_in, DMARequestMsg) { + TBEs.allocate(address); + TBEs[address].DmaRequestor := in_msg.Requestor; } } @@ -485,6 +489,7 @@ transition(I, DMA_READ, ID) { //dr_sendDMAData; + r_allocateTbeForDmaRead; qf_queueMemoryFetchRequestDMA; p_popIncomingDMARequestQueue; } @@ -492,6 +497,7 @@ transition(ID, Memory_Data, I) { dr_sendDMAData; //p_popIncomingDMARequestQueue; + w_deallocateTBE; l_popMemQueue; } diff -r deed9b888085 -r 53c75ffb387a src/mem/protocol/MI_example-dma.sm --- a/src/mem/protocol/MI_example-dma.sm Mon Nov 09 10:29:42 2009 -0800 +++ b/src/mem/protocol/MI_example-dma.sm Mon Nov 09 10:29:43 2009 -0800 @@ -71,6 +71,7 @@ out_msg.PhysicalAddress := in_msg.PhysicalAddress; out_msg.LineAddress := in_msg.LineAddress; out_msg.Type := DMARequestType:READ; + out_msg.Requestor := machineID; out_msg.DataBlk := in_msg.DataBlk; out_msg.Len := in_msg.Len; out_msg.Destination.add(map_Address_to_Directory(address)); @@ -85,6 +86,7 @@ out_msg.PhysicalAddress := in_msg.PhysicalAddress; out_msg.LineAddress := in_msg.LineAddress; out_msg.Type := DMARequestType:WRITE; + out_msg.Requestor := machineID; out_msg.DataBlk := in_msg.DataBlk; out_msg.Len := in_msg.Len; out_msg.Destination.add(map_Address_to_Directory(address)); diff -r deed9b888085 -r 53c75ffb387a src/mem/protocol/MI_example-msg.sm --- a/src/mem/protocol/MI_example-msg.sm Mon Nov 09 10:29:42 2009 -0800 +++ b/src/mem/protocol/MI_example-msg.sm Mon Nov 09 10:29:43 2009 -0800 @@ -105,6 +105,7 @@ DMARequestType Type, desc="Request type (read/write)"; Address PhysicalAddress, desc="Physical address for this request"; Address LineAddress, desc="Line address for this request"; + MachineID Requestor, desc="Node who initiated the request"; NetDest Destination, desc="Destination"; DataBlock DataBlk, desc="DataBlk attached to this request"; int Len, desc="The length of the request"; diff -r deed9b888085 -r 53c75ffb387a src/mem/ruby/config/MI_example.rb --- a/src/mem/ruby/config/MI_example.rb Mon Nov 09 10:29:42 2009 -0800 +++ b/src/mem/ruby/config/MI_example.rb Mon Nov 09 10:29:43 2009 -0800 @@ -23,8 +23,6 @@ def argv() vec = super() vec += " directory_latency "+directory_latency.to_s - vec += " dma_select_low_bit "+log_int(RubySystem.block_size_bytes).to_s - vec += " dma_select_num_bits "+log_int(NetPort.totalOfType("DMA")).to_s end end _______________________________________________ m5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/m5-dev
