Commit graph

269 commits

Author SHA1 Message Date
Michael Dickens
ca076ab3ba MPM for N32x: Add 'XQ' image as valid when using sfp0 as time_source 2021-05-18 14:52:08 -05:00
Martin Braun
99e5230e4b mpm: PeriphManagerBase: Add _add_public_methods()
This allows conditionally adding public API methods.
2021-04-29 14:34:55 -05:00
Martin Braun
87b65cf7ab mpm: periph_mgr: Demote "no SPI nodes" warning
When there are SPI nodes declared for a daughterboard, MPM will emit
a warning: "No SPI nodes for dboard". The warning is misleading, because
this only occurs when no SPI nodes where *declared*, not when they were
declared but not found. This is entirely normal for USRPs where the
daughterboards do not have SPI nodes, and thus, not even worth a debug
statement.
2021-04-21 15:19:46 -05:00
Martin Braun
5d3a6d2044 mpm: periph manager: Fix get_mb_eeprom() return value formatting
The get_mb_eeprom() RPC call is supposed to return a string -> string
map and thus converts all EEPROM entries to strings. However, for raw
strings, the existing conversion (using str()) was not correct (we need
to decode raw strings first).

This would lead to things like the serial being returned as b'ABCD123'
instead of just ABCD123.
2021-03-25 07:56:30 -05:00
Toni Jones
1a9033b3e9 mpm: Add DboardIface for MB DB driver control
Add DboardIface class which will act as an interface to bridge the gap
between MB and DB drivers in MPM. The DboardIface will be implemented
by each Motherboard with MB specific information. Dboard objects
will then instantiate the class in order to utilize the implemented
control functions.
2021-03-04 12:09:39 -06:00
Michael Auchter
5ef29d9396 mpm: deduplicate dboard eeprom handling
The _get_dboard_eeprom_info implementations are the same with the
exception of how the dboard eeprom is actually read. Break that out into
a _read_dboard_eeprom method to reduce code duplication.

The base class now defines a lambda expression for the eeprom reader
which can be changed in subclasses.

Co-authored-by: Lars Amsel <lars.amsel@ni.com>
Co-authored-by: Michael Auchter <michael.auchter@ni.com>
2021-02-11 12:26:10 -06:00
Michael Auchter
fa6e7a7430 mpm: filesystem_status: tolerate absence of mender
If the mender utility is not installed or exits with a failure, return
NULL for the artifact rather than raising an exception (and disrupting
device initialization).
2021-02-09 07:36:08 -06:00
Lane Kolbly
5471a1f521 mpm: Implement get_sync_source and get_sync_sources. 2021-01-25 15:27:49 -06:00
Aaron Rossetto
7b43614846 sim: Ignore mender artifact file on sim devices 2021-01-21 12:47:54 -06:00
Samuel O'Brien
5df8202c0c sim: Move Hardware Specific to Config File
This commit moves various magic numbers and hardware specific settings
into the configuration file. It also provides default presets for said
configuration files which can be inherited from.

Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
2020-10-28 15:25:48 -05:00
Samuel O'Brien
bd278a4b93 sim: Support Configuration Files
This commit adds support for configuration files to the simulator. As of
now, these files only change the source and sink of data samples, but
they are easily extensible to add more configuration to the simulator.

Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
2020-10-28 15:25:48 -05:00
Samuel O'Brien
d42ddc8041 sim: Support Streaming
This commit add support for both Tx and Rx streams to the simulator.

Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
2020-10-28 15:25:48 -05:00
Samuel O'Brien
267365c945 sim: Clarify Naming of Streams
ChdrSniffer is renamed to ChdrEndpoint to clarify its function as the
actual destination of chdr packets, rather than just an observer.
TxWorker has been renamed to OutputStream and RxWorker has been renamed
to InputStream to avoid ambiguities regarding Tx and Rx terminology.

Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
2020-10-08 07:44:12 -05:00
Samuel O'Brien
ee9085a494 sim: Simulator CHDR Parsing and RFNoC Graph
This commit adds a simulated RFNoC Graph to the simulator. It is also
able to process management and control packets which can traverse the
graph and read from simulated registers. Stub callbacks for creating
streams have been provided but are not implemented yet.

Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
2020-10-08 07:44:12 -05:00
Samuel O'Brien
bfff8b79b9 sim: Add Daughterboard Methods
This commit adds daughterboard simulation to the simulator. There is a
sim_dboard class which registers it's methods with the rpc server. These
methods are visible over mpm as well as the mpm_shell.

Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
2020-10-07 15:29:19 -05:00
Samuel O'Brien
6394a7c6ea sim: Lay Groundwork for Simulator
At this point, only about half of the mpm methods work on the simulator
    over the mpm shell, and it hasn't been tested with uhd at all.
    If you want to give it a try, first install all of the python
    dependencies of mpm (The simulator doesn't require libusrp or any of
    the C++ deps). In addition, running mpm on a desktop machine requires
    the python lib netifaces. Next, make an /mpm/build directory and open
    it. Run `cmake .. -DMPM_DEVICE=sim`, then `make`. Finally, run
    `python3 python/usrp_hwd.py`. You should be able to open another
    terminal and run `mpm/tools/mpm_shell.py localhost` to connect to the
    mpm server.

Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
2020-10-07 15:29:19 -05:00
Joerg Hofrichter
a37413055e mpm: use filesystem_status from sys_utils
Use the utility functions for getting the filesystem version string
and for getting the Mender artifact which are now available in
usrp_mpm.sys_utils.
2020-10-06 15:21:27 -05:00
Martin Braun
29394e2994 mpm: n3xx: Remove eth1, eth2 from interface list
These interfaces are renamed to sfp0 and sfp1 and thus don't exist. They
were kept in MPM for a while after the rename, but that was many
versions of UHD ago, and the current filesystem (which does the rename)
is not compatible with older versions of UHD anyway (and vice versa).

These aliases are thus dead code and can be removed.
2020-08-07 07:25:30 -05:00
Martin Braun
d05bacf120 mpm: Remove SID class
This class is a remnant of UHD 3, and is no longer used anywhere. SID is
no longer used at all in UHD, in fact, which means the class did not
represent a valid data structure.
2020-08-07 07:25:08 -05:00
Steven Koo
25a0e462dd mpm: Default virtual NIC CHDR IP selection
This change adds detection for setting the correct internal
fpga CHDR IP address when using embedded mode.
2020-07-30 11:39:00 -05:00
RobertWalstab
54d698e370 fpga, mpm: Bump FPGA compat number 2020-07-24 15:24:14 -05:00
RobertWalstab
1d3866bef4 uhd: remove liberio 2020-07-20 16:01:03 -05:00
RobertWalstab
1182144336 mpm: remove class N3xxXportMgrLiberio 2020-07-16 10:00:12 -05:00
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