summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2026-04-16 20:44:46 +0300
committerVille Syrjälä <ville.syrjala@linux.intel.com>2026-04-21 13:12:48 +0300
commitce2e18a382f3371975adbc9911bb113ec7f544ec (patch)
treea99b467f1321d0f758f36e395f83f4df730873c8
parentdfde353a91201f4d6e6dd92f6ff8ab6c3451c002 (diff)
downloadlinux-ce2e18a382f3371975adbc9911bb113ec7f544ec.tar.xz
drm/xe: Eliminate intel_fb_uses_dpt() call from __xe_pin_fb_vma()
Move the intel_fb_uses_dpt() out from __xe_pin_fb_vma() into intel_plane_pin_fb() so that we don't do have display stuff that deep in the pinning code. And intel_fb_pin_to_ggtt() can just say "this does not need DPT" always since it's specifically about pinning the fb into GGTT. The previous logic here was kinda insane with the high level code assuming GGTT, and low level code potentially deciding otherwise. In practice it should have been fine because intel_fb_pin_to_ggtt() only gets used from the initial_plane code, and there we are not supposed to be have a framebuffer that needs DPT. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patch.msgid.link/20260416174448.28264-11-ville.syrjala@linux.intel.com Reviewed-by: Jani Nikula <jani.nikula@intel.com>
-rw-r--r--drivers/gpu/drm/xe/display/xe_fb_pin.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index a4eb06cfa769..44562769fbc9 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -318,7 +318,7 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
return ret;
}
-static struct i915_vma *__xe_pin_fb_vma(const struct intel_framebuffer *fb,
+static struct i915_vma *__xe_pin_fb_vma(const struct intel_framebuffer *fb, bool is_dpt,
const struct intel_fb_pin_params *pin_params)
{
struct drm_device *dev = fb->base.dev;
@@ -375,7 +375,7 @@ static struct i915_vma *__xe_pin_fb_vma(const struct intel_framebuffer *fb,
goto err;
vma->bo = bo;
- if (intel_fb_uses_dpt(&fb->base))
+ if (is_dpt)
ret = __xe_pin_fb_vma_dpt(fb, pin_params, vma);
else
ret = __xe_pin_fb_vma_ggtt(fb, pin_params, vma);
@@ -419,7 +419,7 @@ intel_fb_pin_to_ggtt(const struct drm_framebuffer *fb,
if (out_fence_id)
*out_fence_id = -1;
- return __xe_pin_fb_vma(to_intel_framebuffer(fb), pin_params);
+ return __xe_pin_fb_vma(to_intel_framebuffer(fb), false, pin_params);
}
void intel_fb_unpin_vma(struct i915_vma *vma, int fence_id)
@@ -483,7 +483,8 @@ int intel_plane_pin_fb(struct intel_plane_state *new_plane_state,
/* We reject creating !SCANOUT fb's, so this is weird.. */
drm_WARN_ON(bo->ttm.base.dev, !(bo->flags & XE_BO_FLAG_FORCE_WC));
- vma = __xe_pin_fb_vma(intel_fb, &pin_params);
+ vma = __xe_pin_fb_vma(intel_fb, intel_fb_uses_dpt(&intel_fb->base),
+ &pin_params);
if (IS_ERR(vma))
return PTR_ERR(vma);