[PATCH v3 7/7] drm/i915: fixup the initial fb base on DGFX

Das, Nirmoy nirmoy.das at linux.intel.com
Tue Mar 15 11:08:53 UTC 2022


|This seems more natural to me than the previous version. Acked-by: 
Nirmoy Das <nirmoy.das at linux.intel.com> |

Nirmoy

On 14/03/2022 12:28, Matthew Auld wrote:
> On integrated it looks like the GGTT base should always 1:1 maps to
> somewhere within DSM. On discrete the base seems to be pre-programmed with
> a normal lmem address, and is not 1:1 mapped with the base address. On
> such devices probe the lmem address directly from the PTE.
>
> v2(Ville):
>    - The base is actually the pre-programmed GGTT address, which is then
>      meant to 1:1 map to somewhere inside dsm. In the case of dgpu the
>      base looks to just be some offset within lmem, but this also happens
>      to be the exact dsm start, on dg1. Therefore we should only need to
>      fudge the physical address, before allocating from stolen.
>    - Bail if it's not located in dsm.
> v3:
>    - Scratch that. There doesn't seem to be any relationship with the
>      base and PTE address, on at least DG1. Let's instead just grab the
>      lmem address from the PTE itself.
>
> Signed-off-by: Matthew Auld<matthew.auld at intel.com>
> Cc: Thomas Hellström<thomas.hellstrom at linux.intel.com>
> Cc: Ville Syrjälä<ville.syrjala at linux.intel.com>
> Cc: Nirmoy Das<nirmoy.das at linux.intel.com>
> ---
>   .../drm/i915/display/intel_plane_initial.c    | 50 ++++++++++++++++---
>   1 file changed, 44 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_plane_initial.c b/drivers/gpu/drm/i915/display/intel_plane_initial.c
> index f797fcef18fc..7979929bb632 100644
> --- a/drivers/gpu/drm/i915/display/intel_plane_initial.c
> +++ b/drivers/gpu/drm/i915/display/intel_plane_initial.c
> @@ -47,17 +47,55 @@ static struct i915_vma *
>   initial_plane_vma(struct drm_i915_private *i915,
>   		  struct intel_initial_plane_config *plane_config)
>   {
> -	struct intel_memory_region *mem = i915->mm.stolen_region;
> +	struct intel_memory_region *mem;
>   	struct drm_i915_gem_object *obj;
>   	struct i915_vma *vma;
> +	resource_size_t phys_base;
>   	u32 base, size;
>   	u64 pinctl;
>   
> -	if (!mem || plane_config->size == 0)
> +	if (plane_config->size == 0)
> +		return NULL;
> +
> +	base = round_down(plane_config->base, I915_GTT_MIN_ALIGNMENT);
> +	if (IS_DGFX(i915)) {
> +		gen8_pte_t __iomem *gte = to_gt(i915)->ggtt->gsm;
> +		gen8_pte_t pte;
> +
> +		gte += base / I915_GTT_PAGE_SIZE;
> +
> +		pte = ioread64(gte);
> +		if (!(pte & GEN12_GGTT_PTE_LM)) {
> +			drm_err(&i915->drm,
> +				"Initial plane programming missing PTE_LM bit\n");
> +			return NULL;
> +		}
> +
> +		phys_base = pte & I915_GTT_PAGE_MASK;
> +		mem = i915->mm.regions[INTEL_REGION_LMEM];
> +
> +		/*
> +		 * We don't currently expect this to ever be placed in the
> +		 * stolen portion.
> +		 */
> +		if (phys_base >= resource_size(&mem->region)) {
> +			drm_err(&i915->drm,
> +				"Initial plane programming using invalid range, phys_base=%pa\n",
> +				&phys_base);
> +			return NULL;
> +		}
> +
> +		drm_dbg(&i915->drm,
> +			"Using phys_base=%pa, based on initial plane programming\n",
> +			&phys_base);
> +	} else {
> +		phys_base = base;
> +		mem = i915->mm.stolen_region;
> +	}
> +
> +	if (!mem)
>   		return NULL;
>   
> -	base = round_down(plane_config->base,
> -			  I915_GTT_MIN_ALIGNMENT);
>   	size = round_up(plane_config->base + plane_config->size,
>   			mem->min_page_size);
>   	size -= base;
> @@ -68,11 +106,11 @@ initial_plane_vma(struct drm_i915_private *i915,
>   	 * features.
>   	 */
>   	if (IS_ENABLED(CONFIG_FRAMEBUFFER_CONSOLE) &&
> +	    mem == i915->mm.stolen_region &&
>   	    size * 2 > i915->stolen_usable_size)
>   		return NULL;
>   
> -	obj = i915_gem_object_create_region_at(i915->mm.stolen_region,
> -					       base, size, 0);
> +	obj = i915_gem_object_create_region_at(mem, phys_base, size, 0);
>   	if (IS_ERR(obj))
>   		return NULL;
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20220315/5a5485a3/attachment.htm>


More information about the dri-devel mailing list