From 13663f459d67fb3c0f289bbcbddc4534224381f5 Mon Sep 17 00:00:00 2001
From: michael-west <michael.west@ettus.com>
Date: Thu, 24 Jan 2019 19:13:44 -0800
Subject: RFNoC: More graph traversal fixes

- Store number of input and ouptput ports from block definition.
- Use number of input and ouptut ports for graph traversal rather
  than number of connected blocks.
- Fixes DAC synchronization failure errors when using only one TX
  channel on X300.

Signed-off-by: michael-west <michael.west@ettus.com>
---
 host/lib/rfnoc/block_ctrl_base.cpp        | 2 ++
 host/lib/rfnoc/source_block_ctrl_base.cpp | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

(limited to 'host/lib')

diff --git a/host/lib/rfnoc/block_ctrl_base.cpp b/host/lib/rfnoc/block_ctrl_base.cpp
index ed9ab11d4..4137da9e3 100644
--- a/host/lib/rfnoc/block_ctrl_base.cpp
+++ b/host/lib/rfnoc/block_ctrl_base.cpp
@@ -125,6 +125,8 @@ block_ctrl_base::block_ctrl_base(const make_args_t& make_args)
     /*** Init I/O port definitions ******************************************/
     _init_port_defs("in", _block_def->get_input_ports());
     _init_port_defs("out", _block_def->get_output_ports());
+    set_num_input_ports(_block_def->get_input_ports().size());
+    set_num_output_ports(_block_def->get_output_ports().size());
     // FIXME this warning always fails until the input buffer code above is fixed
     // if (_tree->list(_root_path / "ports/in").size() != n_valid_input_buffers) {
     //    UHD_LOGGER_WARNING(unique_id()) <<
diff --git a/host/lib/rfnoc/source_block_ctrl_base.cpp b/host/lib/rfnoc/source_block_ctrl_base.cpp
index 4097f3d7b..c3c6faf1f 100644
--- a/host/lib/rfnoc/source_block_ctrl_base.cpp
+++ b/host/lib/rfnoc/source_block_ctrl_base.cpp
@@ -34,7 +34,7 @@ void source_block_ctrl_base::issue_stream_cmd(
         // if the number of upstream and downstream connections are the same.
         // The stream command is limited to only that port to prevent issuing
         // it on the wrong block and port.
-        if (_upstream_nodes.size() == _downstream_nodes.size()
+        if (get_num_input_ports() == get_num_output_ports()
             and upstream_node.first != chan) {
             continue;
         }
-- 
cgit v1.2.3