From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7F1C1CAC588 for ; Sun, 7 Sep 2025 07:46:36 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B1F9E10E1A2; Sun, 7 Sep 2025 07:46:34 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="LlBBs7x2"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by gabe.freedesktop.org (Postfix) with ESMTPS id 84C3E10E193; Sun, 7 Sep 2025 07:46:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1757231191; x=1788767191; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=fOfWU/xSh6h3EBCc0gCQgy/IT+uG3j5SxVJuUupuB1k=; b=LlBBs7x2HR5KvvR3DRne0/NFGTNxHyy9S3QAlJEVtcaEHikCe0g3INFb l7J7f3SnjJv8YbfifT4TqBBISZy/0NkfB/mmC2wJXYWZi/o/b5Xv4v6Xq Ir/gYIzc7owgmNDJGqICc8NeH4nwANRnPTqp9nE8fPIobZAACjjQqmA6b WxkQIUGTULlH8VD0ml4v4MwL6PUThFCdo3dgq80FsqLnm2lqsl49odqyh /RECaC26xG3nc2BYg7bZ1yaWNEJjMJIa82rcvZoWoMi+3BV1hhf86wAJS HxY0/G+2jyvsFQmLaDIU85y9sbXA1iC6UheI/Kmm16movqjlcKU2sIPV2 Q==; X-CSE-ConnectionGUID: UczZUMWuRKKR+PCIS0S+Lw== X-CSE-MsgGUID: 0Ro2yvvZQ5uX8zxVDHj3lA== X-IronPort-AV: E=McAfee;i="6800,10657,11545"; a="70220295" X-IronPort-AV: E=Sophos;i="6.18,246,1751266800"; d="scan'208";a="70220295" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Sep 2025 00:46:30 -0700 X-CSE-ConnectionGUID: IaPRcYq/SNC1csy0rjcNNQ== X-CSE-MsgGUID: NThOog8XT1aBootYaDXRvw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,246,1751266800"; d="scan'208";a="176874003" Received: from srr4-3-linux-103-aknautiy.iind.intel.com ([10.223.34.160]) by fmviesa005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Sep 2025 00:46:28 -0700 From: Ankit Nautiyal To: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org Cc: ville.syrjala@linux.intel.com, Ankit Nautiyal , Mitul Golani Subject: [PATCH 08/14] drm/i915/vrr: Use vrr.sync_start for getting vtotal Date: Sun, 7 Sep 2025 13:02:35 +0530 Message-ID: <20250907073241.19632-9-ankit.k.nautiyal@intel.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250907073241.19632-1-ankit.k.nautiyal@intel.com> References: <20250907073241.19632-1-ankit.k.nautiyal@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" Currently, in intel_vrr_get_config() crtc_vtotal is computed from vrr.vmin vtotal, since the VTOTAL.Vtotal bits are deprecated. Since vmin is currently set to crtc_vtotal, this gives us the vtotal. However, as we move to optimized guardband, vmin will be modified to set to the minimum Vtotal for highest refresh rate supported. Instead of depending on vmin, compute vtotal from crtc_vsync_start and vrr.vsync_start. This works since vrr.vsync_start is measured from the end of vblank, and crtc_vsync_start is measured from start of the scanline. Together their sum is equal to the crtc_vtotal. Signed-off-by: Ankit Nautiyal Reviewed-by: Mitul Golani --- drivers/gpu/drm/i915/display/intel_vrr.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c index fd690de5b45b..855974174afd 100644 --- a/drivers/gpu/drm/i915/display/intel_vrr.c +++ b/drivers/gpu/drm/i915/display/intel_vrr.c @@ -735,17 +735,6 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state) TRANS_VRR_VMAX(display, cpu_transcoder)) + 1; crtc_state->vrr.vmin = intel_de_read(display, TRANS_VRR_VMIN(display, cpu_transcoder)) + 1; - - /* - * For platforms that always use VRR Timing Generator, the VTOTAL.Vtotal - * bits are not filled. Since for these platforms TRAN_VMIN is always - * filled with crtc_vtotal, use TRAN_VRR_VMIN to get the vtotal for - * adjusted_mode. - */ - if (intel_vrr_always_use_vrr_tg(display)) - crtc_state->hw.adjusted_mode.crtc_vtotal = - intel_vrr_vmin_vtotal(crtc_state); - if (HAS_AS_SDP(display)) { trans_vrr_vsync = intel_de_read(display, @@ -755,6 +744,16 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state) crtc_state->vrr.vsync_end = REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync); } + /* + * For platforms that always use VRR Timing Generator, the VTOTAL.Vtotal + * bits are not filled. Since vrr.vsync_start is computed as: + * crtc_vtotal - crtc_vsync_start, we can derive vtotal from + * vrr.vsync_start and crtc_vsync_start. + */ + if (intel_vrr_always_use_vrr_tg(display)) + crtc_state->hw.adjusted_mode.crtc_vtotal = + crtc_state->hw.adjusted_mode.crtc_vsync_start + + crtc_state->vrr.vsync_start; } vrr_enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE; -- 2.45.2