aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2016-11-08 11:38:19 -0800
committerMartin Braun <martin.braun@ettus.com>2018-03-16 10:48:46 -0700
commit60a911cd460ca1e29d838ee0039d67bf7c8fe7f3 (patch)
tree05182107d71ca74cb380c4081230b1130c797ec8
parent86dbaee5b80f203d1a9f28ced0307035d18368fa (diff)
downloaduhd-60a911cd460ca1e29d838ee0039d67bf7c8fe7f3.tar.gz
uhd-60a911cd460ca1e29d838ee0039d67bf7c8fe7f3.tar.bz2
uhd-60a911cd460ca1e29d838ee0039d67bf7c8fe7f3.zip
rfnoc/x300: Make sure peek32() and peek64() are called with actual addresses
Before, we were calling peeks with the number of the readback register.
-rw-r--r--host/lib/include/uhdlib/rfnoc/radio_ctrl_impl.hpp6
-rw-r--r--host/lib/rfnoc/radio_ctrl_impl.cpp10
-rw-r--r--host/lib/rfnoc/wb_iface_adapter.cpp4
-rw-r--r--host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_init.cpp12
-rw-r--r--host/lib/usrp/x300/x300_radio_ctrl_impl.cpp14
-rw-r--r--host/lib/usrp/x300/x300_radio_ctrl_impl.hpp2
6 files changed, 26 insertions, 22 deletions
diff --git a/host/lib/include/uhdlib/rfnoc/radio_ctrl_impl.hpp b/host/lib/include/uhdlib/rfnoc/radio_ctrl_impl.hpp
index a5876584e..62a268335 100644
--- a/host/lib/include/uhdlib/rfnoc/radio_ctrl_impl.hpp
+++ b/host/lib/include/uhdlib/rfnoc/radio_ctrl_impl.hpp
@@ -134,10 +134,8 @@ protected: // TODO see what's protected and what's private
* Registers
**********************************************************************/
struct regs {
- static inline uint32_t sr_addr(const uint32_t offset)
- {
- return offset * 4;
- }
+ static inline uint32_t sr_addr(const uint32_t offset) { return offset * 4; }
+ static inline uint32_t rb_addr(const uint32_t offset) { return offset * 8; }
static const uint32_t BASE = 128;
diff --git a/host/lib/rfnoc/radio_ctrl_impl.cpp b/host/lib/rfnoc/radio_ctrl_impl.cpp
index 1de854266..fe8d51468 100644
--- a/host/lib/rfnoc/radio_ctrl_impl.cpp
+++ b/host/lib/rfnoc/radio_ctrl_impl.cpp
@@ -72,13 +72,9 @@ radio_ctrl_impl::radio_ctrl_impl() :
if (i == 0) {
time_core_3000::readback_bases_type time64_rb_bases;
- time64_rb_bases.rb_now = regs::RB_TIME_NOW;
- time64_rb_bases.rb_pps = regs::RB_TIME_PPS;
- _time64 = time_core_3000::make(
- _perifs[i].ctrl,
- regs::sr_addr(regs::TIME),
- time64_rb_bases
- );
+ time64_rb_bases.rb_now = regs::rb_addr(regs::RB_TIME_NOW);
+ time64_rb_bases.rb_pps = regs::rb_addr(regs::RB_TIME_PPS);
+ _time64 = time_core_3000::make(_perifs[i].ctrl, regs::sr_addr(regs::TIME), time64_rb_bases);
this->set_time_now(0.0);
}
diff --git a/host/lib/rfnoc/wb_iface_adapter.cpp b/host/lib/rfnoc/wb_iface_adapter.cpp
index 00e2b466a..3b9202661 100644
--- a/host/lib/rfnoc/wb_iface_adapter.cpp
+++ b/host/lib/rfnoc/wb_iface_adapter.cpp
@@ -42,12 +42,12 @@ void wb_iface_adapter::poke32(const wb_addr_type addr, const uint32_t data)
uint32_t wb_iface_adapter::peek32(const wb_addr_type addr)
{
- return peek32_functor(addr);
+ return peek32_functor(addr / 8);
}
uint64_t wb_iface_adapter::peek64(const wb_addr_type addr)
{
- return peek64_functor(addr);
+ return peek64_functor(addr / 8);
}
uhd::time_spec_t wb_iface_adapter::get_time(void)
diff --git a/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_init.cpp b/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_init.cpp
index a95343574..4023a06c8 100644
--- a/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_init.cpp
+++ b/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_init.cpp
@@ -122,8 +122,9 @@ void magnesium_radio_ctrl_impl::_init_peripherals()
/ "tx_lo";
UHD_LOG_TRACE(unique_id(), "Initializing SPI core...");
_spi = spi_core_3000::make(_get_ctrl(0),
- radio_ctrl_impl::regs::sr_addr(radio_ctrl_impl::regs::SPI),
- radio_ctrl_impl::regs::RB_SPI);
+ regs::sr_addr(regs::SPI),
+ regs::rb_addr(regs::RB_SPI)
+ );
UHD_LOG_TRACE(unique_id(), "Initializing CPLD...");
UHD_LOG_TRACE(unique_id(), "CPLD path: " << cpld_path);
@@ -199,7 +200,7 @@ void magnesium_radio_ctrl_impl::_init_peripherals()
usrp::gpio_atr::gpio_atr_3000::make(
_get_ctrl(radio_idx),
regs::sr_addr(regs::GPIO),
- regs::RB_DB_GPIO
+ regs::rb_addr(regs::RB_DB_GPIO)
)
);
// DSA and AD9371 gain bits do *not* toggle on ATR modes. If we ever
@@ -217,7 +218,10 @@ void magnesium_radio_ctrl_impl::_init_peripherals()
}
UHD_LOG_TRACE(unique_id(), "Initializing front-panel GPIO control...")
_fp_gpio = usrp::gpio_atr::gpio_atr_3000::make(
- _get_ctrl(0), regs::sr_addr(regs::FP_GPIO), regs::RB_FP_GPIO);
+ _get_ctrl(0),
+ regs::sr_addr(regs::FP_GPIO),
+ regs::rb_addr(regs::RB_FP_GPIO)
+ );
}
void magnesium_radio_ctrl_impl::_init_frontend_subtree(
diff --git a/host/lib/usrp/x300/x300_radio_ctrl_impl.cpp b/host/lib/usrp/x300/x300_radio_ctrl_impl.cpp
index d7c206aec..af91fd1ad 100644
--- a/host/lib/usrp/x300/x300_radio_ctrl_impl.cpp
+++ b/host/lib/usrp/x300/x300_radio_ctrl_impl.cpp
@@ -64,13 +64,17 @@ UHD_RFNOC_RADIO_BLOCK_CONSTRUCTOR(x300_radio_ctrl)
// Setup peripherals
////////////////////////////////////////////////////////////////
_spi = spi_core_3000::make(ctrl,
- radio_ctrl_impl::regs::sr_addr(radio_ctrl_impl::regs::SPI),
- radio_ctrl_impl::regs::RB_SPI);
+ regs::sr_addr(radio_ctrl_impl::regs::SPI),
+ regs::rb_addr(radio_ctrl_impl::regs::RB_SPI)
+ );
_adc = x300_adc_ctrl::make(_spi, DB_ADC_SEN);
_dac = x300_dac_ctrl::make(_spi, DB_DAC_SEN, _radio_clk_rate);
if (_radio_type==PRIMARY) {
- _fp_gpio = gpio_atr::gpio_atr_3000::make(ctrl, regs::sr_addr(regs::FP_GPIO), regs::RB_FP_GPIO);
+ _fp_gpio = gpio_atr::gpio_atr_3000::make(ctrl,
+ regs::sr_addr(regs::FP_GPIO),
+ regs::rb_addr(regs::RB_FP_GPIO)
+ );
for(const gpio_atr::gpio_attr_map_t::value_type attr: gpio_atr::gpio_attr_map) {
switch (attr.first){
case usrp::gpio_atr::GPIO_SRC:
@@ -641,7 +645,9 @@ void x300_radio_ctrl_impl::setup_radio(
//create a new dboard interface
x300_dboard_iface_config_t db_config;
db_config.gpio = gpio_atr::db_gpio_atr_3000::make(_get_ctrl(IO_MASTER_RADIO),
- radio_ctrl_impl::regs::sr_addr(radio_ctrl_impl::regs::GPIO), radio_ctrl_impl::regs::RB_DB_GPIO);
+ radio_ctrl_impl::regs::sr_addr(radio_ctrl_impl::regs::GPIO),
+ radio_ctrl_impl::regs::rb_addr(radio_ctrl_impl::regs::RB_DB_GPIO)
+ );
db_config.spi = _spi;
db_config.rx_spi_slaveno = DB_RX_SEN;
db_config.tx_spi_slaveno = DB_TX_SEN;
diff --git a/host/lib/usrp/x300/x300_radio_ctrl_impl.hpp b/host/lib/usrp/x300/x300_radio_ctrl_impl.hpp
index ead546a63..967ed5772 100644
--- a/host/lib/usrp/x300/x300_radio_ctrl_impl.hpp
+++ b/host/lib/usrp/x300/x300_radio_ctrl_impl.hpp
@@ -145,7 +145,7 @@ private:
UHD_DEFINE_SOFT_REG_FIELD(ADC_CHECKER1_Q_ERROR, /*width*/ 1, /*shift*/ 38); //[6]
UHD_DEFINE_SOFT_REG_FIELD(ADC_CHECKER1_I_ERROR, /*width*/ 1, /*shift*/ 39); //[7]
- misc_ins_reg_t(): uhd::soft_reg64_ro_t(regs::RB_MISC_IO) { }
+ misc_ins_reg_t(): uhd::soft_reg64_ro_t(regs::rb_addr(regs::RB_MISC_IO)) { }
} misc_ins_reg;
radio_regmap_t(int radio_num) : soft_regmap_t("radio" + std::to_string(radio_num) + "_regmap") {