Commit graph

663 commits

Author SHA1 Message Date
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
Martin Braun
5d3a6d2044 mpm: periph manager: Fix get_mb_eeprom() return value formatting
The get_mb_eeprom() RPC call is supposed to return a string -> string
map and thus converts all EEPROM entries to strings. However, for raw
strings, the existing conversion (using str()) was not correct (we need
to decode raw strings first).

This would lead to things like the serial being returned as b'ABCD123'
instead of just ABCD123.
2021-03-25 07:56:30 -05:00
Thomas Vogel
2000bbf17e mpm: rpc: don't expose reset_mgr call via RPC 2021-03-11 09:29:31 -06:00
Toni Jones
909b434e1e mpm: Add i2c_dev lookup using sys_name
Add i2c_dev adapter device lookup which uses a the sys_name value
instead of OF_NAME to find the adapter. OF_NAME is not unique for some
i2c device nodes. The logic for finding the adapter from the parent
node was pulled into a helper function and is shared across both
lookup functions.

Co-authored-by: Michael Auchter <michael.auchter@ni.com>
Co-authored-by: Toni Jones <toni.jones@ni.com>
2021-03-08 16:17:48 -06:00
Toni Jones
5fc01186d3 mpm: rpc: Use contextmanager for claim timeouts
Modify the RPC claim timeout mechanism to use a contextmanager
helper function when enabling/disabling timeouts.
2021-03-04 12:13:13 -06:00
Ciro Nishiguchi
760071a0be mpm: add helper for symbol lookup
Add a helper that can lookup a device via a device tree symbol.

Co-authored-by: Lars Amsel <lars.amsel@ni.com>
Co-authored-by: Michael Auchter <michael.auchter@ni.com>
2021-03-04 12:10:08 -06:00
Toni Jones
1a9033b3e9 mpm: Add DboardIface for MB DB driver control
Add DboardIface class which will act as an interface to bridge the gap
between MB and DB drivers in MPM. The DboardIface will be implemented
by each Motherboard with MB specific information. Dboard objects
will then instantiate the class in order to utilize the implemented
control functions.
2021-03-04 12:09:39 -06:00
Toni Jones
f2ae3e93f7 ic_reg_maps: Add SPCC reg map
Add SPCC reg map for reference and testing.
2021-03-01 15:57:01 -06:00
Toni Jones
902f458137 cmake: Add RegMaps build component to MPM
Add RegMaps build component to MPM. The PYTHON_CHECK_MODULE is
included from UHDPython in order to look up the presence of Mako.
Mako is required for generating the regmaps and RegMap will be
disabled without it. The RegMaps component creates custom commands for
generating all regmaps, creates a Python submodule "ic_reg_maps" with a
custom __init__.py file, and creates a target "ic_reg_maps" which gets
installed with usrp_mpm.
2021-03-01 15:57:01 -06:00
Toni Jones
394530777b mpm: Add an LMK03328 base chip driver
Added an LMK03328 base chip driver which does basic register access, ID
validation, and PLL lock validation. This will act as the base class for
device specific drivers which control the chip. The code it similar to
the LMK04828 and LMK04832 base driver classes but has a different
register map structure. Register bitfield definitions were omitted and
will be added on an as needed basis.
2021-02-22 10:15:13 -06:00
Toni Jones
2e441d296b mpm: Add an LMK04832 base chip driver
Added an LMK04832 base chip driver which does basic register access, ID
validation, and PLL lock validation. This will act as the base class for
device specific drivers which control the chip. The code is similar to
the LMK04828 base driver class, but has a different register map
structure.
2021-02-22 10:15:13 -06:00
Lars Amsel
ecbb24505d MPM: prevent dead lock in timer kill during unclaim
MPM server needs to be reclaimed in regular intervals. This is
monitored by the server using a timer. If the timer hits, the server
unclaims itself assuming the client process died for whatever
reason. In previous versions of `gevent.greenlet` the timer was
killed in a non blocking manner. This changed in version 0.13.0
(see
http://www.gevent.org/api/gevent.greenlet.html#gevent.Greenlet.kill)
which now leads to a dead lock in `timer.kill`. The kill command
is therefore now called explicitly with `block=False`.
2021-02-18 07:26:05 -06:00
Virendra Kakade
91073787b1 mpm: Add support to safely reset peripheral manager from uhd
Provide a way to safely reset the peripheral manager from uhd and as
a result, a mechanism to reload the fpga/dts components.

Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
2021-02-18 07:25:46 -06:00
Toni Jones
f11fa1bff7 mpm: Create Mock classes for unit testing
Create Mock classes which mimic the behavior of a register interface
and logger to facilitate unit testing needs.
2021-02-18 07:25:34 -06:00
Michael Auchter
5ef29d9396 mpm: deduplicate dboard eeprom handling
The _get_dboard_eeprom_info implementations are the same with the
exception of how the dboard eeprom is actually read. Break that out into
a _read_dboard_eeprom method to reduce code duplication.

The base class now defines a lambda expression for the eeprom reader
which can be changed in subclasses.

Co-authored-by: Lars Amsel <lars.amsel@ni.com>
Co-authored-by: Michael Auchter <michael.auchter@ni.com>
2021-02-11 12:26:10 -06:00
Joerg Hofrichter
9ffdd46974 mpm: added DBFlash class
Class for accessing (mounting) the daughterboard flash
2021-02-11 07:19:14 -06:00
Joerg Hofrichter
3f3006e0b4 mpm: added Mount class
Class for creating a mount point
2021-02-11 07:18:45 -06:00
Michael Auchter
fa6e7a7430 mpm: filesystem_status: tolerate absence of mender
If the mender utility is not installed or exits with a failure, return
NULL for the artifact rather than raising an exception (and disrupting
device initialization).
2021-02-09 07:36:08 -06:00
Lane Kolbly
5471a1f521 mpm: Implement get_sync_source and get_sync_sources. 2021-01-25 15:27:49 -06:00
Aaron Rossetto
7b43614846 sim: Ignore mender artifact file on sim devices 2021-01-21 12:47:54 -06:00
Virendra Kakade
fab4a5dd17 mpmd: Add support to delay and trigger fpga/dts load after update
Add a new image_loader argument delay_reload to provide a way to update
components but optionally delay the actual load.
Similarly add a new argument, just_reload, to enable uhd to reload
the fpga/dts components.

Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
2021-01-11 13:18:22 -06:00
Martin Braun
3b9ced8f07 mpm: rpc server: Fix unclaim sequence
Sequence is now:
1. Get _state lock
2. Kill reclaim timeout
3. Run deinit sequence
4. Clear claim token and session ID
5. Release _state lock

Before, we were not locking the mutex, and the timer was killed after
the deinit sequence. If the deinit sequence stalls for whatever reason,
that doesn't have to cause a claimer loss to be reported. UHD will
already have stopped the reclaim loop before unclaim() is called.

In the stall case, it would also have been possible the to acquire a new
claim while the deinit() is still running. This is prevented with the
combination of actually acquiring the mutex (like claim() and reclaim()
do) and moving the token/session ID clearing to the end.
2020-12-21 15:28:24 -08:00