diff --git a/MAC/APL/PIC/RSPDriver/src/BstRead.cc b/MAC/APL/PIC/RSPDriver/src/BstRead.cc index 3919427b67adf6206904cbe7908d9dd0c51982c3..35008ed63c9ecde9dc94b0967477d03e995d0e5d 100644 --- a/MAC/APL/PIC/RSPDriver/src/BstRead.cc +++ b/MAC/APL/PIC/RSPDriver/src/BstRead.cc @@ -61,11 +61,6 @@ void BstRead::sendrequest() m_hdr = bstread.hdr; getBoardPort().send(bstread); - - Range fragment_range(0, MEPHeader::N_LOCAL_BEAMLETS - 1); - fragment_range = fragment_range + (getCurrentIndex() * MEPHeader::N_LOCAL_BEAMLETS); - - LOG_WARN_STR("fragment_range=" << fragment_range); } void BstRead::sendrequest_status() @@ -119,9 +114,9 @@ GCFEvent::TResult BstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/ Range fragment_range(0, MEPHeader::N_LOCAL_BEAMLETS - 1); fragment_range = fragment_range + (getCurrentIndex() * MEPHeader::N_LOCAL_BEAMLETS); - LOG_WARN_STR("fragment_range=" << fragment_range); + LOG_DEBUG_STR("fragment_range=" << fragment_range); - if (MEPHeader::BST_POWER != ack.hdr.m_fields.addr.regid) + if (getCurrentIndex() != ack.hdr.m_fields.addr.regid) { LOG_ERROR("invalid bst ack"); return GCFEvent::HANDLED; diff --git a/MAC/APL/PIC/RSPDriver/src/CDOWrite.cc b/MAC/APL/PIC/RSPDriver/src/CDOWrite.cc index d618546a5eed585f8f8755025ee3fefb229394da..facc9e7f0cec1d2c25b77eac3319cf52472ec629 100644 --- a/MAC/APL/PIC/RSPDriver/src/CDOWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/CDOWrite.cc @@ -185,7 +185,7 @@ void CDOWrite::sendrequest() // fill in some magic so we recognise these fields easily in tcpdump/ethereal output cdo.configuration_id = 0xBBAA; - cdo.dataformat = 0xDDCC; + cdo.ffi = 0xDDCC; cdo.nof_blocks = GET_CONFIG("RSPDriver.CDO_N_BLOCKS", i); cdo.nof_beamlets = GET_CONFIG("RSPDriver.CDO_N_BEAMLETS", i); diff --git a/MAC/APL/PIC/RSPDriver/src/RSPDriver.conf.in b/MAC/APL/PIC/RSPDriver/src/RSPDriver.conf.in index 15a47991537005d42b726f726b107dc12a753b7b..f72dfaa30abe0d9d615f872808c8c227da2c9121 100644 --- a/MAC/APL/PIC/RSPDriver/src/RSPDriver.conf.in +++ b/MAC/APL/PIC/RSPDriver/src/RSPDriver.conf.in @@ -30,8 +30,8 @@ RSPDriver.SOFTPPS=0 # Specify MAC addresses of the RSP boards explicitly # RSPDriver.MAC_ADDR_0=10:FA:00:00:13:00 -RSPDriver.MAC_ADDR_1=10:FA:00:00:13:00 -RSPDriver.MAC_ADDR_2=10:FA:00:00:13:00 +RSPDriver.MAC_ADDR_1=10:FA:00:00:12:00 +RSPDriver.MAC_ADDR_2=10:FA:00:00:11:00 RSPDriver.MAC_ADDR_3=10:FA:00:00:10:00 # RSPDriver.MAC_ADDR_0=10:FA:00:00:00:00 @@ -77,76 +77,22 @@ RSPDriver.MAC_ADDR_23=10:FA:00:00:18:00 #RSPDriver.OUTPUT_PAYLOAD_SIZE=6928 # -# Destination IP and MAC address for data packets -# leaving the RSP board with the given index +# Serdes lane settings. # - -RSPDriver.SRC_IP_ADDR_0=10.10.0.1 -RSPDriver.DST_IP_ADDR_0=10.170.0.1 -RSPDriver.SRC_MAC_ADDR_0=10:FA:00:00:00:00 -# FTS-1 -RSPDriver.DST_MAC_ADDR_0=00:E0:81:31:DE:8A -# CS-1 -# RSPDriver.DST_MAC_ADDR_0=00:E0:81:34:93:3B - -RSPDriver.SRC_IP_ADDR_1=10.10.0.2 -RSPDriver.DST_IP_ADDR_1=10.170.0.2 -RSPDriver.SRC_MAC_ADDR_1=10:FA:00:00:00:01 -# FTS-1 -RSPDriver.DST_MAC_ADDR_1=00:E0:81:31:DF:D4 -# CS-1 -# RSPDriver.DST_MAC_ADDR_1=00:E0:81:31:B0:E1 - -RSPDriver.SRC_IP_ADDR_2=10.10.0.3 -RSPDriver.DST_IP_ADDR_2=10.170.0.3 -RSPDriver.SRC_MAC_ADDR_2=10:FA:00:00:00:02 -RSPDriver.DST_MAC_ADDR_2=00:E0:81:31:B2:F5 -RSPDriver.SRC_IP_ADDR_3=10.10.0.4 -RSPDriver.DST_IP_ADDR_3=10.170.0.4 -RSPDriver.SRC_MAC_ADDR_3=10:FA:00:00:00:03 -RSPDriver.DST_MAC_ADDR_3=00:E0:81:31:DE:8B -RSPDriver.SRC_IP_ADDR_4=10.10.0.4 -RSPDriver.DST_IP_ADDR_4=10.170.0.4 -RSPDriver.SRC_MAC_ADDR_4=10:FA:00:00:00:04 -RSPDriver.DST_MAC_ADDR_4=00:E0:81:31:20:37 -RSPDriver.SRC_IP_ADDR_5=10.10.0.5 -RSPDriver.DST_IP_ADDR_5=10.170.0.5 -RSPDriver.SRC_MAC_ADDR_5=10:FA:00:00:00:05 -RSPDriver.DST_MAC_ADDR_5=00:E0:81:31:DE:9B -RSPDriver.SRC_IP_ADDR_6=10.10.0.6 -RSPDriver.DST_IP_ADDR_6=10.170.0.6 -RSPDriver.SRC_MAC_ADDR_6=10:FA:00:00:00:06 -RSPDriver.DST_MAC_ADDR_6=00:E0:81:31:8C:D1 -RSPDriver.SRC_IP_ADDR_7=10.10.0.7 -RSPDriver.DST_IP_ADDR_7=10.170.0.7 -RSPDriver.SRC_MAC_ADDR_7=10:FA:00:00:00:07 -RSPDriver.DST_MAC_ADDR_7=00:E0:81:31:9B:87 -RSPDriver.SRC_IP_ADDR_8=10.10.0.8 -RSPDriver.DST_IP_ADDR_8=10.170.0.8 -RSPDriver.SRC_MAC_ADDR_8=10:FA:00:00:00:08 -RSPDriver.DST_MAC_ADDR_8=00:E0:81:31:B3:26 -RSPDriver.SRC_IP_ADDR_9=10.10.0.9 -RSPDriver.DST_IP_ADDR_9=10.170.0.9 -RSPDriver.SRC_MAC_ADDR_9=10:FA:00:00:00:09 -RSPDriver.DST_MAC_ADDR_9=00:E0:81:31:DF:D5 -RSPDriver.SRC_IP_ADDR_10=10.10.0.10 -RSPDriver.DST_IP_ADDR_10=10.170.0.10 -RSPDriver.SRC_MAC_ADDR_10=10:FA:00:00:00:10 -RSPDriver.DST_MAC_ADDR_10=00:E0:81:31:92:11 -RSPDriver SRC_IP_ADDR_11=10.10.0.11 -RSPDriver.DST_IP_ADDR_11=10.170.0.11 -RSPDriver.SRC_MAC_ADDR_11=10:FA:00:00:00:11 -RSPDriver.DST_MAC_ADDR_11=00:E0:81:31:B2:15 - +# Define the end of the four SERDES rings. The boards +# not defined as end of the lane will pass on their +# cross-correlation or beamlet data to the neighbour board. # -# Define the end of the four SERDES rings. +# This also defines which RSP board will output data from which +# lane on its CDO port (CDO = CEP Data Output). # -# Complete beamforming and cross-correlation results +# Complete beamforming and cross-correlation data and statistics # will be available on the last RSP board in a ring. +# All other boards in the ring will produce partial +# data and statistics. # # Assuming the index of the last RSP board is N, then # the ring starts at RSP board (N - 1) % N_RSPBOARDS -# The specified # # Note: the specified RSP board index will be taken # modulo N_RSPBOARDS to prevent out of range indices. @@ -156,7 +102,6 @@ RSPDriver.DST_MAC_ADDR_11=00:E0:81:31:B2:15 # for difference between operation with data from SERDES # ring and without. # -RSPDriver.IGNORE_REMOTE_DATA=0 RSPDriver.LANE_0_BLET_OUT=0 RSPDriver.LANE_1_BLET_OUT=1 RSPDriver.LANE_2_BLET_OUT=2 @@ -165,21 +110,66 @@ RSPDriver.LANE_0_XLET_OUT=0 RSPDriver.LANE_1_XLET_OUT=1 RSPDriver.LANE_2_XLET_OUT=2 RSPDriver.LANE_3_XLET_OUT=3 +RSPDriver.IGNORE_REMOTE_DATA=0 # # CDO Control -# This controls which RSP board outputs which SERDES lane. +# This controls the format of CEP output data from the serdes lane specified in +# the previous section. # # CDO_ENABLE=(0|1) : when 0 disable output on all RSP boards # CDO_N_BLOCKS=(N) : Set number of blocks of N_BEAMLETS beamlets per output Ethernet frame # CDO_N_BEAMLETS=(N) : Set number of beamlets to output in each block # CDO_SRCMAC_FORMAT : Template for the src mac address of the boards that output data to CEP -# First %02x will be replaced by station id, second by lane number +# First %02x will be replaced by station id, second by lane number, +# e.g. Station 14, lane 3 will be: 10:FA:00:0E:03:01 # RSPDriver.CDO_ENABLE=1 RSPDriver.CDO_N_BLOCKS=16 RSPDriver.CDO_N_BEAMLETS=54 RSPDriver.CDO_SRCMAC_FORMAT=10:FA:00:%02x:%02x:01 +# FTS-1 +RSPDriver.DST_MAC_ADDR_0=00:E0:81:31:DE:8A +RSPDriver.DST_MAC_ADDR_1=00:E0:81:31:DF:D4 +# CS-1 +# RSPDriver.DST_MAC_ADDR_0=00:E0:81:34:93:3B +# RSPDriver.DST_MAC_ADDR_1=00:E0:81:31:B0:E1 +RSPDriver.DST_MAC_ADDR_2=00:E0:81:31:B2:F5 +RSPDriver.DST_MAC_ADDR_3=00:E0:81:31:DE:8B +RSPDriver.DST_MAC_ADDR_4=00:E0:81:31:20:37 +RSPDriver.DST_MAC_ADDR_5=00:E0:81:31:DE:9B +RSPDriver.DST_MAC_ADDR_6=00:E0:81:31:8C:D1 +RSPDriver.DST_MAC_ADDR_7=00:E0:81:31:9B:87 +RSPDriver.DST_MAC_ADDR_8=00:E0:81:31:B3:26 +RSPDriver.DST_MAC_ADDR_9=00:E0:81:31:DF:D5 +RSPDriver.DST_MAC_ADDR_10=00:E0:81:31:92:11 +RSPDriver.DST_MAC_ADDR_11=00:E0:81:31:B2:15 + +RSPDriver.SRC_IP_ADDR_0=10.10.0.1 +RSPDriver.SRC_IP_ADDR_1=10.10.0.2 +RSPDriver.SRC_IP_ADDR_2=10.10.0.3 +RSPDriver.SRC_IP_ADDR_3=10.10.0.4 +RSPDriver.SRC_IP_ADDR_4=10.10.0.4 +RSPDriver.SRC_IP_ADDR_5=10.10.0.5 +RSPDriver.SRC_IP_ADDR_6=10.10.0.6 +RSPDriver.SRC_IP_ADDR_7=10.10.0.7 +RSPDriver.SRC_IP_ADDR_8=10.10.0.8 +RSPDriver.SRC_IP_ADDR_9=10.10.0.9 +RSPDriver.SRC_IP_ADDR_10=10.10.0.10 +RSPDriver SRC_IP_ADDR_11=10.10.0.11 + +RSPDriver.DST_IP_ADDR_0=10.170.0.1 +RSPDriver.DST_IP_ADDR_1=10.170.0.2 +RSPDriver.DST_IP_ADDR_2=10.170.0.3 +RSPDriver.DST_IP_ADDR_3=10.170.0.4 +RSPDriver.DST_IP_ADDR_4=10.170.0.4 +RSPDriver.DST_IP_ADDR_5=10.170.0.5 +RSPDriver.DST_IP_ADDR_6=10.170.0.6 +RSPDriver.DST_IP_ADDR_7=10.170.0.7 +RSPDriver.DST_IP_ADDR_8=10.170.0.8 +RSPDriver.DST_IP_ADDR_9=10.170.0.9 +RSPDriver.DST_IP_ADDR_10=10.170.0.10 +RSPDriver.DST_IP_ADDR_11=10.170.0.11 # # Specify the absolute backplane index of the first diff --git a/MAC/APL/PIC/RSPDriver/src/SyncAction.cc b/MAC/APL/PIC/RSPDriver/src/SyncAction.cc index 1ff7f266a074e7ff7e8b9cca06ce0fc4dd07b338..ecd48fc0eb507e92fe3add729b0683eaabe3ea9d 100644 --- a/MAC/APL/PIC/RSPDriver/src/SyncAction.cc +++ b/MAC/APL/PIC/RSPDriver/src/SyncAction.cc @@ -209,8 +209,11 @@ GCFEvent::TResult SyncAction::waitack_state(GCFEvent& event, GCFPortInterface& p if (m_retries++ > N_RETRIES) { // abort - LOG_FATAL("maximum retries reached!"); - exit(EXIT_FAILURE); + LOG_WARN("maximum retries reached, protocol probably out of sync, trying to continue anyway"); + + // pretend we've completed the update + setCompleted(true); + TRAN(SyncAction::idle_state); } } } diff --git a/MAC/APL/PIC/RSPDriver/test/EPAStub.cc b/MAC/APL/PIC/RSPDriver/test/EPAStub.cc index 7778d30783a4c2c84ea3326bb582c675e3fc2beb..e6bc3896bd3918cc2d999c03a1a5f7088edfadd4 100644 --- a/MAC/APL/PIC/RSPDriver/test/EPAStub.cc +++ b/MAC/APL/PIC/RSPDriver/test/EPAStub.cc @@ -104,8 +104,14 @@ EPAStub::EPAStub(string name) m_reg[MEPHeader::BF][MEPHeader::BF_YIOUT].addr = new char[MEPHeader::BF_YIOUT_SIZE * GET_CONFIG("EPAStub.N_BLPS", i)]; m_reg[MEPHeader::BF][MEPHeader::BF_YIOUT].size = MEPHeader::BF_YIOUT_SIZE; - m_reg[MEPHeader::BST][MEPHeader::BST_POWER].addr = new char[MEPHeader::BST_POWER_SIZE]; - m_reg[MEPHeader::BST][MEPHeader::BST_POWER].size = MEPHeader::BST_POWER_SIZE; + m_reg[MEPHeader::BST][MEPHeader::BST_POWER_LANE_0].addr = new char[MEPHeader::BST_POWER_SIZE]; + m_reg[MEPHeader::BST][MEPHeader::BST_POWER_LANE_0].size = MEPHeader::BST_POWER_SIZE; + m_reg[MEPHeader::BST][MEPHeader::BST_POWER_LANE_1].addr = new char[MEPHeader::BST_POWER_SIZE]; + m_reg[MEPHeader::BST][MEPHeader::BST_POWER_LANE_1].size = MEPHeader::BST_POWER_SIZE; + m_reg[MEPHeader::BST][MEPHeader::BST_POWER_LANE_2].addr = new char[MEPHeader::BST_POWER_SIZE]; + m_reg[MEPHeader::BST][MEPHeader::BST_POWER_LANE_2].size = MEPHeader::BST_POWER_SIZE; + m_reg[MEPHeader::BST][MEPHeader::BST_POWER_LANE_3].addr = new char[MEPHeader::BST_POWER_SIZE]; + m_reg[MEPHeader::BST][MEPHeader::BST_POWER_LANE_3].size = MEPHeader::BST_POWER_SIZE; m_reg[MEPHeader::SST][MEPHeader::SST_POWER].addr = new char[MEPHeader::SST_POWER_SIZE * GET_CONFIG("EPAStub.N_BLPS", i)]; m_reg[MEPHeader::SST][MEPHeader::SST_POWER].size = MEPHeader::SST_POWER_SIZE; @@ -217,7 +223,7 @@ EPAStub::EPAStub(string name) break; case MEPHeader::BST: - if (MEPHeader::BST_POWER == regid) + if (0 <= regid < MEPHeader::N_SERDES_LANES) { // // Initialize beamlet statistics register with sensible test pattern