Commit graph

246 commits

Author SHA1 Message Date
RobertWalstab
616bcbc4dd mpm: Fix a logging message 2020-07-16 10:00:12 -05:00
RobertWalstab
dc1ecbb8f0 mpm: Enable internal NIC on the N3xx 2020-07-16 10:00:12 -05:00
RobertWalstab
692249f2d2 mpm: remove class E310XportMgrLiberio 2020-07-16 10:00:12 -05:00
RobertWalstab
cc06b4dde6 mpm: Enable internal NIC on the E310 2020-07-16 10:00:12 -05:00
RobertWalstab
217ec54c7a mpm: remove class E320XportMgrLiberio 2020-07-16 10:00:12 -05:00
RobertWalstab
2dd09111cf mpm: support forwarding CHDR packets 2020-07-16 10:00:12 -05:00
Alex Williams
acafbd6055 mpm: Enable internal NIC on the E320
Add an entry for the internal NIC to E320.
2020-07-16 10:00:12 -05:00
Andrew Lynch
eadbc21982 mpm: Add support for internal Ethernet interface 2020-07-16 10:00:12 -05:00
Alex Williams
40b563387b mpm: Detect number of liberio channels
Instead of using hard-coded values, detect the number of liberio
channels, and only offer liberio links if they exist.
2020-07-16 10:00:12 -05:00
Martin Braun
a252a2f3d8 mpm: Fix various Pylint issues
No functional changes. Fixes for things that PyLint complains about, but
are safe to change anyway, as well as a minor improvement to a docstring
that referenced non-existant args.

This touches files that are mpm.conf-related.
2020-07-09 00:39:11 -07:00
Steven Koo
e244764ffa mpm: Look for pca953x based devices by device/name
The pca953x driver introduced a change for how the "label" property
populates. Instead of using the device model, it gives a device specific
name. As a replacement, use device/name. This affects the tca6424
and tca6408.

For the kernel change that causes this see:
5128f8d445
2020-06-11 10:39:05 -05:00
Lane Kolbly
6aa090b7fd mpm: Return filesystem info from get_device_info
This commit returns information on the filesystem and mender artifact
versions to clients of the MPM RPC connection.
2020-06-05 15:03:08 -05:00
Lane Kolbly
512fd1151f mpm: Return dboard_info in get_device_info
Though this information is also returned via usrp_probe, it can be
useful to provide this information to trackers which scrape the
get_device_info RPC call.

The dboard information is split up and cast to string just to
simplify parsing on the receiving end.
2020-06-05 15:03:08 -05:00
Lane Kolbly
655b32fc1c mpm: Return build info in mpm_sw_version
The mpm_version key was being overridden by the MPM_COMPAT field in
rpc_server::get_device_info.
2020-05-27 09:45:41 -05:00
Martin Braun
c74c56ef94 e320/e310: Fix get_gpio_srcs() MPM API call
The Python code contained a typo which would cause a call to
get_gpio_srcs() to throw an exception.
2020-02-26 08:41:34 -06:00
Martin Braun
657cc4c062 fixup! mpm: e320/e310: Expose APIs to drive GPIO source via UHD 2020-01-28 14:33:28 -08:00
Martin Braun
354886ed4c mpm: e320/e310: Expose APIs to drive GPIO source via UHD
This enables the *gpio_src* APIs for the E320 and the E31x.
2020-01-23 11:37:51 -08:00
Martin Braun
0cf54ce073 mpm/mpmd: Expose APIs to drive GPIO sources
The N310 has a feature that allows the front panel GPIOs to be driven by
various sources: The PS, or any of the radio channels. The MPM-based
APIs did not expose any way to change that.

Changes:
- Add MPM APIs to PeripheralManagerBase and n3xx classes
- Improve comments and explanations
- Add host-side hooks into these new APIs in mpmd_mb_controller
- Implement these APIs for N3xx

The N3xx devices will have the option to set the GPIO source to "PS", or
to one of "RF0", "RF1", "RF2", "RF3" (if there are four channels; the
N300 and N320 can only go up to RF1).

Note: The N310 radio does not have separate FP-GPIO banks for channels
0 and 1, which needs to be fixed in a separate commit.
2020-01-23 11:37:51 -08:00
Martin Braun
e4c72d53d6 mpm: e31x: Remove superfluous code from e31x_periphs
- 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)
2019-11-26 12:21:34 -08:00
Martin Braun
c481e32026 mpm: e31x: Fix setting of clock source
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.
2019-11-26 12:21:34 -08:00
Martin Braun
9ede696528 mpm: e310: Enable GPS sensors
The GPS sensors are pulled in via gpsd_iface.
2019-11-26 12:21:34 -08:00
Martin Braun
14fb3cc6f4 e310: Fix issues in MPM and UHD
- 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
2019-11-26 12:21:33 -08:00
Martin Braun
d60e4d87d8 mpm: Clean up code, improve Pylint score
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
2019-11-26 12:21:33 -08:00
Martin Braun
ec488d49c0 mpm/mpmd: Remove token requirement for device info
This removes the token requirement for get_proto_ver() and
get_chdr_width().
2019-11-26 12:21:33 -08:00
Martin Braun
025ffdce34 mpm: Move common mboard regs code to common location
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.
2019-11-26 12:21:33 -08:00
Martin Braun
d76cca76dd mpm: n3xx: Improve Pylint score
- Replace some `if len(seq)` with `if seq`
- Replace some `lambda: f()` with `f`
- Formatting
- Add some pylint: disable where appropriate
2019-11-26 12:21:33 -08:00
Alex Williams
f3a86a3294 rfnoc: Unify endianness of transports
Ethernet now uses the same serialization of the RFNoC stream as all
the other transports.
2019-11-26 12:21:31 -08:00
Martin Braun
c256b9df65 x300/mpmd: Port all RFNoC devices to the new RFNoC framework
Co-Authored-By: Alex Williams <alex.williams@ni.com>
Co-Authored-By: Sugandha Gupta <sugandha.gupta@ettus.com>
Co-Authored-By: Brent Stapleton <brent.stapleton@ettus.com>
Co-Authored-By: Ciro Nishiguchi <ciro.nishiguchi@ni.com>
2019-11-26 12:16:25 -08:00
michael-west
c2f1f21d41 MPM: Add check for valid EEPROM address
Provides a more useful error message if the EEPROM cannot be found at
the specified address.  Without this change a generic index out of range
error is raised.

Signed-off-by: michael-west <michael.west@ettus.com>
2019-10-15 15:21:52 -07:00
Michael West
4042a319fd N3xx: Remove close-in noise on TX
Some close-in noise was observed on TX when using external references.
This change reduces the noise by changing U19 to select the GPSDO when
references are set to external.  Also included is a change to properly
read and apply settings from the configuration file.  This allows the
user to further quiet the transmission by adding 'enable_gps=False' to
the configuration file in order to power off the GPSDO.

Signed-off-by: Michael West <michael.west@ettus.com>
2019-10-11 12:26:12 -07:00
Martin Braun
96dd54c77a n3xx: Disable gpsdo reference source when enable_gps=0
When using enable_gps=0, the power to the LTE-Lite GPS chip is turned
off, and neither the reference sources (time/clock) nor the
location/time data (via gpsd) can be used.

This commit disables the gpsdo options for the set_time_source,
set_clock_source, and set_sync_source when enable_gps=0 is used, and
adds logging to inform the user about this.

This behaviour is consistent with X310, where `gpsdo` is only a valid
reference if the GPSDO module is plugged in.

The manual was also updated accordingly.
2019-10-11 12:25:52 -07:00
Martin Braun
da6bf176aa mpm: periph manager: Fix typo in docstring (update default args) 2019-10-11 12:25:52 -07:00
michael-west
abedbfe548 MPM: Increase E320 max rev to 4
Increase to currently shipping rev.

Signed-off-by: michael-west <michael.west@ettus.com>
2019-09-24 17:23:44 -07:00
Matthew Crymble
f47d805cc3 mpm: fixed mboard_max_revision value
This value should be 9 to correspond with the rev J motherboards.
This property was renamed to mboard_last_rev_compat in a previous commit.
But mboard_max_rev is actually a more accurate description,
since it specifies the latest hardware revision that the software
is aware of.  I renamed all references back to mboard_max_rev.
2019-09-24 17:23:44 -07:00
Mark Meserve
0280a82aa0 e320: fix time source clobbering ref source
- Fixes a case where the e320 would be unable to lock to an external 10 MHz
  reference
- Previously, calling set_time_source would set the reference clock source to
  internal as a side effect
2019-08-15 09:00:09 -07:00
Thomas Vogel
b89f76bd4d n3xx: bugfix for mpm set_db_eeprom access via network
access or data as bytes instead of str was not possible due to unconditional assert check for str
2019-06-13 09:00:46 -07:00
Trung Tran
75dc7a1d64 mpm: Change SW/HW compat check to use last_rev_compat
Newer revisions of the E320 and N3xx motherboards use EEPROM version 3,
and store a rev_compat field. The rev_compat is the last revision that
this hardware is compatible with. We now use that instead of simply the
revision.
2019-05-10 16:59:58 -07:00
michael-west
436df1087b E320: Add support for rev E
- No driver changes required

Signed-off-by: michael-west <michael.west@ettus.com>
2019-05-02 08:35:59 -07:00
Sugandha Gupta
178b35569b e310/e320: Move E310 to MPM architecture and refactor
- Turns the E310 into an MPM device (like N3xx, E320)
- Factor out common code between E320 and E310, maximize sharing between
  the two devices
- Remove all pre-MPM E310 code that is no longer needed
- Modify MPM to remove all existing overlays before applying new ones
  (this is necessary to enable idle image mode for E310)

Co-authored-by: Virendra Kakade <virendra.kakade@ni.com>
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
2019-05-01 15:17:23 -07:00
Martin Braun
f0da25b14d mpm: n320: Update FPGA type if QSFP board is available
The N320 has FPGA types (XQ, AQ) which cannot be derived from the mboard
regs in the same way as the non-QSFP variants. We therefore bite the
bullet and hardcode those.
2019-02-22 09:20:10 -08:00
Martin Braun
356d623c23 mpm: n320: Demote warning on absence of QSFP board
The QSFP board can't be detected if support for it is not baked into
the current FPGA image, so the warning on its absence may be incorrect.
2019-02-22 09:20:10 -08:00
Sugandha Gupta
effa0dacad e320: add fpga_version_hash to e320 device info
Fixes uhd_usrp_probe FPGA version githash to report the
correct hash and not 'UNKNOWN'.
2019-02-19 18:12:11 -08:00
michael-west
a8109bc170 N3xx: Update max rev to 7
Hardware revision was increased due to new firmware.  No software
changes are required.

Signed-off-by: michael-west <michael.west@ettus.com>
2019-02-19 13:58:39 -08:00
Trung Tran
3fb8cfe96c n3xx: init peripherals before loading FPGA
Issue: Current code loads FPGA too early while many
essential peripherals such as net clocks are not brought up.

This change will make sure those are got init before FPGA loaded.

Signed-off-by: Trung Tran<trung.tran@ettus.com>
2019-02-01 15:28:35 -08:00
Alex Williams
6e8b0ec413 mpm: Parameterize max UDP link allocation
Add an argument to the UDP xport_mgr to adjust the xport sorting. This
enables Rhodium to use a different limit from Magnesium. Previously, the
sorting method would overload a link with both of Rhodium's higher-rate
streams.
2019-01-25 15:01:03 -08:00
Ryan Marlow
18cfd25129 mpm: n3xx: e320: Add bridge mode support 2019-01-17 15:38:23 -08:00
Sugandha Gupta
f4a8e6fc4a e320: Fix return value of get_fpga_type
Return value should be fpga image type and not
sfp type, fixes a bug with uhd_image_loader while
trying to update XG and AA images
2018-11-30 16:43:02 -08:00
Humberto Jimenez
c34fa6d84e n3xx: Change init() procedure to reduce configuration time
Previously, the init() procedure of the n3xx class passed either
the user-provided or the default clock_source and time_source values
to initialize the clocking configuration.
When the user did not provide these parameters, the default values
were assigned, overriding whatever configuration the device was
previously initialized with. Therefore, a dboard reinit was forced
when the currently configured state of the N3xx device did not match
the default configuration (i.e. internal sources).

Now, the init() procedure still provides the clock_source and
time_source values; but, if the user does not provide the
parameters, the previously used values are assigned (i.e.
self._clock_source and/or self._time_source).
By the time MPM runs this n3xx init() procedure for the first time,
both self._clock_source and self._time_source have been initialized
with the default internal values anyways in the
_init_ref_clock_and_time() procedure.

This change prevents additional, unnecessary calls to the
set_sync_source() procedure, which ultimately causes a daughterboard
reinitialization when either a new clock or time source is requested.
2018-11-26 13:34:01 -08:00
Trung Tran
371ed0ba37 mpm: add fpga githash to device info 2018-11-16 15:13:30 -08:00
Martin Braun
a69ab0c23a cmake: Update coding style to use lowercase commands
Also updates our coding style file.

Ancient CMake versions required upper-case commands.  Later command
names became case-insensitive.  Now the preferred style is lower-case.

Run the following shell code (with GNU compliant sed):

cmake --help-command-list | grep -v "cmake version" | while read c; do
  echo 's/\b'"$(echo $c | tr '[:lower:]' '[:upper:]')"'\(\s*\)(/'"$c"'\1(/g'
done > convert.sed \
&& git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' \
'*CMakeLists.txt' | xargs -0 gsed -i -f convert.sed && rm convert.sed

(Make sure the backslashes don't get mangled!)
2018-11-14 14:10:09 -08:00