aboutsummaryrefslogtreecommitdiffstats
path: root/mpm/python
diff options
context:
space:
mode:
authorBrent Stapleton <brent.stapleton@ettus.com>2018-03-20 15:13:14 -0700
committerMartin Braun <martin.braun@ettus.com>2018-03-20 16:47:24 -0700
commit93617aa25cc0ec62cbdbf9cdb41ec11fcc29f2b3 (patch)
tree21bdf37504fbbd5c7221d582ec80955bfd5221a9 /mpm/python
parent053cd3fea7eb01b8eef8fba723d123fac9417f50 (diff)
downloaduhd-93617aa25cc0ec62cbdbf9cdb41ec11fcc29f2b3.tar.gz
uhd-93617aa25cc0ec62cbdbf9cdb41ec11fcc29f2b3.tar.bz2
uhd-93617aa25cc0ec62cbdbf9cdb41ec11fcc29f2b3.zip
mpm: Adding offset to EEPROM reads
Adding address offset to all MBoard and DBoard EEPROM reads. This matches what we're doing for the user portion of the EEPROM, and allows us to share access to an EEPROM.
Diffstat (limited to 'mpm/python')
-rw-r--r--mpm/python/usrp_mpm/eeprom.py3
-rw-r--r--mpm/python/usrp_mpm/periph_manager/base.py14
-rw-r--r--mpm/python/usrp_mpm/periph_manager/n3xx.py2
3 files changed, 18 insertions, 1 deletions
diff --git a/mpm/python/usrp_mpm/eeprom.py b/mpm/python/usrp_mpm/eeprom.py
index 543823cbb..79532f9f8 100644
--- a/mpm/python/usrp_mpm/eeprom.py
+++ b/mpm/python/usrp_mpm/eeprom.py
@@ -88,6 +88,7 @@ class DboardEEPROM(object):
def read_eeprom(
nvmem_path,
+ offset,
eeprom_header_format,
eeprom_header_keys,
expected_magic,
@@ -130,7 +131,7 @@ def read_eeprom(
# Dawaj, dawaj
max_size = max_size or -1
with open(nvmem_path, "rb") as nvmem_file:
- data = nvmem_file.read(max_size)
+ data = nvmem_file.read(max_size)[offset:]
eeprom_magic, eeprom_version = EEPROM_DEFAULT_HEADER.unpack_from(data)
if eeprom_magic != expected_magic:
raise RuntimeError(
diff --git a/mpm/python/usrp_mpm/periph_manager/base.py b/mpm/python/usrp_mpm/periph_manager/base.py
index f2b2aeb37..3ded0d3c2 100644
--- a/mpm/python/usrp_mpm/periph_manager/base.py
+++ b/mpm/python/usrp_mpm/periph_manager/base.py
@@ -62,6 +62,11 @@ class PeriphManagerBase(object):
# If empty, this will be ignored and no EEPROM info for the device is read
# out.
mboard_eeprom_addr = ""
+ # Offset of the motherboard EEPROM. All accesses to this EEPROM will be
+ # offset by this amount. In many cases, this value will be 0. But in some
+ # situations, we may want to use the offset as a way of partitioning
+ # access to an EEPROM.
+ mboard_eeprom_offset = 0
# The EEPROM code checks for this word to see if the readout was valid.
# Typically, devices should not override this unless their EEPROM follows a
# different standard.
@@ -96,6 +101,13 @@ class PeriphManagerBase(object):
# out.
# If this is a list of EEPROMs, paths will be concatenated.
dboard_eeprom_addr = None
+ # Offset of the daughterboard EEPROM. All accesses to this EEPROM will be
+ # offset by this amount. In many cases, this value will be 0. But in some
+ # situations, we may want to use the offset as a way of partitioning
+ # access to an EEPROM.
+ # Assume that all dboard offsets are the same for a given device. That is,
+ # the offset of DBoard 0 == offset of DBoard 1
+ dboard_eeprom_offset = 0
# The EEPROM code checks for this word to see if the readout was valid.
# Typically, devices should not override this unless their EEPROM follows a
# different standard.
@@ -175,6 +187,7 @@ class PeriphManagerBase(object):
.format(self.mboard_eeprom_addr))
(self._eeprom_head, self._eeprom_rawdata) = eeprom.read_eeprom(
get_eeprom_paths(self.mboard_eeprom_addr)[0],
+ self.mboard_eeprom_offset,
eeprom.MboardEEPROM.eeprom_header_format,
eeprom.MboardEEPROM.eeprom_header_keys,
self.mboard_eeprom_magic,
@@ -298,6 +311,7 @@ class PeriphManagerBase(object):
self.log.debug("Initializing dboard %d...", dboard_idx)
dboard_eeprom_md, dboard_eeprom_rawdata = eeprom.read_eeprom(
dboard_eeprom_path,
+ self.dboard_eeprom_offset,
eeprom.DboardEEPROM.eeprom_header_format,
eeprom.DboardEEPROM.eeprom_header_keys,
self.dboard_eeprom_magic,
diff --git a/mpm/python/usrp_mpm/periph_manager/n3xx.py b/mpm/python/usrp_mpm/periph_manager/n3xx.py
index 6926ee1d7..373689521 100644
--- a/mpm/python/usrp_mpm/periph_manager/n3xx.py
+++ b/mpm/python/usrp_mpm/periph_manager/n3xx.py
@@ -458,6 +458,7 @@ class n3xx(PeriphManagerBase):
description = "N300-Series Device"
pids = {0x4242: 'n310', 0x4240: 'n300'}
mboard_eeprom_addr = "e0005000.i2c"
+ mboard_eeprom_offset = 0
mboard_eeprom_max_len = 256
mboard_info = {"type": "n3xx",
"product": "unknown",
@@ -473,6 +474,7 @@ class n3xx(PeriphManagerBase):
'fan': 'get_fan_sensor',
}
dboard_eeprom_addr = "e0004000.i2c"
+ dboard_eeprom_offset = 0
dboard_eeprom_max_len = 64
# We're on a Zynq target, so the following two come from the Zynq standard