All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Cc: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 2/2] drm/xe/display: align framebuffers according to hw requirements
Date: Wed, 9 Oct 2024 19:37:08 +0300	[thread overview]
Message-ID: <ZwaxNJnHxQhN7K9c@intel.com> (raw)
In-Reply-To: <20241009151947.2240099-3-juhapekka.heikkila@gmail.com>

On Wed, Oct 09, 2024 at 06:19:47PM +0300, Juha-Pekka Heikkila wrote:
> Align framebuffers in memory according to hw requirements instead of
> default page size alignment.
> 
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
> ---
>  drivers/gpu/drm/xe/display/xe_fb_pin.c | 57 ++++++++++++++++----------
>  1 file changed, 35 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> index 79dbbbe03c7f..761510ae0690 100644
> --- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
> +++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> @@ -79,7 +79,8 @@ write_dpt_remapped(struct xe_bo *bo, struct iosys_map *map, u32 *dpt_ofs,
>  
>  static int __xe_pin_fb_vma_dpt(const struct intel_framebuffer *fb,
>  			       const struct i915_gtt_view *view,
> -			       struct i915_vma *vma)
> +			       struct i915_vma *vma,
> +			       u64 physical_alignment)
>  {
>  	struct xe_device *xe = to_xe_device(fb->base.dev);
>  	struct xe_tile *tile0 = xe_device_get_root_tile(xe);
> @@ -99,23 +100,29 @@ static int __xe_pin_fb_vma_dpt(const struct intel_framebuffer *fb,
>  				 XE_PAGE_SIZE);
>  
>  	if (IS_DGFX(xe))
> -		dpt = xe_bo_create_pin_map(xe, tile0, NULL, dpt_size,
> -					   ttm_bo_type_kernel,
> -					   XE_BO_FLAG_VRAM0 |
> -					   XE_BO_FLAG_GGTT |
> -					   XE_BO_FLAG_PAGETABLE);
> +		dpt = xe_bo_create_pin_map_at_aligned(xe, tile0, NULL,
> +						      dpt_size, ~0ull,
> +						      ttm_bo_type_kernel,
> +						      XE_BO_FLAG_VRAM0 |
> +						      XE_BO_FLAG_GGTT |
> +						      XE_BO_FLAG_PAGETABLE,
> +						      physical_alignment);
>  	else
> -		dpt = xe_bo_create_pin_map(xe, tile0, NULL, dpt_size,
> -					   ttm_bo_type_kernel,
> -					   XE_BO_FLAG_STOLEN |
> -					   XE_BO_FLAG_GGTT |
> -					   XE_BO_FLAG_PAGETABLE);
> +		dpt = xe_bo_create_pin_map_at_aligned(xe, tile0, NULL,
> +						      dpt_size,  ~0ull,
> +						      ttm_bo_type_kernel,
> +						      XE_BO_FLAG_STOLEN |
> +						      XE_BO_FLAG_GGTT |
> +						      XE_BO_FLAG_PAGETABLE,
> +						      physical_alignment);
>  	if (IS_ERR(dpt))
> -		dpt = xe_bo_create_pin_map(xe, tile0, NULL, dpt_size,
> -					   ttm_bo_type_kernel,
> -					   XE_BO_FLAG_SYSTEM |
> -					   XE_BO_FLAG_GGTT |
> -					   XE_BO_FLAG_PAGETABLE);
> +		dpt = xe_bo_create_pin_map_at_aligned(xe, tile0, NULL,
> +						      dpt_size,  ~0ull,
> +						      ttm_bo_type_kernel,
> +						      XE_BO_FLAG_SYSTEM |
> +						      XE_BO_FLAG_GGTT |
> +						      XE_BO_FLAG_PAGETABLE,
> +						      physical_alignment);
>  	if (IS_ERR(dpt))
>  		return PTR_ERR(dpt);
>  
> @@ -184,7 +191,8 @@ write_ggtt_rotated(struct xe_bo *bo, struct xe_ggtt *ggtt, u32 *ggtt_ofs, u32 bo
>  
>  static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
>  				const struct i915_gtt_view *view,
> -				struct i915_vma *vma)
> +				struct i915_vma *vma,
> +				u64 physical_alignment)
>  {
>  	struct drm_gem_object *obj = intel_fb_bo(&fb->base);
>  	struct xe_bo *bo = gem_to_xe_bo(obj);
> @@ -266,7 +274,8 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
>  }
>  
>  static struct i915_vma *__xe_pin_fb_vma(const struct intel_framebuffer *fb,
> -					const struct i915_gtt_view *view)
> +					const struct i915_gtt_view *view,
> +					u64 physical_alignment)
>  {
>  	struct drm_device *dev = fb->base.dev;
>  	struct xe_device *xe = to_xe_device(dev);
> @@ -315,9 +324,9 @@ static struct i915_vma *__xe_pin_fb_vma(const struct intel_framebuffer *fb,
>  
>  	vma->bo = bo;
>  	if (intel_fb_uses_dpt(&fb->base))
> -		ret = __xe_pin_fb_vma_dpt(fb, view, vma);
> +		ret = __xe_pin_fb_vma_dpt(fb, view, vma, physical_alignment);
>  	else
> -		ret = __xe_pin_fb_vma_ggtt(fb, view, vma);
> +		ret = __xe_pin_fb_vma_ggtt(fb, view, vma,  physical_alignment);
>  	if (ret)
>  		goto err_unpin;
>  
> @@ -358,7 +367,7 @@ intel_fb_pin_to_ggtt(const struct drm_framebuffer *fb,
>  {
>  	*out_flags = 0;
>  
> -	return __xe_pin_fb_vma(to_intel_framebuffer(fb), view);
> +	return __xe_pin_fb_vma(to_intel_framebuffer(fb), view, phys_alignment);
>  }
>  
>  void intel_fb_unpin_vma(struct i915_vma *vma, unsigned long flags)
> @@ -372,11 +381,15 @@ int intel_plane_pin_fb(struct intel_plane_state *plane_state)
>  	struct drm_gem_object *obj = intel_fb_bo(fb);
>  	struct xe_bo *bo = gem_to_xe_bo(obj);
>  	struct i915_vma *vma;
> +	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
> +	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
> +	u64 phys_alignment = plane->min_alignment(plane, fb, 0);

.min_alignment() gives you the virtual alignment. Physical alignment
is not covered (except for cursors on ancient hardware since those
don't go through ggtt translation at all).

I don't think we have any real way to even ask for specific physical
alignment with shmem. You get what you get.

>  
>  	/* We reject creating !SCANOUT fb's, so this is weird.. */
>  	drm_WARN_ON(bo->ttm.base.dev, !(bo->flags & XE_BO_FLAG_SCANOUT));
>  
> -	vma = __xe_pin_fb_vma(to_intel_framebuffer(fb), &plane_state->view.gtt);
> +	vma = __xe_pin_fb_vma(intel_fb, &plane_state->view.gtt, phys_alignment);
> +
>  	if (IS_ERR(vma))
>  		return PTR_ERR(vma);
>  
> -- 
> 2.45.2

-- 
Ville Syrjälä
Intel

  reply	other threads:[~2024-10-09 16:37 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-09 15:19 [PATCH 0/2] Align framebuffers according to what display minimum alignment states Juha-Pekka Heikkila
2024-10-09 15:19 ` [PATCH 1/2] drm/xe: add interface to request physical alignment for buffer objects Juha-Pekka Heikkila
2024-10-09 17:11   ` Cavitt, Jonathan
2024-10-09 15:19 ` [PATCH 2/2] drm/xe/display: align framebuffers according to hw requirements Juha-Pekka Heikkila
2024-10-09 16:37   ` Ville Syrjälä [this message]
2024-10-09 17:20   ` Cavitt, Jonathan
2024-10-09 16:30 ` ✓ CI.Patch_applied: success for Align framebuffers according to what display minimum alignment states Patchwork
2024-10-09 16:30 ` ✓ CI.checkpatch: " Patchwork
2024-10-09 16:31 ` ✓ CI.KUnit: " Patchwork
2024-10-09 16:42 ` ✓ CI.Build: " Patchwork
2024-10-09 16:45 ` ✓ CI.Hooks: " Patchwork
2024-10-09 16:46 ` ✓ CI.checksparse: " Patchwork
2024-10-09 17:08 ` ✓ CI.BAT: " Patchwork
2024-10-09 18:35 ` ✗ Fi.CI.SPARSE: warning " Patchwork
2024-10-09 18:43 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-10-10  3:25 ` ✗ CI.FULL: " Patchwork
2024-10-10  5:21 ` ✓ CI.Patch_applied: success for Align framebuffers according to what display minimum alignment states (rev2) Patchwork
2024-10-10  5:21 ` ✓ CI.checkpatch: " Patchwork
2024-10-10  5:22 ` ✓ CI.KUnit: " Patchwork
2024-10-10  5:34 ` ✓ CI.Build: " Patchwork
2024-10-10  5:36 ` ✓ CI.Hooks: " Patchwork
2024-10-10  5:37 ` ✓ CI.checksparse: " Patchwork
2024-10-10  6:03 ` ✓ CI.BAT: " Patchwork
2024-10-10 10:21 ` ✓ Fi.CI.BAT: " Patchwork
2024-10-10 10:21 ` ✗ Fi.CI.SPARSE: warning " Patchwork
2024-10-10 19:38 ` ✗ CI.FULL: failure " Patchwork
2024-10-14 13:19   ` Juha-Pekka Heikkila
2024-10-11 17:41 ` ✗ Fi.CI.IGT: " Patchwork

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=ZwaxNJnHxQhN7K9c@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=juhapekka.heikkila@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.