diff options
Diffstat (limited to 'mpm')
-rw-r--r-- | mpm/python/usrp_mpm/periph_manager/base.py | 34 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/periph_manager/n310.py | 1 |
2 files changed, 30 insertions, 5 deletions
diff --git a/mpm/python/usrp_mpm/periph_manager/base.py b/mpm/python/usrp_mpm/periph_manager/base.py index 3ab822a30..0aa1adf59 100644 --- a/mpm/python/usrp_mpm/periph_manager/base.py +++ b/mpm/python/usrp_mpm/periph_manager/base.py @@ -89,6 +89,10 @@ class PeriphManagerBase(object): # means that keys from this dict could be overwritten during the # initialization process. mboard_info = {"type": "unknown"} + # For checking revision numbers, this is the highest revision that this + # particular version of MPM supports. Leave at None to skip a max rev + # check. + mboard_max_rev = None # This is a sanity check value to see if the correct number of # daughterboards are detected. If somewhere along the line more than # max_num_dboards dboards are found, an error or warning is raised, @@ -177,12 +181,32 @@ class PeriphManagerBase(object): ) except TypeError: self.mboard_info[key] = str(self._eeprom_head.get(key, '')) - if 'pid' in self._eeprom_head and self._eeprom_head['pid'] not in self.pids: - self.log.error("Found invalid PID in EEPROM: 0x{:04X}. Valid PIDs are: {}".format( - self._eeprom_head['pid'], - ", ".join(["0x{:04X}".format(x) for x in self.pids]), - )) + if 'pid' in self._eeprom_head \ + and self._eeprom_head['pid'] not in self.pids: + self.log.error( + "Found invalid PID in EEPROM: 0x{:04X}. " \ + "Valid PIDs are: {}".format( + self._eeprom_head['pid'], + ", ".join(["0x{:04X}".format(x) for x in self.pids]), + ) + ) raise RuntimeError("Invalid PID found in EEPROM.") + if 'rev' in self._eeprom_head: + try: + rev_numeric = int(self._eeprom_head.get('rev')) + except (ValueError, TypeError): + raise RuntimeError( + "Invalid revision info read from EEPROM!" + ) + if self.mboard_max_rev is not None \ + and rev_numeric > self.mboard_max_rev: + raise RuntimeError( + "Device has revision `{}', but max supported " \ + "revision is `{}'".format( + rev_numeric, self.mboard_max_rev + )) + else: + raise RuntimeError("No revision found in EEPROM.") else: self.log.trace("No EEPROM address to read from.") self._eeprom_head = {} diff --git a/mpm/python/usrp_mpm/periph_manager/n310.py b/mpm/python/usrp_mpm/periph_manager/n310.py index a9c8076ca..f855f2f3f 100644 --- a/mpm/python/usrp_mpm/periph_manager/n310.py +++ b/mpm/python/usrp_mpm/periph_manager/n310.py @@ -177,6 +177,7 @@ class n310(PeriphManagerBase): mboard_eeprom_addr = "e0005000.i2c" mboard_eeprom_max_len = 256 mboard_info = {"type": "n3xx"} + mboard_max_rev = 3 # 3 == RevD dboard_eeprom_addr = "e0004000.i2c" dboard_eeprom_max_len = 64 # We're on a Zynq target, so the following two come from the Zynq standard |