| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
Install all of the streaming performance tests scripts, not just the
X300 one.
Fixes: 2bf1f0acaa35 ("tests: Add script to execute batch of bench...")
|
| |
|
|
|
|
|
| |
Script runs benchmark_rate repeatedly, parses results, and calculates
average, min, and max of each value reported.
|
| |
|
|
|
|
|
|
|
|
| |
- Use coerce_decim(), not int(), to coerce the decimation rate
- Fix typo
Fixes: a36fc4604f9b ("rfnoc: DDC: Fix property propagation")
Fixes: 36853315741a ("rfnoc: Add DDC block controller")
|
|
|
|
|
|
|
| |
The prefs API is supposed to load the config files once, and stash them
away for the process to consume at will. Because the init_done is never
set, it will read the config files every time it's asked for them. This
is usually not a problem, but it causes the logging output to be messy.
|
| |
|
|
|
|
|
|
| |
The filter bank and antenna switches have different configuration
for channel 0 and channel 1. This commit fixes the issue where
channel 0 produces only noise due to incorrect switches.
|
|
|
|
|
|
| |
Only update DDC/DUC samp_rate properties if the number is substantially
different (don't update for sub-1Hz property calculations). This fixes
resolver exceptions for certain rates.
|
| |
|
| |
|
|
|
|
|
| |
Updates FPGA images for X3xx, N3xx, E320 and B200 series.
All Gen-3 devices receive a compat number bump.
|
|
|
|
|
| |
This is a more portable option to set thread names. References to
pthreads are now limited to thread.cpp, where they belong.
|
|
|
|
|
| |
We call set_thread_name() on the claimer loop so the thread can be
identified using OS utilities.
|
|
|
|
| |
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
|
|
|
|
| |
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
|
|
|
|
|
|
|
| |
This fixes behavior where we would get long 100 sec timeouts
on fifo waits instead of 100 ms timeouts.
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
|
|
|
|
|
|
| |
The ad9371 call set_master_clock_rate() can take a while depending on
the rate change, so make it asynchronous in order not to lock out the
reclaimer loop.
|
|
|
|
|
| |
Individual API calls might have to call each other (e.g., like
set_rate() will call set_rx_frequency()), which would cause a deadlock.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The N310 cannot set the MCR for its daughterboards separately. This
patch modifies the radio block controller such that any block
controller, when requested to change the master clock rate, will first
change Radio 0, and then Radio 1.
This fixes the following issues:
- In multi_usrp, calling set_master_clock_rate() will not necessarily
call set_rate() on the radios in any particular order, which will
break when calling Radio 1 first
- In RFNoC apps, it wasn't possible to run off of slot B alone without
this change.
Note: When calling set_rate() on one radio, the other radio is in an
invalid state until its set_rate() is also called.
|
|
|
|
|
|
|
| |
This is a data structure intended for use by the DPDK I/O service.
It uses DPDK's lockless ring in multi-producer, single-consumer mode
to allow clients to submit requests to the DPDK I/O service's worker
thread. Clients can specify a timeout for the requests to be fulfilled.
|
| |
|
|
|
|
|
|
|
|
|
| |
- ref_locked failure would throw a warning, even though this can happen
in normal operations, and the return value of the get_ref_locked()
function is all the info needed
- get_fpga_type() doesn't need to be called from e31x_periphs, because
it is not read from the motherboard registers (is read from the
EEPROM)
|
|
|
|
|
| |
It used to produce the individual name of the USRP, but it should return
a product name.
|
|
|
|
|
|
|
| |
The clock source on E310 is always internal. This patch removes the
variables regarding the clock source (since they are superfluous). This
fixes a bug where self._clock_source on the e31x class would never get
initialized.
|
|
|
|
| |
The GPS sensors are pulled in via gpsd_iface.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The gpio example would continously call get_time_now() to time a loop.
There is no need to query a device here, so we query the system timer
instead.
This fixes an issue where the large amounts of control traffic could
slow down TX, causing the TX and FDX tests to fail. This was only ever
seen on the X300_HG over 1GigE.
|
|
|
|
|
| |
- Use GPIO_BIT(x) instead of 1<<x where appropriate
- Correctly use rx_buff/tx_buff in recv/send, respectively
|
|
|
|
|
| |
This enables the use of the dboard and FP GPIOs. The problem was that
the register offset of 8 was not encoded.
|
|
|
|
|
| |
- Move the SPI addresses out of radio_control_impl
- Fix the GPIO address spaces for N310/N300
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes a bug where get_gpio_attr(bank, "CTRL") would return the
inverted value of what was written. Reason is that the underlying
register was an ATR disable register.
The fix is to invert the cached values of the register.
Now, the following Python code will work:
>>> U = uhd.usrp.MultiUSRP("type=x300")
>>> atr_enable = 0xF # Enable ATR on lower 4 pins, rest is GPIO
>>> U.set_gpio_attr("FP0A", "CTRL", atr_enable)
>>> U.get_gpio_attr("FP0A", "CTRL") == atr_enable
True
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This allows adding stream args to the Python version of benchmark_rate
in the same way as for the C++ version, e.g.:
python3 ./benchmark_rate.py \
--args addr=192.168.40.2,num_poll_offload_threads=4 \
--rx_stream_args \
recv_offload=1,num_recv_frames=32,recv_offload_wait_mode=poll \
--tx_stream_args \
send_offload=1,num_send_frames=32,send_offload_wait_mode=poll \
[... other arguments ...]
|
|
|
|
|
|
|
|
|
|
|
|
| |
In the existing graph, when the shutdown was simply a release. However,
any outstanding actions would trigger warnings (because released graphs
aren't supposed to still have actions being passed around), which would
sometimes be visible at the end of an application.
This is a safer solution than simply releasing, because it explicitly
sets a shutdown flag that all graph-affecting functions (property
propagation and action handling) respect. Once the flag is set, the
graph can no longer be booted up again.
|
|
|
|
|
| |
This will print the currently-used GPIO bank's name before starting the
test.
|
|
|
|
|
|
| |
- Fixes issues with test_messages_test (it had inverted the pass/fail
condition)
- Improve Pylint scores in affected files
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes warnings such as this during devtest:
/home/mbr0wn/src/uhddev/host/tests/devtest/uhd_test_base.py:112:
ResourceWarning: unclosed file <_io.TextIOWrapper
name='./results_x300_F457AD.log' mode='r' encoding='UTF-8'>
self.results = yaml.safe_load(open(self.results_file).read()) or {}
/path/to/uhd/host/tests/devtest/uhd_test_base.py:150:
ResourceWarning: unclosed file <_io.TextIOWrapper
name='./results_x300_F457AD.log' mode='w' encoding='UTF-8'>
yaml.dump(self.results, default_flow_style=False))
ok
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For the burst ACK test, test_messages would send 3 packets. However,
that assumes that the underlying link is fast enough to send three
packets in time, and some devices are hard to operate without underruns
without also specifying a start-of burst timestamp. Often, test_messages
would report that no ACK was received, but instead, an underrun was
received.
test_messages also doesn't need to send three packets. The three packets
came from the "start of burst" flag, which no device in UHD supports.
The change is thus to send a single packet with an EOB marker for the
burst ACK test. This will work regardless of the link speed and CPU
power.
|
|
|
|
|
|
|
|
|
|
|
| |
- Remove superfluous INFO logging
- Improve formatting in many places
- Improve Pylint score in various places
- Add tear_down to DB object
- Simplify custom EEPROM code for E310
- Fix time source selection code
- Remove references to GPS_CTRL and GPS_STATUS (are E320 only)
- Move clock source control out of MboardRegs object
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Many small cleanups:
- Fix copyright headers
- Fix superfluous imports
- Pull some constants out of classes where appropriate
- Fix formatting
- Improve/fix some docstrings
- Disable specific Pylint warnings where appropriate
- Global catches use BaseException instead of Exception
- Don't use len() for empty checks
- Make sure to declare all self attributes in __init__ (note: this is
particularly of interest for E310, becuase its regular init happens
outside of __init__)
- Compacted some E310 code that had multi-DB checks
|
|
|
|
|
| |
This removes the token requirement for get_proto_ver() and
get_chdr_width().
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Rename thread affinity args such that they do not end with an integer.
Arg names ending with an integer are interpreted as being targeted at a
specific motherboard index in device_addr methods.
|
|
|
|
|
|
| |
Allow device args that contain an integer within the name, such as
recv_offload_thread_0_cpu. Previously this would cause an invalid format
exception.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This assumes an existence of mboard_regs_control in PeriphManagerBase
and implements most TK controls there. All the *_periphs.py files can
now use a common class for registers, including the TK access, but also
git hash, build date, and device ID access.
This also fixes two issues:
- set_timekeeper_time() and set_tick_period() had a bug that would
incorrectly calculate the upper 32 bits of their respective registers.
- N3xx had a bug that would swap around set time now and next PPS. This
got auto-fixed because the common code never had this bug.
|
|
|
|
|
|
|
| |
- Replace some `if len(seq)` with `if seq`
- Replace some `lambda: f()` with `f`
- Formatting
- Add some pylint: disable where appropriate
|