aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael West <michael.west@ettus.com>2018-08-23 17:07:00 -0700
committerBrent Stapleton <bstapleton@g.hmc.edu>2018-10-25 09:57:16 -0700
commit1256821f3e61ec677cd4b4e75be14f0f376f5215 (patch)
tree96a4ea0adb7d9bb152e58e1da47929bddf17f971
parentbf353515b6f26fa280f6a8d3fed477cc97e4a7ec (diff)
downloaduhd-1256821f3e61ec677cd4b4e75be14f0f376f5215.tar.gz
uhd-1256821f3e61ec677cd4b4e75be14f0f376f5215.tar.bz2
uhd-1256821f3e61ec677cd4b4e75be14f0f376f5215.zip
X300: Add recovery for duplicate IP addresses in EEPROM
- Limit initialization to ZPU communication if recover_mb_eeprom=1 is set in device args.
-rw-r--r--host/lib/usrp/multi_usrp.cpp2
-rw-r--r--host/lib/usrp/x300/x300_impl.cpp30
2 files changed, 13 insertions, 19 deletions
diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp
index 019502ee7..5e45df298 100644
--- a/host/lib/usrp/multi_usrp.cpp
+++ b/host/lib/usrp/multi_usrp.cpp
@@ -389,7 +389,7 @@ public:
_tree = _dev->get_tree();
_is_device3 = bool(boost::dynamic_pointer_cast<uhd::device3>(_dev));
- if (is_device3()) {
+ if (is_device3() and not addr.has_key("recover_mb_eeprom")) {
_legacy_compat = rfnoc::legacy_compat::make(get_device3(), addr);
}
}
diff --git a/host/lib/usrp/x300/x300_impl.cpp b/host/lib/usrp/x300/x300_impl.cpp
index cc4f94065..0b173beb3 100644
--- a/host/lib/usrp/x300/x300_impl.cpp
+++ b/host/lib/usrp/x300/x300_impl.cpp
@@ -720,6 +720,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
UHD_LOGGER_WARNING("X300") << "UHD is operating in EEPROM Recovery Mode which disables hardware version "
"checks.\nOperating in this mode may cause hardware damage and unstable "
"radio performance!";
+ return;
}
////////////////////////////////////////////////////////////////////
@@ -871,18 +872,15 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
////////////////////////////////////////////////////////////////////
// read hardware revision and compatibility number
////////////////////////////////////////////////////////////////////
- const bool recover_mb_eeprom = mb.args.get_recover_mb_eeprom();
mb.hw_rev = 0;
if(mb_eeprom.has_key("revision") and not mb_eeprom["revision"].empty()) {
try {
mb.hw_rev = boost::lexical_cast<size_t>(mb_eeprom["revision"]);
} catch(...) {
- if (not recover_mb_eeprom)
- throw uhd::runtime_error("Revision in EEPROM is invalid! Please reprogram your EEPROM.");
+ throw uhd::runtime_error("Revision in EEPROM is invalid! Please reprogram your EEPROM.");
}
} else {
- if (not recover_mb_eeprom)
- throw uhd::runtime_error("No revision detected. MB EEPROM must be reprogrammed!");
+ throw uhd::runtime_error("No revision detected. MB EEPROM must be reprogrammed!");
}
size_t hw_rev_compat = 0;
@@ -891,12 +889,10 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
try {
hw_rev_compat = boost::lexical_cast<size_t>(mb_eeprom["revision_compat"]);
} catch(...) {
- if (not recover_mb_eeprom)
- throw uhd::runtime_error("Revision compat in EEPROM is invalid! Please reprogram your EEPROM.");
+ throw uhd::runtime_error("Revision compat in EEPROM is invalid! Please reprogram your EEPROM.");
}
} else {
- if (not recover_mb_eeprom)
- throw uhd::runtime_error("No revision compat detected. MB EEPROM must be reprogrammed!");
+ throw uhd::runtime_error("No revision compat detected. MB EEPROM must be reprogrammed!");
}
} else {
//For older HW just assume that revision_compat = revision
@@ -904,15 +900,13 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
}
if (hw_rev_compat > X300_REVISION_COMPAT) {
- if (not recover_mb_eeprom)
- throw uhd::runtime_error(str(boost::format(
- "Hardware is too new for this software. Please upgrade to a driver that supports hardware revision %d.")
- % mb.hw_rev));
+ throw uhd::runtime_error(str(boost::format(
+ "Hardware is too new for this software. Please upgrade to a driver that supports hardware revision %d.")
+ % mb.hw_rev));
} else if (mb.hw_rev < X300_REVISION_MIN) { //Compare min against the revision (and not compat) to give us more leeway for partial support for a compat
- if (not recover_mb_eeprom)
- throw uhd::runtime_error(str(boost::format(
- "Software is too new for this hardware. Please downgrade to a driver that supports hardware revision %d.")
- % mb.hw_rev));
+ throw uhd::runtime_error(str(boost::format(
+ "Software is too new for this hardware. Please downgrade to a driver that supports hardware revision %d.")
+ % mb.hw_rev));
}
////////////////////////////////////////////////////////////////////
@@ -1105,7 +1099,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
mb.radios,
mb.args.get_ext_adc_self_test_duration()
);
- } else if (not recover_mb_eeprom){
+ } else {
for (size_t i = 0; i < mb.radios.size(); i++) {
mb.radios.at(i)->self_test_adc();
}