On Wed, 18 Feb 2026, Ville Syrjala <[email protected]> wrote:
> From: Ville Syrjälä <[email protected]>
>
> Extract the BO lookup and tiling check into a new
> helper called i915_overlay_obj_lookup(). This will have to
> move to the i915 side of the parent vs. display driver split.
>
> There is a slight change here in that we now do the tiling
> check before taking the modeset locks, but those locks don't
> protect the BO tiling stuff in any way, so nothing is really
> different here.
>
> Note that the hardware should support X-tiled scanout also
> for the overlay, but I guess no one ever bothered to hook
> it up and test it. So the check should stay at least for now.
>
> Signed-off-by: Ville Syrjälä <[email protected]>
> ---
> drivers/gpu/drm/i915/display/intel_overlay.c | 31 ++++++++++++++------
> 1 file changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c
> b/drivers/gpu/drm/i915/display/intel_overlay.c
> index e1707a678acb..5c4f8bf8ac44 100644
> --- a/drivers/gpu/drm/i915/display/intel_overlay.c
> +++ b/drivers/gpu/drm/i915/display/intel_overlay.c
> @@ -1125,6 +1125,26 @@ static int check_overlay_src(struct intel_display
> *display,
> return 0;
> }
>
> +static struct drm_i915_gem_object *
> +i915_overlay_obj_lookup(struct drm_device *drm,
> + struct drm_file *file_priv,
> + u32 handle)
> +{
> + struct drm_i915_gem_object *bo;
> +
> + bo = i915_gem_object_lookup(file_priv, handle);
> + if (!bo)
> + return ERR_PTR(-ENOENT);
> +
> + if (i915_gem_object_is_tiled(bo)) {
> + drm_dbg(drm, "buffer used for overlay image can not be
> tiled\n");
> + i915_gem_object_put(bo);
> + return ERR_PTR(-EINVAL);
> + }
> +
> + return bo;
> +}
> +
> int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file_priv)
> {
> @@ -1155,19 +1175,12 @@ int intel_overlay_put_image_ioctl(struct drm_device
> *dev, void *data,
> return -ENOENT;
> crtc = to_intel_crtc(drmmode_crtc);
>
> - new_bo = i915_gem_object_lookup(file_priv, params->bo_handle);
> + new_bo = i915_overlay_obj_lookup(dev, file_priv, params->bo_handle);
> if (!new_bo)
i915_overlay_obj_lookup() returns error pointers.
> - return -ENOENT;
> + return PTR_ERR(new_bo);
>
> drm_modeset_lock_all(dev);
>
> - if (i915_gem_object_is_tiled(new_bo)) {
> - drm_dbg_kms(display->drm,
> - "buffer used for overlay image can not be tiled\n");
> - ret = -EINVAL;
> - goto out_unlock;
> - }
> -
> ret = intel_overlay_recover_from_interrupt(overlay);
> if (ret != 0)
> goto out_unlock;
--
Jani Nikula, Intel