diff --git a/Makefile b/Makefile
index 8bf4bc1..f4cec6c 100644
--- a/Makefile
+++ b/Makefile
@@ -27,7 +27,7 @@
 
 ## Variables
 OPENOLTDEVICE     ?= sim
-OPENOLT_PROTO_VER ?= v5.2.1
+OPENOLT_PROTO_VER ?= v5.4.6
 
 DOCKER                     ?= docker
 DOCKER_REGISTRY            ?=
diff --git a/VERSION b/VERSION
index aaf18d2..1981190 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.7.5
+3.8.0
diff --git a/agent/common/core.h b/agent/common/core.h
index dafbf97..f322bf0 100644
--- a/agent/common/core.h
+++ b/agent/common/core.h
@@ -248,6 +248,8 @@
 Status GetOnuStatistics_(uint32_t intf_id, uint32_t onu_id, openolt::OnuStatistics *onu_stats);
 Status GetGemPortStatistics_(uint32_t intf_id, uint32_t gemport_id, openolt::GemPortStatistics* gemport_stats);
 Status GetPonRxPower_(uint32_t intf_id, uint32_t onu_id, openolt::PonRxPowerData* response);
+Status GetOnuInfo_(uint32_t intf_id, uint32_t onu_id, openolt::OnuInfo *response);
+Status GetPonInterfaceInfo_(uint32_t intf_id, openolt::PonIntfInfo *response);
 int get_status_bcm_cli_quit(void);
 uint16_t get_dev_id(void);
 Status pushOltOperInd(uint32_t intf_id, const char *type, const char *state, uint32_t speed);
diff --git a/agent/common/server.cc b/agent/common/server.cc
index 83a66f3..ec52b26 100644
--- a/agent/common/server.cc
+++ b/agent/common/server.cc
@@ -355,6 +355,30 @@
             request->onu_id(),
             response);
     }
+
+    Status GetOnuInfo(
+            ServerContext* context,
+            const openolt::Onu* request,
+            openolt::OnuInfo* response) override {
+        return GetOnuInfo_(
+            request->intf_id(),
+            request->onu_id(),
+            response);
+    }
+
+
+    Status GetPonInterfaceInfo(
+            ServerContext* context,
+            const openolt::Interface* request,
+            openolt::PonIntfInfo* response) override {
+        return GetPonInterfaceInfo_(
+            request->intf_id(),
+            response);
+    }
+
+
+
+
 };
 
 bool RunServer(int argc, char** argv) {
diff --git a/agent/src/core_api_handler.cc b/agent/src/core_api_handler.cc
index 8f6ea7b..18f284f 100644
--- a/agent/src/core_api_handler.cc
+++ b/agent/src/core_api_handler.cc
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <cerrno>
 #include <iostream>
 #include <memory>
 #include <string>
@@ -207,7 +208,6 @@
     device_info->set_model(MODEL_ID);
     device_info->set_hardware_version("");
     device_info->set_firmware_version(firmware_version);
-    device_info->set_technology(board_technology);
     device_info->set_pon_ports(num_of_pon_ports);
 
     char serial_number[OPENOLT_FIELD_LEN];
@@ -237,18 +237,6 @@
     }
 
     device_info->set_device_id(device_id);
-
-    // Legacy, device-wide ranges. To be deprecated when adapter
-    // is upgraded to support per-interface ranges
-    device_info->set_onu_id_start(ONU_ID_START);
-    device_info->set_onu_id_end(ONU_ID_END);
-    device_info->set_alloc_id_start(ALLOC_ID_START);
-    device_info->set_alloc_id_end(ALLOC_ID_END);
-    device_info->set_gemport_id_start(GEM_PORT_ID_START);
-    device_info->set_gemport_id_end(GEM_PORT_ID_END);
-    device_info->set_flow_id_start(FLOW_ID_START);
-    device_info->set_flow_id_end(FLOW_ID_END);
-
     std::map<std::string, ::openolt::DeviceInfo::DeviceResourceRanges*> ranges;
     for (uint32_t intf_id = 0; intf_id < num_of_pon_ports; ++intf_id) {
         std::string intf_technology = intf_technologies[intf_id];
@@ -3510,3 +3498,136 @@
         return bcm_to_grpc_err(err, "timeout waiting for pon rssi measurement complete indication");
     }
 }
+
+Status GetOnuInfo_(uint32_t intf_id, uint32_t onu_id, openolt::OnuInfo *response)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    bcmolt_onu_state onu_state;
+
+    bcmolt_status losi;
+    bcmolt_status lofi;
+    bcmolt_status loami;
+    err = get_gpon_onu_info((bcmolt_interface)intf_id, onu_id, &onu_state, &losi, &lofi, &loami);
+
+    if (err == BCM_ERR_OK)
+    {
+
+        response->set_onu_id(onu_id);
+        OPENOLT_LOG(DEBUG, openolt_log_id, "onu state  %d\n", onu_state);
+        OPENOLT_LOG(DEBUG, openolt_log_id, "losi  %d\n", losi);
+        OPENOLT_LOG(DEBUG, openolt_log_id, "lofi %d\n", lofi);
+        OPENOLT_LOG(DEBUG, openolt_log_id, "loami %d\n", loami);
+
+        switch (onu_state)
+        {
+        case bcmolt_onu_state::BCMOLT_ONU_STATE_ACTIVE:
+            response->set_state(openolt::OnuInfo_OnuState::OnuInfo_OnuState_ACTIVE);
+            break;
+        case bcmolt_onu_state::BCMOLT_ONU_STATE_INACTIVE:
+            response->set_state(openolt::OnuInfo_OnuState::OnuInfo_OnuState_INACTIVE);
+            break;
+        case bcmolt_onu_state::BCMOLT_ONU_STATE_UNAWARE:
+            response->set_state(openolt::OnuInfo_OnuState::OnuInfo_OnuState_UNKNOWN);
+            break;
+        case bcmolt_onu_state::BCMOLT_ONU_STATE_NOT_CONFIGURED:
+            response->set_state(openolt::OnuInfo_OnuState::OnuInfo_OnuState_NOT_CONFIGURED);
+            break;
+        case bcmolt_onu_state::BCMOLT_ONU_STATE_DISABLED:
+            response->set_state(openolt::OnuInfo_OnuState::OnuInfo_OnuState_DISABLED);
+            break;
+        }
+        switch (losi)
+        {
+        case bcmolt_status::BCMOLT_STATUS_ON:
+            response->set_losi(openolt::AlarmState::ON);
+            break;
+        case bcmolt_status::BCMOLT_STATUS_OFF:
+            response->set_losi(openolt::AlarmState::OFF);
+            break;
+        }
+
+        switch (lofi)
+        {
+        case bcmolt_status::BCMOLT_STATUS_ON:
+            response->set_lofi(openolt::AlarmState::ON);
+            break;
+        case bcmolt_status::BCMOLT_STATUS_OFF:
+            response->set_lofi(openolt::AlarmState::OFF);
+            break;
+        }
+
+        switch (loami)
+        {
+        case bcmolt_status::BCMOLT_STATUS_ON:
+            response->set_loami(openolt::AlarmState::ON);
+            break;
+        case bcmolt_status::BCMOLT_STATUS_OFF:
+            response->set_loami(openolt::AlarmState::OFF);
+            break;
+        }
+        return Status::OK;
+    }
+    else
+    {
+        OPENOLT_LOG(ERROR, openolt_log_id, "Failed to fetch Onu status, onu_id = %d, intf_id = %d, err = %s\n",
+                    onu_id, intf_id, bcmos_strerror(err));
+        return bcm_to_grpc_err(err, "Failed to fetch Onu status");
+    }
+}
+
+Status GetPonInterfaceInfo_(uint32_t intf_id, openolt::PonIntfInfo *response)
+{
+    bcmos_errno err = BCM_ERR_OK;
+
+    bcmolt_status los_status;
+    bcmolt_interface_state state;
+    err = get_pon_interface_status((bcmolt_interface)intf_id, &state, &los_status);
+    OPENOLT_LOG(ERROR, openolt_log_id, "pon state  %d\n",state);
+    OPENOLT_LOG(ERROR, openolt_log_id, "pon los status  %d\n", los_status);
+
+
+    if (err == BCM_ERR_OK)
+    {
+        response->set_intf_id(intf_id) ;
+        switch (los_status)
+        {
+        case bcmolt_status::BCMOLT_STATUS_ON:
+
+            response->set_los(openolt::AlarmState::ON);
+            break;
+        case bcmolt_status::BCMOLT_STATUS_OFF:
+            response->set_los(openolt::AlarmState::OFF);
+            break;
+        }
+
+        switch (state)
+        {
+        case bcmolt_interface_state::BCMOLT_INTERFACE_STATE_ACTIVE_WORKING:
+            response->set_state(openolt::PonIntfInfo_PonIntfState::PonIntfInfo_PonIntfState_ACTIVE_WORKING);
+            break;
+        case bcmolt_interface_state::BCMOLT_INTERFACE_STATE_ACTIVE_STANDBY:
+            response->set_state(openolt::PonIntfInfo_PonIntfState::PonIntfInfo_PonIntfState_ACTIVE_STANDBY);
+            break;
+
+        case bcmolt_interface_state::BCMOLT_INTERFACE_STATE_DISABLED:
+            response->set_state(openolt::PonIntfInfo_PonIntfState::PonIntfInfo_PonIntfState_DISABLED);
+            break;
+
+        case bcmolt_interface_state::BCMOLT_INTERFACE_STATE_INACTIVE:
+
+            response->set_state(openolt::PonIntfInfo_PonIntfState::PonIntfInfo_PonIntfState_INACTIVE);
+            break;
+        default:
+            response->set_state(openolt::PonIntfInfo_PonIntfState::PonIntfInfo_PonIntfState_UNKNOWN);
+        }
+
+        return Status::OK;
+    }
+    else
+    {
+        OPENOLT_LOG(ERROR, openolt_log_id, "Failed to fetch PON interface los status intf_id = %d, err = %s\n",
+                    intf_id, bcmos_strerror(err));
+        return bcm_to_grpc_err(err, "Failed to fetch PON interface los status intf_id");
+    }
+}
diff --git a/agent/src/core_utils.cc b/agent/src/core_utils.cc
index dafc68c..9bc7659 100644
--- a/agent/src/core_utils.cc
+++ b/agent/src/core_utils.cc
@@ -891,6 +891,51 @@
     return err;
 }
 
+bcmos_errno get_gpon_onu_info(bcmolt_interface pon_ni, int onu_id, bcmolt_onu_state *onu_state, bcmolt_status *losi, bcmolt_status *lofi, bcmolt_status *loami)
+{
+
+    bcmos_errno err;
+    bcmolt_onu_cfg onu_cfg;
+    bcmolt_itu_onu_params itu = {};
+    bcmolt_gpon_onu_alarm_state alarm_state = {};
+    bcmolt_gpon_onu_params gpon = {};
+
+    bcmolt_onu_cfg onu_cfg_itu;
+    bcmolt_onu_key onu_key;
+    onu_key.pon_ni = pon_ni;
+    onu_key.onu_id = onu_id;
+
+    BCMOLT_CFG_INIT(&onu_cfg, onu, onu_key);
+    BCMOLT_FIELD_SET_PRESENT(&onu_cfg.data, onu_cfg_data, onu_state);
+
+    BCMOLT_FIELD_SET_PRESENT(&onu_cfg.data, onu_cfg_data, itu);
+
+    BCMOLT_FIELD_SET_PRESENT(&itu, itu_onu_params, gpon);
+    BCMOLT_FIELD_SET_PRESENT(&gpon, gpon_onu_params, alarm_state);
+
+    BCMOLT_FIELD_SET_PRESENT(&alarm_state, gpon_onu_alarm_state, losi);
+    BCMOLT_FIELD_SET_PRESENT(&alarm_state, gpon_onu_alarm_state, lofi);
+    BCMOLT_FIELD_SET_PRESENT(&alarm_state, gpon_onu_alarm_state, loami);
+
+    BCMOLT_FIELD_SET(&gpon, gpon_onu_params, alarm_state, alarm_state);
+
+    BCMOLT_FIELD_SET(&itu, itu_onu_params, gpon, gpon);
+
+    BCMOLT_FIELD_SET(&onu_cfg.data, onu_cfg_data, itu, itu);
+
+    err = bcmolt_cfg_get(dev_id, &onu_cfg.hdr);
+
+    *onu_state = onu_cfg.data.onu_state;
+    // fetch onu itu
+    *losi = onu_cfg.data.itu.gpon.alarm_state.losi;
+
+    *lofi = onu_cfg.data.itu.gpon.alarm_state.lofi;
+
+    *loami = onu_cfg.data.itu.gpon.alarm_state.loami;
+
+    return err;
+}
+
 bcmos_errno get_gem_obj_state(bcmolt_interface pon_ni, bcmolt_gem_port_id id, bcmolt_activation_state *state) {
     bcmos_errno err;
     bcmolt_itupon_gem_cfg cfg;
diff --git a/agent/src/core_utils.h b/agent/src/core_utils.h
index 1813a37..644ddec 100644
--- a/agent/src/core_utils.h
+++ b/agent/src/core_utils.h
@@ -89,6 +89,7 @@
 bcmos_errno bcmolt_apiend_cli_init();
 bcmos_errno get_pon_interface_status(bcmolt_interface pon_ni, bcmolt_interface_state *state, bcmolt_status *los_status);
 bcmos_errno get_onu_state(bcmolt_interface pon_ni, int onu_id, bcmolt_onu_state *onu_state);
+bcmos_errno get_gpon_onu_info(bcmolt_interface pon_ni, int onu_id, bcmolt_onu_state *onu_state, bcmolt_status *losi, bcmolt_status *lofi,bcmolt_status *loami);
 bcmos_errno bcmolt_cfg_get_mult_retry(bcmolt_oltid olt, bcmolt_cfg *cfg);
 unsigned NumNniIf_();
 unsigned NumPonIf_();
diff --git a/agent/test/Makefile b/agent/test/Makefile
index 94e0829..8e4f730 100644
--- a/agent/test/Makefile
+++ b/agent/test/Makefile
@@ -21,7 +21,7 @@
 TOP_DIR=`pwd`
 OPENOLTDEVICE ?= sim
 
-OPENOLT_PROTO_VER ?= v5.2.1
+OPENOLT_PROTO_VER ?= v5.4.6
 
 ########################################################################
 ##
diff --git a/protos/Makefile b/protos/Makefile
index 27ea254..0fbca86 100644
--- a/protos/Makefile
+++ b/protos/Makefile
@@ -19,8 +19,7 @@
 # This specifies the GIT tag in https://github.com/opencord/voltha-protos
 # repo that we need to refer to, to pick the right version of
 # openolt.proto, ext_config.proto and tech_profile.proto
-OPENOLT_PROTO_VER ?= v5.2.1
-
+OPENOLT_PROTO_VER ?= v5.4.6
 CXX ?= g++
 CPPFLAGS += `pkg-config --cflags protobuf grpc` -I googleapis/gens -I./
 CXXFLAGS += -std=c++11
