diff options
author | Martin Braun <martin.braun@ettus.com> | 2022-01-26 10:12:38 +0100 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2022-02-01 14:41:07 -0600 |
commit | 930fa39c601d1601884ca6ead9f44841f0348f18 (patch) | |
tree | 53a19ff505eeabc0bcc4f93f8137493ef4bfdaf9 /host/lib/rfnoc | |
parent | cba3c8351d39a67262114a0d419b5c708cdb2c2b (diff) | |
download | uhd-930fa39c601d1601884ca6ead9f44841f0348f18.tar.gz uhd-930fa39c601d1601884ca6ead9f44841f0348f18.tar.bz2 uhd-930fa39c601d1601884ca6ead9f44841f0348f18.zip |
rfnoc: Update the MTU forwarding property for some blocks
Note that the default MTU forwarding policy is ONE_TO_ONE, therefore,
it is only strictly necessary to modify the MTU forwarding policy for
blocks that route data in a different manner. However, it may be nice to
explicitly state the forwarding policy for the benefit of the reader.
The following blocks had their policies updated:
- addsub: ONE_TO_FAN
- duc: ONE_TO_ONE
- dmafifo: ONE_TO_ONE
- null block: DROP
- replay block: DROP
- split stream: ONE_TO_FAN
- switchboard: ONE_TO_FAN
Diffstat (limited to 'host/lib/rfnoc')
-rw-r--r-- | host/lib/rfnoc/addsub_block_control.cpp | 3 | ||||
-rw-r--r-- | host/lib/rfnoc/ddc_block_control.cpp | 2 | ||||
-rw-r--r-- | host/lib/rfnoc/dmafifo_block_control.cpp | 3 | ||||
-rw-r--r-- | host/lib/rfnoc/duc_block_control.cpp | 4 | ||||
-rw-r--r-- | host/lib/rfnoc/null_block_control.cpp | 3 | ||||
-rw-r--r-- | host/lib/rfnoc/replay_block_control.cpp | 2 | ||||
-rw-r--r-- | host/lib/rfnoc/split_stream_block_control.cpp | 4 | ||||
-rw-r--r-- | host/lib/rfnoc/switchboard_block_control.cpp | 4 |
8 files changed, 25 insertions, 0 deletions
diff --git a/host/lib/rfnoc/addsub_block_control.cpp b/host/lib/rfnoc/addsub_block_control.cpp index 516b348b1..f91703193 100644 --- a/host/lib/rfnoc/addsub_block_control.cpp +++ b/host/lib/rfnoc/addsub_block_control.cpp @@ -37,6 +37,9 @@ public: // opposite side from which they are received. set_prop_forwarding_policy(forwarding_policy_t::ONE_TO_FAN); set_action_forwarding_policy(forwarding_policy_t::ONE_TO_FAN); + // MTU is also fanned out the same way as we produce output packets the + // same size as input packets. + set_mtu_forwarding_policy(forwarding_policy_t::ONE_TO_FAN); // Register the block's edge type properties. register_property(&_prop_type_in_a); diff --git a/host/lib/rfnoc/ddc_block_control.cpp b/host/lib/rfnoc/ddc_block_control.cpp index 12e89961d..fbc001cc9 100644 --- a/host/lib/rfnoc/ddc_block_control.cpp +++ b/host/lib/rfnoc/ddc_block_control.cpp @@ -74,6 +74,8 @@ public: << " halfbands and " "max CIC decimation " << _cic_max_decim); + // This line is not strictly necessary, as ONE_TO_ONE is the default. + // We set it make it explicit how this block works. set_mtu_forwarding_policy(forwarding_policy_t::ONE_TO_ONE); // Load list of valid decimation values std::set<size_t> decims{1}; // 1 is always a valid decimation diff --git a/host/lib/rfnoc/dmafifo_block_control.cpp b/host/lib/rfnoc/dmafifo_block_control.cpp index efc8d27cb..cecd9ff3e 100644 --- a/host/lib/rfnoc/dmafifo_block_control.cpp +++ b/host/lib/rfnoc/dmafifo_block_control.cpp @@ -30,6 +30,9 @@ public: UHD_ASSERT_THROW(get_num_input_ports() == get_num_output_ports()); set_action_forwarding_policy(forwarding_policy_t::ONE_TO_ONE); set_prop_forwarding_policy(forwarding_policy_t::ONE_TO_ONE); + // This line is not strictly necessary, as ONE_TO_ONE is the default. + // We set it make it explicit how this block works. + set_mtu_forwarding_policy(forwarding_policy_t::ONE_TO_ONE); // Now init DMA/DRAM control _fifo_cores.reserve(get_num_input_ports()); for (size_t i = 0; i < get_num_input_ports(); i++) { diff --git a/host/lib/rfnoc/duc_block_control.cpp b/host/lib/rfnoc/duc_block_control.cpp index 487e4b8ff..95ab9fa71 100644 --- a/host/lib/rfnoc/duc_block_control.cpp +++ b/host/lib/rfnoc/duc_block_control.cpp @@ -72,6 +72,10 @@ public: << " halfbands and " "max CIC interpolation " << _cic_max_interp); + // This line is not strictly necessary, as ONE_TO_ONE is the default. + // We set it make it explicit how this block works. Output packets have + // the same size as the input packet. + set_mtu_forwarding_policy(forwarding_policy_t::ONE_TO_ONE); // Load list of valid interpolation values std::set<size_t> interps{1}; // 1 is always a valid interpolation for (size_t hb = 0; hb < _num_halfbands; hb++) { diff --git a/host/lib/rfnoc/null_block_control.cpp b/host/lib/rfnoc/null_block_control.cpp index b51dbb906..1c32ba8b9 100644 --- a/host/lib/rfnoc/null_block_control.cpp +++ b/host/lib/rfnoc/null_block_control.cpp @@ -40,6 +40,9 @@ class null_block_control_impl : public null_block_control public: RFNOC_BLOCK_CONSTRUCTOR(null_block_control) { + // This block doesn't pass through packets, so the MTU can differ on + // input and output. + set_mtu_forwarding_policy(forwarding_policy_t::DROP); uint32_t initial_state = regs().peek32(REG_CTRL_STATUS); _streaming = initial_state & 0x2; _nipc = (initial_state >> 24) & 0xFF; diff --git a/host/lib/rfnoc/replay_block_control.cpp b/host/lib/rfnoc/replay_block_control.cpp index 79e7446e4..ce431ba80 100644 --- a/host/lib/rfnoc/replay_block_control.cpp +++ b/host/lib/rfnoc/replay_block_control.cpp @@ -96,6 +96,8 @@ public: // the graph). set_prop_forwarding_policy(forwarding_policy_t::DROP); set_action_forwarding_policy(forwarding_policy_t::DROP); + // Same for MTU + set_mtu_forwarding_policy(forwarding_policy_t::DROP); // Initialize record properties _record_type.reserve(_num_input_ports); diff --git a/host/lib/rfnoc/split_stream_block_control.cpp b/host/lib/rfnoc/split_stream_block_control.cpp index 17485882a..b98949514 100644 --- a/host/lib/rfnoc/split_stream_block_control.cpp +++ b/host/lib/rfnoc/split_stream_block_control.cpp @@ -41,6 +41,10 @@ public: // the split stream block. set_prop_forwarding_policy(forwarding_policy_t::USE_MAP); set_action_forwarding_policy(forwarding_policy_t::USE_MAP); + // MTU forwarding doesn't allow for USE_MAP, but we assume that packets + // coming in may potentially go to any output port. We thus fan out the + // MTU propagation. + set_mtu_forwarding_policy(forwarding_policy_t::ONE_TO_FAN); // Property propagation scheme (X --> Y means 'Properties received on // X propagate to Y'): diff --git a/host/lib/rfnoc/switchboard_block_control.cpp b/host/lib/rfnoc/switchboard_block_control.cpp index eec7f666f..b577d510d 100644 --- a/host/lib/rfnoc/switchboard_block_control.cpp +++ b/host/lib/rfnoc/switchboard_block_control.cpp @@ -36,6 +36,10 @@ public: // Configure property propagation and action forwarding behavior. set_prop_forwarding_policy(forwarding_policy_t::USE_MAP); set_action_forwarding_policy(forwarding_policy_t::USE_MAP); + // MTU forwarding doesn't allow for USE_MAP, but we assume that packets + // coming in may potentially go to any output port. We thus fan out the + // MTU propagation. + set_mtu_forwarding_policy(forwarding_policy_t::ONE_TO_FAN); _update_forwarding_map(); } |