浏览代码

disp: msm: sde: handle empty list of ROI in rounded corner

Currently, RC is assuming that partial update callback functions
will not be called when there is a full frame update and that CP
framework will return early instead. This assumption had to be changed
to support full frame transition for CP features such as demura and SPR
and now the responsibility is up to each feature to handle this corner
case.

This change is returning early in PU callback function if the payload
buffer is 0.

Change-Id: I478888fb036e642d5274a2cccc4d5378e62d6afa
Signed-off-by: Amine Najahi <[email protected]>
Amine Najahi 4 年之前
父节点
当前提交
154f37f92d
共有 1 个文件被更改,包括 12 次插入2 次删除
  1. 12 2
      msm/sde/sde_hw_rc.c

+ 12 - 2
msm/sde/sde_hw_rc.c

@@ -769,6 +769,12 @@ int sde_hw_rc_check_pu_roi(struct sde_hw_dspp *hw_dspp, void *cfg)
 		return -EINVAL;
 		return -EINVAL;
 	}
 	}
 
 
+	roi_list = hw_cfg->payload;
+	if (!roi_list) {
+		SDE_DEBUG("empty list of roi\n");
+		return 0;
+	}
+
 	rc_mask_cfg = RC_STATE(hw_dspp).last_rc_mask_cfg;
 	rc_mask_cfg = RC_STATE(hw_dspp).last_rc_mask_cfg;
 	mask_programmed = RC_STATE(hw_dspp).mask_programmed;
 	mask_programmed = RC_STATE(hw_dspp).mask_programmed;
 
 
@@ -784,7 +790,6 @@ int sde_hw_rc_check_pu_roi(struct sde_hw_dspp *hw_dspp, void *cfg)
 		return rc;
 		return rc;
 	}
 	}
 
 
-	roi_list = hw_cfg->payload;
 	sde_kms_rect_merge_rectangles(roi_list, &merged_roi);
 	sde_kms_rect_merge_rectangles(roi_list, &merged_roi);
 	rc = _sde_hw_rc_get_ajusted_roi(hw_cfg, &merged_roi, &rc_roi);
 	rc = _sde_hw_rc_get_ajusted_roi(hw_cfg, &merged_roi, &rc_roi);
 	if (rc) {
 	if (rc) {
@@ -825,6 +830,12 @@ int sde_hw_rc_setup_pu_roi(struct sde_hw_dspp *hw_dspp, void *cfg)
 		return -EINVAL;
 		return -EINVAL;
 	}
 	}
 
 
+	roi_list = hw_cfg->payload;
+	if (!roi_list) {
+		SDE_DEBUG("empty list of roi\n");
+		return 0;
+	}
+
 	rc_mask_cfg = RC_STATE(hw_dspp).last_rc_mask_cfg;
 	rc_mask_cfg = RC_STATE(hw_dspp).last_rc_mask_cfg;
 	mask_programmed = RC_STATE(hw_dspp).mask_programmed;
 	mask_programmed = RC_STATE(hw_dspp).mask_programmed;
 
 
@@ -834,7 +845,6 @@ int sde_hw_rc_setup_pu_roi(struct sde_hw_dspp *hw_dspp, void *cfg)
 		return SDE_HW_RC_PU_SKIP_OP;
 		return SDE_HW_RC_PU_SKIP_OP;
 	}
 	}
 
 
-	roi_list = hw_cfg->payload;
 	sde_kms_rect_merge_rectangles(roi_list, &merged_roi);
 	sde_kms_rect_merge_rectangles(roi_list, &merged_roi);
 	rc = _sde_hw_rc_get_ajusted_roi(hw_cfg, &merged_roi, &rc_roi);
 	rc = _sde_hw_rc_get_ajusted_roi(hw_cfg, &merged_roi, &rc_roi);
 	if (rc) {
 	if (rc) {