Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: intel-xe@lists.freedesktop.org
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Subject: [PATCH v3 2/8] drm/i915/display: Use async flip when available for initial plane config
Date: Tue, 29 Oct 2024 15:44:06 +0100	[thread overview]
Message-ID: <20241029144412.66081-1-maarten.lankhorst@linux.intel.com> (raw)
In-Reply-To: <20241029143934.65412-1-maarten.lankhorst@linux.intel.com>

I'm planning to reorder readout in the Xe sequence in such a way that
interrupts will not be available, so just use an async flip.

Since the new FB points to the same pages, it will not tear. It also
has the benefit of perhaps being slightly faster.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/display/skl_universal_plane.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c
index a0a7ed01415a5..6740c193920ff 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
@@ -2902,7 +2902,7 @@ bool skl_fixup_initial_plane_config(struct intel_crtc *crtc,
 		to_intel_plane_state(plane->base.state);
 	enum plane_id plane_id = plane->id;
 	enum pipe pipe = crtc->pipe;
-	u32 base;
+	u32 base, plane_ctl;
 
 	if (!plane_state->uapi.visible)
 		return false;
@@ -2916,7 +2916,16 @@ bool skl_fixup_initial_plane_config(struct intel_crtc *crtc,
 	if (plane_config->base == base)
 		return false;
 
+	/* Perform an async flip to the new surface. */
+	plane_ctl = intel_de_read(i915, PLANE_CTL(pipe, plane_id));
+	plane_ctl |= PLANE_CTL_ASYNC_FLIP;
+
+	intel_de_write(i915, PLANE_CTL(pipe, plane_id), plane_ctl);
 	intel_de_write(i915, PLANE_SURF(pipe, plane_id), base);
 
-	return true;
+	if (intel_de_wait(i915, PLANE_SURFLIVE(pipe, plane_id), ~0U, base, 40) < 0)
+		drm_warn(&i915->drm, "async flip timed out\n");
+
+	/* No need to vblank wait either */
+	return false;
 }
-- 
2.45.2


  parent reply	other threads:[~2024-10-29 14:43 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-29 14:39 [PATCH v3 0/8] (CI) drm/xe: Fix initial framebuffer handover Maarten Lankhorst
2024-10-29 14:39 ` [PATCH v3 1/8] drm/xe: Remove double pageflip Maarten Lankhorst
2024-10-29 14:44 ` Maarten Lankhorst [this message]
2024-10-29 14:44   ` [PATCH v3 3/8] drm/xe: Move suballocator init to after display init Maarten Lankhorst
2024-10-29 14:44   ` [PATCH v3 4/8] drm/xe: Defer irq init until after xe_display_init_noaccel Maarten Lankhorst
2024-10-29 14:44   ` [PATCH v3 5/8] drm/xe/display: Use a single early init call for display Maarten Lankhorst
2024-10-29 14:44   ` [PATCH v3 6/8] drm/xe/sriov: Move VF bootstrap and query_config to vf_guc_init Maarten Lankhorst
2024-10-29 14:44   ` [PATCH v3 7/8] drm/xe: Simplify GuC early initialisation Maarten Lankhorst
2024-10-29 14:44   ` [PATCH v3 8/8] drm/xe: Split init of xe_gt_init_hwconfig to xe_gt_init and *_early Maarten Lankhorst

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241029144412.66081-1-maarten.lankhorst@linux.intel.com \
    --to=maarten.lankhorst@linux.intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox