]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/display: add intel_display_vtd_active()
authorJani Nikula <jani.nikula@intel.com>
Wed, 22 Oct 2025 15:17:12 +0000 (18:17 +0300)
committerJani Nikula <jani.nikula@intel.com>
Fri, 31 Oct 2025 11:09:22 +0000 (13:09 +0200)
Add intel_display_vtd_active() to utils. It's intentional duplication
with i915_utils.h i915_vtd_active(), but reduces duplication with
xe. Win some, lose some.

Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://patch.msgid.link/e022166af7c67f43904e2d0fc87bc5c13e0f1204.1761146196.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_bw.c
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_display_utils.c
drivers/gpu/drm/i915/display/intel_display_utils.h
drivers/gpu/drm/i915/display/intel_fbc.c
drivers/gpu/drm/xe/display/ext/i915_utils.c

index 92a060e02cf36869771713260fe64160243f591a..640a40805f18491f6332c4327c692c89b49642e8 100644 (file)
@@ -13,6 +13,7 @@
 #include "intel_display_core.h"
 #include "intel_display_regs.h"
 #include "intel_display_types.h"
+#include "intel_display_utils.h"
 #include "intel_mchbar_regs.h"
 #include "intel_pcode.h"
 #include "intel_uncore.h"
@@ -842,14 +843,13 @@ static unsigned int intel_bw_num_active_planes(struct intel_display *display,
 static unsigned int intel_bw_data_rate(struct intel_display *display,
                                       const struct intel_bw_state *bw_state)
 {
-       struct drm_i915_private *i915 = to_i915(display->drm);
        unsigned int data_rate = 0;
        enum pipe pipe;
 
        for_each_pipe(display, pipe)
                data_rate += bw_state->data_rate[pipe];
 
-       if (DISPLAY_VER(display) >= 13 && i915_vtd_active(i915))
+       if (DISPLAY_VER(display) >= 13 && intel_display_vtd_active(display))
                data_rate = DIV_ROUND_UP(data_rate * 105, 100);
 
        return data_rate;
index 94fff7c5f8dcc46eb62d5552346e01970da27ca4..d269b0f2b7e9683e594acbcb6b5373b023ecc324 100644 (file)
@@ -77,6 +77,7 @@
 #include "intel_display_regs.h"
 #include "intel_display_rpm.h"
 #include "intel_display_types.h"
+#include "intel_display_utils.h"
 #include "intel_display_wa.h"
 #include "intel_dmc.h"
 #include "intel_dp.h"
@@ -831,9 +832,8 @@ static void intel_async_flip_vtd_wa(struct intel_display *display,
 static bool needs_async_flip_vtd_wa(const struct intel_crtc_state *crtc_state)
 {
        struct intel_display *display = to_intel_display(crtc_state);
-       struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
 
-       return crtc_state->uapi.async_flip && i915_vtd_active(i915) &&
+       return crtc_state->uapi.async_flip && intel_display_vtd_active(display) &&
                (DISPLAY_VER(display) == 9 || display->platform.broadwell ||
                 display->platform.haswell);
 }
@@ -8356,7 +8356,5 @@ void i830_disable_pipe(struct intel_display *display, enum pipe pipe)
 
 bool intel_scanout_needs_vtd_wa(struct intel_display *display)
 {
-       struct drm_i915_private *i915 = to_i915(display->drm);
-
-       return IS_DISPLAY_VER(display, 6, 11) && i915_vtd_active(i915);
+       return IS_DISPLAY_VER(display, 6, 11) && intel_display_vtd_active(display);
 }
index 13d3999dd5801dbe9d6b0ee8a3c36b7a05c0e70d..04d010f7c23e239c17586b81b43880f5e5dd9be7 100644 (file)
@@ -1,10 +1,15 @@
 // SPDX-License-Identifier: MIT
 /* Copyright © 2025 Intel Corporation */
 
+#include <linux/device.h>
+
+#include <drm/drm_device.h>
+
 #ifdef CONFIG_X86
 #include <asm/hypervisor.h>
 #endif
 
+#include "intel_display_core.h"
 #include "intel_display_utils.h"
 
 bool intel_display_run_as_guest(struct intel_display *display)
@@ -16,3 +21,12 @@ bool intel_display_run_as_guest(struct intel_display *display)
        return false;
 #endif
 }
+
+bool intel_display_vtd_active(struct intel_display *display)
+{
+       if (device_iommu_mapped(display->drm->dev))
+               return true;
+
+       /* Running as a guest, we assume the host is enforcing VT'd */
+       return intel_display_run_as_guest(display);
+}
index e54e69afd9592da72beb262c6b2300f93c535ebd..af1e34bac720bb20605637701626036f532c1d99 100644 (file)
@@ -12,5 +12,6 @@ struct intel_display;
 #define MHz(x) KHz(1000 * (x))
 
 bool intel_display_run_as_guest(struct intel_display *display);
+bool intel_display_vtd_active(struct intel_display *display);
 
 #endif /* __INTEL_DISPLAY_UTILS__ */
index 10ef3136dadcec1ac55548d6dc37f9f8815834a3..6f2cc01ea4a069d1faba6f692305df39ac2fc9de 100644 (file)
@@ -59,6 +59,7 @@
 #include "intel_display_rpm.h"
 #include "intel_display_trace.h"
 #include "intel_display_types.h"
+#include "intel_display_utils.h"
 #include "intel_display_wa.h"
 #include "intel_fbc.h"
 #include "intel_fbc_regs.h"
@@ -1472,7 +1473,8 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
        }
 
        /* WaFbcTurnOffFbcWhenHyperVisorIsUsed:skl,bxt */
-       if (i915_vtd_active(i915) && (display->platform.skylake || display->platform.broxton)) {
+       if (intel_display_vtd_active(display) &&
+           (display->platform.skylake || display->platform.broxton)) {
                plane_state->no_fbc_reason = "VT-d enabled";
                return 0;
        }
index 1421c2a7b64d60bbd79c148ac7f535d120f47142..af9ec2abbaa1549b9c515be05ad096d105841c2c 100644 (file)
@@ -3,18 +3,8 @@
  * Copyright © 2023 Intel Corporation
  */
 
-#include "i915_drv.h"
 #include "i915_utils.h"
 
-bool i915_vtd_active(struct drm_i915_private *i915)
-{
-       if (device_iommu_mapped(i915->drm.dev))
-               return true;
-
-       /* Running as a guest, we assume the host is enforcing VT'd */
-       return i915_run_as_guest();
-}
-
 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG)
 
 /* i915 specific, just put here for shutting it up */