[PATCH 7/8] drm/i915/rps: refactor display rps support
Gustavo Sousa
gustavo.sousa at intel.com
Tue May 6 21:41:22 UTC 2025
Quoting Jani Nikula (2025-05-06 10:06:49-03:00)
>Make the gt rps code and display irq code interact via
>intel_display_rps.[ch], instead of direct access. Add no-op static
>inline stubs for xe instead of having a separate build unit doing
>nothing. All of this clarifies the interfaces between i915 core and
>display.
>
>Signed-off-by: Jani Nikula <jani.nikula at intel.com>
Reviewed-by: Gustavo Sousa <gustavo.sousa at intel.com>
>---
> .../gpu/drm/i915/display/intel_display_irq.c | 5 ++--
> .../gpu/drm/i915/display/intel_display_rps.c | 27 +++++++++++++++++++
> .../gpu/drm/i915/display/intel_display_rps.h | 24 +++++++++++++++++
> drivers/gpu/drm/i915/gt/intel_rps.c | 10 +++----
> drivers/gpu/drm/xe/Makefile | 1 -
> .../drm/xe/compat-i915-headers/gt/intel_rps.h | 11 --------
> drivers/gpu/drm/xe/display/xe_display_rps.c | 17 ------------
> 7 files changed, 56 insertions(+), 39 deletions(-)
> delete mode 100644 drivers/gpu/drm/xe/compat-i915-headers/gt/intel_rps.h
> delete mode 100644 drivers/gpu/drm/xe/display/xe_display_rps.c
>
>diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c
>index 0d72964694ce..264ddeba121b 100644
>--- a/drivers/gpu/drm/i915/display/intel_display_irq.c
>+++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
>@@ -5,7 +5,6 @@
>
> #include <drm/drm_vblank.h>
>
>-#include "gt/intel_rps.h"
> #include "i915_drv.h"
> #include "i915_irq.h"
> #include "i915_reg.h"
>@@ -15,6 +14,7 @@
> #include "intel_de.h"
> #include "intel_display_irq.h"
> #include "intel_display_rpm.h"
>+#include "intel_display_rps.h"
> #include "intel_display_trace.h"
> #include "intel_display_types.h"
> #include "intel_dmc_wl.h"
>@@ -876,7 +876,6 @@ static void ilk_gtt_fault_irq_handler(struct intel_display *display)
>
> void ilk_display_irq_handler(struct intel_display *display, u32 de_iir)
> {
>- struct drm_i915_private __maybe_unused *dev_priv = to_i915(display->drm);
> enum pipe pipe;
> u32 hotplug_trigger = de_iir & DE_DP_A_HOTPLUG;
>
>@@ -923,7 +922,7 @@ void ilk_display_irq_handler(struct intel_display *display, u32 de_iir)
> }
>
> if (DISPLAY_VER(display) == 5 && de_iir & DE_PCU_EVENT)
>- gen5_rps_irq_handler(&to_gt(dev_priv)->rps);
>+ ilk_display_rps_irq_handler(display);
> }
>
> void ivb_display_irq_handler(struct intel_display *display, u32 de_iir)
>diff --git a/drivers/gpu/drm/i915/display/intel_display_rps.c b/drivers/gpu/drm/i915/display/intel_display_rps.c
>index 4074a1879828..941bff5a5eb0 100644
>--- a/drivers/gpu/drm/i915/display/intel_display_rps.c
>+++ b/drivers/gpu/drm/i915/display/intel_display_rps.c
>@@ -8,6 +8,8 @@
>
> #include "gt/intel_rps.h"
> #include "i915_drv.h"
>+#include "i915_reg.h"
>+#include "intel_display_irq.h"
> #include "intel_display_rps.h"
> #include "intel_display_types.h"
>
>@@ -81,3 +83,28 @@ void intel_display_rps_mark_interactive(struct intel_display *display,
> intel_rps_mark_interactive(&to_gt(i915)->rps, interactive);
> state->rps_interactive = interactive;
> }
>+
>+void ilk_display_rps_enable(struct intel_display *display)
>+{
>+ struct drm_i915_private *i915 = to_i915(display->drm);
>+
>+ spin_lock(&i915->irq_lock);
>+ ilk_enable_display_irq(display, DE_PCU_EVENT);
>+ spin_unlock(&i915->irq_lock);
>+}
>+
>+void ilk_display_rps_disable(struct intel_display *display)
>+{
>+ struct drm_i915_private *i915 = to_i915(display->drm);
>+
>+ spin_lock(&i915->irq_lock);
>+ ilk_disable_display_irq(display, DE_PCU_EVENT);
>+ spin_unlock(&i915->irq_lock);
>+}
>+
>+void ilk_display_rps_irq_handler(struct intel_display *display)
>+{
>+ struct drm_i915_private *i915 = to_i915(display->drm);
>+
>+ gen5_rps_irq_handler(&to_gt(i915)->rps);
>+}
>diff --git a/drivers/gpu/drm/i915/display/intel_display_rps.h b/drivers/gpu/drm/i915/display/intel_display_rps.h
>index 556891edb2dd..183d154f2c7c 100644
>--- a/drivers/gpu/drm/i915/display/intel_display_rps.h
>+++ b/drivers/gpu/drm/i915/display/intel_display_rps.h
>@@ -13,10 +13,34 @@ struct drm_crtc;
> struct intel_atomic_state;
> struct intel_display;
>
>+#ifdef I915
> void intel_display_rps_boost_after_vblank(struct drm_crtc *crtc,
> struct dma_fence *fence);
> void intel_display_rps_mark_interactive(struct intel_display *display,
> struct intel_atomic_state *state,
> bool interactive);
>+void ilk_display_rps_enable(struct intel_display *display);
>+void ilk_display_rps_disable(struct intel_display *display);
>+void ilk_display_rps_irq_handler(struct intel_display *display);
>+#else
>+static inline void intel_display_rps_boost_after_vblank(struct drm_crtc *crtc,
>+ struct dma_fence *fence)
>+{
>+}
>+static inline void intel_display_rps_mark_interactive(struct intel_display *display,
>+ struct intel_atomic_state *state,
>+ bool interactive)
>+{
>+}
>+static inline void ilk_display_rps_enable(struct intel_display *display)
>+{
>+}
>+static inline void ilk_display_rps_disable(struct intel_display *display)
>+{
>+}
>+static inline void ilk_display_rps_irq_handler(struct intel_display *display)
>+{
>+}
>+#endif
>
> #endif /* __INTEL_DISPLAY_RPS_H__ */
>diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c b/drivers/gpu/drm/i915/gt/intel_rps.c
>index b609e3aa2122..5abc5fcc2514 100644
>--- a/drivers/gpu/drm/i915/gt/intel_rps.c
>+++ b/drivers/gpu/drm/i915/gt/intel_rps.c
>@@ -8,7 +8,7 @@
> #include <drm/intel/i915_drm.h>
>
> #include "display/intel_display.h"
>-#include "display/intel_display_irq.h"
>+#include "display/intel_display_rps.h"
> #include "i915_drv.h"
> #include "i915_irq.h"
> #include "i915_reg.h"
>@@ -608,9 +608,7 @@ static bool gen5_rps_enable(struct intel_rps *rps)
> rps->ips.last_count2 = intel_uncore_read(uncore, GFXEC);
> rps->ips.last_time2 = ktime_get_raw_ns();
>
>- spin_lock(&i915->irq_lock);
>- ilk_enable_display_irq(display, DE_PCU_EVENT);
>- spin_unlock(&i915->irq_lock);
>+ ilk_display_rps_enable(display);
>
> spin_unlock_irq(&mchdev_lock);
>
>@@ -628,9 +626,7 @@ static void gen5_rps_disable(struct intel_rps *rps)
>
> spin_lock_irq(&mchdev_lock);
>
>- spin_lock(&i915->irq_lock);
>- ilk_disable_display_irq(display, DE_PCU_EVENT);
>- spin_unlock(&i915->irq_lock);
>+ ilk_display_rps_disable(display);
>
> rgvswctl = intel_uncore_read16(uncore, MEMSWCTL);
>
>diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
>index 3ecac0a38b82..e4bf484d4121 100644
>--- a/drivers/gpu/drm/xe/Makefile
>+++ b/drivers/gpu/drm/xe/Makefile
>@@ -187,7 +187,6 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
> display/xe_display.o \
> display/xe_display_misc.o \
> display/xe_display_rpm.o \
>- display/xe_display_rps.o \
> display/xe_display_wa.o \
> display/xe_dsb_buffer.o \
> display/xe_fb_pin.o \
>diff --git a/drivers/gpu/drm/xe/compat-i915-headers/gt/intel_rps.h b/drivers/gpu/drm/xe/compat-i915-headers/gt/intel_rps.h
>deleted file mode 100644
>index 21fec9cc837c..000000000000
>--- a/drivers/gpu/drm/xe/compat-i915-headers/gt/intel_rps.h
>+++ /dev/null
>@@ -1,11 +0,0 @@
>-/* SPDX-License-Identifier: MIT */
>-/*
>- * Copyright © 2023 Intel Corporation
>- */
>-
>-#ifndef __INTEL_RPS_H__
>-#define __INTEL_RPS_H__
>-
>-#define gen5_rps_irq_handler(x) ({})
>-
>-#endif /* __INTEL_RPS_H__ */
>diff --git a/drivers/gpu/drm/xe/display/xe_display_rps.c b/drivers/gpu/drm/xe/display/xe_display_rps.c
>deleted file mode 100644
>index fa616f9688a5..000000000000
>--- a/drivers/gpu/drm/xe/display/xe_display_rps.c
>+++ /dev/null
>@@ -1,17 +0,0 @@
>-// SPDX-License-Identifier: MIT
>-/*
>- * Copyright © 2023 Intel Corporation
>- */
>-
>-#include "intel_display_rps.h"
>-
>-void intel_display_rps_boost_after_vblank(struct drm_crtc *crtc,
>- struct dma_fence *fence)
>-{
>-}
>-
>-void intel_display_rps_mark_interactive(struct intel_display *display,
>- struct intel_atomic_state *state,
>- bool interactive)
>-{
>-}
>--
>2.39.5
>
More information about the Intel-xe
mailing list