From d884d7af8e5e62a1650884a6ef5d255ff04708b8 Mon Sep 17 00:00:00 2001 From: Brent Stapleton Date: Tue, 31 Oct 2017 16:02:44 -0700 Subject: mpmd: added support for the skip_init key in the device args Adding skip_init to the device args makes it so rfnoc blocks, etc. are not initialized. --- host/lib/usrp/mpmd/mpmd_impl.cpp | 41 ++++++++++++++++++++------------- host/lib/usrp/mpmd/mpmd_mboard_impl.cpp | 5 ++++ 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/host/lib/usrp/mpmd/mpmd_impl.cpp b/host/lib/usrp/mpmd/mpmd_impl.cpp index 965ede6f5..fa10c74e8 100644 --- a/host/lib/usrp/mpmd/mpmd_impl.cpp +++ b/host/lib/usrp/mpmd/mpmd_impl.cpp @@ -246,24 +246,28 @@ mpmd_impl::mpmd_impl(const device_addr_t& device_args) init_property_tree(_tree, fs_path("/mboards") / mb_i, _mb[mb_i].get()); } - // This might be parallelized. std::tasks would probably be a good way to - // do that if we want to. - for (size_t mb_i = 0; mb_i < mb_args.size(); ++mb_i) { - setup_rfnoc_blocks(mb_i, mb_args[mb_i]); - } + if (not device_args.has_key("skip_init")) { + // This might be parallelized. std::tasks would probably be a good way to + // do that if we want to. + for (size_t mb_i = 0; mb_i < mb_args.size(); ++mb_i) { + setup_rfnoc_blocks(mb_i, mb_args[mb_i]); + } - // FIXME this section only makes sense for when the time source is external. - // So, check for that, or something similar. - // This section of code assumes that the prop tree is set and we have access - // to the timekeepers. So don't move it anywhere else. - if (device_args.has_key("sync_time")) { - reset_time_synchronized(_tree); - } + // FIXME this section only makes sense for when the time source is external. + // So, check for that, or something similar. + // This section of code assumes that the prop tree is set and we have access + // to the timekeepers. So don't move it anywhere else. + if (device_args.has_key("sync_time")) { + reset_time_synchronized(_tree); + } - auto filtered_block_args = device_args; // TODO actually filter - // Blocks will finalize their own setup in this function. They have (and - // might need) full access to the prop tree, the timekeepers, etc. - setup_rpc_blocks(filtered_block_args); + auto filtered_block_args = device_args; // TODO actually filter + // Blocks will finalize their own setup in this function. They have (and + // might need) full access to the prop tree, the timekeepers, etc. + setup_rpc_blocks(filtered_block_args); + } else { + UHD_LOG_INFO("MPMD", "Claimed device without full initialization."); + } } mpmd_impl::~mpmd_impl() @@ -287,6 +291,11 @@ mpmd_mboard_impl::uptr mpmd_impl::setup_mb( device_args, device_args["addr"] ); + + if (device_args.has_key("skip_init")) { + return mb; + } + for (size_t xbar_index = 0; xbar_index < mb->num_xbars; xbar_index++) { mb->set_xbar_local_addr(xbar_index, allocate_xbar_local_addr()); } diff --git a/host/lib/usrp/mpmd/mpmd_mboard_impl.cpp b/host/lib/usrp/mpmd/mpmd_mboard_impl.cpp index 0c8e5911a..d06f25939 100644 --- a/host/lib/usrp/mpmd/mpmd_mboard_impl.cpp +++ b/host/lib/usrp/mpmd/mpmd_mboard_impl.cpp @@ -85,6 +85,11 @@ mpmd_mboard_impl::mpmd_mboard_impl( _claimer_task = claim_device_and_make_task(rpc, mb_args); // No one else can now claim the device. + if (mb_args_.has_key("skip_init")) { + UHD_LOG_DEBUG("MPMD", "Claimed device, but skipped init."); + return; + } + init_device(rpc, mb_args); // RFNoC block clocks are now on. Noc-IDs can be read back. -- cgit v1.2.3