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

Kamble, Sagar A sagar.a.kamble at intel.com
Thu Dec 22 08:41:14 UTC 2016



On 12/22/2016 2:40 AM, Daniele Ceraolo Spurio wrote:
>
>
> 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).
golden_context_lrca, reg_state, reg_state_buffer addresses in ADS that 
makes GuC load fail:
[    4.955330] [drm:i915_guc_submission_init [i915]]  fffe7000 8542c8 854b18

With this patch applied golden_context_lrca gets placed properly and GuC 
load succeeds.
[    4.953817] [drm:i915_guc_submission_init [i915]]  fede7000 8542c8 854b18
> 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
>>
>>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx



More information about the Intel-gfx mailing list