aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/lib/rfnoc/block_ctrl_base.cpp63
-rw-r--r--host/lib/rfnoc/blockdef_xml_impl.cpp20
-rw-r--r--host/lib/rfnoc/dma_fifo_block_ctrl_impl.cpp7
-rw-r--r--host/lib/rfnoc/node_ctrl_base.cpp2
-rw-r--r--host/lib/rfnoc/radio_ctrl_impl.cpp3
-rw-r--r--host/lib/usrp/device3/device3_impl.cpp48
6 files changed, 87 insertions, 56 deletions
diff --git a/host/lib/rfnoc/block_ctrl_base.cpp b/host/lib/rfnoc/block_ctrl_base.cpp
index 20d79d262..246ba7196 100644
--- a/host/lib/rfnoc/block_ctrl_base.cpp
+++ b/host/lib/rfnoc/block_ctrl_base.cpp
@@ -20,8 +20,6 @@
#include <boost/format.hpp>
#include <boost/bind.hpp>
-#define UHD_BLOCK_LOG() UHD_LOGGER_TRACE("RFNOC")
-
using namespace uhd;
using namespace uhd::rfnoc;
using std::string;
@@ -37,14 +35,16 @@ block_ctrl_base::block_ctrl_base(
_noc_id(sr_read64(SR_READBACK_REG_ID)),
_compat_num(sr_read64(SR_READBACK_COMPAT))
{
- UHD_BLOCK_LOG() << "block_ctrl_base()" ;
-
/*** Identify this block (NoC-ID, block-ID, and block definition) *******/
// Read NoC-ID (name is passed in through make_args):
_block_def = blockdef::make_from_noc_id(_noc_id);
- if (_block_def) UHD_BLOCK_LOG() << "Found valid blockdef" ;
- if (not _block_def)
+ if (not _block_def) {
+ UHD_LOG_DEBUG("RFNOC",
+ "No block definition found, using default block configuration "
+ "for block with NOC ID: " + str(boost::format("0x%08X") % noc_id)
+ );
_block_def = blockdef::make_from_noc_id(DEFAULT_NOC_ID);
+ }
UHD_ASSERT_THROW(_block_def);
// For the block ID, we start with block count 0 and increase until
// we get a block ID that's not already registered:
@@ -52,9 +52,10 @@ block_ctrl_base::block_ctrl_base(
while (_tree->exists("xbar/" + _block_id.get_local())) {
_block_id++;
}
- UHD_BLOCK_LOG()
- << "NOC ID: " << str(boost::format("0x%016X ") % _noc_id)
- << "Block ID: " << _block_id ;
+ UHD_LOG_INFO(unique_id(), str(
+ boost::format("Initializing block control (NOC ID: 0x%016X)")
+ % _noc_id
+ ));
/*** Check compat number ************************************************/
assert_fpga_compat(
@@ -62,7 +63,7 @@ block_ctrl_base::block_ctrl_base(
NOC_SHELL_COMPAT_MINOR,
_compat_num,
"noc_shell",
- "RFNoC",
+ unique_id(),
false /* fail_on_minor_behind */
);
@@ -75,7 +76,7 @@ block_ctrl_base::block_ctrl_base(
/*** Configure ports ****************************************************/
size_t n_valid_input_buffers = 0;
- for(const size_t ctrl_port: get_ctrl_ports()) {
+ for (const size_t ctrl_port : get_ctrl_ports()) {
// Set command times to sensible defaults
set_command_tick_rate(1.0, ctrl_port);
set_command_time(time_spec_t(0.0), ctrl_port);
@@ -113,10 +114,12 @@ block_ctrl_base::block_ctrl_base(
_init_port_defs("out", _block_def->get_output_ports());
// 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("RFNOC") <<
+ UHD_LOGGER_WARNING(unique_id()) <<
boost::format("[%s] defines %d input buffer sizes, but %d input ports")
- % get_block_id().get() % n_valid_input_buffers % _tree->list(_root_path / "ports/in").size()
- ;
+ % get_block_id().get()
+ % n_valid_input_buffers
+ % _tree->list(_root_path / "ports/in").size()
+ ;
}
/*** Init default block args ********************************************/
@@ -140,9 +143,13 @@ void block_ctrl_base::_init_port_defs(
if (not _tree->exists(port_path)) {
_tree->create<blockdef::port_t>(port_path);
}
- UHD_RFNOC_BLOCK_TRACE() << "Adding port definition at " << port_path
- << boost::format(": type = '%s' pkt_size = '%s' vlen = '%s'") % port_def["type"] % port_def["pkt_size"] % port_def["vlen"]
- ;
+ UHD_LOGGER_TRACE(unique_id())
+ << "Adding port definition at " << port_path
+ << boost::format(": type = '%s' pkt_size = '%s' vlen = '%s'")
+ % port_def["type"]
+ % port_def["pkt_size"]
+ % port_def["vlen"]
+ ;
_tree->access<blockdef::port_t>(port_path).set(port_def);
port_index++;
}
@@ -152,12 +159,12 @@ void block_ctrl_base::_init_block_args()
{
blockdef::args_t args = _block_def->get_args();
fs_path arg_path = _root_path / "args";
- for(const size_t port: get_ctrl_ports()) {
+ for (const size_t port : get_ctrl_ports()) {
_tree->create<std::string>(arg_path / port);
}
// First, create all nodes.
- for(const blockdef::arg_t &arg: args) {
+ for (const auto& arg : args) {
fs_path arg_type_path = arg_path / arg["port"] / arg["name"] / "type";
_tree->create<std::string>(arg_type_path).set(arg["type"]);
fs_path arg_val_path = arg_path / arg["port"] / arg["name"] / "value";
@@ -171,7 +178,7 @@ void block_ctrl_base::_init_block_args()
// TODO: Add coercer
#define _SUBSCRIBE_CHECK_AND_RUN(type, arg_tag, error_message) \
_tree->access<type>(arg_val_path).add_coerced_subscriber(boost::bind((&nocscript::block_iface::run_and_check), _nocscript_iface, arg[#arg_tag], error_message))
- for(const blockdef::arg_t &arg: args) {
+ for (const auto& arg : args) {
fs_path arg_val_path = arg_path / arg["port"] / arg["name"] / "value";
if (not arg["check"].empty()) {
if (arg["type"] == "string") { _SUBSCRIBE_CHECK_AND_RUN(string, check, arg["check_message"]); }
@@ -190,7 +197,7 @@ void block_ctrl_base::_init_block_args()
}
// Finally: Set the values. This will call subscribers, if we have any.
- for(const blockdef::arg_t &arg: args) {
+ for (const auto& arg : args) {
fs_path arg_val_path = arg_path / arg["port"] / arg["name"] / "value";
if (not arg["value"].empty()) {
if (arg["type"] == "int_vector") { throw uhd::runtime_error("not yet implemented: int_vector"); }
@@ -228,8 +235,6 @@ std::vector<size_t> block_ctrl_base::get_ctrl_ports() const
void block_ctrl_base::sr_write(const uint32_t reg, const uint32_t data, const size_t port)
{
- //UHD_BLOCK_LOG() << " ";
- //UHD_RFNOC_BLOCK_TRACE() << boost::format("sr_write(%d, %08X, %d)") % reg % data % port ;
if (not _ctrl_ifaces.count(port)) {
throw uhd::key_error(str(boost::format("[%s] sr_write(): No such port: %d") % get_block_id().get() % port));
}
@@ -258,7 +263,6 @@ void block_ctrl_base::sr_write(const std::string &reg, const uint32_t data, cons
}
reg_addr = uint32_t(_tree->access<size_t>(_root_path / "registers" / "sr" / reg).get());
}
- UHD_RFNOC_BLOCK_TRACE() << boost::format("sr_write(%s, %08X) ==> ") % reg % data ;
return sr_write(reg_addr, data, port);
}
@@ -396,11 +400,11 @@ void block_ctrl_base::clear_command_time(const size_t port)
void block_ctrl_base::clear()
{
- UHD_RFNOC_BLOCK_TRACE() << "block_ctrl_base::clear() " ;
+ UHD_LOG_TRACE(unique_id(), "block_ctrl_base::clear()");
// Call parent...
node_ctrl_base::clear();
// ...then child
- for(const size_t port_index: get_ctrl_ports()) {
+ for (const size_t port_index : get_ctrl_ports()) {
_clear(port_index);
}
}
@@ -519,7 +523,6 @@ stream_sig_t block_ctrl_base::_resolve_port_def(const blockdef::port_t &port_def
} else {
stream_sig.item_type = port_def["type"];
}
- //UHD_RFNOC_BLOCK_TRACE() << " item type: " << stream_sig.item_type ;
// Vector length
if (port_def.is_variable("vlen")) {
@@ -530,7 +533,6 @@ stream_sig_t block_ctrl_base::_resolve_port_def(const blockdef::port_t &port_def
} else {
stream_sig.vlen = boost::lexical_cast<size_t>(port_def["vlen"]);
}
- //UHD_RFNOC_BLOCK_TRACE() << " vector length: " << stream_sig.vlen ;
// Packet size
if (port_def.is_variable("pkt_size")) {
@@ -552,7 +554,6 @@ stream_sig_t block_ctrl_base::_resolve_port_def(const blockdef::port_t &port_def
} else {
stream_sig.packet_size = boost::lexical_cast<size_t>(port_def["pkt_size"]);
}
- //UHD_RFNOC_BLOCK_TRACE() << " packet size: " << stream_sig.vlen ;
return stream_sig;
}
@@ -563,13 +564,13 @@ stream_sig_t block_ctrl_base::_resolve_port_def(const blockdef::port_t &port_def
**********************************************************************/
void block_ctrl_base::_clear(const size_t port)
{
- UHD_RFNOC_BLOCK_TRACE() << "block_ctrl_base::_clear() " ;
+ UHD_LOG_TRACE(unique_id(), "block_ctrl_base::_clear()");
sr_write(SR_CLEAR_TX_FC, 0x00C1EA12, port); // 'CLEAR', but we can write anything, really
sr_write(SR_CLEAR_RX_FC, 0x00C1EA12, port); // 'CLEAR', but we can write anything, really
}
void block_ctrl_base::_set_command_time(const time_spec_t & /*time_spec*/, const size_t /*port*/)
{
- UHD_RFNOC_BLOCK_TRACE() << "block_ctrl_base::_set_command_time() ";
+ UHD_LOG_TRACE(unique_id(), "block_ctrl_base::_set_command_time()");
}
// vim: sw=4 et:
diff --git a/host/lib/rfnoc/blockdef_xml_impl.cpp b/host/lib/rfnoc/blockdef_xml_impl.cpp
index d8f749aa0..50faf6905 100644
--- a/host/lib/rfnoc/blockdef_xml_impl.cpp
+++ b/host/lib/rfnoc/blockdef_xml_impl.cpp
@@ -213,7 +213,9 @@ public:
}
}
} catch (std::exception &e) {
- UHD_LOGGER_WARNING("RFNOC") << "has_noc_id(): caught exception " << e.what() ;
+ UHD_LOGGER_WARNING("RFNOC")
+ << "has_noc_id(): caught exception " << e.what()
+ << " while parsing file: " << filename.string();
return false;
}
return false;
@@ -223,7 +225,11 @@ public:
_type(type),
_noc_id(noc_id)
{
- //UHD_LOGGER_INFO("RFNOC") << "Reading XML file: " << filename.string().c_str() ;
+ UHD_LOGGER_DEBUG("RFNOC") <<
+ boost::format("Reading XML file %s for NOC ID 0x%08X")
+ % filename.string().c_str()
+ % noc_id
+ ;
read_xml(filename.string(), _pt);
try {
// Check key is valid
@@ -352,7 +358,8 @@ public:
arg["type"] = "string";
}
if (not arg.is_valid()) {
- UHD_LOGGER_WARNING("RFNOC") << boost::format("Found invalid argument: %s") % arg.to_string() ;
+ UHD_LOGGER_WARNING("RFNOC")
+ << "Found invalid argument: " << arg.to_string();
is_valid = false;
}
args.push_back(arg);
@@ -408,15 +415,14 @@ blockdef::sptr blockdef::make_from_noc_id(uint64_t noc_id)
std::vector<fs::path> valid;
// Check if any of the paths exist
- for(const fs::path &base_path: paths) {
+ for (const auto& base_path : paths) {
fs::path this_path = base_path / XML_BLOCKS_SUBDIR;
if (fs::exists(this_path) and fs::is_directory(this_path)) {
valid.push_back(this_path);
}
}
- if (valid.empty())
- {
+ if (valid.empty()) {
throw uhd::assertion_error(
"Failed to find a valid XML path for RFNoC blocks.\n"
"Try setting the enviroment variable UHD_RFNOC_DIR "
@@ -425,7 +431,7 @@ blockdef::sptr blockdef::make_from_noc_id(uint64_t noc_id)
}
// Iterate over all paths
- for(const fs::path &path: valid) {
+ for (const auto& path : valid) {
// Iterate over all .xml files
fs::directory_iterator end_itr;
for (fs::directory_iterator i(path); i != end_itr; ++i) {
diff --git a/host/lib/rfnoc/dma_fifo_block_ctrl_impl.cpp b/host/lib/rfnoc/dma_fifo_block_ctrl_impl.cpp
index e27c20809..16ad7db6f 100644
--- a/host/lib/rfnoc/dma_fifo_block_ctrl_impl.cpp
+++ b/host/lib/rfnoc/dma_fifo_block_ctrl_impl.cpp
@@ -34,19 +34,20 @@ public:
_perifs[i].depth = DEFAULT_SIZE;
_perifs[i].core = dma_fifo_core_3000::make(_perifs[i].ctrl, USER_SR_BASE, USER_RB_BASE);
_perifs[i].core->resize(_perifs[i].base_addr, _perifs[i].depth);
- UHD_LOGGER_INFO("RFNOC DMA FIFO") << boost::format("Running BIST for FIFO %d... ") % i;
+ UHD_LOG_DEBUG(unique_id(), "Running BIST for FIFO " << i);
if (_perifs[i].core->ext_bist_supported()) {
uint32_t bisterr = _perifs[i].core->run_bist();
if (bisterr != 0) {
throw uhd::runtime_error(str(boost::format("BIST failed! (code: %d)\n") % bisterr));
} else {
double throughput = _perifs[i].core->get_bist_throughput();
- UHD_LOGGER_INFO("RFNOC DMA FIFO") << (boost::format("BIST passed (Throughput: %.0f MB/s)") % (throughput/1e6)) ;
+ UHD_LOGGER_INFO(unique_id()) << (boost::format("BIST passed (Throughput: %.0f MB/s)") % (throughput/1e6)) ;
}
} else {
if (_perifs[i].core->run_bist() == 0) {
- UHD_LOGGER_INFO("RFNOC DMA FIFO") << "BIST passed";
+ UHD_LOGGER_INFO(unique_id()) << "BIST passed";
} else {
+ UHD_LOGGER_ERROR(unique_id()) << "BIST failed!";
throw uhd::runtime_error("BIST failed!");
}
}
diff --git a/host/lib/rfnoc/node_ctrl_base.cpp b/host/lib/rfnoc/node_ctrl_base.cpp
index 7828cd514..60496798d 100644
--- a/host/lib/rfnoc/node_ctrl_base.cpp
+++ b/host/lib/rfnoc/node_ctrl_base.cpp
@@ -20,7 +20,7 @@ std::string node_ctrl_base::unique_id() const
void node_ctrl_base::clear()
{
- UHD_RFNOC_BLOCK_TRACE() << "node_ctrl_base::clear() " ;
+ UHD_LOG_TRACE(unique_id(), "node_ctrl_base::clear()");
// Reset connections:
_upstream_nodes.clear();
_downstream_nodes.clear();
diff --git a/host/lib/rfnoc/radio_ctrl_impl.cpp b/host/lib/rfnoc/radio_ctrl_impl.cpp
index 5347150ba..2479d889a 100644
--- a/host/lib/rfnoc/radio_ctrl_impl.cpp
+++ b/host/lib/rfnoc/radio_ctrl_impl.cpp
@@ -120,9 +120,10 @@ void radio_ctrl_impl::_register_loopback_self_test(size_t chan)
return; // exit on any failure
}
}
- UHD_LOGGER_INFO("RFNOC RADIO") << "Register loopback test passed";
+ UHD_LOG_DEBUG(unique_id(), "Register loopback test passed");
}
+
/****************************************************************************
* API calls
***************************************************************************/
diff --git a/host/lib/usrp/device3/device3_impl.cpp b/host/lib/usrp/device3/device3_impl.cpp
index 6f1719500..772008a38 100644
--- a/host/lib/usrp/device3/device3_impl.cpp
+++ b/host/lib/usrp/device3/device3_impl.cpp
@@ -13,8 +13,6 @@
#include <boost/make_shared.hpp>
#include <algorithm>
-#define UHD_DEVICE3_LOG() UHD_LOGGER_TRACE("DEVICE3")
-
using namespace uhd::usrp;
device3_impl::device3_impl()
@@ -108,7 +106,6 @@ void device3_impl::enumerate_rfnoc_blocks(
// TODO: Clear out all the old block control classes
// 3) Create new block controllers
for (size_t i = 0; i < n_blocks; i++) {
- UHD_DEVICE3_LOG() << "[RFNOC] ------- Block Setup -----------" ;
// First, make a transport for port number zero, because we always need that:
ctrl_sid.set_dst_xbarport(base_port + i);
ctrl_sid.set_dst_blockport(0);
@@ -117,22 +114,39 @@ void device3_impl::enumerate_rfnoc_blocks(
CTRL,
transport_args
);
- UHD_DEVICE3_LOG() << str(boost::format("Setting up NoC-Shell Control for port #0 (SID: %s)...") % xport.send_sid.to_pp_string_hex());
+ UHD_LOG_TRACE("DEVICE3",
+ str(boost::format("Setting up NoC-Shell Control for port #0 (SID: %s)...")
+ % xport.send_sid.to_pp_string_hex())
+ );
uhd::rfnoc::ctrl_iface::sptr ctrl = uhd::rfnoc::ctrl_iface::make(
- xport,
- str(boost::format("CE_%02d_Port_%02X") % i % ctrl_sid.get_dst_endpoint())
+ xport,
+ str(boost::format("CE_%02d_Port_%02X")
+ % i
+ % ctrl_sid.get_dst_endpoint())
+ );
+ uint64_t noc_id = ctrl->send_cmd_pkt(
+ uhd::rfnoc::SR_READBACK,
+ uhd::rfnoc::SR_READBACK_REG_ID,
+ true
);
- uint64_t noc_id = ctrl->send_cmd_pkt(uhd::rfnoc::SR_READBACK, uhd::rfnoc::SR_READBACK_REG_ID, true);
- UHD_DEVICE3_LOG() << str(boost::format("Port %d: Found NoC-Block with ID %016X.") % int(ctrl_sid.get_dst_endpoint()) % noc_id) ;
+ UHD_LOG_DEBUG("DEVICE3", str(
+ boost::format("Port 0x%02X: Found NoC-Block with ID %016X.")
+ % int(ctrl_sid.get_dst_endpoint())
+ % noc_id
+ ));
uhd::rfnoc::make_args_t make_args;
uhd::rfnoc::blockdef::sptr block_def = uhd::rfnoc::blockdef::make_from_noc_id(noc_id);
if (not block_def) {
- UHD_DEVICE3_LOG() << "Using default block configuration." ;
- block_def = uhd::rfnoc::blockdef::make_from_noc_id(uhd::rfnoc::DEFAULT_NOC_ID);
+ UHD_LOG_WARNING("DEVICE3",
+ "No block definition found, using default block configuration "
+ "for block with NOC ID: " + str(boost::format("0x%08X") % noc_id)
+ );
+ block_def = uhd::rfnoc::blockdef::make_from_noc_id(
+ uhd::rfnoc::DEFAULT_NOC_ID);
}
UHD_ASSERT_THROW(block_def);
make_args.ctrl_ifaces[0] = ctrl;
- for(const size_t port_number: block_def->get_all_port_numbers()) {
+ for (const size_t port_number : block_def->get_all_port_numbers()) {
if (port_number == 0) { // We've already set this up
continue;
}
@@ -142,14 +156,22 @@ void device3_impl::enumerate_rfnoc_blocks(
CTRL,
transport_args
);
- UHD_DEVICE3_LOG() << str(boost::format("Setting up NoC-Shell Control for port #%d (SID: %s)...") % port_number % xport1.send_sid.to_pp_string_hex());
+ UHD_LOG_TRACE("DEVICE3", str(
+ boost::format("Setting up NoC-Shell Control for port #%d "
+ "(SID: %s)...")
+ % port_number
+ % xport1.send_sid.to_pp_string_hex()
+ ));
uhd::rfnoc::ctrl_iface::sptr ctrl1 = uhd::rfnoc::ctrl_iface::make(
xport1,
str(boost::format("CE_%02d_Port_%02d") % i % ctrl_sid.get_dst_endpoint())
);
- UHD_DEVICE3_LOG() << "OK" ;
make_args.ctrl_ifaces[port_number] = ctrl1;
}
+ UHD_LOG_TRACE("DEVICE3",
+ "All control transports successfully created for block with ID " <<
+ str(boost::format("0x%08X") % noc_id)
+ );
make_args.base_address = xport.send_sid.get_dst();
make_args.device_index = device_index;