On Wed, 2025-10-22 at 18:17 +0300, Jani Nikula wrote:
> 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.
>
> Signed-off-by: Jani Nikula <[email protected]>
> ---
> drivers/gpu/drm/i915/display/intel_bw.c | 4 ++--
> drivers/gpu/drm/i915/display/intel_display.c | 8 +++-----
> drivers/gpu/drm/i915/display/intel_display_utils.c | 14 ++++++++++++++
> drivers/gpu/drm/i915/display/intel_display_utils.h | 1 +
> drivers/gpu/drm/i915/display/intel_fbc.c | 4 +++-
> drivers/gpu/drm/xe/display/ext/i915_utils.c | 10 ----------
> 6 files changed, 23 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bw.c
> b/drivers/gpu/drm/i915/display/intel_bw.c
> index 92a060e02cf3..640a40805f18 100644
> --- a/drivers/gpu/drm/i915/display/intel_bw.c
> +++ b/drivers/gpu/drm/i915/display/intel_bw.c
> @@ -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;
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index a8b4619de347..33174fb46ecb 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -76,6 +76,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"
> @@ -830,9 +831,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);
> }
> @@ -8313,7 +8313,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);
> }
> diff --git a/drivers/gpu/drm/i915/display/intel_display_utils.c
> b/drivers/gpu/drm/i915/display/intel_display_utils.c
> index 13d3999dd580..04d010f7c23e 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_utils.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_utils.c
> @@ -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);
> +}
This also looks quite much like an "inlineable" function, no?
--
Cheers,
Luca.
> diff --git a/drivers/gpu/drm/i915/display/intel_display_utils.h
> b/drivers/gpu/drm/i915/display/intel_display_utils.h
> index e54e69afd959..af1e34bac720 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_utils.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_utils.h
> @@ -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__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c
> b/drivers/gpu/drm/i915/display/intel_fbc.c
> index 10ef3136dadc..6f2cc01ea4a0 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> @@ -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;
> }
> diff --git a/drivers/gpu/drm/xe/display/ext/i915_utils.c
> b/drivers/gpu/drm/xe/display/ext/i915_utils.c
> index 1421c2a7b64d..af9ec2abbaa1 100644
> --- a/drivers/gpu/drm/xe/display/ext/i915_utils.c
> +++ b/drivers/gpu/drm/xe/display/ext/i915_utils.c
> @@ -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 */