[Intel-gfx] [PATCH] drm/i915: Align "unfenced" tiled access on gen2, early gen3
Ville Syrjälä
ville.syrjala at linux.intel.com
Mon Mar 27 10:36:14 UTC 2017
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ä <ville.syrjala at linux.intel.com>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> Cc: <drm-intel-fixes at lists.freedesktop.org> # v4.11-rc1+
Tested-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
> 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
More information about the Intel-gfx
mailing list