Commit graph

732 commits

Author SHA1 Message Date
Martin Braun
38fb5e262b debian: Update control and package building
- Update dependencies
- Add python3-uhd package
- Add uhd-doc package

In part, this changeset is to further align with the official Debian
upstream at https://salsa.debian.org/bottoms/pkg-uhd.git, which is
maintained by Maitland Bottoms.
2022-04-06 14:30:49 -07:00
Martin Anderseck
bc8713e7af host: SPI: Read number of supported SPI slaves from device
Add support for reading the number of supported SPI slaves from
the device. This has become necessary because we may have bitfiles
with different capabilities and we want to report this back correctly.
2022-04-04 12:27:18 -07:00
Martin Braun
af9e13f4dc cmake: mpm: Skip installing binaries for SIM
When running MPM as a simulator, none of the board-specific tools like
the BISTs, or usrp_update_fs need be installed.
2022-04-04 12:24:10 -07:00
Martin Braun
9573640db7 mpm: x4xx: Fix clock/time source API
In f73e327, we modified PeriphManagerBase to explicitly list all
required methods as per the MPM/UHD API. This had an unintended side
effect: Because the clocking methods on x4xx are imported from
X4xxClockMgr, and not defined on x4xx itself, the method used to import
methods from X4xxClockMgr onto x4xx would refuse to re-define API calls
such as set_clock_source(), get_clock_source(), and so on.

The solution is to allow _add_public_methods() to overwrite existing
methods, which means we can overwrite abstract methods from
PeriphManagerBase in this fashion.

Without this patch, UHD sessions could fail in the following manner:

>>> import uhd
>>> U = uhd.usrp.MultiUSRP("type=x4xx")
>>> U.get_clock_source(0)
Traceback (most recent call last):
File "<input>", line 1, in <module>
U.get_clock_source(0)
RuntimeError: RuntimeError: Error during RPC call to `get_clock_source'.
Error message: get_clock_source() not available on this device!
2022-03-30 05:29:00 -07:00
Martin Braun
a705845c4c mpm: e3xx: Fix get_sync_sources() API
get_sync_sources() was not implemented for E31x and E320. Because UHD
assumes this exists, calling this would cause an error like this:

>>> import uhd
>>> U = uhd.usrp.MultiUSRP("type=e3xx")
>>> U.get_sync_sources(0)
Traceback (most recent call last):
File "<input>", line 1, in <module>
U.get_sync_sources(0)
RuntimeError: rpc::timeout: Timeout of 2000ms while calling RPC function
'get_sync_sources'
2022-03-28 12:54:07 -07:00
Martin Braun
f73e32729d mpm: PeriphManagerBase: List all sync-related methods
All PeriphManagerBase childs need to implement

- get_{clock,time,sync}_source()
- get_{clock,time,sync}_sources()
- set_{clock,time,sync}_source()

So we populate PeriphManagerBase with defaults for all of those.
2022-03-28 12:54:07 -07:00
Martin Braun
c176425b85 mpm: Make default clock/time source values state-less
Currently, the default clock/time source is whatever the user configured
in the last session.

This fixes the scenario were you have any MPM device and do this:

    $ benchmark_rate --args $args,clock_source=external

But whoops! You forgot to attach an external 10 MHz. PLL lock fails,
nothing works. No worries, you run it again:

    $ benchmark_rate --args $args

With the previous behaviour, this would retain the setting to
'external', because there's nothing to overwrite it. You would need to
append `clock_source=internal` to get a working device again. Calling
multi_usrp::set_clock_source("internal"), or a similar API call, might
not be sufficient because the PLL lock failure might crash the program
before updating the clock source is possible.

The problem with this is twofold:

- All non-MPM devices behave differently, i.e., they have a fixed
  default ('internal') which is always applied if no other option is
  given. This is an internal inconsistency.
- Some applications (like gr-uhd's GRC bindings) simply don't set
  a clock/time source when selecting a "default", or they try and update
  the clock/time source using the API calls.

Therefore, we align the behaviour of MPM devices with the other devices,
and fall back to an internal source if nothing else is provided.
2022-03-28 12:48:28 -07:00
Martin Braun
7a59bb82da mpm: e3xx: Simplify code referring to self.dboards
The E31x and E320 devices have one virtual daughterboard, and it is
always present. This is different from N3xx, which is where the MPM code
for these devices is based upon.

During the E3xx initialization, we make sure that our single
"daughterboard" exists and is responsive. That means we can remove some
code that tests for the availability and number of daughterboards, which
we need on N3xx (which works with zero, one, or two daughterboards).
This also allows us some minor deduplication of code.
2022-03-28 12:48:28 -07:00
Virendra Kakade
4b94840abf fixup! uhd: add support for max10 variants 2022-03-28 12:47:17 -07:00
David Raeman
e57d22d525 mpm: speed up reading gps mboard sensors
This commit uses a more performant buffered I/O approach for reading the
gpsd socket. Previously, querying a gps mboard sensor on an mpm radio
would take 300-500ms due to the loop reading one byte at a time.
2022-03-23 16:19:04 -05:00
Humberto Jimenez
8890e77dff images: Update manifest and compat number for X410 2022-03-23 16:16:05 -05:00
Aaron Rossetto
ecb4990297 mpm: n3xx: Recommend reboot USRP after BIST 2022-03-23 16:14:22 -05:00
Lane Kolbly
37987a87f4 mpm: x4xx: Remove GPIO classic mode register 2022-03-23 16:14:07 -05:00
Martin Braun
a120837195 mpm: Factor out common code between E31x_db and Neon classes
These classes share a *lot* of common code, due to them both being
AD9361-based devices. This code is now factored out into a single file.
2022-03-17 14:00:06 -05:00
Martin Braun
cfcb97616a mpm: e3xx: Fix Pylint warnings in periph_mgr classes
- Whitespace
- Long lines
- Superfluous imports
2022-03-17 14:00:06 -05:00
Aaron Rossetto
910b797e18 images: Update manifest and compat number for X410 2022-03-10 13:53:58 -06:00
David Raeman
7599789f83 mpm: fix ref_locked sensor on n320
The ref_locked mboard sensor on the n320 always returned true without
querying hardware. On this device family, mboard sensor callback in
n3xx.py returns the "and" of its daughterboard LMK PLLs by querying the
get_ref_lock() function on each dboard manager. However, that function
only existed for the Magnesium daughterbaord. For the Rhodium
daughterboard, the function didn't exist and so a true value was
automatically returned.

This commit adds the get_ref_lock() implementations for Rhodium and
EISCAT daughterboards, which are identical to the implementation
already present for Magnesium.

Co-authored-by: Martin Braun <martin.braun@ettus.com>
2022-03-03 14:02:30 -06:00
Martin Braun
cd4b9cb96c mpm: rh: Minor linter cleanup 2022-03-03 14:02:30 -06:00
Philipp Homann
159c21b75c mpm: Use receiving socket for sending response
The receiving socket can be used to send responses. This allows setting
firewall rules for USRP detection.
2022-03-02 13:06:23 -06:00
Martin Braun
f644c50114 e320: mpm: Remove monitor thread
This thread is a vestige from copy & pasting N310 code, it does
absolutely nothing but occupy resources.
2022-02-24 13:32:36 -06:00
Martin Braun
ba00ff0cf5 Remove FSRU-related files
The FSRU (aka EISCAT) was never supported in UHD 4.0. The FPGA
repository never had the relevant files, and the block controller also
never existed. This removes all the corresponding files from MPM, as
well as some references from makefiles.
2022-02-22 14:41:19 -06:00
Martin Braun
05211aa9a1 mpm: xportmgr_udp: Match DNAT arguments to manpage
Change the --to argument to --to-destination. Both seem to work, but the
latter is what is listed in iptables-extensions(8). What's confusing is
that `--to` also exists in another context (in the `string` match
extension).
2022-02-21 13:27:39 -06:00
Martin Braun
3ad6dc8a69 mpm: eeprom: Improve E320 and N3x0 EEPROM code/comments
- Fix some Pylint warnings in eeprom.py
- Improve comments in n3xx.py and e320.py regarding rev_compat values in
  EEPROM
2022-02-16 14:53:37 -06:00
Lane Kolbly
6c8e9700d3 mpm: x4xx: Add function to map from gpio src list indices
set_gpio_src takes a list of twelve sources to apply to the pins. For
the DIO mapping, this is fine, because the twelve pins are zero through
eleven. However, for the HDMI mapping, the pin indices range from one
to nineteen. This commit adds a function to convert from the set_gpio_src
list indices into the pin number.
2022-02-11 07:57:37 -06:00
Aaron Rossetto
7956d0dbc3 images: Revert x4xx manifest and FPGA compat update 2022-02-08 15:23:57 -06:00
Lars Amsel
6e2a65e700 mpm: add device name to discovery process
MPM devices currently do not report their device name in the discovery
process. This adds the device name. After the change the device name
is reported, e.g. when using uhd_find_devices, like so:

    $> uhd_find_devices
    --------------------------------------------------
    -- UHD Device 0
    --------------------------------------------------
    Device Address:
        serial: DEADBEEF
        claimed: False
        fpga: X4_200
        mgmt_addr: <mpm device ip>
        name: <mpm device host name>
        product: x410
        type: x4xx
2022-02-08 13:55:35 -06:00
Aaron Rossetto
b229b0e796 mpm: x4xx: Update FPGA minor compat number 2022-02-07 07:20:39 -06:00
Wade Fife
e5dd8576f3 mpm: Add x4xx DRAM BIST 2022-02-03 14:21:31 -06:00
Wade Fife
929d620bc2 mpm: Fix units for DRAM BIST
There was a mixture of KB/s and B/s in the DRAM BIST. The BIST now
returns B/s in all cases.
2022-02-03 14:21:31 -06:00
Martin Braun
13f4b9ec43 mpm: Remove further references to rfnoc_num_blocks
This is a follow-up to 89f99fac. In 2a575bf9b, a reference to
rfnoc_num_blocks was accidentally put back into MPM.
2022-02-01 14:38:28 -06:00
Lane Kolbly
3d045685ab mpm: x4xx: Align get/set_gpio_src mappings with HDMI pinouts 2022-01-24 14:24:53 -06:00
Steven Koo
396ed0c8af fixup! cmake: Replace distutils.sysconfig with sysconfig
The original commit incorrectly fails the build
uhd in the meta-ettus context. This uses prefix
instead to get the base path.

Signed-off-by: Steven Koo <steven.koo@ni.com>
2022-01-20 08:31:50 -06:00
Aaron Rossetto
87bc7c1bde cmake: Replace distutils.sysconfig with sysconfig
This commit replaces uses of distutils.sysconfig's get_python_lib()
function with sysconfig's near-equivalent get_path() function to get the
directory for site-specific, platform-specific files. Unfortunately,
get_path() does not have a way to easily modify or strip the prefix
applied to the path like get_python_lib() does, so the code must
manually modify the path to get the same effect:

- First, the platlib path is retrieved from the get_path() call.
- Next, the default base that is used to form the pathlib path is
queried via the get_config_var('base') call.
- Next, the portion of the platlib path that matches the default base is
stripped, and any leading path separator remaining is stripped. This
fundamentally replicates the behavior of get_python_lib() with an empty
prefix (i.e., the prefix positional parameter is specified as '').
- If a different prefix is desired, then the os.path.join() function is
used to combine the new prefix with the stripped pathlib path, ensuring
that the platform-specific path separator is used in crafting the path.
2022-01-14 14:36:39 -06:00
Aaron Rossetto
6d746fd296 cmake: Replace distutils with CMake for version checks
This commit replaces the use of distutils.version.LooseVersion() with
CMake's version comparison operator, which implements relational version
string checking in the same manner (i.e., comparing numeric components
of a version string numerically).
2022-01-14 14:36:39 -06:00
Martin Braun
88d284816e mpm: Demote WARNING on minor compat mismatch to DEBUG
When the minor FPGA compat number on the device is ahead of what MPM
expects, we no longer print a warning. That's because by definition, the
FPGA is still compatible with the software in this case.

If UHD or MPM require a certain minor compat number to enable a feature,
the appropriate behaviour would be to print a warning only for that
case.
2022-01-14 14:36:19 -06:00
Lars Amsel
0e7553cd1a MPM: X410: Set correct tuning word
The comment behind the tuning word is correct but 0x200 does not
give a voltage of 1.65V but 2.5V, because the full range of the
DAC is 5V not 3.3V).
2022-01-10 14:55:44 -06:00
Martin Braun
57e8c028d8 mpm: x410: Fix docstrings related to GPS sensors
No code changes, only comment changes.
2022-01-10 08:02:51 -06:00
Martin Braun
6666f36c26 mpm: e320/e31x: Fix lo-lock sensors
The LO-locked sensors on these devices were getting routed to the MPM
API call get_lo_lock_sensor(), which takes a 'which' argument (rx or
tx). However, UHD wants to pass a 'chan' argument (0 or 1). The way the
code was structured, it would always return 'False' (LO not locked) when
the argument was neither 'rx' or 'tx'.

The solution is to add get_rx_lo_lock_sensor() and
get_tx_lo_lock_sensor(), which generate the appropriate 'which'
argument, but discard the 'chan' argument (there is only one LO per Tx
and Rx, respectively).
2022-01-10 08:02:41 -06:00
Martin Braun
edf16b3a85 e31x/e320: Amend LO-locked sensor names
In UHD 3, we had two sensors names for LO lock on these devices:
lo_lock, and lo_locked. The latter is the more standard, and is checked
in examples like rx_samples_to_file.

In UHD 4, the latter was removed without comment. This adds the sensor
back again and also updates the documentation accordingly.
2022-01-10 08:02:41 -06:00
Martin Braun
4fd1cb317f mpm: x4xx: Add log message for older DIO boards
Older DIO boards don't support all the features of newer ones, but from
the log messages, it's not clear what revision the board has. We add
a log statement to clarify.
2021-12-09 13:09:28 -08:00
Martin Braun
db5ce31b0e mpm: x4xx: Move DioControl into its own module
No functional changes whatsoever, only:
- Move DioControl to its own module (x4xx_dio_control.py)
- Where PyLint was complaining about whitespace issues, fix those
- Fix import list in x4xx_periphs.py after removing DioControl
- Fix import list in x4xx.py to import DioControl from the correct
  location
2021-12-09 13:09:28 -08:00
Martin Braun
8ce91bc738 mpm: x4xx: Add checks before accessing self.dio_control
The X4x0 MPM code doesn't always load the object for the DIO control, it
only does that when certain checks pass (EEPROM readouts need to match
expected values). Therefore, `self.dio_control` may be NoneObject during
operations, and in other areas of the code, we already check if that's
the case.

The APIs added in c36fc5f don't have these checks, which means accessing
these new APIs may result in odd exceptions when trying to dereference
a NoneType object. By adding checks for the initialization state of
`self.dio_control`, we can avoid these and either substitute better
error messages / exception messages, or return safe values.

Note that mpmd_mb_controller also accesses this object indirectly by
checking the length of the return value of get_gpio_banks(). This check
is not affected by this change, as we now are guaranteed to return an
empty list if there is no self.dio_control.
2021-12-06 07:09:14 -08:00
Martin Braun
e1e1aad5c5 mpm: x4xx: Remove superfluous import 2021-12-06 07:09:14 -08:00
Virendra Kakade
3bd6afb51e mpm: x4xx: update mboard_max_rev
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
2021-12-02 06:42:09 -08:00
Virendra Kakade
6d6fc2a01d uhd: add support for max10 variants
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
2021-12-02 06:42:09 -08:00
Martin Braun
ef94c93a08 mpmd: Increase UHD-side MTU cap for 10 GbE and 1 GbE
This gets closer to what our hardware can actually support. See the
comments for further explanations.

This has the side-effect of patching an issue on X410 (using 200 MHz
images) where garbage samples would get injected (one per packet). It
is not, however, the final fix for that problem.
2021-11-08 07:37:31 -08:00
Lane Kolbly
86190b4406 mpm: x4xx: Allow retrieving external power state
The external power can, broadly speaking, be in one of three possible
states:
- OFF (the default)
- ON (the user has enabled external power, and it's working normally)
- FAULT (the external power has encountered a fault condition)

This commit allows the client of MPM to distinguish between these
three conditions.
2021-11-05 12:02:19 -07:00
Lane Kolbly
ae12c802e7 mpm: x4xx: Allow GPIO0 and GPIO1 as port names 2021-11-04 11:32:21 -07:00
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