aboutsummaryrefslogtreecommitdiffstats
path: root/mpm/python/usrp_mpm/dboard_manager/rhodium.py
diff options
context:
space:
mode:
Diffstat (limited to 'mpm/python/usrp_mpm/dboard_manager/rhodium.py')
-rw-r--r--mpm/python/usrp_mpm/dboard_manager/rhodium.py52
1 files changed, 25 insertions, 27 deletions
diff --git a/mpm/python/usrp_mpm/dboard_manager/rhodium.py b/mpm/python/usrp_mpm/dboard_manager/rhodium.py
index 81c67ffa3..5f1061184 100644
--- a/mpm/python/usrp_mpm/dboard_manager/rhodium.py
+++ b/mpm/python/usrp_mpm/dboard_manager/rhodium.py
@@ -21,7 +21,7 @@ from usrp_mpm.cores import nijesdcore
from usrp_mpm.dboard_manager.adc_rh import AD9695Rh
from usrp_mpm.dboard_manager.dac_rh import DAC37J82Rh
from usrp_mpm.mpmlog import get_logger
-from usrp_mpm.sys_utils.uio import UIO
+from usrp_mpm.sys_utils.uio import open_uio
from usrp_mpm.sys_utils.udev import get_eeprom_paths
from usrp_mpm.bfrfs import BufferFS
from usrp_mpm.sys_utils.dtoverlay import apply_overlay_safe, rm_overlay_safe
@@ -247,13 +247,6 @@ class Rhodium(DboardManagerBase):
key: self.spi_factories[key](self._spi_nodes[key])
for key in self._spi_nodes
}
- def _init_dboard_regs():
- " Create a UIO object to talk to dboard regs "
- self.log.trace("Getting UIO to talk to dboard regs...")
- return UIO(
- label="dboard-regs-{}".format(self.slot_idx),
- read_only=False
- )
self._port_expander = TCA6408(_get_i2c_dev())
self._daughterboard_gpio = FPGAtoDbGPIO(self.slot_idx)
# TODO: applying the overlay without checking for the presence of the
@@ -263,15 +256,13 @@ class Rhodium(DboardManagerBase):
apply_overlay_safe('n321')
self._lo_dist = FPGAtoLoDist(_get_i2c_dev())
except RuntimeError:
- self._lo_dist = None
+ self._lo_dist = None
self.log.debug("Turning on Module and RF power supplies")
self._power_on()
self._spi_ifaces = _init_spi_devices()
self.log.debug("Loaded SPI interfaces!")
self.cpld = RhCPLD(self._spi_ifaces['cpld'], self.log)
self.log.debug("Loaded CPLD interfaces!")
- self.radio_regs = _init_dboard_regs()
- self.radio_regs._open()
# Create DAC interface (analog output is disabled).
self.log.trace("Creating DAC control object...")
self.dac = DAC37J82Rh(self.slot_idx, self._spi_ifaces['dac'], self.log)
@@ -479,7 +470,7 @@ class Rhodium(DboardManagerBase):
direction, port_number, {True: "active", False: "terminated"}[enable]))
self.log.trace("Net name: {0}, Pin value: {1}".format(pin_info[0], pin_val))
self._lo_dist.set(pin_info[0], pin_val)
-
+
def is_lo_dist_present(self):
return self._lo_dist is not None
@@ -501,15 +492,19 @@ class Rhodium(DboardManagerBase):
# a clock is provided to the chip.
self.dac.tx_enable(False)
self.adc.power_down_channel(True)
- # Clear the Sample Clock enables and place the MMCM in reset.
- db_clk_control = DboardClockControl(self.radio_regs, self.log)
- db_clk_control.reset_mmcm()
- # Place the JESD204b core in reset, mainly to reset QPLL/CPLLs.
- jesdcore = nijesdcore.NIJESDCore(self.radio_regs, self.slot_idx,
- **RhodiumInitManager.JESD_DEFAULT_ARGS)
- jesdcore.reset()
- # The reference clock is handled elsewhere since it is a motherboard-
- # level clock.
+ with open_uio(
+ label="dboard-regs-{}".format(slot_idx),
+ read_only=False
+ ) as radio_regs:
+ # Clear the Sample Clock enables and place the MMCM in reset.
+ db_clk_control = DboardClockControl(radio_regs, self.log)
+ db_clk_control.reset_mmcm()
+ # Place the JESD204b core in reset, mainly to reset QPLL/CPLLs.
+ jesdcore = nijesdcore.NIJESDCore(radio_regs, self.slot_idx,
+ **RhodiumInitManager.JESD_DEFAULT_ARGS)
+ jesdcore.reset()
+ # The reference clock is handled elsewhere since it is a motherboard-
+ # level clock.
def _reinit(self, master_clock_rate):
"""
@@ -636,9 +631,12 @@ class Rhodium(DboardManagerBase):
"""
Debug for reading out all JESD core registers via RPC shell
"""
- radio_regs = UIO(label="dboard-regs-{}".format(self.slot_idx))
- for i in range(0x2000, 0x2110, 0x10):
- print(("0x%04X " % i), end=' ')
- for j in range(0, 0x10, 0x4):
- print(("%08X" % radio_regs.peek32(i + j)), end=' ')
- print("")
+ with open_uio(
+ label="dboard-regs-{}".format(slot_idx),
+ read_only=False
+ ) as radio_regs:
+ for i in range(0x2000, 0x2110, 0x10):
+ print(("0x%04X " % i), end=' ')
+ for j in range(0, 0x10, 0x4):
+ print(("%08X" % radio_regs.peek32(i + j)), end=' ')
+ print("")