소스 검색

Merge "disp: msm: sde: factor qsync min fps in vblank time out"

QCTECMDR Service 1 년 전
부모
커밋
89c5866e4b
3개의 변경된 파일13개의 추가작업 그리고 1개의 파일을 삭제
  1. 8 0
      msm/sde/sde_encoder.c
  2. 3 1
      msm/sde/sde_encoder_phys_cmd.c
  3. 2 0
      msm/sde/sde_encoder_phys_vid.c

+ 8 - 0
msm/sde/sde_encoder.c

@@ -5472,6 +5472,7 @@ u32 sde_encoder_helper_get_kickoff_timeout_ms(struct drm_encoder *drm_enc)
 	struct drm_encoder *src_enc = drm_enc;
 	struct sde_encoder_virt *sde_enc;
 	struct sde_kms *sde_kms;
+	u32 qsync_mode = 0, qsync_min_fps = 0;
 	u32 fps;
 
 	if (!drm_enc) {
@@ -5495,6 +5496,13 @@ u32 sde_encoder_helper_get_kickoff_timeout_ms(struct drm_encoder *drm_enc)
 	sde_enc = to_sde_encoder_virt(src_enc);
 	fps = sde_enc->mode_info.frame_rate;
 
+	if (sde_enc->cur_master)
+		qsync_mode = sde_connector_get_qsync_mode(sde_enc->cur_master->connector);
+
+	qsync_min_fps = sde_enc->mode_info.qsync_min_fps;
+	if (qsync_mode && qsync_min_fps)
+		fps = min(fps, qsync_min_fps);
+
 	if (!fps || fps >= DEFAULT_TIMEOUT_FPS_THRESHOLD)
 		return DEFAULT_KICKOFF_TIMEOUT_MS;
 	else

+ 3 - 1
msm/sde/sde_encoder_phys_cmd.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  * Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
  */
 
@@ -1849,6 +1849,8 @@ static int sde_encoder_phys_cmd_prepare_for_kickoff(
 
 	sde_enc = to_sde_encoder_virt(phys_enc->parent);
 	phys_enc->frame_trigger_mode = params->frame_trigger_mode;
+	phys_enc->kickoff_timeout_ms =
+			sde_encoder_helper_get_kickoff_timeout_ms(phys_enc->parent);
 	SDE_EVT32(DRMID(phys_enc->parent), phys_enc->hw_pp->idx - PINGPONG_0,
 			atomic_read(&phys_enc->pending_kickoff_cnt),
 			atomic_read(&cmd_enc->autorefresh.kickoff_cnt),

+ 2 - 0
msm/sde/sde_encoder_phys_vid.c

@@ -1041,6 +1041,8 @@ static int sde_encoder_phys_vid_prepare_for_kickoff(
 	}
 	vid_enc = to_sde_encoder_phys_vid(phys_enc);
 
+	phys_enc->kickoff_timeout_ms =
+			sde_encoder_helper_get_kickoff_timeout_ms(phys_enc->parent);
 	ctl = phys_enc->hw_ctl;
 	if (!ctl->ops.wait_reset_status)
 		return 0;