Merge "gralloc: Fix array out of bound"
diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp
index 3cc45be..1edfa3c 100644
--- a/gralloc/gr_utils.cpp
+++ b/gralloc/gr_utils.cpp
@@ -689,6 +689,9 @@
   plane_info[0].step = step;
   plane_info[0].stride = width;
   plane_info[0].stride_bytes = static_cast<int32_t>(alignedWidth);
+  if (format == HAL_PIXEL_FORMAT_RAW16) {
+    plane_info[0].stride_bytes = static_cast<int32_t>(alignedWidth * GetBpp(format));
+  }
   plane_info[0].scanlines = height;
   plane_info[0].size = size;
 
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 7d41b7d..fa4bca9 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -146,11 +146,12 @@
 
   error = comp_manager_->RegisterDisplay(display_id_, display_type_, display_attributes_,
                                          hw_panel_info_, mixer_attributes_, fb_config_,
-                                         &display_comp_ctx_, &(default_qos_data_.clock_hz));
+                                         &display_comp_ctx_, &(default_clock_hz_));
   if (error != kErrorNone) {
     DLOGW("Display %d comp manager registration failed!", display_id_);
     goto CleanupOnError;
   }
+  cached_qos_data_.clock_hz = default_clock_hz_;
 
   if (color_modes_cs_.size() > 0) {
     error = comp_manager_->SetColorModesInfo(display_comp_ctx_, color_modes_cs_);
@@ -567,10 +568,12 @@
     if (error == kErrorNone) {
       error = hw_intf_->PowerOff(teardown);
     }
+    cached_qos_data_ = {};
+    cached_qos_data_.clock_hz = default_clock_hz_;
     break;
 
   case kStateOn:
-    error = hw_intf_->PowerOn(default_qos_data_, release_fence);
+    error = hw_intf_->PowerOn(cached_qos_data_, release_fence);
     if (error != kErrorNone) {
       if (error == kErrorDeferred) {
         pending_power_on_ = true;
@@ -582,16 +585,17 @@
 
     error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes_,
                                               hw_panel_info_, mixer_attributes_, fb_config_,
-                                              &(default_qos_data_.clock_hz));
+                                              &(default_clock_hz_));
     if (error != kErrorNone) {
       return error;
     }
+    cached_qos_data_.clock_hz = default_clock_hz_;
 
     active = true;
     break;
 
   case kStateDoze:
-    error = hw_intf_->Doze(default_qos_data_, release_fence);
+    error = hw_intf_->Doze(cached_qos_data_, release_fence);
     if (error != kErrorNone) {
       if (error == kErrorDeferred) {
         pending_doze_ = true;
@@ -604,7 +608,7 @@
     break;
 
   case kStateDozeSuspend:
-    error = hw_intf_->DozeSuspend(default_qos_data_, release_fence);
+    error = hw_intf_->DozeSuspend(cached_qos_data_, release_fence);
     if (display_type_ != kBuiltIn) {
       active = true;
     }
@@ -1313,10 +1317,11 @@
 
   error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info,
                                             mixer_attributes, fb_config_,
-                                            &(default_qos_data_.clock_hz));
+                                            &(default_clock_hz_));
   if (error != kErrorNone) {
     return error;
   }
+  cached_qos_data_.clock_hz = default_clock_hz_;
 
   bool disble_pu = true;
   if (mixer_unchanged && panel_unchanged) {
@@ -1526,10 +1531,11 @@
 
   error =  comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes_, hw_panel_info_,
                                              mixer_attributes_, variable_info,
-                                             &(default_qos_data_.clock_hz));
+                                             &(default_clock_hz_));
   if (error != kErrorNone) {
     return error;
   }
+  cached_qos_data_.clock_hz = default_clock_hz_;
 
   fb_config_.x_pixels = width;
   fb_config_.y_pixels = height;
@@ -1673,6 +1679,7 @@
               hw_layer.input_buffer.release_fence, sdm_layer->input_buffer.release_fence);
     }
   }
+  cached_qos_data_ = hw_layers_.qos_data;
 
   return;
 }
diff --git a/sdm/libs/core/display_base.h b/sdm/libs/core/display_base.h
index f5e347a..1c43b76 100644
--- a/sdm/libs/core/display_base.h
+++ b/sdm/libs/core/display_base.h
@@ -239,7 +239,8 @@
   std::string current_color_mode_ = "hal_native";
   bool hw_recovery_logs_captured_ = false;
   int disable_hw_recovery_dump_ = 0;
-  HWQosData default_qos_data_;
+  HWQosData cached_qos_data_;
+  uint32_t default_clock_hz_ = 0;
   bool drop_hw_vsync_ = false;
   uint32_t current_refresh_rate_ = 0;
   bool drop_skewed_vsync_ = false;
diff --git a/sdm/libs/core/display_builtin.cpp b/sdm/libs/core/display_builtin.cpp
index f9fcb22..a73bf2f 100644
--- a/sdm/libs/core/display_builtin.cpp
+++ b/sdm/libs/core/display_builtin.cpp
@@ -1146,10 +1146,11 @@
 
   error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info,
                                             mixer_attributes, fb_config_,
-                                            &(default_qos_data_.clock_hz));
+                                            &(default_clock_hz_));
   if (error != kErrorNone) {
     return error;
   }
+  cached_qos_data_.clock_hz = default_clock_hz_;
 
   bool disble_pu = true;
   if (mixer_unchanged && panel_unchanged) {
diff --git a/sdm/libs/core/display_virtual.cpp b/sdm/libs/core/display_virtual.cpp
index 1da0ece..db4107e 100644
--- a/sdm/libs/core/display_virtual.cpp
+++ b/sdm/libs/core/display_virtual.cpp
@@ -141,15 +141,16 @@
   if (!display_comp_ctx_) {
     error = comp_manager_->RegisterDisplay(display_id_, display_type_, display_attributes,
                                            hw_panel_info, mixer_attributes, fb_config,
-                                           &display_comp_ctx_, &(default_qos_data_.clock_hz));
+                                           &display_comp_ctx_, &(default_clock_hz_));
   } else {
     error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info,
                                               mixer_attributes, fb_config,
-                                              &(default_qos_data_.clock_hz));
+                                              &(default_clock_hz_));
   }
   if (error != kErrorNone) {
     return error;
   }
+  cached_qos_data_.clock_hz = default_clock_hz_;
 
   display_attributes_ = display_attributes;
   mixer_attributes_ = mixer_attributes;