diff options
| -rw-r--r-- | host/lib/usrp/n230/n230_fpga_defs.h | 4 | ||||
| -rw-r--r-- | host/lib/usrp/n230/n230_frontend_ctrl.cpp | 6 | ||||
| -rw-r--r-- | host/lib/usrp/n230/n230_frontend_ctrl.hpp | 4 | ||||
| -rw-r--r-- | host/lib/usrp/n230/n230_impl.cpp | 26 | ||||
| -rw-r--r-- | host/lib/usrp/n230/n230_resource_manager.cpp | 13 | ||||
| -rw-r--r-- | host/lib/usrp/n230/n230_resource_manager.hpp | 17 | 
6 files changed, 61 insertions, 9 deletions
diff --git a/host/lib/usrp/n230/n230_fpga_defs.h b/host/lib/usrp/n230/n230_fpga_defs.h index 5a2dd5c68..7e1b008ce 100644 --- a/host/lib/usrp/n230/n230_fpga_defs.h +++ b/host/lib/usrp/n230/n230_fpga_defs.h @@ -74,12 +74,16 @@ static const uint32_t SR_CORE_COMPAT        = 24;  static const uint32_t SR_CORE_READBACK      = 32;  static const uint32_t SR_CORE_GPSDO_ST      = 40;  static const uint32_t SR_CORE_PPS_SEL       = 48; +static const uint32_t SR_CORE_MS0_GPIO      = 50; +static const uint32_t SR_CORE_MS1_GPIO      = 58;  static const uint32_t RB_CORE_SIGNATUE      = 0;  static const uint32_t RB_CORE_SPI           = 1;  static const uint32_t RB_CORE_STATUS        = 2;  static const uint32_t RB_CORE_BIST          = 3;  static const uint32_t RB_CORE_VERSION_HASH  = 4; +static const uint32_t RB_CORE_MS0_GPIO      = 5; +static const uint32_t RB_CORE_MS1_GPIO      = 6;  /*******************************************************************   * Seting Register Base addresses diff --git a/host/lib/usrp/n230/n230_frontend_ctrl.cpp b/host/lib/usrp/n230/n230_frontend_ctrl.cpp index 46e8c218f..6da386354 100644 --- a/host/lib/usrp/n230/n230_frontend_ctrl.cpp +++ b/host/lib/usrp/n230/n230_frontend_ctrl.cpp @@ -61,7 +61,7 @@ public:          radio_ctrl_core_3000::sptr core_ctrl,          fpga::core_misc_reg_t& core_misc_reg,          ad9361_ctrl::sptr codec_ctrl, -        const std::vector<gpio_core_200_32wo::sptr>& gpio_cores +        const std::vector<gpio_atr::gpio_atr_3000::sptr>& gpio_cores      ): _core_ctrl(core_ctrl),         _codec_ctrl(codec_ctrl),         _gpio_cores(gpio_cores), @@ -219,7 +219,7 @@ private:      radio_ctrl_core_3000::sptr              _core_ctrl;      ad9361_ctrl::sptr                       _codec_ctrl; -    std::vector<gpio_core_200_32wo::sptr>   _gpio_cores; +    std::vector<gpio_atr::gpio_atr_3000::sptr>   _gpio_cores;      fpga::core_misc_reg_t&                  _core_misc_reg;      uhd::dict<size_t, fe_state_cache_t>     _fe_states;  }; @@ -232,7 +232,7 @@ n230_frontend_ctrl::sptr n230_frontend_ctrl::make(          radio_ctrl_core_3000::sptr core_ctrl,          fpga::core_misc_reg_t& core_misc_reg,          ad9361_ctrl::sptr codec_ctrl, -        const std::vector<gpio_core_200_32wo::sptr>& gpio_cores) +        const std::vector<gpio_atr::gpio_atr_3000::sptr>& gpio_cores)  {      return sptr(new n230_frontend_ctrl_impl(core_ctrl, core_misc_reg, codec_ctrl, gpio_cores));  } diff --git a/host/lib/usrp/n230/n230_frontend_ctrl.hpp b/host/lib/usrp/n230/n230_frontend_ctrl.hpp index c10ac8d09..377d23ba8 100644 --- a/host/lib/usrp/n230/n230_frontend_ctrl.hpp +++ b/host/lib/usrp/n230/n230_frontend_ctrl.hpp @@ -20,7 +20,7 @@  #include "radio_ctrl_core_3000.hpp"  #include "ad9361_ctrl.hpp" -#include "gpio_core_200.hpp" +#include "gpio_atr_3000.hpp"  #include <uhd/types/sensors.hpp>  #include <boost/shared_ptr.hpp>  #include <boost/utility.hpp> @@ -47,7 +47,7 @@ public:          radio_ctrl_core_3000::sptr core_ctrl,          fpga::core_misc_reg_t& core_misc_reg,          ad9361_ctrl::sptr codec_ctrl, -        const std::vector<gpio_core_200_32wo::sptr>& gpio_cores); +        const std::vector<gpio_atr::gpio_atr_3000::sptr>& gpio_cores);      virtual ~n230_frontend_ctrl() {} diff --git a/host/lib/usrp/n230/n230_impl.cpp b/host/lib/usrp/n230/n230_impl.cpp index d05ab9ee9..873a9a89f 100644 --- a/host/lib/usrp/n230/n230_impl.cpp +++ b/host/lib/usrp/n230/n230_impl.cpp @@ -369,7 +369,33 @@ void n230_impl::_initialize_property_tree(const fs_path& mb_path)      _tree->access<subdev_spec_t>(mb_path / "rx_subdev_spec").set(rx_spec);      _tree->access<subdev_spec_t>(mb_path / "tx_subdev_spec").set(tx_spec); +    //------------------------------------------------------------------ +    // MiniSAS GPIO +    //------------------------------------------------------------------ +    _tree->create<boost::uint32_t>(mb_path / "gpio" / "FP0" / "DDR") +        .set(0) +        .subscribe(boost::bind(&gpio_atr::gpio_atr_3000::set_gpio_attr, +            _resource_mgr->get_minisas_gpio_ctrl_sptr(0), gpio_atr::GPIO_DDR, _1)); +    _tree->create<boost::uint32_t>(mb_path / "gpio" / "FP1" / "DDR") +        .set(0) +        .subscribe(boost::bind(&gpio_atr::gpio_atr_3000::set_gpio_attr, +            _resource_mgr->get_minisas_gpio_ctrl_sptr(1), gpio_atr::GPIO_DDR, _1)); +    _tree->create<boost::uint32_t>(mb_path / "gpio" / "FP0" / "OUT") +        .set(0) +        .subscribe(boost::bind(&gpio_atr::gpio_atr_3000::set_gpio_attr, +            _resource_mgr->get_minisas_gpio_ctrl_sptr(0), gpio_atr::GPIO_OUT, _1)); +    _tree->create<boost::uint32_t>(mb_path / "gpio" / "FP1" / "OUT") +        .set(0) +        .subscribe(boost::bind(&gpio_atr::gpio_atr_3000::set_gpio_attr, +            _resource_mgr->get_minisas_gpio_ctrl_sptr(1), gpio_atr::GPIO_OUT, _1)); +    _tree->create<boost::uint32_t>(mb_path / "gpio" / "FP0" / "READBACK") +        .publish(boost::bind(&gpio_atr::gpio_atr_3000::read_gpio, _resource_mgr->get_minisas_gpio_ctrl_sptr(0))); +    _tree->create<boost::uint32_t>(mb_path / "gpio" / "FP1" / "READBACK") +        .publish(boost::bind(&gpio_atr::gpio_atr_3000::read_gpio, _resource_mgr->get_minisas_gpio_ctrl_sptr(1))); + +    //------------------------------------------------------------------      // GPSDO sensors +    //------------------------------------------------------------------      uhd::gps_ctrl::sptr gps_ctrl = _resource_mgr->get_gps_ctrl();      if (gps_ctrl and gps_ctrl->gps_detected())      { diff --git a/host/lib/usrp/n230/n230_resource_manager.cpp b/host/lib/usrp/n230/n230_resource_manager.cpp index 7f1e9a6f0..fa55d0cd8 100644 --- a/host/lib/usrp/n230/n230_resource_manager.cpp +++ b/host/lib/usrp/n230/n230_resource_manager.cpp @@ -163,7 +163,7 @@ n230_resource_manager::n230_resource_manager(      _reset_codec_digital_interface();      std::vector<time_core_3000::sptr> time_cores; -    std::vector<gpio_core_200_32wo::sptr> gpio_cores; +    std::vector<gpio_atr::gpio_atr_3000::sptr> gpio_cores;      for (size_t i = 0; i < fpga::NUM_RADIOS; i++) {          _initialize_radio(i);          time_cores.push_back(_radios[i].time); @@ -183,6 +183,14 @@ n230_resource_manager::n230_resource_manager(          throw uhd::runtime_error("N230 Initialization Error: Could not create front-end ctrl.)");      } +    //Create miniSAS GPIO interfaces +    _ms0_gpio = gpio_atr::gpio_atr_3000::make( +        _core_ctrl, fpga::sr_addr(fpga::SR_CORE_MS0_GPIO), fpga::rb_addr(fpga::RB_CORE_MS0_GPIO)); +    _ms0_gpio->set_atr_mode(gpio_atr::MODE_GPIO,gpio_atr::gpio_atr_3000::MASK_SET_ALL); +    _ms1_gpio = gpio_atr::gpio_atr_3000::make( +        _core_ctrl, fpga::sr_addr(fpga::SR_CORE_MS1_GPIO), fpga::rb_addr(fpga::RB_CORE_MS1_GPIO)); +    _ms1_gpio->set_atr_mode(gpio_atr::MODE_GPIO,gpio_atr::gpio_atr_3000::MASK_SET_ALL); +      //Create GPSDO interface      const sid_t gps_uart_sid = _generate_sid(GPS_UART, _get_conn(PRI_ETH).type);      transport::zero_copy_if::sptr gps_uart_xport = @@ -299,7 +307,8 @@ void n230_resource_manager::_initialize_radio(size_t instance)      }      //Write-only ATR interface -    radio.gpio_atr = gpio_core_200_32wo::make(radio.ctrl, fpga::sr_addr(fpga::SR_RADIO_ATR)); +    radio.gpio_atr = gpio_atr::gpio_atr_3000::make_write_only(radio.ctrl, fpga::sr_addr(fpga::SR_RADIO_ATR)); +    radio.gpio_atr->set_atr_mode(gpio_atr::MODE_ATR,gpio_atr::gpio_atr_3000::MASK_SET_ALL);      //Core VITA time interface      time_core_3000::readback_bases_type time_bases; diff --git a/host/lib/usrp/n230/n230_resource_manager.hpp b/host/lib/usrp/n230/n230_resource_manager.hpp index 0cda460fd..0c01e765a 100644 --- a/host/lib/usrp/n230/n230_resource_manager.hpp +++ b/host/lib/usrp/n230/n230_resource_manager.hpp @@ -20,7 +20,7 @@  #include "radio_ctrl_core_3000.hpp"  #include "spi_core_3000.hpp" -#include "gpio_core_200.hpp" +#include "gpio_atr_3000.hpp"  #include "rx_vita_core_3000.hpp"  #include "tx_vita_core_3000.hpp"  #include "time_core_3000.hpp" @@ -82,7 +82,7 @@ enum n230_data_dir_t {  class radio_resource_t : public boost::noncopyable {  public:      radio_ctrl_core_3000::sptr      ctrl; -    gpio_core_200_32wo::sptr        gpio_atr; +    gpio_atr::gpio_atr_3000::sptr   gpio_atr;      time_core_3000::sptr            time;      rx_vita_core_3000::sptr         framer;      rx_dsp_core_3000::sptr          ddc; @@ -171,6 +171,15 @@ public:     //Methods          return _frontend_ctrl;      } +    //MiniSAS GPIO control +    inline gpio_atr::gpio_atr_3000::sptr get_minisas_gpio_ctrl_sptr(size_t idx) { +        return idx == 0 ? _ms0_gpio : _ms1_gpio; +    } + +    inline gpio_atr::gpio_atr_3000& get_minisas_gpio_ctrl(size_t idx) { +        return *get_minisas_gpio_ctrl_sptr(idx); +    } +      //GPSDO control      inline uhd::gps_ctrl::sptr get_gps_ctrl(void) {          return _gps_ctrl; @@ -284,6 +293,10 @@ private:      n230_clk_pps_ctrl::sptr         _clk_pps_ctrl;      n230_frontend_ctrl::sptr        _frontend_ctrl; +    //miniSAS GPIO +    gpio_atr::gpio_atr_3000::sptr   _ms0_gpio; +    gpio_atr::gpio_atr_3000::sptr   _ms1_gpio; +      //GPSDO      n230_uart::sptr                 _gps_uart;      uhd::gps_ctrl::sptr             _gps_ctrl;  | 
