diff --git a/sdm/libs/hwc2/hwc_layers.cpp b/sdm/libs/hwc2/hwc_layers.cpp
index b160d90..ecc1802 100644
--- a/sdm/libs/hwc2/hwc_layers.cpp
+++ b/sdm/libs/hwc2/hwc_layers.cpp
@@ -594,7 +594,7 @@
         content_light.maxContentLightLevel = UINT32(metadata[i]);
         break;
       case PerFrameMetadataKey::MAX_FRAME_AVERAGE_LIGHT_LEVEL:
-        content_light.minPicAverageLightLevel = UINT32(metadata[i] * 10000);
+        content_light.minPicAverageLightLevel = UINT32(metadata[i]);
         break;
       default:
         break;
@@ -634,9 +634,6 @@
           std::memcpy(color_metadata.dynamicMetaDataPayload, metadata, sizes[i]);
           layer_->update_mask.set(kMetadataUpdate);
         }
-        // once blob data is set by FW, we should not read from gralloc metadata as video HAL
-        // is setting thru gralloc metadata OR native window API (TODO(user): Revisit).
-        per_frame_hdr_metadata_blob_ = true;
         break;
       default:
         DLOGW("Invalid key = %d", keys[i]);
@@ -930,11 +927,6 @@
 }
 
 void HWCLayer::ValidateAndSetCSC(const private_handle_t *handle) {
-  if (per_frame_hdr_metadata_) {
-    // Since client has set PerFrameMetadata, dataspace will be valid
-    // so we can skip reading from ColorMetaData.
-    return;
-  }
   LayerBuffer *layer_buffer = &layer_->input_buffer;
   bool use_color_metadata = true;
   ColorMetaData csc = {};
@@ -964,9 +956,7 @@
      use_color_metadata = true;
   }
 
-  // Since client has set PerFrameMetadatablobs its dataspace and hdr10+ data will be updated
-  // so we can skip reading from ColorMetaData.
-  if (use_color_metadata && !per_frame_hdr_metadata_blob_) {
+  if (use_color_metadata) {
     ColorMetaData new_metadata = layer_buffer->color_metadata;
     if (sdm::SetCSC(handle, &new_metadata) == kErrorNone) {
       // If dataspace is KNOWN, overwrite the gralloc metadata CSC using the previously derived CSC
@@ -979,19 +969,50 @@
       if ((layer_buffer->color_metadata.colorPrimaries != new_metadata.colorPrimaries) ||
           (layer_buffer->color_metadata.transfer != new_metadata.transfer) ||
           (layer_buffer->color_metadata.range != new_metadata.range)) {
+        layer_buffer->color_metadata.colorPrimaries = new_metadata.colorPrimaries;
+        layer_buffer->color_metadata.transfer = new_metadata.transfer;
+        layer_buffer->color_metadata.range = new_metadata.range;
         layer_->update_mask.set(kMetadataUpdate);
       }
-      DLOGV_IF(kTagClient, "Layer id =%lld Dynamic Metadata valid = %d size = %d", id_,
-               new_metadata.dynamicMetaDataValid,
+      if (layer_buffer->color_metadata.matrixCoefficients != new_metadata.matrixCoefficients) {
+        layer_buffer->color_metadata.matrixCoefficients = new_metadata.matrixCoefficients;
+        layer_->update_mask.set(kMetadataUpdate);
+      }
+      DLOGV_IF(kTagClient, "Layer id = %lld ColorVolEnabled = %d ContentLightLevelEnabled = %d "
+               "cRIEnabled = %d Dynamic Metadata valid = %d size = %d", id_,
+               new_metadata.masteringDisplayInfo.colorVolumeSEIEnabled,
+               new_metadata.contentLightLevel.lightLevelSEIEnabled,
+               new_metadata.cRI.criEnabled, new_metadata.dynamicMetaDataValid,
                new_metadata.dynamicMetaDataLen);
+      // Read color metadata from gralloc handle if it's enabled by clients, this will override the
+      // values set using the Composer API's(SetLayerPerFrameMetaData)
+      if (new_metadata.masteringDisplayInfo.colorVolumeSEIEnabled &&
+          !SameConfig(&new_metadata.masteringDisplayInfo,
+          &layer_buffer->color_metadata.masteringDisplayInfo, UINT32(sizeof(MasteringDisplay)))) {
+        layer_buffer->color_metadata.masteringDisplayInfo = new_metadata.masteringDisplayInfo;
+        layer_->update_mask.set(kMetadataUpdate);
+      }
+      if (new_metadata.contentLightLevel.lightLevelSEIEnabled &&
+          !SameConfig(&new_metadata.contentLightLevel,
+          &layer_buffer->color_metadata.contentLightLevel, UINT32(sizeof(ContentLightLevel)))) {
+        layer_buffer->color_metadata.contentLightLevel = new_metadata.contentLightLevel;
+        layer_->update_mask.set(kMetadataUpdate);
+      }
+      if (new_metadata.cRI.criEnabled &&
+          !SameConfig(&new_metadata.cRI, &layer_buffer->color_metadata.cRI,
+          UINT32(sizeof(ColorRemappingInfo)))) {
+        layer_buffer->color_metadata.cRI = new_metadata.cRI;
+        layer_->update_mask.set(kMetadataUpdate);
+      }
       if (new_metadata.dynamicMetaDataValid &&
           !SameConfig(layer_buffer->color_metadata.dynamicMetaDataPayload,
           new_metadata.dynamicMetaDataPayload, HDR_DYNAMIC_META_DATA_SZ)) {
+          layer_buffer->color_metadata.dynamicMetaDataValid = true;
+          layer_buffer->color_metadata.dynamicMetaDataLen = new_metadata.dynamicMetaDataLen;
+          std::memcpy(layer_buffer->color_metadata.dynamicMetaDataPayload,
+                      new_metadata.dynamicMetaDataPayload, new_metadata.dynamicMetaDataLen);
         layer_->update_mask.set(kMetadataUpdate);
       }
-      if (layer_->update_mask.test(kMetadataUpdate)) {
-        layer_buffer->color_metadata = new_metadata;
-      }
     } else {
       dataspace_supported_ = false;
       return;
diff --git a/sdm/libs/hwc2/hwc_layers.h b/sdm/libs/hwc2/hwc_layers.h
index 8fc4afd..f6e9d71 100644
--- a/sdm/libs/hwc2/hwc_layers.h
+++ b/sdm/libs/hwc2/hwc_layers.h
@@ -139,7 +139,6 @@
   bool non_integral_source_crop_ = false;
   bool has_metadata_refresh_rate_ = false;
   bool buffer_flipped_ = false;
-  bool per_frame_hdr_metadata_blob_ = false;  // used to track if perframe metadata blob is set
 
   // Composition requested by client(SF) Original
   HWC2::Composition client_requested_orig_ = HWC2::Composition::Device;
