diff options
author | Josh Blum <josh@joshknows.com> | 2012-02-29 09:30:03 -0800 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2012-02-29 09:31:31 -0800 |
commit | fedad06362e22f8a171bfe8ae0b747492d22de1d (patch) | |
tree | 0fed2afb7967b08ae19492fc4103abb4198afd1c /host | |
parent | 84567c2033fcd6aa5e297ab76ea3684baef0c665 (diff) | |
download | uhd-fedad06362e22f8a171bfe8ae0b747492d22de1d.tar.gz uhd-fedad06362e22f8a171bfe8ae0b747492d22de1d.tar.bz2 uhd-fedad06362e22f8a171bfe8ae0b747492d22de1d.zip |
usrp2: device locking tweaks
1) use bottom bit for force lock condition,
that way we never check the time after proper shutdown
2) dont allow lock condition under fpga compat mismatch
Diffstat (limited to 'host')
-rw-r--r-- | host/lib/usrp/usrp2/usrp2_iface.cpp | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp index 170447b6e..123910166 100644 --- a/host/lib/usrp/usrp2/usrp2_iface.cpp +++ b/host/lib/usrp/usrp2/usrp2_iface.cpp @@ -106,13 +106,6 @@ public: _protocol_compat = ntohl(ctrl_data.proto_ver); mb_eeprom = mboard_eeprom_t(*this, mboard_eeprom_t::MAP_N100); - - //----------------------- special temporary warning ------------ - if (mb_eeprom["gpsdo"] == "internal" and _protocol_compat < USRP2_FW_COMPAT_NUM){ - UHD_MSG(warning) << "You must upgrade your USRP's firmware to use the GPSDO" << std::endl; - } - //-------------------------------------------------------------- - } ~usrp2_iface_impl(void){UHD_SAFE_CALL( @@ -130,11 +123,14 @@ public: } else{ _lock_task.reset(); //shutdown the task - this->get_reg<boost::uint32_t, USRP2_REG_ACTION_FW_POKE32>(U2_FW_REG_LOCK_TIME, 0xfffffff0); //unlock + this->get_reg<boost::uint32_t, USRP2_REG_ACTION_FW_POKE32>(U2_FW_REG_LOCK_TIME, 0); //unlock } } bool is_device_locked(void){ + //never assume lock with fpga image mismatch + if ((this->peek32(U2_REG_COMPAT_NUM_RB) >> 16) != USRP2_FPGA_COMPAT_NUM) return false; + boost::uint32_t lock_time = this->get_reg<boost::uint32_t, USRP2_REG_ACTION_FW_PEEK32>(U2_FW_REG_LOCK_TIME); boost::uint32_t lock_gpid = this->get_reg<boost::uint32_t, USRP2_REG_ACTION_FW_PEEK32>(U2_FW_REG_LOCK_GPID); @@ -142,6 +138,7 @@ public: const boost::uint32_t lock_timeout_time = boost::uint32_t(3*100e6); //if the difference is larger, assume not locked anymore + if ((lock_time & 1) == 0) return false; //bit0 says unlocked const boost::uint32_t time_diff = this->get_curr_time() - lock_time; if (time_diff >= lock_timeout_time) return false; @@ -157,7 +154,7 @@ public: } boost::uint32_t get_curr_time(void){ - return this->peek32(U2_REG_TIME64_LO_RB_IMM); + return this->peek32(U2_REG_TIME64_LO_RB_IMM) | 1; //bit 1 says locked } /*********************************************************************** |