| From 678f148204a458cbc1a6e671a291c7025208bd86 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 14 Apr 2020 14:11:17 -0700 |
| Subject: drm/i915/tgl: Add Wa_14010477008:tgl |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Matt Roper <matthew.d.roper@intel.com> |
| |
| [ Upstream commit 81fdd7bfeb8e8f76bcdfef9174ec580707c37d38 ] |
| |
| Media decompression support should not be advertised on any display |
| planes for steppings A0-C0. |
| |
| Bspec: 53273 |
| Fixes: 2dfbf9d2873a ("drm/i915/tgl: Gen-12 display can decompress surfaces compressed by the media engine") |
| Cc: Matt Atwood <matthew.s.atwood@intel.com> |
| Signed-off-by: Matt Roper <matthew.d.roper@intel.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20200414211118.2787489-3-matthew.d.roper@intel.com |
| Reviewed-by: José Roberto de Souza <jose.souza@intel.com> |
| (cherry picked from commit dbff5a8db9c630f61a892ab41a283445e01270f5) |
| Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/i915/display/intel_sprite.c | 17 ++++++++++++----- |
| drivers/gpu/drm/i915/i915_drv.h | 2 ++ |
| 2 files changed, 14 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/display/intel_sprite.c b/drivers/gpu/drm/i915/display/intel_sprite.c |
| index fca77ec1e0ddf..f55404a94eba6 100644 |
| --- a/drivers/gpu/drm/i915/display/intel_sprite.c |
| +++ b/drivers/gpu/drm/i915/display/intel_sprite.c |
| @@ -2754,19 +2754,25 @@ static bool skl_plane_format_mod_supported(struct drm_plane *_plane, |
| } |
| } |
| |
| -static bool gen12_plane_supports_mc_ccs(enum plane_id plane_id) |
| +static bool gen12_plane_supports_mc_ccs(struct drm_i915_private *dev_priv, |
| + enum plane_id plane_id) |
| { |
| + /* Wa_14010477008:tgl[a0..c0] */ |
| + if (IS_TGL_REVID(dev_priv, TGL_REVID_A0, TGL_REVID_C0)) |
| + return false; |
| + |
| return plane_id < PLANE_SPRITE4; |
| } |
| |
| static bool gen12_plane_format_mod_supported(struct drm_plane *_plane, |
| u32 format, u64 modifier) |
| { |
| + struct drm_i915_private *dev_priv = to_i915(_plane->dev); |
| struct intel_plane *plane = to_intel_plane(_plane); |
| |
| switch (modifier) { |
| case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS: |
| - if (!gen12_plane_supports_mc_ccs(plane->id)) |
| + if (!gen12_plane_supports_mc_ccs(dev_priv, plane->id)) |
| return false; |
| /* fall through */ |
| case DRM_FORMAT_MOD_LINEAR: |
| @@ -2935,9 +2941,10 @@ static const u32 *icl_get_plane_formats(struct drm_i915_private *dev_priv, |
| } |
| } |
| |
| -static const u64 *gen12_get_plane_modifiers(enum plane_id plane_id) |
| +static const u64 *gen12_get_plane_modifiers(struct drm_i915_private *dev_priv, |
| + enum plane_id plane_id) |
| { |
| - if (gen12_plane_supports_mc_ccs(plane_id)) |
| + if (gen12_plane_supports_mc_ccs(dev_priv, plane_id)) |
| return gen12_plane_format_modifiers_mc_ccs; |
| else |
| return gen12_plane_format_modifiers_rc_ccs; |
| @@ -3008,7 +3015,7 @@ skl_universal_plane_create(struct drm_i915_private *dev_priv, |
| |
| plane->has_ccs = skl_plane_has_ccs(dev_priv, pipe, plane_id); |
| if (INTEL_GEN(dev_priv) >= 12) { |
| - modifiers = gen12_get_plane_modifiers(plane_id); |
| + modifiers = gen12_get_plane_modifiers(dev_priv, plane_id); |
| plane_funcs = &gen12_plane_funcs; |
| } else { |
| if (plane->has_ccs) |
| diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h |
| index 810e3ccd56ecb..dff1342651126 100644 |
| --- a/drivers/gpu/drm/i915/i915_drv.h |
| +++ b/drivers/gpu/drm/i915/i915_drv.h |
| @@ -1601,6 +1601,8 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, |
| (IS_ICELAKE(p) && IS_REVID(p, since, until)) |
| |
| #define TGL_REVID_A0 0x0 |
| +#define TGL_REVID_B0 0x1 |
| +#define TGL_REVID_C0 0x2 |
| |
| #define IS_TGL_REVID(p, since, until) \ |
| (IS_TIGERLAKE(p) && IS_REVID(p, since, until)) |
| -- |
| 2.20.1 |
| |