[PATCH] drm/xe: Mark dpt requiring 8K alignment

Ville Syrjälä ville.syrjala at linux.intel.com
Wed Oct 2 13:04:59 UTC 2024


On Wed, Oct 02, 2024 at 02:47:55PM +0300, Juha-Pekka Heikkila wrote:
> Due to hw requirements relating to long strides let's align display
> page table to 8k.

This stuff belongs in plane->min_alignment(), and then the xe
ggtt/dpt code needs to be fixed to do what its told.

> 
> BSpec: 50417
> 
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
> ---
>  drivers/gpu/drm/xe/display/xe_fb_pin.c | 9 ++++++---
>  drivers/gpu/drm/xe/xe_bo.h             | 1 +
>  drivers/gpu/drm/xe/xe_ggtt.c           | 2 ++
>  3 files changed, 9 insertions(+), 3 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..976f4d1a03cd 100644
> --- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
> +++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> @@ -103,19 +103,22 @@ static int __xe_pin_fb_vma_dpt(const struct intel_framebuffer *fb,
>  					   ttm_bo_type_kernel,
>  					   XE_BO_FLAG_VRAM0 |
>  					   XE_BO_FLAG_GGTT |
> -					   XE_BO_FLAG_PAGETABLE);
> +					   XE_BO_FLAG_PAGETABLE |
> +					   XE_BO_FLAG_NEED_8K_ALIGN);
>  	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);
> +					   XE_BO_FLAG_PAGETABLE |
> +					   XE_BO_FLAG_NEED_8K_ALIGN);
>  	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);
> +					   XE_BO_FLAG_PAGETABLE |
> +					   XE_BO_FLAG_NEED_8K_ALIGN);
>  	if (IS_ERR(dpt))
>  		return PTR_ERR(dpt);
>  
> diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
> index 31f4ba3bd8c1..154d6fe4c823 100644
> --- a/drivers/gpu/drm/xe/xe_bo.h
> +++ b/drivers/gpu/drm/xe/xe_bo.h
> @@ -39,6 +39,7 @@
>  #define XE_BO_FLAG_NEEDS_64K		BIT(15)
>  #define XE_BO_FLAG_NEEDS_2M		BIT(16)
>  #define XE_BO_FLAG_GGTT_INVALIDATE	BIT(17)
> +#define XE_BO_FLAG_NEED_8K_ALIGN	BIT(18)
>  /* this one is trigger internally only */
>  #define XE_BO_FLAG_INTERNAL_TEST	BIT(30)
>  #define XE_BO_FLAG_INTERNAL_64K		BIT(31)
> diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
> index f68af56c3f86..0b17c0afcd95 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt.c
> +++ b/drivers/gpu/drm/xe/xe_ggtt.c
> @@ -605,6 +605,8 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
>  
>  	if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
>  		alignment = SZ_64K;
> +	else if (bo->flags & XE_BO_FLAG_NEED_8K_ALIGN)
> +		alignment = SZ_8K;
>  
>  	if (XE_WARN_ON(bo->ggtt_node)) {
>  		/* Someone's already inserted this BO in the GGTT */
> -- 
> 2.45.2

-- 
Ville Syrjälä
Intel


More information about the Intel-xe mailing list