[Intel-gfx] [PATCH] drm/i915/guc: Reserve the upper end of the Global GTT for the GuC

Daniele Ceraolo Spurio daniele.ceraolospurio at intel.com
Wed Dec 21 21:10:52 UTC 2016



On 21/12/16 06:11, Chris Wilson wrote:
> The GuC would like to own the upper portion of the GTT for itself, so
> exclude it from our drm_mm to prevent us using it.

I had a quick chat with a GuC dev and he is pretty sure that GuC can't 
reserve any GTT areas for itself (and that is why we do the allocation 
for the buffers the GuC uses). However, it looks like the offsets above 
0xFEE00000 are reserved internally from the GuC point of view for some 
private resources, similarly to what happens for the offsets below 
GUC_WOPCM_TOP. This means that we should be able to actually use those 
offsets from the host side, but we can't pass any object placed there to 
GuC. The GuC FW will drop any operation on objects placed above 
0xFEE00000, which may be what caused the issues with guc_submission (not 
sure of this since I haven't seen the report).

The fix below might still be ok for us as reducing the GGTT size by a 
small amount shouldn't be a big issue, but I'd prefer the comment and 
the commit message to be updated.

To also reply to Michal question, I was told that the region size is 
fixed and not FW dependent.

Thanks,
Daniele

>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Arkadiusz Hiler <arkadiusz.hiler at intel.com>
> ---
>  drivers/gpu/drm/i915/i915_gem_gtt.c   | 5 +++++
>  drivers/gpu/drm/i915/intel_guc_fwif.h | 3 +++
>  2 files changed, 8 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 6af9311f72f5..96bc0e83286a 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -3176,6 +3176,11 @@ int i915_ggtt_probe_hw(struct drm_i915_private *dev_priv)
>  	if (ret)
>  		return ret;
>
> +	if (HAS_GUC_SCHED(dev_priv)) {
> +		ggtt->base.total -= GUC_GGTT_RESERVED_TOP;
> +		ggtt->mappable_end = min(ggtt->mappable_end, ggtt->base.total);
> +	}
> +
>  	if ((ggtt->base.total - 1) >> 32) {
>  		DRM_ERROR("We never expected a Global GTT with more than 32bits"
>  			  " of address space! Found %lldM!\n",
> diff --git a/drivers/gpu/drm/i915/intel_guc_fwif.h b/drivers/gpu/drm/i915/intel_guc_fwif.h
> index 3202b32b5638..3361d38ed859 100644
> --- a/drivers/gpu/drm/i915/intel_guc_fwif.h
> +++ b/drivers/gpu/drm/i915/intel_guc_fwif.h
> @@ -23,6 +23,9 @@
>  #ifndef _INTEL_GUC_FWIF_H
>  #define _INTEL_GUC_FWIF_H
>
> +/* A small region at the top of the global GTT is reserved for use by the GuC */
> +#define GUC_GGTT_RESERVED_TOP		0x1200000
> +
>  #define GFXCORE_FAMILY_GEN9		12
>  #define GFXCORE_FAMILY_UNKNOWN		0x7fffffff
>
>


More information about the Intel-gfx mailing list