diff --git a/libdrmutils/drm_logger.h b/libdrmutils/drm_logger.h
index d0b0773..8e8bb72 100644
--- a/libdrmutils/drm_logger.h
+++ b/libdrmutils/drm_logger.h
@@ -41,6 +41,7 @@
   virtual void Warning(const char *format, ...) = 0;
   virtual void Info(const char *format, ...) = 0;
   virtual void Debug(const char *format, ...) = 0;
+  virtual void Verbose(const char *format, ...) = 0;
 
   static void Set(DRMLogger *logger) { s_instance = logger; }
   static DRMLogger *Get() { return s_instance; }
@@ -60,9 +61,8 @@
 #define DRM_LOGE(format, ...) DRM_LOG_CONTEXT(Error, format, ##__VA_ARGS__)
 #define DRM_LOGW(format, ...) DRM_LOG_CONTEXT(Warning, format, ##__VA_ARGS__)
 #define DRM_LOGI(format, ...) DRM_LOG_CONTEXT(Info, format, ##__VA_ARGS__)
-#define DRM_LOGD_IF(pred, format, ...) \
-  if (pred)                            \
-  DRM_LOG_CONTEXT(Debug, format, ##__VA_ARGS__)
+#define DRM_LOGD(format, ...) DRM_LOG_CONTEXT(Debug, format, ##__VA_ARGS__)
+#define DRM_LOGV(format, ...) DRM_LOG_CONTEXT(Verbose, format, ##__VA_ARGS__)
 
 }  // namespace drm_utils
 
diff --git a/libqservice/IQService.h b/libqservice/IQService.h
index 610cd4e..5765b10 100644
--- a/libqservice/IQService.h
+++ b/libqservice/IQService.h
@@ -95,6 +95,10 @@
         DEBUG_ROTATOR,
         DEBUG_QDCM,
         DEBUG_SCALAR,
+        DEBUG_CLIENT,
+        DEBUG_DISPLAY,
+        DEBUG_MAX_VAL = DEBUG_DISPLAY, // Used to check each bit of the debug command paramater.
+        // Update DEBUG_MAX_VAL when adding new debug tag.
     };
 
     enum {
diff --git a/sdm/include/core/debug_interface.h b/sdm/include/core/debug_interface.h
index da21944..dba85ac 100644
--- a/sdm/include/core/debug_interface.h
+++ b/sdm/include/core/debug_interface.h
@@ -49,7 +49,9 @@
   kTagRotator,          //!< Debug log is tagged for rotator.
   kTagScalar,           //!< Debug log is tagged for Scalar Helper.
   kTagQDCM,             //!< Debug log is tagged for display QDCM color managing.
-  kTagQOSClient,        //!< Debug log is tagged for Qos client
+  kTagQOSClient,        //!< Debug log is tagged for Qos client.
+  kTagDisplay,          //!< Debug log is tagged for display core logs.
+  kTagClient,           //!< Debug log is tagged for SDM client.
 };
 
 /*! @brief Display debug handler class.
diff --git a/sdm/include/utils/rect.h b/sdm/include/utils/rect.h
index 303fc9f..b25f76e 100644
--- a/sdm/include/utils/rect.h
+++ b/sdm/include/utils/rect.h
@@ -45,6 +45,7 @@
 
   bool IsValid(const LayerRect &rect);
   bool IsCongruent(const LayerRect &rect1, const LayerRect &rect2);
+  void LogI(DebugTag debug_tag, const char *prefix, const LayerRect &roi);
   void Log(DebugTag debug_tag, const char *prefix, const LayerRect &roi);
   void Normalize(const uint32_t &align_x, const uint32_t &align_y, LayerRect *rect);
   LayerRect Union(const LayerRect &rect1, const LayerRect &rect2);
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 1e948a2..f04c826 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -155,7 +155,7 @@
     hw_layers_info.app_layer_count++;
   }
 
-  DLOGV_IF(kTagNone, "LayerStack layer_count: %d, app_layer_count: %d, gpu_target_index: %d, "
+  DLOGD_IF(kTagNone, "LayerStack layer_count: %d, app_layer_count: %d, gpu_target_index: %d, "
            "display type: %d", layers.size(), hw_layers_info.app_layer_count,
            hw_layers_info.gpu_target_index, display_type_);
 
@@ -223,6 +223,7 @@
     return kErrorParameters;
   }
 
+  DLOGI_IF(kTagDisplay, "Entering Prepare for display type : %d", display_type_);
   error = BuildLayerStackStats(layer_stack);
   if (error != kErrorNone) {
     return error;
@@ -275,6 +276,7 @@
     DLOGW("ValidateHDR failed");
   }
 
+  DLOGI_IF(kTagDisplay, "Exiting Prepare for display type : %d", display_type_);
   return error;
 }
 
@@ -309,6 +311,7 @@
     }
   }
 
+  DLOGI_IF(kTagDisplay, "Entering commit for display type : %d", display_type_);
   CommitLayerParams(layer_stack);
 
   error = comp_manager_->Commit(display_comp_ctx_, &hw_layers_);
@@ -340,6 +343,7 @@
     return error;
   }
 
+  DLOGI_IF(kTagDisplay, "Exiting commit for display type : %d", display_type_);
   return kErrorNone;
 }
 
@@ -1117,6 +1121,7 @@
     return kErrorParameters;
   }
 
+  DLOGD_IF(kTagQDCM, "Reconfiguring mixer with width : %d, height : %d", width, height);
   HWMixerAttributes mixer_attributes;
   mixer_attributes.width = width;
   mixer_attributes.height = height;
@@ -1169,9 +1174,10 @@
   uint32_t align_y = 2;
 
   if (req_mixer_width_ && req_mixer_height_) {
+    DLOGD_IF(kTagDisplay, "Required mixer width : %d, height : %d",
+             req_mixer_width_, req_mixer_height_);
     *new_mixer_width = req_mixer_width_;
     *new_mixer_height = req_mixer_height_;
-
     return (req_mixer_width_ != mixer_width || req_mixer_height_ != mixer_height);
   }
 
@@ -1187,6 +1193,7 @@
       max_area_layer_index = i;
     }
   }
+  DLOGV_IF(kTagDisplay, "Max area layer at index : %d", max_area_layer_index);
 
   // TODO(user): Mark layer which needs downscaling on GPU fallback as priority layer and use MDP
   // for composition to avoid quality mismatch between GPU and MDP switch(idle timeout usecase).
diff --git a/sdm/libs/core/drm/hw_info_drm.cpp b/sdm/libs/core/drm/hw_info_drm.cpp
index 55bc003..9070ca3 100644
--- a/sdm/libs/core/drm/hw_info_drm.cpp
+++ b/sdm/libs/core/drm/hw_info_drm.cpp
@@ -85,17 +85,18 @@
 
 class DRMLoggerImpl : public DRMLogger {
  public:
-#define PRINTLOG(method, format, buf)        \
+#define PRINTLOG(tag, method, format, buf)        \
   va_list list;                              \
   va_start(list, format);                    \
   vsnprintf(buf, sizeof(buf), format, list); \
   va_end(list);                              \
-  Debug::Get()->method(kTagNone, "%s", buf);
+  Debug::Get()->method(tag, "%s", buf);
 
-  void Error(const char *format, ...) { PRINTLOG(Error, format, buf_); }
-  void Warning(const char *format, ...) { PRINTLOG(Warning, format, buf_); }
-  void Info(const char *format, ...) { PRINTLOG(Info, format, buf_); }
-  void Debug(const char *format, ...) { PRINTLOG(Debug, format, buf_); }
+  void Error(const char *format, ...) { PRINTLOG(kTagNone, Error, format, buf_); }
+  void Warning(const char *format, ...) { PRINTLOG(kTagDriverConfig, Warning, format, buf_); }
+  void Info(const char *format, ...) { PRINTLOG(kTagDriverConfig, Info, format, buf_); }
+  void Debug(const char *format, ...) { PRINTLOG(kTagDriverConfig, Debug, format, buf_); }
+  void Verbose(const char *format, ...) { PRINTLOG(kTagDriverConfig, Verbose, format, buf_); }
 
  private:
   char buf_[1024] = {};
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index cac1454..38e57d8 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -190,9 +190,9 @@
   HWLayersInfo &hw_layer_info = hw_layers->info;
   uint32_t hw_layer_count = UINT32(hw_layer_info.hw_layers.size());
 
-  DLOGV_IF(kTagDriverConfig, "************************** %s Validate Input ***********************",
+  DLOGD_IF(kTagDriverConfig, "************************** %s Validate Input ***********************",
            device_name_);
-  DLOGV_IF(kTagDriverConfig, "SDE layer count is %d", hw_layer_count);
+  DLOGD_IF(kTagDriverConfig, "SDE layer count is %d", hw_layer_count);
 
   mdp_layer_commit_v1 &mdp_commit = mdp_disp_commit_.commit_v1;
   uint32_t &mdp_layer_count = mdp_commit.input_layer_cnt;
@@ -267,11 +267,11 @@
 
         mdp_layer_count++;
 
-        DLOGV_IF(kTagDriverConfig, "******************* Layer[%d] %s pipe Input ******************",
+        DLOGD_IF(kTagDriverConfig, "******************* Layer[%d] %s pipe Input ******************",
                  i, count ? "Right" : "Left");
-        DLOGV_IF(kTagDriverConfig, "in_w %d, in_h %d, in_f %d", mdp_buffer.width, mdp_buffer.height,
+        DLOGD_IF(kTagDriverConfig, "in_w %d, in_h %d, in_f %d", mdp_buffer.width, mdp_buffer.height,
                  mdp_buffer.format);
-        DLOGV_IF(kTagDriverConfig, "plane_alpha %d, zorder %d, blending %d, horz_deci %d, "
+        DLOGD_IF(kTagDriverConfig, "plane_alpha %d, zorder %d, blending %d, horz_deci %d, "
                  "vert_deci %d, pipe_id = 0x%x, mdp_flags 0x%x", mdp_layer.alpha, mdp_layer.z_order,
                  mdp_layer.blend_op, mdp_layer.horz_deci, mdp_layer.vert_deci, mdp_layer.pipe_ndx,
                  mdp_layer.flags);
@@ -280,7 +280,7 @@
         DLOGV_IF(kTagDriverConfig, "dst_rect [%d, %d, %d, %d]", mdp_layer.dst_rect.x,
                  mdp_layer.dst_rect.y, mdp_layer.dst_rect.w, mdp_layer.dst_rect.h);
         hw_scale_->DumpScaleData(mdp_layer.scale);
-        DLOGV_IF(kTagDriverConfig, "*************************************************************");
+        DLOGD_IF(kTagDriverConfig, "*************************************************************");
       }
     }
   }
@@ -338,16 +338,16 @@
 
     index++;
 
-    DLOGV_IF(kTagDriverConfig, "************************ DestScalar[%d] **************************",
+    DLOGD_IF(kTagDriverConfig, "************************ DestScalar[%d] **************************",
              dest_scalar_data->dest_scaler_ndx);
-    DLOGV_IF(kTagDriverConfig, "Mixer WxH %dx%d flags %x", dest_scalar_data->lm_width,
+    DLOGD_IF(kTagDriverConfig, "Mixer WxH %dx%d flags %x", dest_scalar_data->lm_width,
              dest_scalar_data->lm_height, dest_scalar_data->flags);
 #ifdef MDP_DESTSCALER_ROI_ENABLE
-    DLOGV_IF(kTagDriverConfig, "Panel ROI [%d, %d, %d, %d]", dest_scalar_data->panel_roi.x,
+    DLOGD_IF(kTagDriverConfig, "Panel ROI [%d, %d, %d, %d]", dest_scalar_data->panel_roi.x,
              dest_scalar_data->panel_roi.y, dest_scalar_data->panel_roi.w,
              dest_scalar_data->panel_roi.h);
 #endif
-    DLOGV_IF(kTagDriverConfig, "*****************************************************************");
+    DLOGD_IF(kTagDriverConfig, "*****************************************************************");
   }
   mdp_commit.dest_scaler_cnt = UINT32(hw_layer_info.dest_scale_info_map.size());
 
@@ -411,9 +411,9 @@
   HWLayersInfo &hw_layer_info = hw_layers->info;
   uint32_t hw_layer_count = UINT32(hw_layer_info.hw_layers.size());
 
-  DLOGV_IF(kTagDriverConfig, "*************************** %s Commit Input ************************",
+  DLOGD_IF(kTagDriverConfig, "*************************** %s Commit Input ************************",
            device_name_);
-  DLOGV_IF(kTagDriverConfig, "SDE layer count is %d", hw_layer_count);
+  DLOGD_IF(kTagDriverConfig, "SDE layer count is %d", hw_layer_count);
 
   mdp_layer_commit_v1 &mdp_commit = mdp_disp_commit_.commit_v1;
   uint32_t mdp_layer_index = 0;
@@ -449,16 +449,16 @@
         mdp_buffer.fence = input_buffer->acquire_fence_fd;
         mdp_layer_index++;
 
-        DLOGV_IF(kTagDriverConfig, "****************** Layer[%d] %s pipe Input *******************",
+        DLOGD_IF(kTagDriverConfig, "****************** Layer[%d] %s pipe Input *******************",
                  i, count ? "Right" : "Left");
-        DLOGI_IF(kTagDriverConfig, "in_w %d, in_h %d, in_f %d, horz_deci %d, vert_deci %d",
+        DLOGD_IF(kTagDriverConfig, "in_w %d, in_h %d, in_f %d, horz_deci %d, vert_deci %d",
                  mdp_buffer.width, mdp_buffer.height, mdp_buffer.format, mdp_layer.horz_deci,
                  mdp_layer.vert_deci);
-        DLOGI_IF(kTagDriverConfig, "in_buf_fd %d, in_buf_offset %d, in_buf_stride %d, " \
+        DLOGV_IF(kTagDriverConfig, "in_buf_fd %d, in_buf_offset %d, in_buf_stride %d, " \
                  "in_plane_count %d, in_fence %d, layer count %d", mdp_buffer.planes[0].fd,
                  mdp_buffer.planes[0].offset, mdp_buffer.planes[0].stride, mdp_buffer.plane_count,
                  mdp_buffer.fence, mdp_commit.input_layer_cnt);
-        DLOGV_IF(kTagDriverConfig, "*************************************************************");
+        DLOGD_IF(kTagDriverConfig, "*************************************************************");
       }
     }
   }
diff --git a/sdm/libs/core/fb/hw_hdmi.cpp b/sdm/libs/core/fb/hw_hdmi.cpp
index e1d7ba1..e339908 100644
--- a/sdm/libs/core/fb/hw_hdmi.cpp
+++ b/sdm/libs/core/fb/hw_hdmi.cpp
@@ -1059,7 +1059,7 @@
                            (bits_per_component  < 0) ? 0 : UINT32(bits_per_component);
     hdr_ctrl.hdr_stream.content_type = GetContentType(hdr_layer.input_buffer);
 
-    DLOGV_IF(kTagDriverConfig, "kSet: HDR Stream : MaxDisplayLuminance = %d\n"
+    DLOGD_IF(kTagDriverConfig, "kSet: HDR Stream : MaxDisplayLuminance = %d\n"
       "MinDisplayLuminance = %d MaxContentLightLevel = %d MaxAverageLightLevel = %d\n"
       "Red_x = %d Red_y = %d Green_x = %d Green_y = %d Blue_x = %d Blue_y = %d\n"
       "WhitePoint_x = %d WhitePoint_y = %d EOTF = %d PixelEncoding = %d Colorimetry = %d\n"
@@ -1083,7 +1083,7 @@
     cdm_color_space_ = (mdp_color_space) MDP_CSC_DEFAULT;
     cdm_color_space_commit_ = true;
 #endif
-    DLOGV_IF(kTagDriverConfig, "kReset: HDR Stream: HDR_RESET");
+    DLOGD_IF(kTagDriverConfig, "kReset: HDR Stream: HDR_RESET");
   } else if (hdr_layer_info.operation == HWHDRLayerInfo::kNoOp) {
      if (reset_hdr_flag_) {
        hdr_reset_end_ = time(NULL);
@@ -1092,7 +1092,7 @@
           reset_hdr_flag_ = false;
           memset(&hdr_ctrl.hdr_stream, 0, sizeof(hdr_ctrl.hdr_stream));
           hdr_ctrl.hdr_state = HDR_DISABLE;
-          DLOGV_IF(kTagDriverConfig, "kNoOp: HDR Stream: HDR_DISABLE");
+          DLOGD_IF(kTagDriverConfig, "kNoOp: HDR Stream: HDR_DISABLE");
        } else {
           return kErrorNone;
        }
diff --git a/sdm/libs/core/fb/hw_scale.cpp b/sdm/libs/core/fb/hw_scale.cpp
index e44af5d..0258570 100644
--- a/sdm/libs/core/fb/hw_scale.cpp
+++ b/sdm/libs/core/fb/hw_scale.cpp
@@ -104,7 +104,7 @@
 
   mdp_scale_data *scale = reinterpret_cast<mdp_scale_data *>(mdp_scale);
   if (scale->enable_pxl_ext) {
-    DLOGV_IF(kTagDriverConfig, "Scale Enable = %d", scale->enable_pxl_ext);
+    DLOGD_IF(kTagDriverConfig, "Scale Enable = %d", scale->enable_pxl_ext);
     for (int j = 0; j < MAX_PLANES; j++) {
       DLOGV_IF(kTagDriverConfig, "Scale Data[%d] : Phase=[%x %x %x %x] Pixel_Ext=[%d %d %d %d]",
                j, scale->init_phase_x[j], scale->phase_step_x[j], scale->init_phase_y[j],
@@ -273,7 +273,7 @@
 
   mdp_scale_data_v2 *scale = reinterpret_cast<mdp_scale_data_v2 *>(mdp_scale);
   if (scale->enable) {
-    DLOGV_IF(kTagDriverConfig, "Scale Enable = %d", scale->enable);
+    DLOGD_IF(kTagDriverConfig, "Scale Enable = %d", scale->enable);
     for (int j = 0; j < MAX_PLANES; j++) {
       DLOGV_IF(kTagDriverConfig, "Scale Data[%d]: Phase_init[x y]=[%x %x] Phase_step:[x y]=[%x %x]",
         j, scale->init_phase_x[j], scale->init_phase_y[j], scale->phase_step_x[j],
@@ -287,7 +287,7 @@
         scale->src_width[j], scale->src_height[j], scale->roi_w[j]);
     }
 
-    DLOGV_IF(kTagDriverConfig, "LUT flags = %d", scale->lut_flag);
+    DLOGD_IF(kTagDriverConfig, "LUT flags = %d", scale->lut_flag);
     DLOGV_IF(kTagDriverConfig, "y_rgb_filter=%d, uv_filter=%d, alpha_filter=%d, blend_cfg=%d",
       scale->y_rgb_filter_cfg, scale->uv_filter_cfg, scale->alpha_filter_cfg, scale->blend_cfg);
     DLOGV_IF(kTagDriverConfig, "dir_lut=%d, y_rgb_cir=%d, uv_cir=%d, y_rgb_sep=%d, uv_sep=%d",
diff --git a/sdm/libs/hwc2/hwc_debugger.cpp b/sdm/libs/hwc2/hwc_debugger.cpp
index ffbb5c5..8b51799 100644
--- a/sdm/libs/hwc2/hwc_debugger.cpp
+++ b/sdm/libs/hwc2/hwc_debugger.cpp
@@ -41,6 +41,10 @@
 void HWCDebugHandler::DebugAll(bool enable, int verbose_level) {
   if (enable) {
     debug_flags_ = 0x7FFFFFFF;
+    if (verbose_level) {
+      // Enable verbose scalar logs only when explicitely enabled
+      debug_flags_[kTagScalar] = 0;
+    }
     verbose_level_ = verbose_level;
   } else {
     debug_flags_ = 0x1;   // kTagNone should always be printed.
@@ -118,6 +122,26 @@
   }
 }
 
+void HWCDebugHandler::DebugClient(bool enable, int verbose_level) {
+  if (enable) {
+    debug_flags_[kTagClient] = 1;
+    verbose_level_ = verbose_level;
+  } else {
+    debug_flags_[kTagClient] = 0;
+    verbose_level_ = 0;
+  }
+}
+
+void HWCDebugHandler::DebugDisplay(bool enable, int verbose_level) {
+  if (enable) {
+    debug_flags_[kTagDisplay] = 1;
+    verbose_level_ = verbose_level;
+  } else {
+    debug_flags_[kTagDisplay] = 0;
+    verbose_level_ = 0;
+  }
+}
+
 void HWCDebugHandler::Error(DebugTag tag, const char *format, ...) {
   if (debug_flags_[tag]) {
     va_list list;
diff --git a/sdm/libs/hwc2/hwc_debugger.h b/sdm/libs/hwc2/hwc_debugger.h
index 82ff2f2..04cbfa7 100644
--- a/sdm/libs/hwc2/hwc_debugger.h
+++ b/sdm/libs/hwc2/hwc_debugger.h
@@ -53,6 +53,8 @@
   static void DebugRotator(bool enable, int verbose_level);
   static void DebugScalar(bool enable, int verbose_level);
   static void DebugQdcm(bool enable, int verbose_level);
+  static void DebugClient(bool enable, int verbose_level);
+  static void DebugDisplay(bool enable, int verbose_level);
   static int  GetIdleTimeoutMs();
 
   virtual void Error(DebugTag tag, const char *format, ...);
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index a89147c..51b485e 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -119,6 +119,7 @@
     DLOGE("failed for mode = %d", mode);
   }
 
+  DLOGV_IF(kTagClient, "Color mode %d successfully set.", mode);
   return status;
 }
 
@@ -126,6 +127,7 @@
   DLOGI("Applying mode: %d", color_mode_id);
   DisplayError error = display_intf_->SetColorModeById(color_mode_id);
   if (error != kErrorNone) {
+    DLOGI_IF(kTagClient, "Failed to apply mode: %d", color_mode_id);
     return HWC2::Error::BadParameter;
   }
   return HWC2::Error::None;
@@ -202,14 +204,14 @@
     return;
   }
 
-  DLOGV_IF(kTagQDCM, "Color Modes supported count = %d", color_mode_count);
+  DLOGV_IF(kTagClient, "Color Modes supported count = %d", color_mode_count);
 
   const std::string color_transform = "identity";
   std::vector<std::string> color_modes(color_mode_count);
   error = display_intf_->GetColorModes(&color_mode_count, &color_modes);
   for (uint32_t i = 0; i < color_mode_count; i++) {
     std::string &mode_string = color_modes.at(i);
-    DLOGV_IF(kTagQDCM, "Color Mode[%d] = %s", i, mode_string.c_str());
+    DLOGV_IF(kTagClient, "Color Mode[%d] = %s", i, mode_string.c_str());
     AttrVal attr;
     error = display_intf_->GetColorModeAttr(mode_string, &attr);
     std::string color_gamut, dynamic_range, pic_quality;
@@ -223,6 +225,10 @@
           pic_quality = it.second;
         }
       }
+
+      DLOGV_IF(kTagClient, "color_gamut : %s, dynamic_range : %s, pic_quality : %s",
+               color_gamut.c_str(), dynamic_range.c_str(), pic_quality.c_str());
+
       if (dynamic_range == kHdr) {
         continue;
       }
@@ -1195,7 +1201,7 @@
   }
 
   if (!validated_) {
-    DLOGV_IF(kTagCompManager, "Display %d is not validated", id_);
+    DLOGV_IF(kTagClient, "Display %d is not validated", id_);
     return HWC2::Error::NotValidated;
   }
 
@@ -1780,6 +1786,7 @@
   // ClientComposition - GPU comp, to acheive this, set skip flag so that
   // SDM does not handle this layer and hwc_layer composition will be
   // set correctly at the end of Prepare.
+  DLOGV_IF(kTagClient, "HWC Layers marked for GPU comp");
   for (auto hwc_layer : layer_set_) {
     Layer *layer = hwc_layer->GetSDMLayer();
     layer->flags.skip = true;
@@ -2027,25 +2034,32 @@
 
 bool HWCDisplay::CanSkipValidate() {
   if (solid_fill_enable_) {
+    DLOGV_IF(kTagClient, "Solid fill is enabled. Returning false.");
     return false;
   }
 
   // Layer Stack checks
   if (layer_stack_.flags.hdr_present && (tone_mapper_ && tone_mapper_->IsActive())) {
+    DLOGV_IF(kTagClient, "HDR content present with tone mapping enabled. Returning false.");
     return false;
   }
 
   if (client_target_->NeedsValidation()) {
+    DLOGV_IF(kTagClient, "Framebuffer target needs validation. Returning false.");
     return false;
   }
 
   for (auto hwc_layer : layer_set_) {
     if (hwc_layer->NeedsValidation()) {
+      DLOGV_IF(kTagClient, "hwc_layer[%d] needs validation. Returning false.",
+               hwc_layer->GetId());
       return false;
     }
 
     // Do not allow Skip Validate, if any layer needs GPU Composition.
     if (hwc_layer->GetDeviceSelectedCompositionType() == HWC2::Composition::Client) {
+      DLOGV_IF(kTagClient, "hwc_layer[%d] is GPU composed. Returning false.",
+               hwc_layer->GetId());
       return false;
     }
   }
diff --git a/sdm/libs/hwc2/hwc_layers.cpp b/sdm/libs/hwc2/hwc_layers.cpp
index 2466413..bf660b5 100644
--- a/sdm/libs/hwc2/hwc_layers.cpp
+++ b/sdm/libs/hwc2/hwc_layers.cpp
@@ -92,7 +92,7 @@
       *color_primary = ColorPrimaries_BT2020;
       break;
     default:
-      DLOGV_IF(kTagStrategy, "Unsupported Standard Request = %d", standard);
+      DLOGV_IF(kTagClient, "Unsupported Standard Request = %d", standard);
       supported_csc = false;
   }
   return supported_csc;
@@ -121,7 +121,7 @@
       *gamma_transfer = Transfer_Gamma2_2;
       break;
     default:
-      DLOGV_IF(kTagStrategy, "Unsupported Transfer Request = %d", transfer);
+      DLOGV_IF(kTagClient, "Unsupported Transfer Request = %d", transfer);
       supported_transfer = false;
   }
   return supported_transfer;
@@ -137,7 +137,7 @@
       *color_range = Range_Limited;
       break;
     default:
-      DLOGV_IF(kTagStrategy, "Unsupported Range Request = %d", range);
+      DLOGV_IF(kTagClient, "Unsupported Range Request = %d", range);
       break;
   }
 }
@@ -320,7 +320,7 @@
   }
   layer_->solid_fill_color = GetUint32Color(color);
   layer_->input_buffer.format = kFormatARGB8888;
-  DLOGV_IF(kTagCompManager, "[%" PRIu64 "][%" PRIu64 "] Layer color set to %x", display_id_, id_,
+  DLOGV_IF(kTagClient, "[%" PRIu64 "][%" PRIu64 "] Layer color set to %x", display_id_, id_,
            layer_->solid_fill_color);
   return HWC2::Error::None;
 }
@@ -375,7 +375,7 @@
         break;
       default:
         // unknown legacy dataspace
-        DLOGW_IF(kTagQDCM, "Unsupported dataspace type %d", dataspace);
+        DLOGW_IF(kTagClient, "Unsupported dataspace type %d", dataspace);
     }
   }
 
@@ -731,6 +731,10 @@
   if (getMetaData(handle, GET_PP_PARAM_INTERLACED, &interlaced) == 0) {
     interlace = interlaced ? true : false;
   }
+  if (interlace != layer_buffer->flags.interlace) {
+    DLOGI("Layer buffer interlaced metadata has changed. old=%d, new=%d",
+          layer_buffer->flags.interlace, interlace);
+  }
 
   uint32_t linear_format = 0;
   if (getMetaData(handle, GET_LINEAR_FORMAT, &linear_format) == 0) {
diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index a7f210a..cd51405 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -155,7 +155,7 @@
     iqservice->connect(android::sp<qClient::IQClient>(this));
     qservice_ = reinterpret_cast<qService::QService *>(iqservice.get());
   } else {
-    DLOGE("Failed to acquire %s", qservice_name);
+    ALOGE("%s::%s: Failed to acquire %s", __CLASS__, __FUNCTION__, qservice_name);
     return -EINVAL;
   }
 
@@ -163,7 +163,8 @@
 
   DisplayError error = buffer_allocator_.Init();
   if (error != kErrorNone) {
-    DLOGE("Buffer allocaor initialization failed. Error = %d", error);
+    ALOGE("%s::%s: Buffer allocaor initialization failed. Error = %d",
+          __CLASS__, __FUNCTION__, error);
     return -EINVAL;
   }
 
@@ -173,7 +174,7 @@
                                     &buffer_sync_handler_, &socket_handler_, &core_intf_);
   if (error != kErrorNone) {
     buffer_allocator_.Deinit();
-    DLOGE("Display core initialization failed. Error = %d", error);
+    ALOGE("%s::%s: Display core initialization failed. Error = %d", __CLASS__, __FUNCTION__, error);
     return -EINVAL;
   }
 
@@ -250,7 +251,7 @@
 
   DisplayError error = CoreInterface::DestroyCore();
   if (error != kErrorNone) {
-    DLOGE("Display core de-initialization failed. Error = %d", error);
+    ALOGE("Display core de-initialization failed. Error = %d", error);
   }
 
   return 0;
@@ -258,7 +259,7 @@
 
 int HWCSession::Open(const hw_module_t *module, const char *name, hw_device_t **device) {
   if (!module || !name || !device) {
-    DLOGE("Invalid parameters.");
+    ALOGE("%s::%s: Invalid parameters.", __CLASS__, __FUNCTION__);
     return -EINVAL;
   }
 
@@ -1474,6 +1475,14 @@
       HWCDebugHandler::DebugScalar(enable, verbose_level);
       break;
 
+    case qService::IQService::DEBUG_CLIENT:
+      HWCDebugHandler::DebugClient(enable, verbose_level);
+      break;
+
+    case qService::IQService::DEBUG_DISPLAY:
+      HWCDebugHandler::DebugDisplay(enable, verbose_level);
+      break;
+
     default:
       DLOGW("type = %d is not supported", type);
   }
diff --git a/sdm/libs/hwc2/hwc_session_services.cpp b/sdm/libs/hwc2/hwc_session_services.cpp
index f4241e0..f19c85b 100644
--- a/sdm/libs/hwc2/hwc_session_services.cpp
+++ b/sdm/libs/hwc2/hwc_session_services.cpp
@@ -44,9 +44,10 @@
 void HWCSession::StartServices() {
   status_t status = IDisplayConfig::registerAsService();
   if (status != OK) {
-    DLOGW("Could not register IDisplayConfig as service (%d).", status);
+    ALOGW("%s::%s: Could not register IDisplayConfig as service (%d).",
+          __CLASS__, __FUNCTION__, status);
   } else {
-    DLOGI("IDisplayConfig service registration completed.");
+    ALOGI("%s::%s: IDisplayConfig service registration completed.", __CLASS__, __FUNCTION__);
   }
 }
 
diff --git a/sdm/libs/hwc2/hwc_tonemapper.cpp b/sdm/libs/hwc2/hwc_tonemapper.cpp
index a224e8d..26caec9 100644
--- a/sdm/libs/hwc2/hwc_tonemapper.cpp
+++ b/sdm/libs/hwc2/hwc_tonemapper.cpp
@@ -181,6 +181,7 @@
     }
 
     if (layer->request.flags.tone_map) {
+      DLOGV_IF(kTagClient, "Tonemapping for layer at index %d", i);
       switch (layer->composition) {
       case kCompositionGPUTarget:
         if (!gpu_count) {
@@ -211,6 +212,7 @@
 
       ToneMapSession *session = tone_map_sessions_.at(session_index);
       ToneMap(layer, session);
+      DLOGI_IF(kTagClient, "Layer %d associated with session index %d", i, session_index);
       session->layer_index_ = INT(i);
     }
   }
@@ -259,6 +261,7 @@
       session->acquired_ = false;
       it++;
     } else {
+      DLOGI_IF(kTagClient, "Tone map session %d closed.", session_index);
       delete session;
       it = tone_map_sessions_.erase(it);
       int deleted_session = INT(session_index);
diff --git a/sdm/libs/utils/rect.cpp b/sdm/libs/utils/rect.cpp
index c227cb3..a830542 100644
--- a/sdm/libs/utils/rect.cpp
+++ b/sdm/libs/utils/rect.cpp
@@ -47,6 +47,11 @@
           (rect1.bottom == rect2.bottom));
 }
 
+void LogI(DebugTag debug_tag, const char *prefix, const LayerRect &roi) {
+  DLOGI_IF(debug_tag, "%s: left = %.0f, top = %.0f, right = %.0f, bottom = %.0f",
+           prefix, roi.left, roi.top, roi.right, roi.bottom);
+}
+
 void Log(DebugTag debug_tag, const char *prefix, const LayerRect &roi) {
   DLOGV_IF(debug_tag, "%s: left = %.0f, top = %.0f, right = %.0f, bottom = %.0f",
            prefix, roi.left, roi.top, roi.right, roi.bottom);
