On Sat, Mar 25, 2017 at 11:32:43AM +0000, Chris Wilson wrote:
> Old devices have quite severe restrictions for using fences, and unlike
> more recent device (anything from Pineview onwards) we need to enforce
> those restrictions even for unfenced tiled access from the render
> pipeline.
> 
> Fixes: 944397f04f24 ("drm/i915: Store required fence size/alignment for GGTT 
> vma")
> Reported-by: Ville Syrjälä <[email protected]>
> Signed-off-by: Chris Wilson <[email protected]>
> Cc: Ville Syrjälä <[email protected]>
> Cc: Joonas Lahtinen <[email protected]>
> Cc: <[email protected]> # v4.11-rc1+

Tested-by: Ville Syrjälä <[email protected]>

> ---
>  drivers/gpu/drm/i915/i915_drv.h            | 1 +
>  drivers/gpu/drm/i915/i915_gem_execbuffer.c | 4 +++-
>  drivers/gpu/drm/i915/i915_pci.c            | 5 +++++
>  3 files changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 2911c49113b0..86f097db8ef6 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -853,6 +853,7 @@ struct intel_csr {
>       func(has_resource_streamer); \
>       func(has_runtime_pm); \
>       func(has_snoop); \
> +     func(unfenced_needs_alignment); \
>       func(cursor_needs_physical); \
>       func(hws_needs_physical); \
>       func(overlay_needs_physical); \
> diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c 
> b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> index dd7181ed5eca..a3e59c8ef27b 100644
> --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> @@ -890,6 +890,7 @@ i915_gem_execbuffer_reserve(struct intel_engine_cs 
> *engine,
>       struct list_head ordered_vmas;
>       struct list_head pinned_vmas;
>       bool has_fenced_gpu_access = INTEL_GEN(engine->i915) < 4;
> +     bool needs_unfenced_map = 
> INTEL_INFO(engine->i915)->unfenced_needs_alignment;
>       int retry;
>  
>       vm = list_first_entry(vmas, struct i915_vma, exec_list)->vm;
> @@ -910,7 +911,8 @@ i915_gem_execbuffer_reserve(struct intel_engine_cs 
> *engine,
>               if (!has_fenced_gpu_access)
>                       entry->flags &= ~EXEC_OBJECT_NEEDS_FENCE;
>               need_fence =
> -                     entry->flags & EXEC_OBJECT_NEEDS_FENCE &&
> +                     (entry->flags & EXEC_OBJECT_NEEDS_FENCE ||
> +                      needs_unfenced_map) &&
>                       i915_gem_object_is_tiled(obj);
>               need_mappable = need_fence || need_reloc_mappable(vma);
>  
> diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
> index 732101ed57fb..f87b0c4e564d 100644
> --- a/drivers/gpu/drm/i915/i915_pci.c
> +++ b/drivers/gpu/drm/i915/i915_pci.c
> @@ -61,6 +61,7 @@
>       .has_overlay = 1, .overlay_needs_physical = 1, \
>       .has_gmch_display = 1, \
>       .hws_needs_physical = 1, \
> +     .unfenced_needs_alignment = 1, \
>       .ring_mask = RENDER_RING, \
>       GEN_DEFAULT_PIPEOFFSETS, \
>       CURSOR_OFFSETS
> @@ -102,6 +103,7 @@ static const struct intel_device_info intel_i915g_info = {
>       .platform = INTEL_I915G, .cursor_needs_physical = 1,
>       .has_overlay = 1, .overlay_needs_physical = 1,
>       .hws_needs_physical = 1,
> +     .unfenced_needs_alignment = 1,
>  };
>  
>  static const struct intel_device_info intel_i915gm_info = {
> @@ -113,6 +115,7 @@ static const struct intel_device_info intel_i915gm_info = 
> {
>       .supports_tv = 1,
>       .has_fbc = 1,
>       .hws_needs_physical = 1,
> +     .unfenced_needs_alignment = 1,
>  };
>  
>  static const struct intel_device_info intel_i945g_info = {
> @@ -121,6 +124,7 @@ static const struct intel_device_info intel_i945g_info = {
>       .has_hotplug = 1, .cursor_needs_physical = 1,
>       .has_overlay = 1, .overlay_needs_physical = 1,
>       .hws_needs_physical = 1,
> +     .unfenced_needs_alignment = 1,
>  };
>  
>  static const struct intel_device_info intel_i945gm_info = {
> @@ -131,6 +135,7 @@ static const struct intel_device_info intel_i945gm_info = 
> {
>       .supports_tv = 1,
>       .has_fbc = 1,
>       .hws_needs_physical = 1,
> +     .unfenced_needs_alignment = 1,
>  };
>  
>  static const struct intel_device_info intel_g33_info = {
> -- 
> 2.11.0

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to