Commit graph

684 commits

Author SHA1 Message Date
Lane Kolbly
e454fdbdee fixup! mpm: x4xx: add DIO GPIO API configuration methods 2021-11-03 06:04:50 -07:00
Dhiren Wijesinghe
c36fc5f6c0 mpm: x4xx: add DIO GPIO API configuration methods
These methods allow for reconfiguration of GPIO masters for x4xx.
The method names are get_gpio_banks, get_gpio_srcs, get_gpio_src,
and set_gpio_src.
2021-11-03 06:04:50 -07:00
Martin Anderseck
393ab38853 mpm: Fix handling of rfic_digital_loopback argument
In mpm arguments are handled as key=value pairs. Therefore setting
rfic_digital_loopback to 0 should disable the digital data loopback
inside the RFIC on N310. This fixes this behavior by correctly casting
from string to boolean but keeps the full re-init sequence when using
the rfic_digital_loopback flag.
2021-10-12 12:56:15 -07:00
Lane Kolbly
7ba25a638e mpm: rfdc: Tear down RFDC on teardown
So, the Python garbage collector is a bit pernicious, in that it happens
behind the scenes in a way which is difficult to predict. The rfdc_ctrl
class expects that its "lifetime" will be a single live/die cycle of the
FPGA (i.e. that when a new FPGA is loaded, it will be destructed).
However, by default the Python GC will keep the X4xxRfdcCtrl class alive
for an arbitrary amount of time, meaning that it's possible that
multiple (C++) rfdc_ctrl classes can be alive at a single time.

When the GC reaps all of these classes, libmetal segfaults when we call
metal_finish several times in a row. This change works around that
issue, if not the overall GC issue, by explicitly deleting the rfdc_ctrl
object.
2021-10-11 10:43:46 -07:00
Martin Braun
09d94529e5 cmake: Replace CMAKE_{SOURCE,BINARY}_DIR with UHD_*_DIR
See the CMake 3.8 documentation on these two variables:
https://cmake.org/cmake/help/v3.8/variable/PROJECT-NAME_SOURCE_DIR.html
https://cmake.org/cmake/help/v3.8/variable/CMAKE_SOURCE_DIR.html

Under normal circumstances, these two are identical. For sub-projects
(i.e., when building UHD as part of something else that is also a CMake
project), only the former is useful. There is no discernible downside of
using UHD_SOURCE_DIR over CMAKE_SOURCE_DIR.

This was changed using sed:

$ sed -i "s/CMAKE_SOURCE_DIR/UHD_SOURCE_DIR/g" \
    `ag -l CMAKE_SOURCE_DIR **/{CMakeLists.txt,*.cmake}`
$ sed -i "s/CMAKE_BINARY_DIR/UHD_BINARY_DIR/g" \
    `ag -l CMAKE_BINARY_DIR **/{CMakeLists.txt,*.cmake}`

At the same time, we also replace the CMake variable UHD_HOST_ROOT (used
in MPM) with UHD_SOURCE_DIR. There's no reason to have two variables
with the same meaning and different names, but more importantly, this
means that UHD_SOURCE_DIR is defined even in those cases where MPM calls
into CMake files from UHD without any additional patches.

Shoutout to GitHub user marcobergamin for bringing this up.
2021-09-10 15:08:10 -05:00
Grant Meyerhoff
ab7124c354 x4xx_bist: use get_mpm_client in gpio bist 2021-09-02 13:34:22 -05:00
Grant Meyerhoff
18de8c3271 mpmd: Add discoverable feature for trig i/o mode 2021-09-02 13:34:02 -05:00
Andrew Lynch
61d5cd5a0b mpm: x4xx: update mboard_max_rev 2021-08-25 15:28:22 -05:00
Michael Dickens
fc864f3675 MPM: add X410 support for 250e6 master clock rate 2021-08-24 15:27:35 -05:00
michael-west
d06eb0b44e n3xx: Add support for rev 10
No hardware interface change, so just bumping max revision.

Signed-off-by: michael-west <michael.west@ettus.com>
2021-08-16 15:42:13 -05:00
michael-west
81a9cc1f87 N320: Reduce PLL lock time
- Reduce PLL1 DLD lock count to 4,000 (0xFA0), or 100ms
- Change loop to check for lock every 10ms

Signed-off-by: michael-west <michael.west@ettus.com>
2021-08-16 15:42:05 -05:00
Sam O'Brien
3688056acd mpm: Expose motherboard regs for debugging
There currently isn't a way to access the motherboard register using MPM
(the ones defined in x4xx_global_regs). This commit adds a simple
interface to peek and poke them which is very similar to the current
interface for the daughter board registers.

Signed-off-by: Sam O'Brien <sam.obrien@ni.com>
2021-08-13 15:51:04 -05:00
Andrew Lynch
9d63ff98fb mpm: Skip DTS compatibility check if DTS is not being updated. 2021-07-09 00:34:33 -07:00
Martin Braun
99bb7b2127 mpm: zbx: Fix revision compat check
The revision compat check for ZBX hardware is broken. It requires the
rev_compat register to read 1. However, that is the value for RevA,
which we are deliberately *not* supporting.

Supported revisions are B and C, which have a rev_compat value of 2. We
therefore change the check to support revision 2, but not 1. In the
future, we would support revisions 2 and up if there are more revs to
ZBX. Valid rev_compat values are tracked in a whitelist (which we need
to update as we produce more revisions).

This patch fixes an issue where MPM wouldn't start when ZBX revisions
B or C are plugged in.
2021-07-08 00:19:19 -07:00
Martin Braun
d610a16cc4 mpm: Update usrp_update_fs to support X410
With this patch, we can, for example, run

    usrp_update_fs -t master

to download the currently most up-to-date filesystem and apply to the
device.
2021-07-08 00:05:43 -07:00
Humberto Jimenez
5b31c2964d mpm: max10_cpld_flash_ctrl: improve programming log 2021-07-07 00:15:31 -07:00
Humberto Jimenez
d5c2750e3e mpm: update x410 fpga minor compat number 2021-06-24 13:52:25 -05:00
Lane Kolbly
19f55a9d4a mpm: Bump MPM compat version to 4.0 2021-06-24 13:52:15 -05:00
Lane Kolbly
8adbc72f0d mpm: Move cal freeze defaults to x4xx
This fixes an issue where the slot 0 ADC blocks would erroneously
report that they were unfrozen.

Additionally, adds logic to restore a saved cal freeze state on
sync source change.
2021-06-23 13:15:47 -05:00
Grant Meyerhoff
a8cb5d6359 mpm: restore rfdc nco frequency after setting sync source
After setting sync sources, the RFDCs get reset, we need to restore the previously set frequencies so that the device continues to transmit/receive at the requested frequency
2021-06-22 07:44:09 -05:00
Aaron Rossetto
f69d88ed1f mpm: tests: Add lib/ to library load path
Ensure that DYLD_LIBRARY_PATH on OS X or LD_LIBRARY_PATH on Linux
platforms is set appropriately before invoking MPM's Python unit tests.
2021-06-18 07:28:28 -05:00
Michael Auchter
4c860ffa7d mpm: install cpld update scripts in runtime dir 2021-06-16 07:25:22 -05:00
Michael Auchter
88ce3fd19b mpm: x4xx_bist: run spi_flash tests on both DBs
By default, run the spi_flash tests on both daughterboards instead of
only the first one.
2021-06-15 14:04:13 -05:00
Michael Auchter
b9816d806d mpm: max10_cpld_flash_ctrl: only reprogram cpld if necessary
When updating the CPLD via the flash method, first read back the CPLD
image from flash and compare it with the image to be programmed. If they
match, the CPLD is already running the correct image and reprogramming
it is not necessary.
2021-06-10 12:01:53 -05:00
Lars Amsel
2a575bf9b5 uhd: Add support for the USRP X410
Co-authored-by: Lars Amsel <lars.amsel@ni.com>
Co-authored-by: Michael Auchter <michael.auchter@ni.com>
Co-authored-by: Martin Braun <martin.braun@ettus.com>
Co-authored-by: Paul Butler <paul.butler@ni.com>
Co-authored-by: Cristina Fuentes <cristina.fuentes-curiel@ni.com>
Co-authored-by: Humberto Jimenez <humberto.jimenez@ni.com>
Co-authored-by: Virendra Kakade <virendra.kakade@ni.com>
Co-authored-by: Lane Kolbly <lane.kolbly@ni.com>
Co-authored-by: Max Köhler <max.koehler@ni.com>
Co-authored-by: Andrew Lynch <andrew.lynch@ni.com>
Co-authored-by: Grant Meyerhoff <grant.meyerhoff@ni.com>
Co-authored-by: Ciro Nishiguchi <ciro.nishiguchi@ni.com>
Co-authored-by: Thomas Vogel <thomas.vogel@ni.com>
2021-06-10 12:01:53 -05:00
Thomas Vogel
747746f390 mpm: Add chip driver for LMK05318 PLL 2021-06-03 10:21:00 -05:00
Martin Braun
d7ba6ae7c2 mpm: gpsd_iface: Make GPGGA generation more robust
The GPGGA string generation relies on TPV and SKY messages being
accurate, meaning they are a list of dictionaries. There have been cases
where this was inaccurate (an empty list was returned). MPM would show
errors as such:

[ERROR] [MPM.RPCServer] Uncaught exception in method get_mb_sensor :list
index out of range
 Traceback (most recent call last):
   File "/usr/lib/python3.7/site-packages/usrp_mpm/rpc_server.py", line
   184, in new_claimed_function
       return function(*args)
         File
	 "/usr/lib/python3.7/site-packages/usrp_mpm/periph_manager/base.py",
	 line 1000, in get_mb_sensor
	     self, self.mboard_sensor_callback_map.get(sensor_name)
	       File
	       "/usr/lib/python3.7/site-packages/usrp_mpm/gpsd_iface.py",
	       line 313, in get_gps_gpgga_sensor
	           tpv_sensor_data = gps_info.get('tpv', [{}])[0]
		   IndexError: list index out of range

This is a patch to check that the lists are not empty before directly
referencing index 0 therein.
2021-06-03 09:35:09 -05:00
Michael Auchter
15b94c53ed mpm: sys_utils: add libgpiod-based Gpio helper
This adds a new Gpio helper class, which uses libgpiod under the
hood instead of the deprecated sysfs GPIO access. This class provides
the ability to get/set a specific GPIO, which is looked up by name.
2021-06-03 09:34:55 -05:00
Lars Amsel
60a147a6a1 mpm: Remove helper classes from RPC API
All public callables are exported as part of the RPC API. Because
classes are callable in Python they are now protected to prevent
export. Having theses inner helper classes marked as protected
also matches better their purpose as the are not meant to be used
outside the class.
2021-06-03 09:34:37 -05:00
Lars Amsel
51fda63677 mpm: Fix MD5 hashing of opkg status 2021-06-03 09:34:20 -05:00
Michael Auchter
70abcdc17b mpm: check-filesystem: liberalize version check
check-filesystem assumed that UHD's version string always had the format
of <version>-<git_count>-<git_hash>. However, this is not always the
case; see ./host/cmake/Modules/UHDVersion.cmake for more details.

Instead of trying to parse the version string into components, just
check to make sure the version and git hash are present in the version
string.
2021-06-02 22:28:43 -07:00
Lars Amsel
73462501f0 mpm: add unit tests for EEPROM readers 2021-05-31 05:28:47 -07:00
Lars Amsel
0d55f572b7 mpm: Add symbol name based EEPROM read, cleanup EEPROM handling
Handling of EEPROM read was cleanup in PeriphManagerBase such that EEPROM
reading for mother and daugther board have similar names and signatures.

Base class supports symbol names for the nvmem files which make it easy
to find them by name such as db0_eeprom instead of addresses like
ff020000.i2c:cros-ec@3c:db0-i2c-tunnel.

Base class furthermore reads out all available auxiliary board EEPROM
files and stores them in a dictionary member.
2021-05-31 05:28:47 -07:00
Michael Auchter
530cb0a8aa mpm: add tlv_eeprom
Add support for parsing an eeprom that uses tag-length-value to store
contents.

Co-authored-by: Michael Auchter <michael.auchter@ni.com>
Co-authored-by: Virendra Kakade <virendra.kakade@ni.com>
Co-authored-by: Cristina Fuentes <cristina.fuentes@ni.com>
2021-05-31 05:28:47 -07:00
michael-west
fa997d52cc fixup! ic_reg_maps: Remove SPCC core reg map 2021-05-28 05:48:50 -07:00
Martin Braun
ff8b50e1b3 mpm: gpsd_iface: Refactor class
- There's a lengthy conversion of TPV/SKY dicts into GPGGA which is
  removed from the class to enhance readability
- The file had some Pylint issues, including a Python2-ism
2021-05-24 13:59:40 -05:00
Michael Dickens
1162f5e983 mpm: remove unnecessary imports 2021-05-20 14:57:47 -05:00
Michael Dickens
93bed45f48 mpm: add FPGA type to the info returned during discovery
Also update this info upon server reset, such as when a new FPGA image is loaded
2021-05-20 14:57:47 -05:00
Michael Dickens
97bd72438c mpm: remove unused argument info 2021-05-20 14:57:47 -05:00
Michael Dickens
ca076ab3ba MPM for N32x: Add 'XQ' image as valid when using sfp0 as time_source 2021-05-18 14:52:08 -05:00
Martin Braun
d44d871243 mpm: lmk04832: Clean up driver
Mostly cosmetic and Pylint fixes.
2021-05-10 15:03:00 -05:00
Martin Braun
99e5230e4b mpm: PeriphManagerBase: Add _add_public_methods()
This allows conditionally adding public API methods.
2021-04-29 14:34:55 -05:00
Martin Braun
bb22f3bebb mpm: Fix minor log formatting issue 2021-04-27 15:01:53 -05:00
Martin Braun
d28593d2dc mpm: db_flash: Check mount status before mounting
This will make sure the flash partition is not already mounted before
trying to re-mount.
2021-04-26 15:08:27 -05:00
Grant Meyerhoff
b1e4e7f4df fixup! mpm: rpc: don't expose reset_mgr call via RPC 2021-04-22 15:09:40 -05:00
Martin Braun
0a0c1bb7de mpm: sysutils: mount: Check both mount point and data path
This will return False on ismounted() if a Mount class is mounted, but
in the wrong spot.
2021-04-21 15:20:24 -05:00
Martin Braun
595264854f mpm: mount: Demote already-mounted warning
The class Mount defines a mount point and device path. It currently
warns if mount() is called twice, but that warning is at odds with the
contract of that API. It even returns 'True' (== success) after printing
the warning, and the outcome is the desired one. For that reason, we
demote the warning to a debug statement.
2021-04-21 15:19:59 -05:00
Martin Braun
87b65cf7ab mpm: periph_mgr: Demote "no SPI nodes" warning
When there are SPI nodes declared for a daughterboard, MPM will emit
a warning: "No SPI nodes for dboard". The warning is misleading, because
this only occurs when no SPI nodes where *declared*, not when they were
declared but not found. This is entirely normal for USRPs where the
daughterboards do not have SPI nodes, and thus, not even worth a debug
statement.
2021-04-21 15:19:46 -05:00
mattprost
38980b2e49 mpm: mg: periphs: Read lowband lo lock status from cpld
Fix the issue where N310 did not correctly read the lo lock status
from the cpld.

Signed-off-by: mattprost <matt.prost@ni.com>
2021-04-19 12:42:33 -05:00
Martin Braun
89f99fac00 mpm: Remove references to rfnoc_num_blocks
rfnoc_num_blocks is a device arg that could be used in UHD 3.15 (and
below) to artificially skip enumeration of RFNoC blocks. Since the block
enumeration works very differently in UHD 4, this arg was never
supported there.

This removes references to this arg in some BIST files. It is not
harmful, but also serves no purpose, and could be construed as being
useful upon lecture of these codes.
2021-04-12 15:14:45 -05:00