Commit graph

782 commits

Author SHA1 Message Date
Lars Amsel
99b56616da MPM: Init DSP only if there is a radio frontend
Users might build X400 bitfiles without RF blocks in it. In that
case the DSP info will report 0 for both the TX and RX.
MPM needs to handle that case correct an skip RF block initialization
an fall back to default values. This will allow bitfiles without
RF to load.
2024-10-23 15:53:21 +02:00
Lars Amsel
92ebec5c86 MPM: Fix Linter issue
Fix linter issues on mpm/python/usrp_mpm/periph_manager/x4xx_clock_policy.py
before making changes to it.
2024-10-23 15:53:21 +02:00
Max Köhler
670c8a2fe7 mpm: apply python styleguide on x4xx.py 2024-09-18 16:56:32 +02:00
Max Köhler
76e183d3f0 mpm: adding debug access to the RFDC registers 2024-09-18 16:56:32 +02:00
Virendra Kakade
f0bf154e7c mpm: Add revF support to zbx_update_cpld
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
2024-07-22 13:29:03 -05:00
David Raeman
f54baccc7b e320: Ensure consistent sequencing when powering on/off GPSDO
When powering up the GPSDO, ensure the GPS_3V3 rail is up before taking
the GPSDO out of reset. When powering down the GPSDO, ensure I/O signals
are driven low to ensure GPSDO isn't backfed power via its I/O input pins.

Co-authored-by: Martin Braun <martin.braun@ettus.com>
2024-07-17 12:04:37 +02:00
Joerg Hofrichter
3da007b679 mpm: discovery: demote log level of ECHO send error
The ECHO send error occurs if the sender tries a MTU size which
is greater than what is supported in the direction from the MPM
device back to the sender. This is uncritical as the sender will
try with a smaller MTU size afterwards. Hence, demote the log
level of this message to debug and add information about the
packet size to better understand what is happening.
2024-06-19 11:33:38 +02:00
Joerg Hofrichter
9fe006660e mpm: don't print iptables errors when setting up forwarding 2024-06-19 11:33:12 +02:00
Joerg Hofrichter
ba5028cf57 mpm: avoid importing from rpc_server when importing usrp_mpm
Importing from usrp_mpm.rpc_server imports a lot of dependencies which are
unnecessary if the rpc_server functionality is not actually needed.

Move the decorator functions to a new file rpc_utils.py and import only
from this file inside periph_manager.

usrp_hwd.py needs additional dependencies which are specifically imported:
- usrp_mpm.rpc_server.spawn_rpc_process
- usrp_mpm.discovery.spawn_discovery_process
2024-06-11 10:20:08 +02:00
Joerg Hofrichter
7d951856b5 mpm: tdc: fix compatibility with Python >= 3.9.0 2024-06-11 10:20:08 +02:00
Martin Braun
ad5f97f828 fpga/mpm: x4xx: Add device DNA read capability
- Bumps FPGA compat from 8.2 to 8.3
- Adds three global motherboard registers to read the 96-bit device DNA
- MPM is updated to read these registers and update the device_info if
  compat version 8.3 is available
2024-06-11 10:20:07 +02:00
Martin Braun
2b5ae91920 mpm: Add error for recurring TA node inst values
This adds an error message in MPM for detecting invalid FPGA
configurations. Specifically, it is possible to generate multiple
transport adapters with identical NODE_INST values, which causes
problems in particular when attempting raw UDP streaming.

With this error message, such FPGA bitfiles are not accepted by MPM and
will cause a exception during bitfile loading.
2024-05-17 08:34:13 +02:00
Joerg Hofrichter
f3d57180bf mpm: get_mender_artifact: fix obsolete command
"mender -show-artifact" is deprecated since mender version 3.0.0
use "mender show-artifact" instead
2024-05-03 14:34:39 +02:00
Joerg Hofrichter
11091cb4f7 mpm: rpc_server: cast get_device_info/get_mbeeprom params to n/a
ensure the map contains only string values otherwise it cannot be
casted to std::map<string, string> in C++
2024-05-03 14:34:39 +02:00
David Raeman
76e004db07 n3xx: Add comments on clock_source=external,time_source=gpsdo
It is, in principle, possible to use an external clock to synchronize
N3x0 devices in frequency, and then use a GPSDO for a coarse time
synchronization. This use case is deliberately not supported, as the
GPSDO PPS signal and the external clock signal are by definition not
matched, which will remove any guarantees on time/phase alignment.

Because there are certain, niche use cases where the lack of phase
alignment is acceptable, but only an external clock is available (no
shared external PPS), usage of GPS for generating a PPS signal may be
fine. This patch does not enable the usage of this combination out of
the box, but adds comments and an update to the manual to explain the
risks of this combination, and how to enable it (by patching MPM).
2024-02-21 06:40:57 -06:00
Martin Anderseck
bce6b9fe64 mpm: Fix warning about different converter rates
If the converter rate argument was used with two values then a tuple was
created and later on compared with a list of the same contents which led
to a warning being printed. This change casts the tuple to a list to
avoid this.
2024-01-22 12:03:16 -06:00
Martin Anderseck
2a68be6e45 mpm: Fix MTS skip for dual-rate
When using two different master clock rates we skip the multi-tile
synchronization (MTS). Without this change however we compared the
converter rates and not the master clock rates which in some cases led
to MTS running because two different master clock rates still used the
same converter rate. This commit fixes this.
2024-01-22 12:03:16 -06:00
Martin Anderseck
bb177cb3b0 mpm: Use greatest converter rate for sysref rate
In some cases it is necessary to use the master clock rate that belongs
to the greater of the two calculated converter rates to find a sysref
configuration that matches both rates. This change takes care of that.
2023-11-27 15:47:02 -06:00
Martin Anderseck
ece7c48111 mpm: Add warning for bad conv rate order
In X440 we've seen that the RF performance may be bad if in dual rate
the higher converter rate comes second. This change adds a warning if a
session is started in that way which proposes to swap MCRs.
2023-11-27 11:18:22 -06:00
Martin Anderseck
b1cbdba326 mpm: Enable multiple LMK VCO rates per MCR
While for single rate we created a fixed mapping between master clock
rate and LMK VCO rate, this prevents some of the otherwise possible
dual-rates. This change adds possible VCO rates to the MCR-VCO mapping
and enables the x400 clock policy to work with these lists.
2023-11-17 16:35:05 -06:00
Martin Anderseck
c64b9e36cd mpm: Improve fall-back behavior for dual-rate
This fixes the behavior that a non-valid dual-rate config could fall
back to a single-rate configuration with two different converter rates.
With this it also fixes the behavior that with those same master clock
rates we wouldn't run mult-tile sync (as this depends on the converter
rate).
2023-11-06 14:04:11 -06:00
Javier Valenzuela
034dc0803b mpm: x400: make PRC a multiple of both rfdc rates 2023-11-02 08:30:45 -05:00
Javier Valenzuela
7b762b36d0 mpm: x400: Align FPGA revision 2023-10-30 11:22:00 -05:00
Javier Valenzuela
de2eaf3d1a mpm: x400: match HDL PPS updates 2023-10-27 09:20:14 -05:00
Martin Anderseck
42c6828aeb mpm: Disable MTS completely for dual rate
Since in dual rate we cannot use multi-tile sync over all tiles we
disable it completely for all tiles. For 1600 MHz bitfiles this isn't an
issue at all because the two remaining channels have different converter
rates anyway. For 400 MHz bitfiles the channels with the same rate will
not be synced, either, but will most probably have a fixed phase
difference.

Co-authored-by: Martin Braun <martin.braun@ettus.com>
2023-10-25 13:56:34 -05:00
Martin Braun
f215af2ccd x4xx: Add support for auto clock ID
- Update X410 and X440 BSP YAML files to properly index clocks
- Update image core files to declare clock indices
- Update get_clocks() in MPM to return the correct values

This does not include changes to the x400_radio_control block registry.
This change by itself will thus not change behaviour.
2023-10-20 07:30:16 -05:00
Martin Anderseck
68d8734f9c mpm: Add LUT for def. MCR per DSP bandwidth
This change adds a lookup table for the default master clock rate based
on the DSP bandwidth of the FPGA image for X440. Since the default
master clock rate currently is 368.64 MHz and we don't want to change
this for backwards compatibility, we need to have a way to handle lower
bandwidth FPGA images. This is what the LUT provides.
2023-10-19 13:41:25 -05:00
Virendra Kakade
36f6c11ef3 mpmd: fix timekeeper misalignment
Change the syrnchronization order to be following:
- Run the MTS (multi-tile sync) procedure
- Run the timekeeper alignment to next_pps edge
- Run the post timekeeper alignment steps (none for now)

This ensures that any effects caused due to delay adjustments which are
part of the MTS procedure do not affect timekeeper alignment.
Without this change timekeepers on two X4xx devices would be mis-aligned
slightly in a multi-device scenario.

Note that setting all timekeepers to a common time_spec on the next_pps
as a part of post-initialization application code will still align them perfectly.

Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
2023-10-09 11:01:28 -07:00
Grant Meyerhoff
a3d78ee810 x4xx: get bool for force_reinit arg 2023-09-06 10:09:36 -05:00
Grant Meyerhoff
5da051fffa x4xx: pass reboot mpm command to host on new clock config for x440 2023-09-06 10:09:36 -05:00
Grant Meyerhoff
78156eabfa mpm: move pop_host_tasks to PeriphManagerBase
Move pop_host_tasks function call from just x4xx to all MPM devices so it can be safely called from mpmd_mboard_impl
2023-09-06 10:09:36 -05:00
michael-west
f2b5e9cd1e MPM: Normalize name for gps_locked sensor
Change all references to "gps_lock" to "gps_locked" for consistency
across the code base.  Fixes incorrect use of "gps_lock" for the sensor
name on X4xx.

Signed-off-by: michael-west <michael.west@ettus.com>
2023-08-31 15:19:12 -05:00
Aki Tomita
b70f546ffa mpm: Add revE support to zbx_update_cpld 2023-07-28 11:28:31 -05:00
Martin Braun
efce8fcff9 fixup! mpm: Add LogRuntimeError class 2023-07-11 13:49:34 -05:00
Martin Anderseck
55fd43cc27 SelfCal: Add startup_tile() for cal_mode selection
To follow Xilinx' recommendations for self-cal usage this adds
startup_tile() to the cal_mode selection and we query if the cal_mode
was set properly. Since we do this, on the host side we allow the full
first Nyquist zone to be used for self-cal.
2023-07-07 12:35:55 -07:00
Martin Braun
55379ae7fe mpm: x440: Move clock info logging out of policy
The logging of the final clock settings object is moved into
X4xxClockManager so that no intermediate clock objects are logged.
2023-07-07 12:35:55 -07:00
Javier Valenzuela
ff722cb9c8 mpm: x4xx: add intermediate clocking setting
- Move the configuration of SPLL and MMCM into its own method
- In set_master_clock_rate(), call this with intermediate clock settings
  if we decide that going direct from one clock setting to another would
  cause harm/failures

Co-authored-by: Martin Braun <martin.braun@ettus.com>
2023-07-07 12:35:55 -07:00
Martin Braun
8acae88919 mpm: x4xx: Explicitly pass MCR values to set_sync_source()
Before this commit, set_sync_source() would require the master clock
rate to be set after reclocking, but would pull it out of the
X4xxClockManager object (using the _master_clock_rates attribute). Now,
the new master clock rate is passed to set_sync_source() via the args
argument.

Note that it is still possible (for backward compat) to not provide
a new MCR, in which case the assumption is that the current MCR still
remains valid.
2023-07-07 12:35:55 -07:00
Martin Braun
b6ef88e534 mpm: x4xx: Add master_clock_rates argument to _set_ref_clock_freq()
This avoids unnecessary statefulness of this function and fixes an issue
where during init(), external reference clock frequencies would be
validated against the wrong master clock rates.
2023-07-07 12:35:55 -07:00
Martin Braun
eaba13f86b mpm: x4xx: Add intermediate clock settings to clock policy
This allows the clock policy to determine intermediate clock settings
when going from one MCR setting to another. This can avoid MMCM lock
issues.
2023-07-07 12:35:55 -07:00
Martin Braun
5100c6e01f mpm: x4xx: Add rfdc rate as a sensor to X4xx dboards
This enables querying the converter rate through the sensor API:

```python
>>> U = uhd.usrp.MultiUSRP("type=x4xx")
>>> print(U.get_tx_sensor('rfdc_rate').to_real())
3000000000.0
```
2023-07-07 12:35:55 -07:00
Javier Valenzuela
987f545d94 mpm: x4xx: filter MCR list 2023-07-07 12:35:55 -07:00
Martin Anderseck
b3b5e69b02 SelfCal: Trigger if clocking has changed
This change ensures that ADC selfcal is triggered during session start
if the clocking was reconfigured. So it saves time if several
consecutive sessions are opened with always the same settings.
It also makes the ADC self cal run if in an open session either
set_clock_source(), set_time_source() or set_sync_source() are called
and a clock reconfiguration was triggered by that.
2023-07-07 12:35:55 -07:00
Martin Braun
cd754412e7 mpm: x4xx: Remove internal_temp_sensor
This sensor is undefined and not connected. It probably got into the
codebase by accident or copy&paste.
2023-06-30 10:42:30 -05:00
Martin Anderseck
7f62283fb4 MPM: Updated default MCR for X440
This changes the default master clock rate for X440 to 368.64 MHz which
results in a converter rate of 2.94912 GSps which is in line with what
X410 uses.
2023-06-27 15:35:39 -05:00
Martin Braun
63a13c786c mpm: x4xx: Optimize clock configuration at init
Changes:
- X410 Honors the force_reinit flag now (like N310). When given, it will
  force a reinit of all clocking settings.
- When master_clock_rate is not given, and nothing else changes, then
  clocking configuration will be skipped. This shaves approx. 3s of
  startup time and avoids issues that can occur during clocking
  configuration.
- If anything changes, incl. clock/time source, then full clock
  configuration is still done.
- Multi-tile sync is done in all cases, as that happens outside of init()
2023-06-22 07:14:34 -05:00
Martin Anderseck
dae45a7081 mpm: Update X440 clock policy
This adds all clocking restrictions that are necessary for a stable
operation of the flex-rate feature of X440.
2023-06-21 09:22:41 -05:00
Martin Braun
371c4c139c mpm: Add support for X440/FBX
Co-authored-by: Lars Amsel <lars.amsel@ni.com>
Co-authored-by: Martin Anderseck <martin.anderseck@ni.com>
Co-authored-by: Virendra Kakade <virendra.kakade@ni.com>
Co-authored-by: Javier Valenzuela <javier.valenzuela@ni.com>
2023-06-12 10:27:29 -05:00
Martin Braun
cd5254c8cf mpm: rfdc: Enhance converter checks
This adds two changes:
- We assert that tile 0 / block 0 is always enabled for both ADC and
  DAC, even if not required by the daughterboard or RFNoC configuration
  to ensure it can be used as a reference in MTS.
- The converter-enable check also logs more info on the tiles like this:

```
tile/block | ADC | DAC | Notes
-----------+-----+-----+------
0/0        |  1  |  1  | RX Channel 2. TX Channel 0. MTS ref tile.
0/1        |  1  |  1  | RX Channel 1. TX Channel 3.
0/2        |  0  |  1  | TX Channel 1.
0/3        |  0  |  1  | TX Channel 2.
1/0        |  1  |  1  | RX Channel 3. TX Channel 4.
1/1        |  1  |  1  | RX Channel 0. TX Channel 7.
1/2        |  0  |  1  | TX Channel 5.
1/3        |  0  |  1  | TX Channel 6.
2/0        |  1  |  0  | RX Channel 6.
2/1        |  1  |  0  | RX Channel 5.
2/2        |  0  |  0  |
2/3        |  0  |  0  |
3/0        |  1  |  0  | RX Channel 7.
3/1        |  1  |  0  | RX Channel 4.
3/2        |  0  |  0  |
3/3        |  0  |  0  |
```
2023-06-09 13:40:38 -05:00
Martin Braun
1415cc1ebb mpm: Add LogRuntimeError class
This inherits RuntimeError and saves from logging and throwing in
separate steps. Instead of

```python
log.error("Error X occured!")
raise RuntimeError("Error X occured!")
```
do
```python
raise LogRuntimeError(log, "Error X occured!")
```
2023-06-09 13:40:38 -05:00