aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* ci: Add x410 test to mono pipelineSteven Koo2022-02-025-0/+412
| | | | | | | | | This change brings in x410 testing into the uhd mono pipeline. This also creates a test development pipeline that executes on uhd mono pipeline as an upstream artifact source. Signed-off-by: Steven Koo <steven.koo@ni.com>
* ci: Enable building of init_usrpMartin Braun2022-02-011-0/+22
| | | | | | | This builds init_usrp against UHD during CI runs. init_usrp is an example for how to write third-party apps using CMake that link against UHD. This will test the UHDConfig.cmake (and related) CMake files, as well as the example itself.
* ci: Make uhdSrcDir directly reference Build.SourcesDirectoryMartin Braun2022-02-011-5/+5
|
* python: rfnoc: Add get_property bindingsWade Fife2022-02-011-0/+60
|
* docs: Add shim Sphinx config for readthedocsMartin Braun2022-02-016-0/+255
| | | | | | | | | This adds a faux Sphinx project under host/docs. When invoking sphinx, it will in fact forward the generator request to Doxygen. This is useful for generating the UHD manual, e.g., on readthedocs. To enable the latter service, .readthedocs.yaml and environment.yml files were added as well.
* rfnoc: Update the MTU forwarding property for some blocksMartin Braun2022-02-018-0/+25
| | | | | | | | | | | | | | | | Note that the default MTU forwarding policy is ONE_TO_ONE, therefore, it is only strictly necessary to modify the MTU forwarding policy for blocks that route data in a different manner. However, it may be nice to explicitly state the forwarding policy for the benefit of the reader. The following blocks had their policies updated: - addsub: ONE_TO_FAN - duc: ONE_TO_ONE - dmafifo: ONE_TO_ONE - null block: DROP - replay block: DROP - split stream: ONE_TO_FAN - switchboard: ONE_TO_FAN
* rfnoc: Set the default MTU forwarding policy to ONE_TO_ONE.Martin Braun2022-02-012-10/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, the default was DROP. For almost all RFNoC blocks, this is not a good default. It is very easy to crash USRPs by not properly propagating the MTU. For example, the following flow graph: Radio -> DDC -> FIR -> Streamer would crash an X310 when not manually setting an spp value. The reason is: The Radio block has an output buffer of 8192 bytes, capable of handling 2044 samples per packet. However, that's too big for the Ethernet portion of the X310, which would cause the X310 to lose connection between UHD and firmware. If the FIR were configured to propagate MTU, the Host->USRP connection (which has an MTU of <= 8000) would limit the MTU on all links, and the spp value would automatically be reduced to 1996 (or less). This commit uses the post_init() feature to check the user set an MTU in the constructor, and sets it to the default if that didn't happen. This doesn't solve all problems (the new default of ONE_TO_ONE) could also be incorrect, but is a much more suitable default. As a consequence, this has a minor change in how set_mtu_forwarding_policy() can be used: It now must be called during the constructor. Before, the rule was that it may only be called once, but that could also have happened, e.g., during the first property resolution. Now, the constructor is the last time block authors can choose an MTU forwarding policy.
* rfnoc: Add post_init() method to noc_block_baseMartin Braun2022-02-013-0/+34
| | | | | | | | This method allows running a fixed set of rules to check the internal consistency of a block. This may be necessary, because blocks authors may incorrectly implement a certain design rule, and we want the ability to not start an RFNoC graph with blocks that have rule violations which we can write checks for.
* 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.
* cmake: added libatomic check for boost/lockfree/queue.hppJaroslav Škarvada2022-02-011-0/+31
| | | | | | | | | The boost/lockfree/queue.hpp requires linking with the libatomic on some platforms (e.g. s390x). Fixes #410 Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
* rfnoc: Fix _set_subdev_spec() helper functionAaron Rossetto2022-02-011-3/+8
| | | | | | | | | | | | | | | | | | | | | | | In 716ed77, refactoring was performed to merge `set_tx_subdev_spec()` and `set_rx_subdev_spec()` via the use of a shared helper function, `_set_subdev_spec()`, which factors out differences in the two directions by accepting lambda functions from the caller. However, there were two bugs introduced in the refactoring: - The channel map parameter, which is either `_rx_chans` or `_tx_chans` based on direction, was passed by value and not reference, so changes made by the function were not persisted in the member variables maintained in the `multi_usrp_rfnoc` class. - The connection removal loop checks for the presence of an SEP block on an edge as its termination condition. In the pre-refactored code, the direction determined whether the source or destination of the edge was checked for the SEP. However, in the refactoring, the source of the edge is checked for both TX and RX. While this works for the `set_tx_subdev_spec()` call, it breaks the `set_rx_subdev_spec()` call. This commit fixes the issue by adding another lambda parameter to the `set_subdev_spec()` function, which puts the onus of the edge check on the direction-specific code to ensure it is looking at the correct side of the edge.
* images: Update N32x CPLD manifestHumberto Jimenez2022-01-312-6/+6
|
* uhd: expose uhd::dict and fs_path with UHD_API_HEADERSteven Koo2022-01-312-5/+2
| | | | | | | | | | uhd::dict gets typedefed into board_eeprom_t, which is used by applications like uhd_usrp_probe, so this should be considered as part of the API. fs_path is also an API, but because of MSVC build issues it was not marked as so. Instead mark with UHD_API_HEADER. Signed-off-by: Steven Koo <steven.koo@ni.com>
* rfnoc: set UHD_API_HEADER on property_tSteven Koo2022-01-313-6/+45
| | | | | | | | | | | | UHD_API sets the visibility for the symbols. Adding UHD_API fixes casting issues seen on macOS. However this breaks Windows because UHD_API sets __declspec(dllexport) and __declspec(dllimport) which doesn't make sense for header/inline only definitions. This change adds UHD_API_HEADER to denote entrypoints for this case. It sets the visibility flags for Linux/Mac but does not set the __declspec on Windows. Signed-off-by: Steven Koo <steven.koo@ni.com>
* fpga: docs: Add B205mini FPGA infoWade Fife2022-01-281-9/+11
| | | | | | - Add ISE WebPACK supported FPGAs - Add FPGA type for B205mini - Update product name and URL for Vivado
* RFNoC: Cache and re-use host endpointsmichael-west2022-01-271-7/+30
| | | | | | | | | | Constatntly incrementing endpoints was causing the entries in the routing table on the device to be exhausted, eventually resulting in a timeout error on control packets. Since a connection between the host and a stream endpoint on a device in a given direction is unique, the host endpoints can be cached and re-used. This change does that. Signed-off-by: michael-west <michael.west@ettus.com>
* cmake: uhdboost: Fix check for UHD_BOOST_REQUIRED being setMartin Braun2022-01-261-1/+1
| | | | | | | | Previously, applying `-DUHD_BOOST_REQUIRED` to the cmake command line would do nothing. Now, it is possible to skip Boost checking, e.g., to only build the manual by calling cmake -DUHD_BOOST_REQUIRED=OFF -DENABLE_LIBUHD=OFF
* fpga: n3xx: rh: cpld: Refactor CPLD build processHumberto Jimenez2022-01-256-24/+119
|
* fpga: Remove noc_shell_regs.vh and sim_rfnoc_lib.svhMartin Braun2022-01-256-1058/+1
| | | | | Both files are a UHD 3 remnant and potentially confusing for UHD 4 codebase readers.
* ci: Build gnuradio and gr-ettusSteven Koo2022-01-258-10/+209
| | | | | | | | | | This change adds build support for gnuradio and gr-ettus. After building gnuradio and gr-ettus 3.8 against the uhddev commit, the job will upload the build artifact for gnuradio and gr-ettus for use by downstream jobs, like hardware testing. Signed-off-by: Steven Koo <steven.koo@ni.com>
* ci: Add gnuradio deps to imagesSteven Koo2022-01-254-0/+87
| | | | | | | Adding gnuradio deps to build gnuradio as a job in uhd's pipeline Signed-off-by: Steven Koo <steven.koo@ni.com>
* tests: Modularize x4xx_radio_mock to use it in other testsMartin Anderseck2022-01-252-269/+293
| | | | | Move x4xx_radio_mock_reg_iface_t and x400_radio_fixture from radio block test into own file to reuse it more easily in the future.
* uhd: Demote WARNING on minor compat mismatch to DEBUGMartin Braun2022-01-251-2/+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 requires a certain minor compat number to enable a feature, the appropriate behaviour would be to print a warning only for that case. This is the equivalent change to the MPM-only change in 88d28481.
* images: Make get_images_dir return absolute pathLane Kolbly2022-01-251-1/+1
| | | | | | | __file__ isn't always an absolute path. It is sometimes when you import it via a module, but if you directly call it (e.g. via `python3 some_file.py`) then it seems like its a relative path. This avoids any uncertainty by forcing it to be an absolute path.
* fpga: x400: cpld: Bump copyrightJavier Valenzuela2022-01-259-9/+9
|
* fpga: x400: Bump copyrightJavier Valenzuela2022-01-2514-14/+14
|
* fpga: x400: Expand PS GPIO port for DIO controlJavier Valenzuela2022-01-257-19/+58
|
* fpga: x400: Add SPI bus support for GPIO portsJavier Valenzuela2022-01-259-60/+1338
|
* fpga: x400: Add GPIO control via ATR and DB stateJavier Valenzuela2022-01-2516-203/+2964
|
* fpga: x400: Connect Radio Blocks to DIOJavier Valenzuela2022-01-2511-232/+627
|
* mpm: x4xx: Align get/set_gpio_src mappings with HDMI pinoutsLane Kolbly2022-01-241-4/+6
|
* host: x4xx: gpio: Properly unmap FPGA GPIO valuesLane Kolbly2022-01-242-39/+44
| | | | | | The FPGA GPIO registers don't exactly match the pin numbering on the front panel and in the docs. This commit changes the algorithm so that the API presented to the user matches the front panel.
* ci: Generate installed binaries for downstream useSteven Koo2022-01-242-1/+15
| | | | | | | | | | CMake doesn't allow source path to change once set. This is problematic because downstream pipeline jobs could use the artifacts to test but have no way to install. Instead setup to install to uhdBuildDir-installed. Downstream jobs then then directly reference uhd from there. Signed-off-by: Steven Koo <steven.koo@ni.com>
* rfnoc: Ignore errors in ctrlport response packets if ACKs not wantedAaron Rossetto2022-01-211-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In 0caed5529, a change was made to ctrlpoint_endpoint's behavior such that if a client does not care about checking for ACKs on poke or poll operations, the code calls `wait_for_ack()` with a flag indicating that it should not wait for the ACK, but find and remove the corresponding response from the response queue. This prevents the queue from potentially growing endlessly with response packets that the client doesn't even care about. However, this introduced a subtle, undesired behavioral change. When `wait_for_ack()` finds the corresponding response for a request, it also checks the status field of the response to report any errors flagged by the hardware such as invalid command, routing error, etc. Prior to the change mentioned above, since `wait_for_ack()` was never called when the client doesn't want ACKs, the client would never be never notified of any errors associated with the request. However, with the aforementioned change in placd, when `wait_for_ack()` is called to find and remove the unwanted response packet corresponding to the request, errors **are** checked and reported up the user. The behavior change was unearthed by the X410 ZBX CPLD initialization code, which writes an initial value of 0 to all ZBX CPLD registers--even read-only registers. A control request to write a read-only register results in a response with CMDERR in its status field, as it should. However, since the ZBX CPLD register initialization is performed with a `poke32()` operation which by default doesn't wait for ACKs, this was never a problem until the change to drain the response queue inadvertently caused the error to surface. The result is that creating a USRP session or RFNoC graph session to an X410 device is seen to occasionally fail with a 'RuntimeError: RuntimeError: Failure to create rfnoc_graph' message printed to the console. This commit preserves the desired queue-draining behavior, but ignores any error status on the response when it is found and removed from the queue, thus restoring the behavior pre-0caed5529.
* host: fix build with DPDK v21.11 LTSLuca Boccassi2022-01-206-49/+100
| | | | | | | | | | | | | Some APIs were changed with the latest DPDK LTS release, add some ifdefs to fix the build. Fixes https://github.com/EttusResearch/uhd/issues/547 Updated CMake file to reflect updated DPDK version. Fixed mbuf size to take ethernet headers into account. Updated documentation. Co-authored-by: Martin Anderseck <martin.anderseck@ni.com>
* host: Implement nameless_gain_mixinLane Kolbly2022-01-207-83/+151
|
* ci: Add displayNames to parametersSteven Koo2022-01-202-0/+14
| | | | Signed-off-by: Steven Koo <steven.koo@ni.com>
* ci: Add embedded builds to uhd mono pipelineSteven Koo2022-01-203-0/+144
| | | | | | | | This commit adds in meta-ettus build support into mono pipline. This uses the job implementation in from meta-ettus for the existing pipelines. Signed-off-by: Steven Koo <steven.koo@ni.com>
* fixup! cmake: Replace distutils.sysconfig with sysconfigSteven Koo2022-01-203-34/+20
| | | | | | | | 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>
* lib: set dynamic_lookup and flat_namespaceSteven Koo2022-01-191-3/+4
| | | | | | This resolves some linking issues across binaries. Signed-off-by: Steven Koo <steven.koo@ni.com>
* tests: disable x4xx_radio_block_test on macOSSteven Koo2022-01-192-26/+32
| | | | | | | | This commit disables x4xx_radio_block_test on macOS because the platform has stricter casting and symbol export rules, which causes this test to fail. Signed-off-by: Steven Koo <steven.koo@ni.com>
* lib: Make simple_claimer atomicMartin Braun2022-01-141-38/+19
| | | | | | | | | | | | | | | This fixes multiple issues: - The simple_claimer was not truly atomic, it tested and set the locked-flag on separate lines - It used a Boost yield statement, although we're not running Boost threads - It used the deprecated UHD_INLINE macro We also remove spin_wait_with_timeout(), which was only used in claim_with_wait() because it's not worth putting into its own function. This is no API change on simple_claimer, but it may result in different performance of this spinlock.
* docs: Improve page on RFNoC block propertiesMartin Braun2022-01-141-13/+19
| | | | | | - Fix some minor formatting - Add emphases where appropriate - Minor clarifications
* deps: rpclib: Replace distutils.dir_util with shutilAaron Rossetto2022-01-141-2/+1
| | | | | This commit replaces the use of distutils.dir_util.copy_tree() with the equivalent function shutil.copytree().
* python: Use setup from setuptoolsAaron Rossetto2022-01-142-5/+2
| | | | | This commit replaces the use of setup() from distutils.core with setup() from setuptools.
* cmake: Replace distutils.sysconfig with sysconfigAaron Rossetto2022-01-143-12/+21
| | | | | | | | | | | | | | | | | | | | 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-145-45/+145
| | | | | | | 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.
* SPI: Add SPI exampleMartin Anderseck2022-01-142-0/+136
| | | | Add example to demonstrate and test SPI functionality.
* ci: Separate pipeline builds for different osmattprost2022-01-143-16/+70
| | | | | | This allows parameterizing pipeline runs to only build for certain os. Signed-off-by: mattprost <matt.prost@ni.com>