aboutsummaryrefslogtreecommitdiffstats
path: root/mpm
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2017-11-17 11:13:59 -0800
committerMartin Braun <martin.braun@ettus.com>2017-12-22 15:05:06 -0800
commit50a8624a4bb1949eafcc1a051cce50d2514c2fc0 (patch)
treeaf54b74e88a123a81d499cfa30e6927985e71bc0 /mpm
parent0fdf93748aaa6ea92ec674f4b469de0a9aab4442 (diff)
downloaduhd-50a8624a4bb1949eafcc1a051cce50d2514c2fc0.tar.gz
uhd-50a8624a4bb1949eafcc1a051cce50d2514c2fc0.tar.bz2
uhd-50a8624a4bb1949eafcc1a051cce50d2514c2fc0.zip
mpm: mg: Make Magnesium __init__ exception-safe
Diffstat (limited to 'mpm')
-rw-r--r--mpm/python/usrp_mpm/dboard_manager/magnesium.py38
1 files changed, 33 insertions, 5 deletions
diff --git a/mpm/python/usrp_mpm/dboard_manager/magnesium.py b/mpm/python/usrp_mpm/dboard_manager/magnesium.py
index 570887870..1e24eb046 100644
--- a/mpm/python/usrp_mpm/dboard_manager/magnesium.py
+++ b/mpm/python/usrp_mpm/dboard_manager/magnesium.py
@@ -345,7 +345,35 @@ class Magnesium(DboardManagerBase):
# called!
self.ref_clock_freq = 10e6
self.master_clock_freq = 125e6 # Same
- # Initialize power and peripherals that don't need user-settings
+ # Predeclare some attributes to make linter happy:
+ self.lmk = None
+ self.clock_synchronizer = None
+ self.jesdcore = None
+ self._port_expander = None
+ self.mykonos = None
+ self.eeprom_fs = None
+ self.eeprom_path = None
+ self.radio_regs = None
+ self.cpld = None
+ self.dboard_clk_control = None
+ self._init_cals_mask = 0
+ self._tracking_cals_mask = 0
+ self._init_cals_timeout = 0
+ # Now initialize all peripherals. If that doesn't work, put this class
+ # into a non-functional state (but don't crash, or we can't talk to it
+ # any more):
+ try:
+ self._init_periphs()
+ self._periphs_initialized = True
+ except Exception as ex:
+ self.log.error("Failed to initialize peripherals: %s",
+ str(ex))
+ self._periphs_initialized = False
+
+ def _init_periphs(self):
+ """
+ Initialize power and peripherals that don't need user-settings
+ """
self._port_expander = TCA6408(self._get_i2c_dev(self.slot_idx))
self._power_on()
self.log.debug("Loading C++ drivers...")
@@ -370,10 +398,6 @@ class Magnesium(DboardManagerBase):
}
self.cpld = MgCPLD(self._spi_ifaces['cpld'], self.log)
self.dboard_clk_control = DboardClockControl(self.radio_regs, self.log)
- # Declare some attributes to make linter happy:
- self.lmk = None
- self.clock_synchronizer = None
- self.jesdcore = None
def _power_on(self):
" Turn on power to daughterboard "
@@ -480,6 +504,10 @@ class Magnesium(DboardManagerBase):
self.log.info("init() called with args `{}'".format(
",".join(['{}={}'.format(x, args[x]) for x in args])
))
+ if not self._periphs_initialized:
+ error_msg = "Cannot run init(), peripherals are not initialized!"
+ self.log.error(error_msg)
+ raise RuntimeError(error_msg)
self.dboard_clk_control.reset_mmcm()
self.lmk = _init_lmk(
self._spi_ifaces['lmk'],