From: Matthew Auld <matthew.auld@xxxxxxxxx> commit c55f79f317ab428ae6d005965bc07e37496f209f upstream. On BMG-G21 we need to disable fbc due to complications around the WA. v2: - Try to handle with i915_drv.h and compat layer. (Rodrigo) v3: - For simplicity retreat back to the original design for now. - Drop the extra \ from the Makefile (Jani) Signed-off-by: Matthew Auld <matthew.auld@xxxxxxxxx> Cc: Jonathan Cavitt <jonathan.cavitt@xxxxxxxxx> Cc: Matt Roper <matthew.d.roper@xxxxxxxxx> Cc: Lucas De Marchi <lucas.demarchi@xxxxxxxxx> Cc: Vinod Govindapillai <vinod.govindapillai@xxxxxxxxx> Cc: Jani Nikula <jani.nikula@xxxxxxxxx> Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx Reviewed-by: Jonathan Cavitt <jonathan.cavitt@xxxxxxxxx> Acked-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> Link: https://patchwork.freedesktop.org/patch/msgid/20240703124338.208220-4-matthew.auld@xxxxxxxxx [ commit dc0f1644c47e ("drm/xe: Generate oob before compiling anything") makes part of the change to the Makefile not needed. Drop that to resolve conflict. ] Signed-off-by: Lucas De Marchi <lucas.demarchi@xxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/display/intel_display_wa.h | 8 ++++++++ drivers/gpu/drm/i915/display/intel_fbc.c | 6 ++++++ drivers/gpu/drm/xe/Makefile | 1 + drivers/gpu/drm/xe/display/xe_display_wa.c | 16 ++++++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 drivers/gpu/drm/xe/display/xe_display_wa.c --- a/drivers/gpu/drm/i915/display/intel_display_wa.h +++ b/drivers/gpu/drm/i915/display/intel_display_wa.h @@ -6,8 +6,16 @@ #ifndef __INTEL_DISPLAY_WA_H__ #define __INTEL_DISPLAY_WA_H__ +#include <linux/types.h> + struct drm_i915_private; void intel_display_wa_apply(struct drm_i915_private *i915); +#ifdef I915 +static inline bool intel_display_needs_wa_16023588340(struct drm_i915_private *i915) { return false; } +#else +bool intel_display_needs_wa_16023588340(struct drm_i915_private *i915); +#endif + #endif --- a/drivers/gpu/drm/i915/display/intel_fbc.c +++ b/drivers/gpu/drm/i915/display/intel_fbc.c @@ -56,6 +56,7 @@ #include "intel_display_device.h" #include "intel_display_trace.h" #include "intel_display_types.h" +#include "intel_display_wa.h" #include "intel_fbc.h" #include "intel_fbc_regs.h" #include "intel_frontbuffer.h" @@ -1237,6 +1238,11 @@ static int intel_fbc_check_plane(struct return 0; } + if (intel_display_needs_wa_16023588340(i915)) { + plane_state->no_fbc_reason = "Wa_16023588340"; + return 0; + } + /* WaFbcTurnOffFbcWhenHyperVisorIsUsed:skl,bxt */ if (i915_vtd_active(i915) && (IS_SKYLAKE(i915) || IS_BROXTON(i915))) { plane_state->no_fbc_reason = "VT-d enabled"; --- a/drivers/gpu/drm/xe/Makefile +++ b/drivers/gpu/drm/xe/Makefile @@ -175,6 +175,7 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \ display/xe_display.o \ display/xe_display_misc.o \ display/xe_display_rps.o \ + display/xe_display_wa.o \ display/xe_dsb_buffer.o \ display/xe_fb_pin.o \ display/xe_hdcp_gsc.o \ --- /dev/null +++ b/drivers/gpu/drm/xe/display/xe_display_wa.c @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright © 2024 Intel Corporation + */ + +#include "intel_display_wa.h" + +#include "xe_device.h" +#include "xe_wa.h" + +#include <generated/xe_wa_oob.h> + +bool intel_display_needs_wa_16023588340(struct drm_i915_private *i915) +{ + return XE_WA(xe_root_mmio_gt(i915), 16023588340); +} Patches currently in stable-queue which might be from lucas.demarchi@xxxxxxxxx are queue-6.11/drm-xe-add-mmio-read-before-ggtt-invalidate.patch queue-6.11/drm-i915-disable-fbc-due-to-wa_16023588340.patch queue-6.11/drm-i915-skip-programming-fia-link-enable-bits-for-mtl.patch queue-6.11/drm-i915-display-cache-adpative-sync-caps-to-use-it-later.patch queue-6.11/drm-i915-display-don-t-enable-decompression-on-xe2-with-tile4.patch queue-6.11/drm-xe-xe2-introduce-performance-changes.patch queue-6.11/drm-xe-define-stateless_compression_ctrl-as-mcr-register.patch queue-6.11/drm-i915-hdcp-add-encoder-check-in-hdcp2_get_capability.patch queue-6.11/drm-i915-hdcp-add-encoder-check-in-intel_hdcp_get_capability.patch queue-6.11/drm-xe-don-t-short-circuit-tdr-on-jobs-not-started.patch queue-6.11/drm-xe-write-all-slices-if-its-mcr-register.patch queue-6.11/drm-i915-move-rawclk-from-runtime-to-display-runtime-info.patch queue-6.11/drm-xe-display-drop-unused-rawclk_freq-and-runtime_info.patch queue-6.11/drm-xe-xe2hpg-add-wa_15016589081.patch queue-6.11/drm-i915-display-dp-compute-as-sdp-when-vrr-is-also-enabled.patch queue-6.11/drm-i915-pps-disable-dpls_gating-around-pps-sequence.patch queue-6.11/drm-i915-dp-clear-vsc-sdp-during-post-ddi-disable-routine.patch queue-6.11/drm-xe-xe2-add-performance-turning-changes.patch queue-6.11/drm-i915-psr-prevent-panel-replay-if-crc-calculation-is-enabled.patch queue-6.11/drm-xe-move-enable-host-l2-vram-post-mcr-init.patch queue-6.11/drm-xe-support-nomodeset-kernel-command-line-option.patch queue-6.11/drm-xe-xe2hpg-introduce-performance-tuning-changes-for-xe2_hpg.patch queue-6.11/drm-i915-display-wa-for-re-initialize-dispcnlunitt1-xosc-clock.patch