diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index f312ddeb29..c790edb54a 100644 --- a/msm/sde/sde_encoder.c +++ b/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 diff --git a/msm/sde/sde_encoder_phys_cmd.c b/msm/sde/sde_encoder_phys_cmd.c index 7a10231984..67b6077daa 100644 --- a/msm/sde/sde_encoder_phys_cmd.c +++ b/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), diff --git a/msm/sde/sde_encoder_phys_vid.c b/msm/sde/sde_encoder_phys_vid.c index c38d8c1791..a2f74fb7b2 100644 --- a/msm/sde/sde_encoder_phys_vid.c +++ b/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; diff --git a/msm/sde_dbg.c b/msm/sde_dbg.c index 8b44539270..31e7d9080f 100644 --- a/msm/sde_dbg.c +++ b/msm/sde_dbg.c @@ -2874,7 +2874,7 @@ void sde_dbg_reg_register_dump_range(const char *base_name, return; } - if (!offset_start || !offset_end || (offset_start > offset_end)) { + if ((!offset_start && !offset_end) || (offset_start > offset_end)) { pr_info("%pS: bad range, base_name %s, range_name %s, offset_start 0x%X, end 0x%X\n", __builtin_return_address(0), base_name, range_name, offset_start, offset_end);