aboutsummaryrefslogtreecommitdiffstats
path: root/mpm
Commit message (Collapse)AuthorAgeFilesLines
* mpm: fix ref_locked sensor on n320David Raeman2022-03-031-0/+15
| | | | | | | | | | | | | | | | 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>
* mpm: rh: Minor linter cleanupMartin Braun2022-03-031-8/+5
|
* mpm: Use receiving socket for sending responsePhilipp Homann2022-03-021-5/+3
| | | | | The receiving socket can be used to send responses. This allows setting firewall rules for USRP detection.
* mpm: eeprom: Fix default values in EEPROM utilitiesMartin Braun2022-02-245-34/+113
| | | | | | | | | | | | | | | | | | | | | | | | When executing eeprom-init on E320 (which was originally written for N310), it would use defaults from N310, potentially causing issues. These issues would have arisen if we letter-revved the E320 one more time (because at rev 5, N310 had a compatibility cutover). Summary of changes: - eeprom-init will now read values *not* given on the command line from the existing content of the EEPROM, if it contains valid data. This means that DT, MCU, and rev compat values will no longer get auto-derived if the EEPROM already contained "good" values. - If the EEPROM is empty or corrupted, eeprom-init will no longer run if the pid value is not provided. This is to avoid N310 defaults being written to E320 EEPROMs. - A README is added to explain which devices use which utilities. - PID checks are more strict now. It is unlikely we'll build new devices using the old EEPROM format (prior to TLV), so we can check specifically for E320, N3x0. - The hard-coded list of PIDs for the EEPROM tools are moved to a central location (eeprom-pids.h). - The code to derive values for DT/MCU/rev compat from the rev is now pid-specific and no longer device-agnostic.
* e320: mpm: Remove monitor threadMartin Braun2022-02-241-34/+0
| | | | | This thread is a vestige from copy & pasting N310 code, it does absolutely nothing but occupy resources.
* Remove FSRU-related filesMartin Braun2022-02-226-958/+1
| | | | | | | 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.
* mpm: xportmgr_udp: Match DNAT arguments to manpageMartin Braun2022-02-211-3/+5
| | | | | | | 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).
* mpm: eeprom: Improve E320 and N3x0 EEPROM code/commentsMartin Braun2022-02-163-12/+23
| | | | | | - Fix some Pylint warnings in eeprom.py - Improve comments in n3xx.py and e320.py regarding rev_compat values in EEPROM
* mpm: cmake: Remove installation of non-relevant EEPROM toolsMartin Braun2022-02-162-15/+15
| | | | | On N3x0 and E3x0 devices, we were erroneously installing EEPROM utilities that are only relevant on X410.
* mpm: x4xx: Add function to map from gpio src list indicesLane Kolbly2022-02-111-2/+29
| | | | | | | | 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.
* images: Revert x4xx manifest and FPGA compat updateAaron Rossetto2022-02-081-1/+1
|
* mpm: add device name to discovery processLars Amsel2022-02-083-0/+4
| | | | | | | | | | | | | | | | | | | 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
* mpm: x4xx: Update FPGA minor compat numberAaron Rossetto2022-02-071-1/+1
|
* systemd: enable tx flow control automaticallyAndrew Lynch2022-02-042-0/+2
|
* mpm: Add x4xx DRAM BISTWade Fife2022-02-031-1/+23
|
* mpm: Fix units for DRAM BISTWade Fife2022-02-033-4/+4
| | | | | There was a mixture of KB/s and B/s in the DRAM BIST. The BIST now returns B/s in all cases.
* mpm: Remove further references to rfnoc_num_blocksMartin Braun2022-02-011-1/+1
| | | | | This is a follow-up to 89f99fac. In 2a575bf9b, a reference to rfnoc_num_blocks was accidentally put back into MPM.
* mpm: x4xx: Align get/set_gpio_src mappings with HDMI pinoutsLane Kolbly2022-01-241-4/+6
|
* fixup! cmake: Replace distutils.sysconfig with sysconfigSteven Koo2022-01-201-5/+5
| | | | | | | | 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>
* cmake: Replace distutils.sysconfig with sysconfigAaron Rossetto2022-01-141-1/+4
| | | | | | | | | | | | | | | | | | | | 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.
* cmake: Replace distutils with CMake for version checksAaron Rossetto2022-01-142-13/+21
| | | | | | | 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).
* mpm: Demote WARNING on minor compat mismatch to DEBUGMartin Braun2022-01-141-1/+2
| | | | | | | | | | 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.
* MPM: X410: Set correct tuning wordLars Amsel2022-01-101-1/+7
| | | | | | 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).
* mpm: x410: Fix docstrings related to GPS sensorsMartin Braun2022-01-102-2/+2
| | | | No code changes, only comment changes.
* mpm: e320/e31x: Fix lo-lock sensorsMartin Braun2022-01-102-16/+39
| | | | | | | | | | | | | 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).
* e31x/e320: Amend LO-locked sensor namesMartin Braun2022-01-102-6/+20
| | | | | | | | | 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.
* mpm: x4xx: Add log message for older DIO boardsMartin Braun2021-12-091-1/+2
| | | | | | 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.
* mpm: x4xx: Move DioControl into its own moduleMartin Braun2021-12-094-882/+914
| | | | | | | | | 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
* mpm: x4xx: Add checks before accessing self.dio_controlMartin Braun2021-12-061-5/+12
| | | | | | | | | | | | | | | | | | | 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.
* mpm: x4xx: Remove superfluous importMartin Braun2021-12-061-1/+0
|
* mpm: x4xx: update mboard_max_revVirendra Kakade2021-12-021-1/+1
| | | | Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
* uhd: add support for max10 variantsVirendra Kakade2021-12-022-5/+74
| | | | Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
* mpmd: Increase UHD-side MTU cap for 10 GbE and 1 GbEMartin Braun2021-11-081-4/+4
| | | | | | | | | 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.
* mpm: x4xx: Allow retrieving external power stateLane Kolbly2021-11-052-5/+51
| | | | | | | | | | | 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.
* mpm: x4xx: Allow GPIO0 and GPIO1 as port namesLane Kolbly2021-11-041-3/+5
|
* fixup! mpm: x4xx: add DIO GPIO API configuration methodsLane Kolbly2021-11-031-0/+22
|
* mpm: x4xx: add DIO GPIO API configuration methodsDhiren Wijesinghe2021-11-033-39/+227
| | | | | | 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.
* mpm: Fix handling of rfic_digital_loopback argumentMartin Anderseck2021-10-121-5/+5
| | | | | | | | 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.
* mpm: rfdc: Tear down RFDC on teardownLane Kolbly2021-10-112-3/+5
| | | | | | | | | | | | | | | 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.
* cmake: Replace CMAKE_{SOURCE,BINARY}_DIR with UHD_*_DIRMartin Braun2021-09-107-31/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* x4xx_bist: use get_mpm_client in gpio bistGrant Meyerhoff2021-09-021-19/+18
|
* mpmd: Add discoverable feature for trig i/o modeGrant Meyerhoff2021-09-021-1/+1
|
* mpm: x4xx: update mboard_max_revAndrew Lynch2021-08-251-1/+1
|
* MPM: add X410 support for 250e6 master clock rateMichael Dickens2021-08-241-0/+1
|
* n3xx: Add support for rev 10michael-west2021-08-161-1/+1
| | | | | | No hardware interface change, so just bumping max revision. Signed-off-by: michael-west <michael.west@ettus.com>
* N320: Reduce PLL lock timemichael-west2021-08-161-5/+5
| | | | | | | - 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>
* mpm: Expose motherboard regs for debuggingSam O'Brien2021-08-131-0/+9
| | | | | | | | | 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>
* host: Add static_assert to prevent meta_range_t(0,0)Lane Kolbly2021-07-141-1/+1
| | | | | | | meta_range_t(0,0) actually calls the iterator-based constructor for meta_range_t, which is almost certainly not the intended constructor for that call syntax. Therefore, we add a static_assert to prevent such usage, and fix all failing instances.
* mpm: Skip DTS compatibility check if DTS is not being updated.Andrew Lynch2021-07-091-1/+2
|
* mpm: zbx: Fix revision compat checkMartin Braun2021-07-081-11/+35
| | | | | | | | | | | | | | | 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.