diff --git a/common.mk b/common.mk
index 2318165..83d06c6 100644
--- a/common.mk
+++ b/common.mk
@@ -36,6 +36,10 @@
     common_flags += -DUSER_DEBUG
 endif
 
+ifeq ($(LLVM_SA), true)
+    common_flags += --compile-and-analyze --analyzer-perf --analyzer-Werror
+endif
+
 common_includes := system/core/base/include
 CHECK_VERSION_LE = $(shell if [ $(1) -le $(2) ] ; then echo true ; else echo false ; fi)
 PLATFORM_SDK_NOUGAT = 25
diff --git a/libdisplayconfig/Android.mk b/libdisplayconfig/Android.mk
index fae7f85..a107ea6 100644
--- a/libdisplayconfig/Android.mk
+++ b/libdisplayconfig/Android.mk
@@ -9,4 +9,8 @@
 LOCAL_SHARED_LIBRARIES        := libhidlbase libhidltransport libutils \
                                  vendor.display.config@1.0 android.hidl.base@1.0
 
+ifeq ($(LLVM_SA), true)
+    LOCAL_CFLAGS += --compile-and-analyze --analyzer-perf --analyzer-Werror
+endif
+
 include $(BUILD_SHARED_LIBRARY)
diff --git a/liblight/Android.mk b/liblight/Android.mk
index 2f2e1ca..197a1a4 100644
--- a/liblight/Android.mk
+++ b/liblight/Android.mk
@@ -24,6 +24,9 @@
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SHARED_LIBRARIES := liblog libcutils libsdm-disp-vndapis
 LOCAL_CFLAGS := -DLOG_TAG=\"qdlights\"
+ifeq ($(LLVM_SA), true)
+    LOCAL_CFLAGS += --compile-and-analyze --analyzer-perf --analyzer-Werror
+endif
 LOCAL_CLANG  := true
 LOCAL_MODULE := lights.$(TARGET_BOARD_PLATFORM)
 LOCAL_MODULE_TAGS := optional
diff --git a/libqdutils/qd_utils.cpp b/libqdutils/qd_utils.cpp
index 2cce39c..c55354d 100644
--- a/libqdutils/qd_utils.cpp
+++ b/libqdutils/qd_utils.cpp
@@ -264,10 +264,12 @@
 
     while (getline(&line, &len, configFile) != -1) {
         if (!parseLine(line, tokens, maxCount, &tokenCount)) {
-            if (!strncmp(tokens[0], "bpp", strlen("bpp"))) {
+            if (tokens[0] != NULL) {
+              if (!strncmp(tokens[0], "bpp", strlen("bpp"))) {
                 *panelBpp = static_cast<uint32_t>(atoi(tokens[1]));
-            } else  if (!strncmp(tokens[0], "pattern", strlen("pattern"))) {
+              } else  if (!strncmp(tokens[0], "pattern", strlen("pattern"))) {
                 *patternType = static_cast<uint32_t>(atoi(tokens[1]));
+              }
             }
         }
     }
diff --git a/sdm/include/core/sdm_types.h b/sdm/include/core/sdm_types.h
index 72ad6b2..0d3bf33 100644
--- a/sdm/include/core/sdm_types.h
+++ b/sdm/include/core/sdm_types.h
@@ -57,6 +57,7 @@
   kErrorNoAppLayers,      //!< No App layer(s) in the draw cycle.
   kErrorRotatorValidation,  //!< Rotator configuration validation failure.
   kErrorNotValidated,     //!< Draw cycle has not been validated.
+  kErrorCriticalResource,   //!< Critical resource allocation has failed.
 };
 
 /*! @brief This structure is defined for client and library compatibility check purpose only. This
diff --git a/sdm/include/private/hw_info_types.h b/sdm/include/private/hw_info_types.h
index 173dc4f..9f6a5d6 100644
--- a/sdm/include/private/hw_info_types.h
+++ b/sdm/include/private/hw_info_types.h
@@ -524,9 +524,9 @@
 
   std::vector<Layer> hw_layers = {};  // Layers which need to be programmed on the HW
 
-  uint32_t index[kMaxSDELayers] = {};   // Indexes of the layers from the layer stack which need to
-                                        // be programmed on hardware.
-  uint32_t roi_index[kMaxSDELayers] = {0};  // Stores the ROI index where the layers are visible.
+  std::vector<uint32_t> index;   // Indexes of the layers from the layer stack which need to
+                                 // be programmed on hardware.
+  std::vector<uint32_t> roi_index;  // Stores the ROI index where the layers are visible.
 
   int sync_handle = -1;         // Release fence id for current draw cycle.
   int set_idle_time_ms = -1;    // Set idle time to the new specified value.
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 34740a9..51aa012 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -598,7 +598,7 @@
   DumpImpl::AppendString(buffer, length, newline);
 
   for (uint32_t i = 0; i < num_hw_layers; i++) {
-    uint32_t layer_index = hw_layers_.info.index[i];
+    uint32_t layer_index = hw_layers_.info.index.at(i);
     // sdm-layer from client layer stack
     Layer *sdm_layer = hw_layers_.info.stack->layers.at(layer_index);
     // hw-layer from hw layers info
@@ -619,14 +619,15 @@
       HWRotateInfo &rotate = hw_rotator_session.hw_rotate_info[count];
       LayerRect &src_roi = rotate.src_roi;
       LayerRect &dst_roi = rotate.dst_roi;
-      const char *rotate_split[2] = { "Rot-1", "Rot-2" };
+      char rot[8] = { 0 };
       int pipe_id = 0;
 
       if (hw_rotator_session.mode == kRotatorOffline) {
         snprintf(writeback_id, sizeof(writeback_id), "%d", rotate.writeback_id);
         pipe_id = rotate.pipe_id;
       }
-      DumpImpl::AppendString(buffer, length, format, idx, comp_type, rotate_split[count],
+      snprintf(rot, sizeof(rot), "Rot-%d", count + 1);
+      DumpImpl::AppendString(buffer, length, format, idx, comp_type, rot,
                              writeback_id, pipe_id, input_buffer->width,
                              input_buffer->height, buffer_format, INT(src_roi.left),
                              INT(src_roi.top), INT(src_roi.right), INT(src_roi.bottom),
@@ -1318,7 +1319,7 @@
   uint32_t hw_layers_count = UINT32(hw_layers_.info.hw_layers.size());
 
   for (uint32_t i = 0; i < hw_layers_count; i++) {
-    Layer *sdm_layer = layer_stack->layers.at(hw_layers_.info.index[i]);
+    Layer *sdm_layer = layer_stack->layers.at(hw_layers_.info.index.at(i));
     Layer &hw_layer = hw_layers_.info.hw_layers.at(i);
 
     hw_layer.input_buffer.planes[0].fd = sdm_layer->input_buffer.planes[0].fd;
@@ -1338,7 +1339,7 @@
   std::vector<uint32_t> fence_dup_flag;
 
   for (uint32_t i = 0; i < hw_layers_count; i++) {
-    uint32_t sdm_layer_index = hw_layers_.info.index[i];
+    uint32_t sdm_layer_index = hw_layers_.info.index.at(i);
     Layer *sdm_layer = layer_stack->layers.at(sdm_layer_index);
     Layer &hw_layer = hw_layers_.info.hw_layers.at(i);
 
@@ -1523,28 +1524,28 @@
 DisplayError DisplayBase::GetClientTargetSupport(uint32_t width, uint32_t height,
                                                  LayerBufferFormat format,
                                                  const ColorMetaData &color_metadata) {
-  DisplayError error = kErrorNone;
-
   if (format != kFormatRGBA8888 && format != kFormatRGBA1010102) {
     DLOGW("Unsupported format = %d", format);
-    error = kErrorNotSupported;
+    return kErrorNotSupported;
   } else if (ValidateScaling(width, height) != kErrorNone) {
     DLOGW("Unsupported width = %d height = %d", width, height);
-    error = kErrorNotSupported;
-  } else {
-    error = ValidateDataspace(color_metadata);
+    return kErrorNotSupported;
+  } else if (color_metadata.transfer && color_metadata.colorPrimaries) {
+    DisplayError error = ValidateDataspace(color_metadata);
     if (error != kErrorNone) {
+      DLOGW("Unsupported Transfer Request = %d Color Primary = %d",
+             color_metadata.transfer, color_metadata.colorPrimaries);
       return error;
     }
 
     // Check for BT2020 support
     if (color_metadata.colorPrimaries == ColorPrimaries_BT2020) {
-      DLOGW("Unsupported dataspace");
-      error = kErrorNotSupported;
+      DLOGW("Unsupported Color Primary = %d", color_metadata.colorPrimaries);
+      return kErrorNotSupported;
     }
   }
 
-  return error;
+  return kErrorNone;
 }
 
 DisplayError DisplayBase::ValidateScaling(uint32_t width, uint32_t height) {
diff --git a/sdm/libs/core/display_primary.cpp b/sdm/libs/core/display_primary.cpp
index 0c8760e..8466f8b 100644
--- a/sdm/libs/core/display_primary.cpp
+++ b/sdm/libs/core/display_primary.cpp
@@ -68,6 +68,24 @@
     }
   }
 
+  if (hw_panel_info_.mode == kModeCommand) {
+    event_list_ = { HWEvent::VSYNC,
+                    HWEvent::EXIT,
+                    HWEvent::SHOW_BLANK_EVENT,
+                    HWEvent::THERMAL_LEVEL,
+                    HWEvent::IDLE_POWER_COLLAPSE,
+                    HWEvent::PINGPONG_TIMEOUT,
+                    HWEvent::PANEL_DEAD };
+  } else {
+    event_list_ = { HWEvent::VSYNC,
+                    HWEvent::EXIT,
+                    HWEvent::IDLE_NOTIFY,
+                    HWEvent::SHOW_BLANK_EVENT,
+                    HWEvent::THERMAL_LEVEL,
+                    HWEvent::PINGPONG_TIMEOUT,
+                    HWEvent::PANEL_DEAD };
+  }
+
   avr_prop_disabled_ = Debug::IsAVRDisabled();
 
   error = HWEventsInterface::Create(INT(display_type_), this, event_list_, hw_intf_,
@@ -283,9 +301,7 @@
 }
 
 void DisplayPrimary::IdleTimeout() {
-  if (hw_panel_info_.mode == kModeCommand) {
-    IdlePowerCollapse();
-  } else {
+  if (hw_panel_info_.mode == kModeVideo) {
     event_handler_->HandleEvent(kIdleTimeout);
     handle_idle_timeout_ = true;
     event_handler_->Refresh();
@@ -306,9 +322,11 @@
 }
 
 void DisplayPrimary::IdlePowerCollapse() {
-  event_handler_->HandleEvent(kIdlePowerCollapse);
-  lock_guard<recursive_mutex> obj(recursive_mutex_);
-  comp_manager_->ProcessIdlePowerCollapse(display_comp_ctx_);
+  if (hw_panel_info_.mode == kModeCommand) {
+    event_handler_->HandleEvent(kIdlePowerCollapse);
+    lock_guard<recursive_mutex> obj(recursive_mutex_);
+    comp_manager_->ProcessIdlePowerCollapse(display_comp_ctx_);
+  }
 }
 
 void DisplayPrimary::PanelDead() {
diff --git a/sdm/libs/core/display_primary.h b/sdm/libs/core/display_primary.h
index ac4160e..44ae2b4 100644
--- a/sdm/libs/core/display_primary.h
+++ b/sdm/libs/core/display_primary.h
@@ -68,13 +68,7 @@
   bool NeedsAVREnable();
   void ResetPanel();
 
-  std::vector<HWEvent> event_list_ = { HWEvent::VSYNC, HWEvent::EXIT,
-                                       HWEvent::IDLE_NOTIFY,
-                                       HWEvent::SHOW_BLANK_EVENT,
-                                       HWEvent::THERMAL_LEVEL,
-                                       HWEvent::IDLE_POWER_COLLAPSE,
-                                       HWEvent::PINGPONG_TIMEOUT,
-                                       HWEvent::PANEL_DEAD };
+  std::vector<HWEvent> event_list_;
   bool avr_prop_disabled_ = false;
   bool switch_to_cmd_ = false;
   bool handle_idle_timeout_ = false;
diff --git a/sdm/libs/core/drm/hw_color_manager_drm.cpp b/sdm/libs/core/drm/hw_color_manager_drm.cpp
index 95c25cd..7563647 100644
--- a/sdm/libs/core/drm/hw_color_manager_drm.cpp
+++ b/sdm/libs/core/drm/hw_color_manager_drm.cpp
@@ -861,7 +861,7 @@
       break;
     default:
       DLOGE("Invalid gamut mode %d", sde_gamut->mode);
-      free(mdp_gamut);
+      delete mdp_gamut;
       return kErrorParameters;
   }
 
diff --git a/sdm/libs/core/drm/hw_device_drm.cpp b/sdm/libs/core/drm/hw_device_drm.cpp
index 96ad8a3..c1e14ee 100644
--- a/sdm/libs/core/drm/hw_device_drm.cpp
+++ b/sdm/libs/core/drm/hw_device_drm.cpp
@@ -863,7 +863,7 @@
         }
 
         uint32_t config = 0;
-        SetSrcConfig(layer.input_buffer, &config);
+        SetSrcConfig(layer.input_buffer, hw_rotator_session->mode, &config);
         drm_atomic_intf_->Perform(DRMOps::PLANE_SET_SRC_CONFIG, pipe_id, config);;
         drm_atomic_intf_->Perform(DRMOps::PLANE_SET_FB_ID, pipe_id, fb_id);
         drm_atomic_intf_->Perform(DRMOps::PLANE_SET_CRTC, pipe_id, token_.crtc_id);
@@ -1132,9 +1132,13 @@
 }
 
 
-void HWDeviceDRM::SetSrcConfig(const LayerBuffer &input_buffer, uint32_t *config) {
-  if (input_buffer.flags.interlace) {
-    *config |= (0x01 << UINT32(DRMSrcConfig::DEINTERLACE));
+void HWDeviceDRM::SetSrcConfig(const LayerBuffer &input_buffer, const HWRotatorMode &mode,
+                               uint32_t *config) {
+  // In offline rotation case, rotator will handle deinterlacing.
+  if (mode != kRotatorOffline) {
+    if (input_buffer.flags.interlace) {
+      *config |= (0x01 << UINT32(DRMSrcConfig::DEINTERLACE));
+    }
   }
 }
 
diff --git a/sdm/libs/core/drm/hw_device_drm.h b/sdm/libs/core/drm/hw_device_drm.h
index e0b7fc1..e02d936 100644
--- a/sdm/libs/core/drm/hw_device_drm.h
+++ b/sdm/libs/core/drm/hw_device_drm.h
@@ -121,7 +121,7 @@
   void SetSolidfillStages();
   void AddSolidfillStage(const HWSolidfillStage &sf, uint32_t plane_alpha);
   void SetBlending(const LayerBlending &source, sde_drm::DRMBlendType *target);
-  void SetSrcConfig(const LayerBuffer &input_buffer, uint32_t *config);
+  void SetSrcConfig(const LayerBuffer &input_buffer, const HWRotatorMode &mode, uint32_t *config);
   void SelectCscType(const LayerBuffer &input_buffer, sde_drm::DRMCscType *type);
   void SetRect(const LayerRect &source, sde_drm::DRMRect *target);
   void SetRotation(LayerTransform transform, const HWRotatorMode &mode, uint32_t* rot_bit_mask);
diff --git a/sdm/libs/core/drm/hw_events_drm.cpp b/sdm/libs/core/drm/hw_events_drm.cpp
index a90d294..7a3d385 100644
--- a/sdm/libs/core/drm/hw_events_drm.cpp
+++ b/sdm/libs/core/drm/hw_events_drm.cpp
@@ -96,12 +96,15 @@
         poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;
         idle_notify_index_ = i;
       } break;
-      case HWEvent::CEC_READ_MESSAGE:
-      case HWEvent::SHOW_BLANK_EVENT:
-      case HWEvent::THERMAL_LEVEL:
-      case HWEvent::IDLE_POWER_COLLAPSE:
-      case HWEvent::PINGPONG_TIMEOUT:
-        break;
+      case HWEvent::IDLE_POWER_COLLAPSE: {
+        poll_fds_[i].fd = drmOpen("msm_drm", nullptr);
+        if (poll_fds_[i].fd < 0) {
+          DLOGE("drmOpen failed with error %d", poll_fds_[i].fd);
+          return kErrorResources;
+        }
+        poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;
+        idle_pc_index_ = i;
+      } break;
       case HWEvent::PANEL_DEAD: {
         poll_fds_[i].fd = drmOpen("msm_drm", nullptr);
         if (poll_fds_[i].fd < 0) {
@@ -111,6 +114,11 @@
         poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;
         panel_dead_index_ = i;
       } break;
+      case HWEvent::CEC_READ_MESSAGE:
+      case HWEvent::SHOW_BLANK_EVENT:
+      case HWEvent::THERMAL_LEVEL:
+      case HWEvent::PINGPONG_TIMEOUT:
+        break;
     }
   }
 
@@ -192,6 +200,7 @@
 
   RegisterPanelDead(true);
   RegisterIdleNotify(true);
+  RegisterIdlePowerCollapse(true);
 
   return kErrorNone;
 }
@@ -200,6 +209,7 @@
   exit_threads_ = true;
   RegisterPanelDead(false);
   RegisterIdleNotify(false);
+  RegisterIdlePowerCollapse(false);
   Sys::pthread_cancel_(event_thread_);
   WakeUpEventThread();
   pthread_join(event_thread_, NULL);
@@ -253,15 +263,15 @@
         poll_fds_[i].fd = -1;
         break;
       case HWEvent::IDLE_NOTIFY:
-      case HWEvent::CEC_READ_MESSAGE:
-      case HWEvent::SHOW_BLANK_EVENT:
-      case HWEvent::THERMAL_LEVEL:
       case HWEvent::IDLE_POWER_COLLAPSE:
-        break;
       case HWEvent::PANEL_DEAD:
         drmClose(poll_fds_[i].fd);
         poll_fds_[i].fd = -1;
         break;
+      case HWEvent::CEC_READ_MESSAGE:
+      case HWEvent::SHOW_BLANK_EVENT:
+      case HWEvent::THERMAL_LEVEL:
+        break;
       default:
         return kErrorNotSupported;
     }
@@ -306,6 +316,7 @@
         case HWEvent::VSYNC:
         case HWEvent::PANEL_DEAD:
         case HWEvent::IDLE_NOTIFY:
+        case HWEvent::IDLE_POWER_COLLAPSE:
           if (poll_fd.revents & (POLLIN | POLLPRI | POLLERR)) {
             (this->*(event_data_list_[i]).event_parser)(nullptr);
           }
@@ -319,7 +330,6 @@
         case HWEvent::CEC_READ_MESSAGE:
         case HWEvent::SHOW_BLANK_EVENT:
         case HWEvent::THERMAL_LEVEL:
-        case HWEvent::IDLE_POWER_COLLAPSE:
         case HWEvent::PINGPONG_TIMEOUT:
           if ((poll_fd.revents & POLLPRI) &&
               (Sys::pread_(poll_fd.fd, data, kMaxStringLength, 0) > 0)) {
@@ -418,6 +428,39 @@
   return kErrorNone;
 }
 
+DisplayError HWEventsDRM::RegisterIdlePowerCollapse(bool enable) {
+  uint32_t i = 0;
+  for (; i < event_data_list_.size(); i++) {
+    if (event_data_list_[i].event_type == HWEvent::IDLE_POWER_COLLAPSE) {
+      break;
+    }
+  }
+
+  if (i == event_data_list_.size()) {
+    DLOGI("idle power collapse is not supported event");
+    return kErrorNone;
+  }
+
+  struct drm_msm_event_req req = {};
+  int ret = 0;
+
+  req.object_id = token_.crtc_id;
+  req.object_type = DRM_MODE_OBJECT_CRTC;
+  req.event = DRM_EVENT_SDE_POWER;
+  if (enable) {
+    ret = drmIoctl(poll_fds_[idle_pc_index_].fd, DRM_IOCTL_MSM_REGISTER_EVENT, &req);
+  } else {
+    ret = drmIoctl(poll_fds_[idle_pc_index_].fd, DRM_IOCTL_MSM_DEREGISTER_EVENT, &req);
+  }
+
+  if (ret) {
+    DLOGE("register idle power collapse enable:%d failed", enable);
+    return kErrorResources;
+  }
+
+  return kErrorNone;
+}
+
 void HWEventsDRM::HandleVSync(char *data) {
   drmEventContext event = {};
   event.version = DRM_EVENT_CONTEXT_VERSION;
@@ -522,7 +565,48 @@
 }
 
 void HWEventsDRM::HandleIdlePowerCollapse(char *data) {
-  event_handler_->IdlePowerCollapse();
+  char event_data[kMaxStringLength];
+  int32_t size;
+  struct drm_msm_event_resp *event_resp = NULL;
+
+  size = (int32_t)Sys::pread_(poll_fds_[idle_pc_index_].fd, event_data, kMaxStringLength, 0);
+  if (size < 0) {
+    return;
+  }
+
+  if (size > kMaxStringLength) {
+    DLOGE("event size %d is greater than event buffer size %zd\n", size, kMaxStringLength);
+    return;
+  }
+
+  if (size < (int32_t)sizeof(*event_resp)) {
+    DLOGE("size %d exp %zd\n", size, sizeof(*event_resp));
+    return;
+  }
+
+  int32_t i = 0;
+
+  while (i < size) {
+    event_resp = (struct drm_msm_event_resp *)&event_data[i];
+    switch (event_resp->base.type) {
+      case DRM_EVENT_SDE_POWER:
+      {
+        uint32_t* event_payload = reinterpret_cast<uint32_t *>(event_resp->data);
+        if (*event_payload == 0) {
+          DLOGV("Received Idle power collapse event");
+          event_handler_->IdlePowerCollapse();
+        }
+        break;
+      }
+      default: {
+        DLOGE("invalid event %d", event_resp->base.type);
+        break;
+      }
+    }
+    i += event_resp->base.length;
+  }
+
+  return;
 }
 
 }  // namespace sdm
diff --git a/sdm/libs/core/drm/hw_events_drm.h b/sdm/libs/core/drm/hw_events_drm.h
index a7fb463..c54ac6f 100644
--- a/sdm/libs/core/drm/hw_events_drm.h
+++ b/sdm/libs/core/drm/hw_events_drm.h
@@ -84,6 +84,7 @@
   DisplayError RegisterVSync();
   DisplayError RegisterPanelDead(bool enable);
   DisplayError RegisterIdleNotify(bool enable);
+  DisplayError RegisterIdlePowerCollapse(bool enable);
 
   HWEventHandler *event_handler_{};
   vector<HWEventData> event_data_list_{};
@@ -97,6 +98,7 @@
   sde_drm::DRMDisplayToken token_ = {};
   bool is_primary_ = false;
   uint32_t panel_dead_index_ = 0;
+  uint32_t idle_pc_index_ = 0;
 };
 
 }  // namespace sdm
diff --git a/sdm/libs/core/drm/hw_info_drm.cpp b/sdm/libs/core/drm/hw_info_drm.cpp
index 88e4efa..55bc003 100644
--- a/sdm/libs/core/drm/hw_info_drm.cpp
+++ b/sdm/libs/core/drm/hw_info_drm.cpp
@@ -194,7 +194,11 @@
   hw_resource->has_hdr = true;
 
   hw_resource->hw_version = SDEVERSION(4, 0, 1);
-  hw_resource->hw_revision = 0;
+  // TODO(user): On FB driver hw_revision comprises of major version, minor version and hw_revision.
+  // On DRM driver, hw_revision is deprecated and hw_version comprises major version, minor version
+  // and hw_revision information. Since QDCM uses hw_revision variable populate hw_revision with
+  // hw_version. Remove hw_revision variable when FB code is deperecated.
+  hw_resource->hw_revision = SDEVERSION(4, 0, 1);
 
   // TODO(user): Deprecate
   hw_resource->max_mixer_width = 2560;
@@ -293,6 +297,11 @@
   hw_resource->max_bandwidth_high = info.max_bandwidth_high / kKiloUnit;
   hw_resource->max_sde_clk = info.max_sde_clk;
   hw_resource->hw_version = info.hw_version;
+  // TODO(user): On FB driver hw_revision comprises of major version, minor version and hw_revision.
+  // On DRM driver, hw_revision is deprecated and hw_version comprises major version, minor version
+  // and hw_revision information. Since QDCM uses hw_revision variable populate hw_revision with
+  // hw_version. Remove hw_revision variable when FB code is deperecated.
+  hw_resource->hw_revision = info.hw_version;
 
   std::vector<LayerBufferFormat> sdm_format;
   for (auto &it : info.comp_ratio_rt_map) {
diff --git a/sdm/libs/core/drm/hw_peripheral_drm.cpp b/sdm/libs/core/drm/hw_peripheral_drm.cpp
index 667cd88..e78c862 100644
--- a/sdm/libs/core/drm/hw_peripheral_drm.cpp
+++ b/sdm/libs/core/drm/hw_peripheral_drm.cpp
@@ -60,6 +60,9 @@
   drm_mgr_intf_->GetConnectorInfo(token_.conn_id, &connector_info_);
   if (connector_info_.topology == DRMTopology::UNKNOWN) {
     connector_info_.topology = DRMTopology::DUAL_LM;
+    if (connector_info_.modes[current_mode_index_].hdisplay <= 1080) {
+      connector_info_.topology = DRMTopology::SINGLE_LM;
+    }
   }
 
   InitializeConfigs();
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index eb0d17b..cac1454 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -813,9 +813,11 @@
     const uint32_t max_count = 10;
     char *tokens[max_count] = { NULL };
     if (!ParseLine(line.c_str(), "=\n", tokens, max_count, &token_count)) {
-      if (!strncmp(tokens[0], "panel_name", strlen("panel_name"))) {
-        snprintf(panel_info->panel_name, sizeof(panel_info->panel_name), "%s", tokens[1]);
-        break;
+      if (tokens[0] != NULL) {
+        if (!strncmp(tokens[0], "panel_name", strlen("panel_name"))) {
+           snprintf(panel_info->panel_name, sizeof(panel_info->panel_name), "%s", tokens[1]);
+           break;
+        }
       }
     }
   }
diff --git a/sdm/libs/core/fb/hw_info.cpp b/sdm/libs/core/fb/hw_info.cpp
index f2a13e3..2cdae06 100644
--- a/sdm/libs/core/fb/hw_info.cpp
+++ b/sdm/libs/core/fb/hw_info.cpp
@@ -411,10 +411,12 @@
          string caps;
          while (Sys::getline_(caps_fs, caps)) {
            if (!ParseString(caps.c_str(), tokens, max_count, ":, =\n", &token_count)) {
-             if (!strncmp(tokens[0], "downscale_compression", strlen("downscale_compression"))) {
-               hw_resource->hw_rot_info.downscale_compression = UINT8(atoi(tokens[1]));
-             } else if (!strncmp(tokens[0], "min_downscale", strlen("min_downscale"))) {
-               hw_resource->hw_rot_info.min_downscale = FLOAT(atof(tokens[1]));
+             if (tokens[0] != NULL) {
+               if (!strncmp(tokens[0], "downscale_compression", strlen("downscale_compression"))) {
+                 hw_resource->hw_rot_info.downscale_compression = UINT8(atoi(tokens[1]));
+               } else if (!strncmp(tokens[0], "min_downscale", strlen("min_downscale"))) {
+                 hw_resource->hw_rot_info.min_downscale = FLOAT(atof(tokens[1]));
+               }
              }
            }
          }
diff --git a/sdm/libs/core/strategy.cpp b/sdm/libs/core/strategy.cpp
index 85c648e..d682070 100644
--- a/sdm/libs/core/strategy.cpp
+++ b/sdm/libs/core/strategy.cpp
@@ -144,9 +144,9 @@
   LayerRect dst_domain = (LayerRect){0.0f, 0.0f, layer_mixer_width, layer_mixer_height};
 
   Layer layer = *gpu_target_layer;
-  hw_layers_info_->index[0] = hw_layers_info_->gpu_target_index;
+  hw_layers_info_->index.push_back(hw_layers_info_->gpu_target_index);
+  hw_layers_info_->roi_index.push_back(0);
   MapRect(src_domain, dst_domain, layer.dst_rect, &layer.dst_rect);
-  hw_layers_info_->hw_layers.clear();
   hw_layers_info_->hw_layers.push_back(layer);
 
   return kErrorNone;
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index 0c305be..2255c45 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -732,11 +732,13 @@
 HWC2::Error HWCDisplay::GetClientTargetSupport(uint32_t width, uint32_t height, int32_t format,
                                                int32_t dataspace) {
   ColorMetaData color_metadata = {};
-  LayerBufferFormat sdm_format = GetSDMFormat(format, 0);
-  GetColorPrimary(dataspace, &(color_metadata.colorPrimaries));
-  GetTransfer(dataspace, &(color_metadata.transfer));
-  GetRange(dataspace, &(color_metadata.range));
+  if (dataspace != HAL_DATASPACE_UNKNOWN) {
+    GetColorPrimary(dataspace, &(color_metadata.colorPrimaries));
+    GetTransfer(dataspace, &(color_metadata.transfer));
+    GetRange(dataspace, &(color_metadata.range));
+  }
 
+  LayerBufferFormat sdm_format = GetSDMFormat(format, 0);
   if (display_intf_->GetClientTargetSupport(width, height, sdm_format,
                                             color_metadata) != kErrorNone) {
     return HWC2::Error::Unsupported;
diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index 624105b..e0ac992 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -271,6 +271,8 @@
 
     int status = hwc_session->Init();
     if (status != 0) {
+      delete hwc_session;
+      hwc_session = NULL;
       return status;
     }
 
